diff --git a/src/dynamixel_slave.cpp b/src/dynamixel_slave.cpp index 518198e128fa4bdc62de533ab31394262fd01a42..552dc8afeed51731b79368341839757bb68a4f11 100644 --- a/src/dynamixel_slave.cpp +++ b/src/dynamixel_slave.cpp @@ -142,7 +142,11 @@ void *CDynamixelSlave::process_packets_thread(void *params) new_data=new unsigned char[num_bytes]; memcpy(new_data,packet,num_bytes); slave->packets.push_back(new_data); - slave->event_server->set_event(slave->new_packet_available_event_id); + if(slave->dyn_ver==dyn_version1) + slave->dynamixel_loop_v1(); + else + slave->dynamixel_loop_v2(); + //slave->event_server->set_event(slave->new_packet_available_event_id); num_bytes=0; } } @@ -185,7 +189,7 @@ void *CDynamixelSlave::dynamixel_loop_thread(void *params) void CDynamixelSlave::handle_error(unsigned char error) { - + std::cout << "error!!!!!!!!!!" << std::endl; } void CDynamixelSlave::start(void) diff --git a/src/examples/test_dynamixel_slave.cpp b/src/examples/test_dynamixel_slave.cpp index 7a275be7f62920d2efc66419f2658883225bd641..9b719ce7dedbee74aa8133478b33ce6829c0de10 100644 --- a/src/examples/test_dynamixel_slave.cpp +++ b/src/examples/test_dynamixel_slave.cpp @@ -13,27 +13,49 @@ unsigned char rx28_servo_data[SERVO_MEMORY_SIZE]={0x1c,0x00,0x00,0x01,0x22,0xFA, 0x00,0x00,0x78,0x19,0x00,0x00,0x00,0x00, 0x20,0x00}; -std::string serial="A400gavm"; +std::string serial="AI027ZFC"; -void on_ping(void) +void on_ping_03(void) { - std::cout << "device pinged" << std::endl; + std::cout << "servo 3 pinged" << std::endl; } -unsigned char on_read(unsigned short int address, unsigned short int length, unsigned char *data) +unsigned char on_read_03(unsigned short int address, unsigned short int length, unsigned char *data) { - unsigned char num; + std::cout << "servo 3: read operation at address " << address << " with length " << length << std::endl; + for(unsigned int i=address,num=0;i<address+length || i<SERVO_MEMORY_SIZE;i++,num++) + data[num]=rx28_servo_data[i]; + + return 0x00; +} - std::cout << "read operation at address " << address << " with length " << length << std::endl; +unsigned char on_write_03(unsigned short int address, unsigned short int length, unsigned char *data) +{ + std::cout << "servo 3: wrirte operation at address " << address << " with length " << length << std::endl; + + for(unsigned int i=address,num=0;i<address+length || i<SERVO_MEMORY_SIZE;i++,num++) + rx28_servo_data[i]=data[num]; + + return 0x00; +} + +void on_ping_01(void) +{ + std::cout << "servo 1 pinged" << std::endl; +} + +unsigned char on_read_01(unsigned short int address, unsigned short int length, unsigned char *data) +{ + std::cout << "servo 1: read operation at address " << address << " with length " << length << std::endl; for(unsigned int i=address,num=0;i<address+length || i<SERVO_MEMORY_SIZE;i++,num++) data[num]=rx28_servo_data[i]; return 0x00; } -unsigned char on_write(unsigned short int address, unsigned short int length, unsigned char *data) +unsigned char on_write_01(unsigned short int address, unsigned short int length, unsigned char *data) { - std::cout << "wrirte operation at address " << address << " with length " << length << std::endl; + std::cout << "servo 1: wrirte operation at address " << address << " with length " << length << std::endl; for(unsigned int i=address,num=0;i<address+length || i<SERVO_MEMORY_SIZE;i++,num++) rx28_servo_data[i]=data[num]; @@ -51,8 +73,9 @@ int main(int argc, char *argv[]) std::cout << "Num. buses: " << num_buses << std::endl; if(num_buses>0) { - slave.config_bus(serial,1000000); - slave.add_slave(0x10,boost::bind(&on_ping),boost::bind(&on_read,_1,_2,_3),boost::bind(&on_write,_1,_2,_3)); + slave.config_bus(serial,500000); + slave.add_slave(0x01,boost::bind(&on_ping_01),boost::bind(&on_read_01,_1,_2,_3),boost::bind(&on_write_01,_1,_2,_3)); + slave.add_slave(0x03,boost::bind(&on_ping_03),boost::bind(&on_read_03,_1,_2,_3),boost::bind(&on_write_03,_1,_2,_3)); sleep(10000); std::cout << "exit" << std::endl; }