Skip to content

Commit 6420c3c

Browse files
author
Kei
committed
Updated sync functions to return packet error. (#23)
1 parent 0cf0987 commit 6420c3c

File tree

3 files changed

+20
-13
lines changed

3 files changed

+20
-13
lines changed

examples/advanced/sync_read_write_raw/sync_read_write_raw.ino

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ typedef struct sr_data{
6767
} sr_data_t;
6868
uint8_t id_list[DXL_ID_CNT] = {1, 2};
6969
sr_data_t present_values[DXL_ID_CNT];
70+
uint8_t err_list[DXL_ID_CNT] = {0, };
7071
int32_t goal_velocity[DXL_ID_CNT] = {100, 200};
7172

7273
Dynamixel2Arduino dxl(DXL_SERIAL, DXL_DIR_PIN);
@@ -100,19 +101,20 @@ void setup() {
100101
dxl.addSyncWriteData(id_list[i], (uint8_t*)&goal_velocity[i]);
101102
}
102103
dxl.endSetupSyncWrite();
103-
dxl.sendSyncWrite();
104+
dxl.doSyncWrite();
104105
}
105106

106107
void loop() {
107108
// put your main code here, to run repeatedly:
108109
uint8_t recv_cnt;
109110

110-
recv_cnt = dxl.sendSyncRead((uint8_t*)&present_values, sizeof(present_values), &sr_present_pos);
111+
recv_cnt = dxl.doSyncRead((uint8_t*)&present_values, sizeof(present_values), err_list, sizeof(err_list), &sr_present_pos);
111112
if(recv_cnt > 0){
112113
DEBUG_SERIAL.print("Received ID Count: ");
113114
DEBUG_SERIAL.println(recv_cnt);
114115
for(uint16_t i=0; i<recv_cnt; i++){
115-
DEBUG_SERIAL.print(" ID: ");DEBUG_SERIAL.println(id_list[i]);
116+
DEBUG_SERIAL.print(" ID: ");DEBUG_SERIAL.print(id_list[i]);
117+
DEBUG_SERIAL.print(", Error: ");DEBUG_SERIAL.println(err_list[i]);
116118
DEBUG_SERIAL.print("\t Present Current: ");DEBUG_SERIAL.println(present_values[i].present_current);
117119
DEBUG_SERIAL.print("\t Present Velocity: ");DEBUG_SERIAL.println(present_values[i].present_velocity);
118120
DEBUG_SERIAL.print("\t Present Position: ");DEBUG_SERIAL.println(present_values[i].present_position);

src/utility/master.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ Master::endSetupSyncRead(InfoSyncBulkInst_t *p_sync_info)
642642
}
643643

644644
uint8_t
645-
Master::sendSyncRead(uint8_t *p_recv_buf, uint16_t recv_buf_capacity, InfoSyncBulkInst_t *p_sync_info)
645+
Master::doSyncRead(uint8_t *p_recv_buf, uint16_t recv_buf_capacity, uint8_t *p_err_list, uint8_t err_list_size, InfoSyncBulkInst_t *p_sync_info)
646646
{
647647
uint8_t recv_cnt = 0;
648648
DXLLibErrorCode_t err = DXL_LIB_OK;
@@ -687,6 +687,9 @@ Master::sendSyncRead(uint8_t *p_recv_buf, uint16_t recv_buf_capacity, InfoSyncBu
687687
{
688688
if(rxStatusPacket(&p_recv_buf[i*p_info->addr_len],
689689
recv_buf_capacity-i*p_info->addr_len, 3) != nullptr){
690+
if(p_err_list != nullptr && err_list_size > recv_cnt){
691+
p_err_list[recv_cnt] = info_rx_packet_.err_idx;
692+
}
690693
recv_cnt++;
691694
}else{
692695
break;
@@ -814,7 +817,7 @@ Master::endSetupSyncWrite(InfoSyncBulkInst_t *p_sync_info)
814817
}
815818

816819
bool
817-
Master::sendSyncWrite(InfoSyncBulkInst_t *p_sync_info)
820+
Master::doSyncWrite(InfoSyncBulkInst_t *p_sync_info)
818821
{
819822
bool ret = false;
820823
DXLLibErrorCode_t err = DXL_LIB_OK;

src/utility/master.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -112,23 +112,25 @@ class Master
112112
bool beginSetupSyncRead(uint16_t addr, uint16_t addr_len, InfoSyncBulkInst_t *p_sync_info = nullptr);
113113
bool addSyncReadID(uint8_t id, InfoSyncBulkInst_t *p_sync_info = nullptr);
114114
bool endSetupSyncRead(InfoSyncBulkInst_t *p_sync_info = nullptr);
115-
uint8_t sendSyncRead(uint8_t *p_recv_buf, uint16_t recv_buf_capacity, InfoSyncBulkInst_t *p_sync_info = nullptr);
115+
uint8_t doSyncRead(uint8_t *p_recv_buf, uint16_t recv_buf_capacity, uint8_t *p_err_list, uint8_t err_list_size, InfoSyncBulkInst_t *p_sync_info = nullptr);
116116

117117
/* Easy functions for Sync Write */
118118
bool beginSetupSyncWrite(uint16_t addr, uint16_t addr_len, InfoSyncBulkInst_t *p_sync_info = nullptr);
119119
bool addSyncWriteData(uint8_t id, uint8_t *p_data, InfoSyncBulkInst_t *p_sync_info = nullptr);
120120
bool endSetupSyncWrite(InfoSyncBulkInst_t *p_sync_info = nullptr);
121-
bool sendSyncWrite(InfoSyncBulkInst_t *p_sync_info = nullptr);
121+
bool doSyncWrite(InfoSyncBulkInst_t *p_sync_info = nullptr);
122122

123123
/* Easy functions for Bulk Read */
124-
bool beginBulkRead();
125-
bool addBulkReadID(uint8_t id, uint16_t addr, uint16_t addr_len);
126-
bool sendBulkRead(uint8_t *p_recv_buf, uint16_t recv_buf_capacity);
124+
bool beginSetupBulkRead(InfoSyncBulkInst_t *p_bulk_info = nullptr);
125+
bool addBulkReadID(uint8_t id, uint16_t addr, uint16_t addr_len, InfoSyncBulkInst_t *p_bulk_info = nullptr);
126+
bool endSetupBulkRead(InfoSyncBulkInst_t *p_bulk_info = nullptr);
127+
bool doBulkRead(uint8_t *p_recv_buf, uint16_t recv_buf_capacity, uint8_t *p_err_list, uint8_t err_list_size, InfoSyncBulkInst_t *p_bulk_info = nullptr);
127128

128129
/* Easy functions for Bulk Write */
129-
bool beginBulkWrite();
130-
bool addBulkWriteData(uint8_t id, uint16_t addr, uint8_t *p_data, uint16_t data_len);
131-
bool sendBulkWrite();
130+
bool beginSetupBulkWrite(InfoSyncBulkInst_t *p_bulk_info = nullptr);
131+
bool addBulkWriteData(uint8_t id, uint16_t addr, uint8_t *p_data, uint16_t data_len, InfoSyncBulkInst_t *p_bulk_info = nullptr);
132+
bool endSetupBulkWrite(InfoSyncBulkInst_t *p_bulk_info = nullptr);
133+
bool doBulkWrite(InfoSyncBulkInst_t *p_bulk_info = nullptr);
132134
#endif
133135

134136
uint8_t getLastStatusPacketError() const;

0 commit comments

Comments
 (0)