Skip to content
Snippets Groups Projects
Commit 93fa8d5b authored by Alexander Bubeck's avatar Alexander Bubeck
Browse files

Merge pull request #172 from de-vri-es/send-message

driver: Factor out __send_message method.
parents 76265461 6c60789e
Branches
Tags
No related merge requests found
...@@ -423,7 +423,7 @@ class CommanderTCPHandler(SocketServer.BaseRequestHandler): ...@@ -423,7 +423,7 @@ class CommanderTCPHandler(SocketServer.BaseRequestHandler):
raise EOF() raise EOF()
def handle(self): def handle(self):
self.socket_lock = threading.Lock() self.__socket_lock = threading.Lock()
setConnectedRobot(self) setConnectedRobot(self)
print "Handling a request" print "Handling a request"
try: try:
...@@ -467,9 +467,23 @@ class CommanderTCPHandler(SocketServer.BaseRequestHandler): ...@@ -467,9 +467,23 @@ class CommanderTCPHandler(SocketServer.BaseRequestHandler):
print "Connection closed (command):", ex print "Connection closed (command):", ex
setConnectedRobot(None) setConnectedRobot(None)
def __send_message(self, data):
"""
Send a message to the robot.
The message is given as a list of integers that will be packed
as 4 bytes each in network byte order (big endian).
A lock is acquired before sending the message to prevent race conditions.
:param data: list of int, the data to send
"""
buf = struct.pack("!%ii" % len(data), *data)
with self.__socket_lock:
self.request.send(buf)
def send_quit(self): def send_quit(self):
with self.socket_lock: self.__send_message([MSG_QUIT])
self.request.send(struct.pack("!i", MSG_QUIT))
def send_servoj(self, waypoint_id, q_actual, t): def send_servoj(self, waypoint_id, q_actual, t):
assert(len(q_actual) == 6) assert(len(q_actual) == 6)
...@@ -479,61 +493,32 @@ class CommanderTCPHandler(SocketServer.BaseRequestHandler): ...@@ -479,61 +493,32 @@ class CommanderTCPHandler(SocketServer.BaseRequestHandler):
params = [MSG_SERVOJ, waypoint_id] + \ params = [MSG_SERVOJ, waypoint_id] + \
[MULT_jointstate * qq for qq in q_robot] + \ [MULT_jointstate * qq for qq in q_robot] + \
[MULT_time * t] [MULT_time * t]
buf = struct.pack("!%ii" % len(params), *params) self.__send_message(params)
with self.socket_lock:
self.request.send(buf)
#Experimental set_payload implementation #Experimental set_payload implementation
def send_payload(self,payload): def send_payload(self,payload):
buf = struct.pack('!ii', MSG_SET_PAYLOAD, payload * MULT_payload) self.__send_message([MSG_SET_PAYLOAD, payload * MULT_payload])
with self.socket_lock:
self.request.send(buf)
#Experimental set_digital_output implementation #Experimental set_digital_output implementation
def set_digital_out(self, pinnum, value): def set_digital_out(self, pinnum, value):
params = [MSG_SET_DIGITAL_OUT] + \ self.__send_message([MSG_SET_DIGITAL_OUT, pinnum, value])
[pinnum] + \
[value]
buf = struct.pack("!%ii" % len(params), *params)
#print params
with self.socket_lock:
self.request.send(buf)
time.sleep(IO_SLEEP_TIME) time.sleep(IO_SLEEP_TIME)
def set_analog_out(self, pinnum, value): def set_analog_out(self, pinnum, value):
params = [MSG_SET_ANALOG_OUT] + \ self.__send_message([MSG_SET_ANALOG_OUT, pinnum, value * MULT_analog])
[pinnum] + \
[value * MULT_analog]
buf = struct.pack("!%ii" % len(params), *params)
#print params
with self.socket_lock:
self.request.send(buf)
time.sleep(IO_SLEEP_TIME) time.sleep(IO_SLEEP_TIME)
def set_tool_voltage(self, value): def set_tool_voltage(self, value):
params = [MSG_SET_TOOL_VOLTAGE] + \ self.__send_message([MSG_SET_TOOL_VOLTAGE, value, 0])
[value] + \
[0]
buf = struct.pack("!%ii" % len(params), *params)
#print params
with self.socket_lock:
self.request.send(buf)
time.sleep(IO_SLEEP_TIME) time.sleep(IO_SLEEP_TIME)
def set_flag(self, pin, val): def set_flag(self, pin, val):
params = [MSG_SET_FLAG] + \ self.__send_message([MSG_SET_FLAG, pin, val])
[pin] + \
[val]
buf = struct.pack("!%ii" % len(params), *params)
#print params
with self.socket_lock:
self.request.send(buf)
#set_flag will fail if called too closely together--added delay #set_flag will fail if called too closely together--added delay
time.sleep(IO_SLEEP_TIME) time.sleep(IO_SLEEP_TIME)
def send_stopj(self): def send_stopj(self):
with self.socket_lock: self.__send_message([MSG_STOPJ])
self.request.send(struct.pack("!i", MSG_STOPJ))
def set_waypoint_finished_cb(self, cb): def set_waypoint_finished_cb(self, cb):
self.waypoint_finished_cb = cb self.waypoint_finished_cb = cb
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment