|
|
"""
|
|
|
This script should run in the abs module embedded system
|
|
|
It creates a Web Application with API Restful Bottle to connect to SIR server.
|
|
|
It needs the following scripts: abs_gpio.py and bottle.py
|
|
|
"""
|
|
|
from bottle import route, run, request
|
|
|
from bottle import error
|
|
|
from abs_gpio import abs_read
|
|
|
|
|
|
#Sockets
|
|
|
import socket
|
|
|
import sys
|
|
|
|
|
|
import json
|
|
|
|
|
|
module_ip = '192.168.1.xx'
|
|
|
module_num = 'xx'
|
|
|
module_port = 5500
|
|
|
module = (module_ip,5500)
|
|
|
|
|
|
#This function decode sent characters
|
|
|
def fromChar2Binary(char):
|
|
|
#To get the real value (-33)
|
|
|
number = ord(char) - 33
|
|
|
bits = bin(number)[2:]
|
|
|
#To ensure we have a string with 6bits
|
|
|
if len(bits) < 6:
|
|
|
bits = bits.zfill(6)
|
|
|
return bits
|
|
|
|
|
|
@route('/')
|
|
|
@route('/hello')
|
|
|
def hello():
|
|
|
return "Hello World!"
|
|
|
|
|
|
"""
|
|
|
#---- Send Bits Function ----
|
|
|
@route('/write', method='POST')
|
|
|
def writebits():
|
|
|
|
|
|
#This funcion configure ABS sending bits.
|
|
|
|
|
|
try:
|
|
|
#------------Get Values-----------
|
|
|
#----------------UP---------------
|
|
|
ub2 = request.forms.get('ub2')
|
|
|
ub1 = request.forms.get('ub1')
|
|
|
ub0 = request.forms.get('ub0')
|
|
|
#--------------DOWN---------------
|
|
|
db2 = request.forms.get('db2')
|
|
|
db1 = request.forms.get('db1')
|
|
|
db0 = request.forms.get('db0')
|
|
|
|
|
|
#-----------Send Values-----------
|
|
|
#----------------UP---------------
|
|
|
ub2 = abs_write(126,ub2)
|
|
|
ub1 = abs_write(124,ub1)
|
|
|
ub0 = abs_write(122,ub0)
|
|
|
#--------------DOWN---------------
|
|
|
db2 = abs_write(120,db2)
|
|
|
db1 = abs_write(118,db1)
|
|
|
db0 = abs_write(116,db0)
|
|
|
|
|
|
if (ub2+ub1+ub0+db2+db1+db0) == 6:
|
|
|
return {"status": 1, "message": "Bits were successfully adjusted"}
|
|
|
else:
|
|
|
return {"status": 0, "message": "Couldn't configure ABS"}
|
|
|
|
|
|
except:
|
|
|
return {"status": 0, "message": "Couldn't configure ABS"}
|
|
|
"""
|
|
|
|
|
|
#------ Get Status -------
|
|
|
@route('/status', method='GET')
|
|
|
def module_status():
|
|
|
"""
|
|
|
This function returns:
|
|
|
0 : No Connected
|
|
|
1 : Connected
|
|
|
|
|
|
"""
|
|
|
message_tx = 'JROABSClnt_01CeCnMod000001MNTR10'
|
|
|
#Create the datagram socket
|
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
try:
|
|
|
sock.connect(module)
|
|
|
sock.send(message_tx)
|
|
|
sock.close()
|
|
|
except:
|
|
|
sock = None
|
|
|
return {"status":0, "message": "TCP Control Module not detected."}
|
|
|
return {"status": 1, "message": "Module "+module_num+" is running"}
|
|
|
|
|
|
|
|
|
#---- Get Bits Function ----
|
|
|
@route('/read', method='GET')
|
|
|
def readbits():
|
|
|
|
|
|
"""
|
|
|
This function reads the real values from the embedded system pins
|
|
|
with gpio class
|
|
|
"""
|
|
|
|
|
|
#This function reads sent bits.
|
|
|
|
|
|
#------Get Monitoring Values------
|
|
|
#----------------UP---------------
|
|
|
um2_value = abs_read(80) #(++)
|
|
|
um1_value = abs_read(82)
|
|
|
um0_value = abs_read(84) #(--)
|
|
|
#--------------DOWN---------------
|
|
|
dm2_value = abs_read(94) #(++)
|
|
|
dm1_value = abs_read(88)
|
|
|
dm0_value = abs_read(86) #(--)
|
|
|
|
|
|
allbits = [um2_value, um1_value, um0_value, dm2_value, dm1_value, dm0_value]
|
|
|
if "" not in allbits:
|
|
|
allbits = {"um2":int(um2_value), "um1": int(um1_value), "um0": int(um0_value), "dm2": int(dm2_value), "dm1": int(dm1_value), "dm0": int(dm0_value)}
|
|
|
#allbits = {"ub0":0, "ub1":0, "ub2":0, "db0":0, "db1":0, "db2":0}
|
|
|
return {"status": 1, "message": "Bits were successfully read", "allbits" : allbits}
|
|
|
else:
|
|
|
return {"status": 0, "message": "There's a problem reading bits", "allbits" : ""}
|
|
|
|
|
|
@route('/write', method='POST')
|
|
|
def writebits():
|
|
|
"""
|
|
|
This function sends configurations to the module tcp_
|
|
|
"""
|
|
|
header_rx = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
|
|
|
module_rx = 'ABS_'+module_num
|
|
|
try:
|
|
|
#header_rx = request.forms.get('header')
|
|
|
#module_rx = request.forms.get('module')
|
|
|
#beams_rx = request.forms.get('beams')
|
|
|
#beams_rx = json.loads(beams_rx)
|
|
|
beams_rx = json.loads(request.body.readline())
|
|
|
beams_rx = beams_rx['beams']
|
|
|
except:
|
|
|
return {"status":0, "message": "Could not accept configuration"}
|
|
|
#print beams_rx
|
|
|
message_tx = header_rx+"\n"+module_rx+"\n"
|
|
|
for i in range(0,len(beams_rx)): #(1,len(beams_rx)+1)
|
|
|
try:
|
|
|
message_tx = message_tx+fromChar2Binary(beams_rx[i])+"\n"
|
|
|
except:
|
|
|
return {"status":0, "message": "Error in parameters from Beams List"}
|
|
|
message_tx = message_tx+"0"
|
|
|
|
|
|
|
|
|
# Create the datagram socket
|
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
print >>sys.stderr, 'sending "%s"' % message_tx
|
|
|
sock.connect(module)
|
|
|
sock.send(message_tx)
|
|
|
sock.close()
|
|
|
|
|
|
return {"status":1, "message": "Configuration has been successfully sent"}
|
|
|
|
|
|
@error(404)
|
|
|
def error404(error):
|
|
|
return "^^' Nothing here, try again."
|
|
|
|
|
|
run(host=module_ip, port=8080, debug=True)
|
|
|
|