|
@ -16,13 +16,21 @@ void Eq20ServoMotor::init(ModbusBlockHost *modbusBlockHost, int id) { |
|
|
ZASSERT(m_modbusBlockHost != NULL); |
|
|
ZASSERT(m_modbusBlockHost != NULL); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#define DO(exptr) \
|
|
|
|
|
|
{ \ |
|
|
|
|
|
int32_t __ret = exptr; \ |
|
|
|
|
|
if (__ret != 0) { \ |
|
|
|
|
|
ZLOGE(TAG, "do %s %d", #exptr, __ret); \ |
|
|
|
|
|
return __ret; \ |
|
|
|
|
|
} \ |
|
|
|
|
|
|
|
|
#define DO(exptr) \
|
|
|
|
|
|
{ \ |
|
|
|
|
|
int32_t __ret = exptr; \ |
|
|
|
|
|
if (__ret != 0) { \ |
|
|
|
|
|
ZLOGE(TAG, "do %s fail,%d ", #exptr, __ret); \ |
|
|
|
|
|
return __ret; \ |
|
|
|
|
|
} \ |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#define DO_NOLOG(exptr) \
|
|
|
|
|
|
{ \ |
|
|
|
|
|
int32_t __ret = exptr; \ |
|
|
|
|
|
if (__ret != 0) { \ |
|
|
|
|
|
return __ret; \ |
|
|
|
|
|
} \ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int32_t Eq20ServoMotor::move_to(int32_t topos, int32_t rpm, int32_t acctime) { |
|
|
int32_t Eq20ServoMotor::move_to(int32_t topos, int32_t rpm, int32_t acctime) { |
|
@ -123,13 +131,14 @@ int32_t Eq20ServoMotor::get_servo_internal_state(servo_internal_status_t &state) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#define AUTO_RESEND(exptr) \
|
|
|
#define AUTO_RESEND(exptr) \
|
|
|
int ret = 0; \ |
|
|
|
|
|
|
|
|
int32_t ret = 0; \ |
|
|
for (size_t i = 0; i < m_auto_resendtimes; i++) { \ |
|
|
for (size_t i = 0; i < m_auto_resendtimes; i++) { \ |
|
|
ret = exptr; \ |
|
|
ret = exptr; \ |
|
|
if (ret == 0) { \ |
|
|
if (ret == 0) { \ |
|
|
return 0; \ |
|
|
return 0; \ |
|
|
} \ |
|
|
} \ |
|
|
} |
|
|
|
|
|
|
|
|
} \ |
|
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
int32_t Eq20ServoMotor::writereg(uint32_t regadd, int32_t value) { //
|
|
|
int32_t Eq20ServoMotor::writereg(uint32_t regadd, int32_t value) { //
|
|
|
AUTO_RESEND(_writereg(regadd, value)); |
|
|
AUTO_RESEND(_writereg(regadd, value)); |
|
@ -161,27 +170,25 @@ int32_t Eq20ServoMotor::_read_pn_bit(uint32_t pnadd, int32_t off, int32_t &value |
|
|
* REG * |
|
|
* REG * |
|
|
*******************************************************************************/ |
|
|
*******************************************************************************/ |
|
|
int32_t Eq20ServoMotor::_writereg(uint32_t regadd, int32_t value) { //
|
|
|
int32_t Eq20ServoMotor::_writereg(uint32_t regadd, int32_t value) { //
|
|
|
DO(m_modbusBlockHost->writeReg10Muti(m_deviceId, regadd, (uint16_t *)&value, 2, 100)); |
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
return m_modbusBlockHost->writeReg10Muti(m_deviceId, regadd, (uint16_t *)&value, 2, 100); |
|
|
} |
|
|
} |
|
|
int32_t Eq20ServoMotor::_readreg(uint32_t regadd, int32_t &value) { //
|
|
|
int32_t Eq20ServoMotor::_readreg(uint32_t regadd, int32_t &value) { //
|
|
|
DO(m_modbusBlockHost->readReg03Muti(m_deviceId, regadd, (uint16_t *)&value, 2, 100)); |
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
return m_modbusBlockHost->readReg03Muti(m_deviceId, regadd, (uint16_t *)&value, 2, 100); |
|
|
} |
|
|
} |
|
|
int32_t Eq20ServoMotor::_write_reg_bit(uint32_t regadd, int32_t off, int32_t value) { |
|
|
int32_t Eq20ServoMotor::_write_reg_bit(uint32_t regadd, int32_t off, int32_t value) { |
|
|
int32_t regval; |
|
|
int32_t regval; |
|
|
DO(_readreg(regadd, regval)); |
|
|
|
|
|
|
|
|
DO_NOLOG(_readreg(regadd, regval)); |
|
|
if (value) { |
|
|
if (value) { |
|
|
regval |= (1 << off); |
|
|
regval |= (1 << off); |
|
|
} else { |
|
|
} else { |
|
|
regval &= ~(1 << off); |
|
|
regval &= ~(1 << off); |
|
|
} |
|
|
} |
|
|
DO(_writereg(regadd, regval)); |
|
|
|
|
|
|
|
|
DO_NOLOG(_writereg(regadd, regval)); |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
int32_t Eq20ServoMotor::_read_reg_bit(uint32_t regadd, int32_t off, int32_t &value) { |
|
|
int32_t Eq20ServoMotor::_read_reg_bit(uint32_t regadd, int32_t off, int32_t &value) { |
|
|
int32_t regval; |
|
|
int32_t regval; |
|
|
DO(_readreg(regadd, regval)); |
|
|
|
|
|
|
|
|
DO_NOLOG(_readreg(regadd, regval)); |
|
|
value = (regval >> off) & 0x01; |
|
|
value = (regval >> off) & 0x01; |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |