|
|
@ -65,8 +65,9 @@ bool FeiTeServoMotor::getServoCalibration(uint8_t id, int16_t& poscalibration) { |
|
|
|
} |
|
|
|
|
|
|
|
run_mode_e FeiTeServoMotor::getmode(uint8_t id) { |
|
|
|
uint8_t data = 0; |
|
|
|
bool suc = read_u8(id, kRegServoRunMode, data); |
|
|
|
zlock_guard l(m_mutex); |
|
|
|
uint8_t data = 0; |
|
|
|
bool suc = read_u8(id, kRegServoRunMode, data); |
|
|
|
if (suc) { |
|
|
|
return (run_mode_e)data; |
|
|
|
} else { |
|
|
@ -205,6 +206,8 @@ void FeiTeServoMotor::dump_detailed_status(detailed_status_t* detailed_status) { |
|
|
|
bool FeiTeServoMotor::getMoveFlag(uint8_t id, uint8_t& moveflag) { return read_u8(id, kRegServoMoveFlag, moveflag); } |
|
|
|
|
|
|
|
bool FeiTeServoMotor::reCalibration(int id, int16_t pos) { |
|
|
|
zlock_guard l(m_mutex); |
|
|
|
|
|
|
|
if (pos < 0 || pos > 4095) { |
|
|
|
ZLOGE(TAG, "reCalibration pos:%d out of range", pos); |
|
|
|
return false; |
|
|
@ -308,8 +311,8 @@ bool FeiTeServoMotor::write_reg(uint8_t id, bool async, uint8_t add, uint8_t* da |
|
|
|
int txpacketlen = sizeof(cmd_header_t) + 1 + len + 1; |
|
|
|
int rxpacketlen = sizeof(receipt_header_t) + 1; |
|
|
|
|
|
|
|
ZASSERT(txpacketlen < sizeof(m_txbuf)); |
|
|
|
ZASSERT(rxpacketlen < sizeof(m_rxbuf)); |
|
|
|
ZASSERT((size_t)txpacketlen < sizeof(m_txbuf)); |
|
|
|
ZASSERT((size_t)rxpacketlen < sizeof(m_rxbuf)); |
|
|
|
|
|
|
|
uint8_t checksum = checksum_packet((uint8_t*)cmd_header, txpacketlen); |
|
|
|
m_txbuf[txpacketlen - 1] = checksum; |
|
|
@ -341,8 +344,8 @@ bool FeiTeServoMotor::read_reg(uint8_t id, uint8_t add, uint8_t* data, uint8_t l |
|
|
|
|
|
|
|
uint8_t checksum = checksum_packet((uint8_t*)cmd_header, txpacketlen); |
|
|
|
ZASSERT(txpacketlen > 0); |
|
|
|
ZASSERT(txpacketlen < sizeof(m_txbuf)); |
|
|
|
ZASSERT(rxpacketlen < sizeof(m_rxbuf)); |
|
|
|
ZASSERT((size_t)txpacketlen < sizeof(m_txbuf)); |
|
|
|
ZASSERT((size_t)rxpacketlen < sizeof(m_rxbuf)); |
|
|
|
|
|
|
|
m_txbuf[txpacketlen - 1] = checksum; |
|
|
|
if (!tx_and_rx(m_txbuf, txpacketlen, m_rxbuf, rxpacketlen, OVERTIME)) { |
|
|
@ -359,13 +362,14 @@ bool FeiTeServoMotor::tx_and_rx(uint8_t* tx, uint8_t txdatalen, uint8_t* rx, uin |
|
|
|
uint32_t enter_ticket = HAL_GetTick(); |
|
|
|
dumphex("tx:", tx, txdatalen); |
|
|
|
|
|
|
|
// clear rx buffer
|
|
|
|
|
|
|
|
#if 1
|
|
|
|
HAL_UART_Transmit(m_uart, tx, txdatalen, 1000); |
|
|
|
HAL_UART_Receive_DMA(m_uart, (uint8_t*)rx, expectrxsize); |
|
|
|
HAL_UART_Transmit(m_uart, tx, txdatalen,1000); |
|
|
|
|
|
|
|
bool overtime_flag = false; |
|
|
|
while (HAL_UART_GetState(m_uart) == HAL_UART_STATE_BUSY_RX || //
|
|
|
|
HAL_UART_GetState(m_uart) == HAL_UART_STATE_BUSY_TX_RX) { |
|
|
|
while (HAL_UART_GetState(m_uart) != HAL_UART_STATE_READY ) { |
|
|
|
osDelay(1); |
|
|
|
int rxsize = expectrxsize - __HAL_DMA_GET_COUNTER(m_hdma_rx); |
|
|
|
if (rxsize == expectrxsize) { |
|
|
|