in groups/master/ggd/servo/servode.py [0:0]
def write_register(self, servo, register, value):
"""
:param servo: a Servo object or an integer servo_id
:param register: the register from which to read a value
:param value: the value to write to the register
:return: a dict containing:
{ "error": <the error, if an error exists>,
"status": <a dict containing the status bit states>
}
"""
result = {"status": {}}
if isinstance(servo, Servo):
sid = servo.servo_id
else:
sid = servo
log.debug("[write_register] servo id:{0} reg:'{1}' reg_addr:{2}".format(
sid, register, dxl_control[register]['address']))
with self.lock:
if dxl_control[register]['access'] == "r":
raise IOError(
"register:'{0}' cannot be written".format(register))
if dxl_control[register]['comm_bytes'] == 1:
write1ByteTxRx(
self.port_num, self.protocol_version, sid,
dxl_control[register]['address'], value)
elif dxl_control[register]['comm_bytes'] == 2:
write2ByteTxRx(
self.port_num, self.protocol_version, sid,
dxl_control[register]['address'], value)
last_result = getLastTxRxResult(
self.port_num, self.protocol_version
)
if last_result != COMM_SUCCESS:
printTxRxResult(self.protocol_version, last_result)
log.error("[write_register] Comm unsuccessful:{0}".format(
last_result))
# Comms might be successful but we could still be in an error
# state. So, check for error packet after every read
error_result = getLastRxPacketError(
self.port_num, self.protocol_version)
if error_result:
result['status'] = self._result_to_status(error_result)
printRxPacketError(self.protocol_version, error_result)
log.error("[write_register] Error:{0}".format(error_result))
else:
log.debug(
"[write_register] register:'{0}' written".format(register))
return result