in groups/master/ggd/servo/servode.py [0:0]
def read_register(self, servo, register):
"""
:param servo: a Servo object or an integer servo_id
:param register: the register from which to read a value
:return: a dict containing:
{ "value": <the value read from the register>,
"status": <a dict containing the status bit states>
}
"""
value = ''
result = {
"value": value,
"status": {}
}
if isinstance(servo, Servo):
sid = servo.servo_id
else:
sid = servo
with self.lock:
if dxl_control[register]['comm_bytes'] == 1:
value = read1ByteTxRx(
self.port_num, self.protocol_version, sid,
dxl_control[register]['address']
)
elif dxl_control[register]['comm_bytes'] == 2:
value = read2ByteTxRx(
self.port_num, self.protocol_version, sid,
dxl_control[register]['address']
)
last_result = getLastTxRxResult(
self.port_num, self.protocol_version
)
if last_result != COMM_SUCCESS:
printTxRxResult(self.protocol_version, last_result)
log.error("[read_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("[read_register] Error:{0}".format(error_result))
else:
log.debug(
"[read_register] error_result:{0}".format(error_result))
result['value'] = value
return result