@@ -67,21 +67,36 @@ static bool checkAndconvertWriteData(float in_data, int32_t &out_data, uint8_t u
67
67
static bool checkAndconvertReadData (int32_t in_data, float &out_data, uint8_t unit, ItemAndRangeInfo_t &item_info);
68
68
69
69
70
+ Dynamixel2Arduino::Dynamixel2Arduino ()
71
+ : Master()
72
+ {}
73
+
70
74
Dynamixel2Arduino::Dynamixel2Arduino (HardwareSerial& port, int dir_pin)
71
- : Master(), dxl_port_(port, dir_pin)
75
+ : Master()
72
76
{
73
- setPort (dxl_port_);
77
+ p_dxl_port_ = new SerialPortHandler (port, dir_pin);
78
+ setPort (p_dxl_port_);
74
79
}
75
80
76
81
/* For Master configuration */
77
82
void Dynamixel2Arduino::begin (unsigned long baud)
78
83
{
79
- dxl_port_.begin (baud);
84
+ p_dxl_port_ = (SerialPortHandler*)getPort ();
85
+
86
+ if (p_dxl_port_ == nullptr )
87
+ return ;
88
+
89
+ p_dxl_port_->begin (baud);
80
90
}
81
91
82
- unsigned long Dynamixel2Arduino::getPortBaud () const
92
+ unsigned long Dynamixel2Arduino::getPortBaud ()
83
93
{
84
- return dxl_port_.getBaud ();
94
+ p_dxl_port_ = (SerialPortHandler*)getPort ();
95
+
96
+ if (p_dxl_port_ == nullptr )
97
+ return 0 ;
98
+
99
+ return p_dxl_port_->getBaud ();
85
100
}
86
101
87
102
bool Dynamixel2Arduino::scan ()
@@ -95,6 +110,9 @@ bool Dynamixel2Arduino::scan()
95
110
96
111
bool Dynamixel2Arduino::ping (uint8_t id)
97
112
{
113
+ if (getPort () == nullptr )
114
+ return false ;
115
+
98
116
bool ret = false ;
99
117
uint8_t i;
100
118
@@ -146,6 +164,9 @@ bool Dynamixel2Arduino::ping(uint8_t id)
146
164
147
165
uint16_t Dynamixel2Arduino::getModelNumber (uint8_t id)
148
166
{
167
+ if (getPort () == nullptr )
168
+ return false ;
169
+
149
170
uint16_t model_num = 0xFFFF ;
150
171
151
172
(void ) read (id, COMMON_MODEL_NUMBER_ADDR, COMMON_MODEL_NUMBER_ADDR_LENGTH,
@@ -177,6 +198,9 @@ bool Dynamixel2Arduino::setProtocol(uint8_t id, float version)
177
198
// TODO: Simplify the code by grouping model numbers.
178
199
bool Dynamixel2Arduino::setBaudrate (uint8_t id, uint32_t baudrate)
179
200
{
201
+ if (getPort () == nullptr )
202
+ return false ;
203
+
180
204
uint16_t model_num = getModelNumberFromTable (id);
181
205
uint8_t baud_idx = 0 ;
182
206
@@ -420,6 +444,9 @@ bool Dynamixel2Arduino::ledOff(uint8_t id)
420
444
421
445
bool Dynamixel2Arduino::setLedState (uint8_t id, bool state)
422
446
{
447
+ if (getPort () == nullptr )
448
+ return false ;
449
+
423
450
bool ret = false ;
424
451
uint16_t model_num = getModelNumberFromTable (id);
425
452
@@ -463,6 +490,9 @@ bool Dynamixel2Arduino::setLedState(uint8_t id, bool state)
463
490
// TODO: Simplify the code by grouping model numbers.
464
491
bool Dynamixel2Arduino::setOperatingMode (uint8_t id, uint8_t mode)
465
492
{
493
+ if (getPort () == nullptr )
494
+ return false ;
495
+
466
496
bool ret = false ;
467
497
uint16_t model_num = getModelNumberFromTable (id);
468
498
@@ -707,13 +737,19 @@ float Dynamixel2Arduino::getPresentCurrent(uint8_t id, uint8_t unit)
707
737
708
738
int32_t Dynamixel2Arduino::readControlTableItem (uint8_t item_idx, uint8_t id, uint32_t timeout)
709
739
{
740
+ if (getPort () == nullptr )
741
+ return 0 ;
742
+
710
743
uint16_t model_num = getModelNumberFromTable (id);
711
744
712
745
return readControlTableItem (model_num, item_idx, id, timeout);
713
746
}
714
747
715
748
bool Dynamixel2Arduino::writeControlTableItem (uint8_t item_idx, uint8_t id, int32_t data, uint32_t timeout)
716
749
{
750
+ if (getPort () == nullptr )
751
+ return false ;
752
+
717
753
uint16_t model_num = getModelNumberFromTable (id);
718
754
719
755
return writeControlTableItem (model_num, item_idx, id, data, timeout);
@@ -726,6 +762,9 @@ bool Dynamixel2Arduino::writeControlTableItem(uint8_t item_idx, uint8_t id, int3
726
762
727
763
int32_t Dynamixel2Arduino::readControlTableItem (uint16_t model_num, uint8_t item_idx, uint8_t id, uint32_t timeout)
728
764
{
765
+ if (getPort () == nullptr )
766
+ return 0 ;
767
+
729
768
int32_t recv_len, ret = 0 ;
730
769
ControlTableItemInfo_t item_info;
731
770
@@ -749,6 +788,9 @@ int32_t Dynamixel2Arduino::readControlTableItem(uint16_t model_num, uint8_t item
749
788
750
789
bool Dynamixel2Arduino::writeControlTableItem (uint16_t model_num, uint8_t item_idx, uint8_t id, int32_t data, uint32_t timeout)
751
790
{
791
+ if (getPort () == nullptr )
792
+ return false ;
793
+
752
794
ControlTableItemInfo_t item_info;
753
795
754
796
item_info = getControlTableItemInfo (model_num, item_idx);
@@ -790,6 +832,11 @@ uint16_t Dynamixel2Arduino::getModelNumberFromTable(uint8_t id)
790
832
791
833
float Dynamixel2Arduino::readForRangeDependencyFunc (uint8_t func_idx, uint8_t id, uint8_t unit)
792
834
{
835
+ p_dxl_port_ = (SerialPortHandler*)getPort ();
836
+
837
+ if (p_dxl_port_ == nullptr )
838
+ return 0.0 ;
839
+
793
840
float ret = 0 ;
794
841
int32_t ret_data = 0 ;
795
842
uint16_t model_num = getModelNumberFromTable (id);
@@ -807,6 +854,11 @@ float Dynamixel2Arduino::readForRangeDependencyFunc(uint8_t func_idx, uint8_t id
807
854
808
855
bool Dynamixel2Arduino::writeForRangeDependencyFunc (uint8_t func_idx, uint8_t id, float value, uint8_t unit)
809
856
{
857
+ p_dxl_port_ = (SerialPortHandler*)getPort ();
858
+
859
+ if (p_dxl_port_ == nullptr )
860
+ return false ;
861
+
810
862
bool ret = false ;
811
863
int32_t data = 0 ;
812
864
uint16_t model_num = getModelNumberFromTable (id);
0 commit comments