diff --git a/components/mini_servo_motor/feite_servo_motor.cpp b/components/mini_servo_motor/feite_servo_motor.cpp index 0f31bca..3bc5657 100644 --- a/components/mini_servo_motor/feite_servo_motor.cpp +++ b/components/mini_servo_motor/feite_servo_motor.cpp @@ -74,6 +74,17 @@ bool FeiTeServoMotor::getTorqueSwitch(uint8_t id, bool& on) { bool FeiTeServoMotor::getNowPos(uint8_t id, int16_t& pos) { return read_s16(id, kRegServoCurrentPos, 15, pos); } bool FeiTeServoMotor::setTargetPos(uint8_t id, int16_t pos) { return write_s16(id, kRegServoTargetPos, 15, pos); } +bool FeiTeServoMotor::triggerAysncWrite(uint8_t id) { + cmd_header_t* cmd_header = (cmd_header_t*)m_txbuf; + cmd_header->header = 0xffff; + cmd_header->id = id; + cmd_header->len = 2; + cmd_header->cmd = 5; + cmd_header->data[0] = checksum((uint8_t*)cmd_header, sizeof(cmd_header_t) + 1); + HAL_UART_Transmit(m_uart, m_txbuf, sizeof(cmd_header_t) + 1, 1000); + return true; +} + bool FeiTeServoMotor::reCalibration(int id, int16_t pos) { if (pos < 0 || pos > 4095) { ZLOGE(TAG, "reCalibration pos:%d out of range", pos); diff --git a/components/mini_servo_motor/feite_servo_motor.hpp b/components/mini_servo_motor/feite_servo_motor.hpp index b97d18b..537ee0f 100644 --- a/components/mini_servo_motor/feite_servo_motor.hpp +++ b/components/mini_servo_motor/feite_servo_motor.hpp @@ -131,14 +131,16 @@ class FeiTeServoMotor { bool getServoCalibration(uint8_t, int16_t& poscalibration); bool reCalibration(int id, int16_t pos); + bool triggerAysncWrite(uint8_t id); + public: bool write_u8(uint8_t id, feite::reg_add_e add, uint8_t regval); bool write_u16(uint8_t id, feite::reg_add_e add, uint16_t regval); bool write_s16(uint8_t id, feite::reg_add_e add, uint8_t signbitoff, int16_t regval); - + bool async_write_u8(uint8_t id, feite::reg_add_e add, uint8_t regval); bool async_write_u16(uint8_t id, feite::reg_add_e add, uint16_t regval); - bool async_write_s16(uint8_t id, feite::reg_add_e add, uint8_t signbitoff,int16_t regval); + bool async_write_s16(uint8_t id, feite::reg_add_e add, uint8_t signbitoff, int16_t regval); bool read_u8(uint8_t id, feite::reg_add_e add, uint8_t& regval); bool read_u16(uint8_t id, feite::reg_add_e add, uint16_t& regval);