Dynamixel  2.9.5
RoadNarrows Robotics Dynamixel Package
DynaServoEX106P.cxx
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////////////
2 //
3 // Package: Dynamixel
4 //
5 // Library: libDynamixel
6 //
7 // File: DynaServoEX106P.cxx
8 //
9 /*! \file
10  *
11  * $LastChangedDate: 2015-03-13 13:28:02 -0600 (Fri, 13 Mar 2015) $
12  * $Rev: 3890 $
13  *
14  * \brief EX-106+ Dynamixel servo class.
15  *
16  * \author Robin Knight (robin.knight@roadnarrows.com)
17  *
18  * \copyright
19  * \h_copy 2011-2017. RoadNarrows LLC.\n
20  * http://www.roadnarrows.com\n
21  * All Rights Reserved
22  */
23 /*
24  * @EulaBegin@
25  *
26  * Unless otherwise stated explicitly, all materials contained are copyrighted
27  * and may not be used without RoadNarrows LLC's written consent,
28  * except as provided in these terms and conditions or in the copyright
29  * notice (documents and software) or other proprietary notice provided with
30  * the relevant materials.
31  *
32  * IN NO EVENT SHALL THE AUTHOR, ROADNARROWS LLC, OR ANY
33  * MEMBERS/EMPLOYEES/CONTRACTORS OF ROADNARROWS OR DISTRIBUTORS OF THIS SOFTWARE
34  * BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
35  * CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
36  * DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN
37  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38  *
39  * THE AUTHORS AND ROADNARROWS LLC SPECIFICALLY DISCLAIM ANY WARRANTIES,
40  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
41  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN
42  * "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO
43  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
44  *
45  * @EulaEnd@
46  */
47 ////////////////////////////////////////////////////////////////////////////////
48 
49 #include <stdio.h>
50 #include <stdlib.h>
51 #include <libgen.h>
52 #include <string.h>
53 #include <stdarg.h>
54 
55 #include "rnr/rnrconfig.h"
56 #include "rnr/log.h"
57 #include "rnr/new.h"
58 #include "rnr/units.h"
59 
60 #include "Dynamixel/Dynamixel.h"
61 #include "Dynamixel/EX.h"
62 #include "Dynamixel/DynaError.h"
63 #include "Dynamixel/DynaComm.h"
64 #include "Dynamixel/DynaServo.h"
67 
68 #include "DynaLibInternal.h"
69 
70 
71 // ---------------------------------------------------------------------------
72 // Private Interface
73 // ---------------------------------------------------------------------------
74 
75 /*!
76  * \brief EX-106P Servo EEPROM Control Table Information.
77  */
79 {
80  {0x00, "Model Number", 2, 0xffff, false, NULL},
81  {0x02, "Firmware Version", 1, 0xff, false, "%u"},
82  {0x03, "Servo Id", 1, 0xff, false, "%u"},
83  {0x04, "Baud Rate", 1, 0xff, false, "%u"},
84  {0x05, "Return Delay Time", 1, 0xff, false, "%u"},
85  {0x06, "CW Angle Limit", 2, 0x3ff, false, "%u"},
86  {0x08, "CCW Angle Limit", 2, 0x3ff, false, "%u"},
87  {0x0a, "Drive Mode", 1, 0xff, false, "%u"},
88  {0x0b, "Highest Temperature Limit", 1, 0xff, false, "%u"},
89  {0x0c, "Lowest Voltage Limit", 1, 0xff, false, "%u"},
90  {0x0d, "Highest Voltage Limit", 1, 0xff, false, "%u"},
91  {0x0e, "Maximum Torque", 2, 0x3ff, false, "%u"},
92  {0x10, "Status Return Level", 1, 0xff, false, "%u"},
93  {0x11, "Alarm LED", 1, 0xff, false, "%u"},
94  {0x12, "Alarm Shutdown", 1, 0xff, false, NULL},
95  {0x14, "Multi Turn Offset", 2, 0xffff, true, "%d"},
96  {0x16, "Resolution Divider", 1, 0xff, false, "%u"}
97 };
98 
99 /*!
100  * \brief EX-106P Servo RAM Control Table Information.
101  */
103 {
104  {0x18, "Torque Enable", 1, 0xff, false, "%u"},
105  {0x19, "LED", 1, 0xff, false, "%u"},
106  {0x1a, "CW Compliance Margin", 1, 0xff, false, "%u"},
107  {0x1b, "CCW Compliance Margin", 1, 0xff, false, "%u"},
108  {0x1c, "CW Compliance Slope", 1, 0xff, false, "%u"},
109  {0x1d, "CCW Compliance Slope", 1, 0xff, false, "%u"},
110  {0x1e, "Goal Position", 2, 0x3ff, false, "%u"},
111  {0x20, "Goal Speed", 2, 0x7ff, true, "%d"},
112  {0x22, "Torque Limit", 2, 0x3ff, false, "%u"},
113  {0x24, "Current Position", 2, 0x3ff, false, "%u"},
114  {0x26, "Current Speed", 2, 0x7ff, true, "%d"},
115  {0x28, "Current Load", 2, 0x7ff, true, "%d"},
116  {0x2a, "Current Voltage", 1, 0xff, false, "%u"},
117  {0x2b, "Current Temperature", 1, 0xff, false, "%u"},
118  {0x2c, "Registered", 1, 0xff, false, "%u"},
119  {0x2e, "Moving", 1, 0xff, false, "%u"},
120  {0x2f, "Lock", 1, 0xff, false, "%u"},
121  {0x30, "Punch", 2, 0x3ff, false, "%u"},
122  {0x38, "Sensed Current", 2, 0x3ff, true, "%d"}
123 };
124 
125 
126 // ---------------------------------------------------------------------------
127 // DynaServoEX106P Class
128 // ---------------------------------------------------------------------------
129 
130 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
131 // Constructors and Destructors
132 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
133 
135  int nServoId,
136  uint_t uModelNum,
137  uint_t uFwVer) :
138  DynaServoGeneric(comm)
139 {
140  Init(nServoId, uFwVer); // this class
141  SyncData(); // this class
142  CheckData(); // this class
143 }
144 
146 {
147 }
148 
149 
150 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
151 // Servo Read/Write Functions
152 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
153 
154 int DynaServoEX106P::CfgReadDriveMode(bool *pIsMaster, bool *pIsNormal)
155 {
156  uint_t uVal; // working value
157  bool bVal1, bVal2; // working booleans
158  DynaServoEX106P *pServoMate; // servo mate
159  int rc; // return code
160 
162 
164 
165  if( rc == DYNA_OK )
166  {
169 
170  *pIsMaster = m_cfgExt.m_bDriveModeIsMaster;
171  *pIsNormal = m_cfgExt.m_bDriveModeIsNormal;
172 
173  if( IsLinkedMaster() )
174  {
175  pServoMate = (DynaServoEX106P *)(m_link.m_pServoMate);
176 
177  rc = pServoMate->CfgReadDriveMode(&bVal1, &bVal2);
178  }
179  }
180 
181  return rc;
182 }
183 
184 int DynaServoEX106P::CfgWriteDriveMode(bool bIsMaster, bool bIsNormal)
185 {
186  uint_t uVal1, uVal2; // working values
187  DynaServoEX106P *pServoMate; // servo mate
188  int rc; // return code
189 
191  DYNA_TRY_IS_MASTER(this);
192 
193  uVal1 = PackDriveMode(bIsMaster, bIsNormal);
194 
195  //
196  // Linked pair
197  //
198  if( IsLinkedMaster() )
199  {
200  DYNA_TRY_EXPR((bIsMaster), DYNA_ECODE_BAD_VAL,
201  "Linked master servo %d: Drive mode must also be master.", m_nServoId);
202 
203  pServoMate = (DynaServoEX106P *)(m_link.m_pServoMate);
204 
205  uVal2 = PackDriveMode(false, bIsNormal);
206 
208  m_nServoId, uVal1,
209  pServoMate->GetServoId(), uVal2);
210 
211  if( rc == DYNA_OK )
212  {
214  m_cfgExt.m_bDriveModeIsNormal = bIsNormal;
215 
216  pServoMate->m_cfgExt.m_bDriveModeIsMaster = false;
217  pServoMate->m_cfgExt.m_bDriveModeIsNormal = bIsNormal;
218  }
219  }
220 
221  //
222  // Solitary servo
223  //
224  else
225  {
227 
228  if( rc == DYNA_OK )
229  {
230  m_cfgExt.m_bDriveModeIsMaster = bIsMaster;
231  m_cfgExt.m_bDriveModeIsNormal = bIsNormal;
232  }
233  }
234 
235  return rc;
236 }
237 
238 int DynaServoEX106P::ReadSensedCurrent(uint_t *pMilliAmps, uint_t *pTorqueDir)
239 {
240  uint_t uVal1, uVal2; // working values
241  DynaServoEX106P *pServoMate; // servo mate
242  int rc; // return code
243 
245 
247 
248  if( rc == DYNA_OK )
249  {
252 
255 
256  if( IsLinkedMaster() )
257  {
258  pServoMate = (DynaServoEX106P *)(m_link.m_pServoMate);
259 
260  rc = pServoMate->ReadSensedCurrent(&uVal1, &uVal2);
261  }
262  }
263 
264  return rc;
265 }
266 
267 int DynaServoEX106P::Read(uint_t uAddr, uint_t *pVal)
268 {
270  DYNA_TRY_ADDR(uAddr);
271 
272  switch( uAddr )
273  {
275  return m_comm.Read16(m_nServoId, uAddr, pVal);
276 
278  return m_comm.Read8(m_nServoId, uAddr, pVal);
279 
280  default:
281  return DynaServoGeneric::Read(uAddr, pVal);
282  }
283 }
284 
285 int DynaServoEX106P::Write(uint_t uAddr, uint_t uVal)
286 {
288  DYNA_TRY_ADDR(uAddr);
289 
290  switch( uAddr )
291  {
293  return m_comm.Write16(m_nServoId, uAddr, uVal);
294 
296  return m_comm.Write8(m_nServoId, uAddr, uVal);
297 
298  default:
299  return DynaServoGeneric::Write(uAddr, uVal);
300  }
301 }
302 
304 {
305  bool bVal1, bVal2; // working booleans
306 
308 
310 
311  CfgReadDriveMode(&bVal1, &bVal2);
312 
313  return DYNA_OK;
314 }
315 
317 {
318  uint_t uVal1, uVal2; // working values
319 
321 
323 
324  ReadSensedCurrent(&uVal1, &uVal2);
325 
326  return DYNA_OK;
327 }
328 
330 {
331  DumpCtlTbl("EEPROM",
332  EX106PEEPROMCtlTblInfo, arraysize(EX106PEEPROMCtlTblInfo));
333 
334  printf("\n");
335 
336  DumpCtlTbl("RAM", EX106PRAMCtlTblInfo, arraysize(EX106PRAMCtlTblInfo));
337 }
338 
339 
340 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
341 // Protected Interface
342 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
343 
344 void DynaServoEX106P::Init(int nServoId, uint_t uFwVer)
345 {
346  DynaServo::Init(nServoId, DYNA_MODEL_NUM, uFwVer);
347 
348  InitSpec(); // this class
349  InitCfg(); // this class
350  InitState(); // this class
351 }
352 
354 {
355  //
356  // Fixed servo specification.
357  //
358  if( m_spec.m_sModelName != NULL )
359  {
360  delete[] m_spec.m_sModelName;
361  }
362 
363  // physical and fixed features
364  m_spec.m_sModelName = newstr("EX-106+");
382 
383  // raw units
395 }
396 
398 {
400 
403 }
404 
406 {
408 
411 }
412 
413 uint_t DynaServoEX106P::PackDriveMode(bool bIsMaster, bool bIsNormal)
414 {
415  uint_t uVal;
416 
417  uVal = bIsMaster? DYNA_EX106P_DRIVE_MODE_MS_MASTER:
419 
420  uVal |= bIsNormal? DYNA_EX106P_DRIVE_MODE_NR_NORM:
422 
423  return uVal;
424 }
425 
427  bool *pIsMaster,
428  bool *pIsNormal)
429 {
430  *pIsMaster = uVal & DYNA_EX106P_DRIVE_MODE_MS_SLAVE? false: true;
431 
432  *pIsNormal = uVal & DYNA_EX106P_DRIVE_MODE_NR_REV? false: true;
433 
434  return DYNA_OK;
435 }
436 
438  uint_t *pMilliAmps,
439  uint_t *pTorqueDir)
440 {
442 
443  *pTorqueDir = DYNA_EX106P_CURRENT_TORQUE_DIR(uVal);
444 
445  return DYNA_OK;
446 }
RoadNarrows Dynamixel Bus Communications Abstract Base Class Interface.
#define DYNA_EX106P_POS_MODULO
continuous position mod [0-max]
Definition: EX.h:152
char * newstr(const char *s)
Allocate new duplicated string.
#define DYNA_EX106P_SPEC_TEMP_MAX_C
maximum recommended operational temperature (C)
Definition: EX.h:113
#define DYNA_TORQUE_MAX_RAW
maximum raw torque
Definition: Dynamixel.h:282
double m_fMaxSpeed
max no-load speed (rpm) at optimal power
Definition: DynaTypes.h:91
#define DYNA_EX106P_SPEC_VOLT_MIN_V
minimum operational voltage (V)
Definition: EX.h:116
void DumpCtlTbl(const char *sTblName, const DynaCtlTblEntry_T tblInfo[], size_t uSize)
Dump the servo control tabl values to stdout.
Definition: DynaServo.cxx:422
bool IsLinkedMaster() const
Test if this servo is a linked master.
Definition: DynaServo.h:236
#define DYNA_OK
not an error, success
Definition: Dynamixel.h:78
#define DYNA_EX106P_SPEC_CTL_METHOD
position control method (see Dynamixel Internal Position Control Methods)
Definition: EX.h:122
uint_t m_uRawVoltMin
minimum raw voltage value
Definition: DynaTypes.h:110
virtual int vSyncWrite(uint_t uAddr, uint_t uValSize, uint_t uCount,...)
Synchronous write 8/16-bit values to a list of Dynamixel servos.
Definition: DynaComm.cxx:420
#define DYNA_EX106P_SPEC_WEIGHT_G
weight (grams)
Definition: EX.h:84
#define DYNA_TEMP_MIN_RAW
minimum raw temperature
Definition: Dynamixel.h:295
void InitSpec()
Initialize servo fixed specification data.
double m_fHeight
height (mm)
Definition: DynaTypes.h:86
#define DYNA_EX106P_SPEC_MAX_SPEED_RPM
maximum no-load speed (rpm) at optimal power
Definition: EX.h:95
#define DYNA_EX106P_DRIVE_MODE_MS_SLAVE
dual joint slave
Definition: EX.h:238
uint_t m_uRawPosMin
minimum raw position value (servo mode)
Definition: DynaTypes.h:101
DynaServoEX106P(DynaComm &comm)
Bare-bones initialization constructor.
uint_t m_uRawSpeedMax
maximum raw speed magnitude value
Definition: DynaTypes.h:105
#define DYNA_TRY_EXPR(expr, ecode, efmt,...)
Test if the servo is in the required mode(s) exception macro.
#define DYNA_VOLT_MAX_RAW
maximum raw temperature
Definition: Dynamixel.h:309
double m_fVoltMax
maximum operational voltage (V)
Definition: DynaTypes.h:99
uint_t m_uRawSpeedMin
minimum raw speed magnitude value
Definition: DynaTypes.h:104
virtual int Read8(int nServoId, uint_t uAddr, byte_t *pVal)=0
Read an 8-bit value from Dynamixel servo control table.
uint_t m_uSensedCurrentTorqueDir
sensed applied torque direction
Generic Dynamixel Servo Base Class Interface.
static DynaCtlTblEntry_T EX106PEEPROMCtlTblInfo[]
EX-106P Servo EEPROM Control Table Information.
#define DYNA_TRY_ADDR(addr)
Test if servo address is valid.
#define DYNA_EX106P_DRIVE_MODE_NR_REV
dual joint reverse rotation
Definition: EX.h:241
#define DYNA_SPEED_MIN_RAW
minimum raw value
Definition: Dynamixel.h:265
static DynaCtlTblEntry_T EX106PRAMCtlTblInfo[]
EX-106P Servo RAM Control Table Information.
virtual int Read16(int nServoId, uint_t uAddr, ushort_t *pVal)=0
Read a 16-bit value from Dynamixel servo control table.
double m_fDepth
depth (mm)
Definition: DynaTypes.h:87
void Init()
Initialize servo class instance.
virtual int CfgReadDriveMode(bool *pIsMaster, bool *pIsNormal)
Read from the servo configuration EEPROM the drive mode.
#define DYNA_TRY_IS_MASTER(pservo)
Test if the servo is a master servo.
DynaEX106PCfgExt_T m_cfgExt
configuration extension data
#define DYNA_EX106P_SPEC_HEIGHT_MM
height (mm)
Definition: EX.h:86
EX-106+ Dynamixel Servo Class.
uint_t m_uCtlMethodUsed
Dynamixel Internal Position Control Methods
Definition: DynaTypes.h:100
double m_fVoltMin
minimum operational voltage (V)
Definition: DynaTypes.h:98
double m_fAngleMin
min rotation angle in servo mode (deg)
Definition: DynaTypes.h:92
RoadNarrows EX Series Dynamixel Declarations.
#define DYNA_EX106P_SPEC_MODES
supported modes (see Dynamixel Operational Modes)
Definition: EX.h:104
double m_fGearRedectionRatio
gear reduction ratio
Definition: DynaTypes.h:89
double m_fWeight
weight (grams)
Definition: DynaTypes.h:84
uint_t m_uSupportedModes
Dynamixel Operational Modes
Definition: DynaTypes.h:94
#define DYNA_EX106P_SPEC_WIDTH_MM
width (mm)
Definition: EX.h:85
uint_t m_uRawPosModulo
raw position modulo
Definition: DynaTypes.h:103
void InitCfg()
Initialize servo configuration data.
#define DYNA_EX106P_SPEC_GEAR_RATIO
gear reduction ratio : 1
Definition: EX.h:90
virtual int Write8(int nServoId, uint_t uAddr, byte_t byVal)=0
Write an 8-bit value to Dynamixel servo control table.
virtual int Write16(int nServoId, uint_t uAddr, ushort_t uhVal)=0
Write a 16-bit value to Dynamixel servo control table.
#define DYNA_EX106P_DRIVE_MODE_MS_MASTER
dual joint master
Definition: EX.h:237
Servo Control Table Entry.
Definition: DynaTypes.h:369
#define DYNA_EX106P_SPEC_HAS_360_POS
servo does provide 360 &deg; position data
Definition: EX.h:107
double m_fResolution
resolution (degrees)
Definition: DynaTypes.h:88
#define DYNA_EX106P_CURRENT_RES_M_AMP
10mA resolution
Definition: EX.h:303
#define DYNA_TORQUE_MIN_RAW
minimum raw torque
Definition: Dynamixel.h:281
#define DYNA_EX106P_SPEC_ANGLE_MIN_DEG
minimum rotation angle in servo mode (deg)
Definition: EX.h:98
uint_t m_uRawTorqueMin
minimum raw torque value
Definition: DynaTypes.h:106
#define DYNA_EX106P_CURRENT_M_AMP(val)
Current(mA) / 10.
Definition: EX.h:315
virtual int CfgWriteDriveMode(bool bIsMaster, bool bIsNormal)
Write to the servo configuration EEPROM the new drive mode.
#define DYNA_EX106P_SPEC_VOLT_MAX_V
maximum operational voltage (V)
Definition: EX.h:119
#define DYNA_EX106P_SPEC_STALL_TORQUE_KGF
maximum stall torque (kgf) at optimal power
Definition: EX.h:92
The libDynamixel internal declarations.
virtual int SyncState()
Synchronize the shadowed state data to the servo control table RAM state.
char * m_sModelName
model name
Definition: DynaTypes.h:83
Generic Dynamixel Servo Base Class.
uint_t m_uRawTempMin
minimum raw temperature value
Definition: DynaTypes.h:108
double m_fTempMin
minimum operational temperature (C)
Definition: DynaTypes.h:96
void InitCfg()
Initialize servo configuration data.
#define DYNA_EX106P_SPEC_ANGLE_MAX_DEG
maximum rotation angle in servo mode (deg)
Definition: EX.h:101
uint_t m_uRawTorqueMax
maximum raw torque value
Definition: DynaTypes.h:107
#define DYNA_EX106P_POS_MIN_RAW
minimum raw angular position
Definition: EX.h:150
void InitState()
Initialize servo state data.
#define DYNA_TEMP_MAX_RAW
maximum raw temperature
Definition: Dynamixel.h:296
#define DYNA_EX106P_POS_MAX_RAW
maximum raw angular position
Definition: EX.h:151
int UnpackDriveMode(uint_t uVal, bool *pIsMaster, bool *pIsNormal)
Unpack drive mode.
static const int DYNA_MODEL_NUM
void Init(int nServoId, uint_t uModelNum, uint_t uFwVer)
Initialize servo class instance.
Definition: DynaServo.cxx:406
CrossLink_T m_link
servo cross linkage
Definition: DynaServo.h:840
DynaEX106PStateExt_T m_stateExt
state extension data
RoadNarrows Dynamixel Archetype Servo Abstract Base Class.
virtual void CheckData()
Check data for consitencies.
#define DYNA_VOLT_MIN_RAW
minimum raw temperature
Definition: Dynamixel.h:308
virtual int ReadSensedCurrent(uint_t *pMilliAmps, uint_t *pTorqueDir)
Read from the servo configuration EEPROM the sensed current data.
#define DYNA_DIR_NONE
no direction
Definition: Dynamixel.h:192
int m_nServoId
servo id
Definition: DynaServo.h:836
virtual int SyncCfg()
Synchronize the shadowed configuration to the servo control table EEPROM configuration.
double m_fTempMax
maximum operational temperature (C)
Definition: DynaTypes.h:97
virtual int SyncData()
Synchronize the shadowed configuration and state data to the servo control table. ...
RoadNarrows Dynamixel Top-Level Package Header File.
EX-106+ Dynamixel Servo Class Interface.
virtual uint_t GetServoId() const
Get servo id.
Definition: DynaServo.h:155
virtual int Read(uint_t uAddr, uint_t *pVal)
virtual int Write(uint_t uAddr, uint_t uVal)
DynaComm & m_comm
attached Dynamixel bus comm. object
Definition: DynaServo.h:835
#define DYNA_EX106P_ADDR_CURRENT_LSB
sensed current draw (lsb)
Definition: EX.h:298
uint_t m_uRawPosMax
maximum raw position value (servo mode)
Definition: DynaTypes.h:102
virtual ~DynaServoEX106P()
Destructor.
DynaServoSpec_T m_spec
servo specification
Definition: DynaServo.h:837
void InitState()
Initialize servo state data.
uint_t PackDriveMode(bool bIsMaster, bool bIsNormal)
Pack drive mode.
#define DYNA_EX106P_DRIVE_MODE_NR_NORM
dual joint normal rotation
Definition: EX.h:239
#define DYNA_EX106P_CURRENT_TORQUE_DIR(val)
Torque direction.
Definition: EX.h:322
#define DYNA_EX106P_ADDR_DRIVE_MODE
EEPROM drive mode (RW)
Definition: EX.h:233
virtual void Dump()
Dump contents of the servo EEPROM and RAM control tables.
virtual int Read(uint_t uAddr, uint_t *pVal)
uint_t m_uRawTempMax
maximum raw temperature value
Definition: DynaTypes.h:109
double m_fStallTorque
max stall torque (kgf) at optimal power
Definition: DynaTypes.h:90
int UnpackSensedCurrent(uint_t uVal, uint_t *pMilliAmps, uint_t *pTorqueDir)
Unpack sensed current.
#define DYNA_SPEED_MAX_RAW
maximum raw value
Definition: Dynamixel.h:266
#define DYNA_EX106P_SPEC_TEMP_MIN_C
minimum recommended operational temperature (C)
Definition: EX.h:110
virtual int Write(uint_t uAddr, uint_t uVal)
#define DYNA_ECODE_BAD_VAL
bad value
Definition: Dynamixel.h:85
#define DYNA_EX106P_SPEC_POS_RES_DEG
resolution (degrees)
Definition: EX.h:89
virtual int SyncCfg()
Synchronize the shadowed configuration to the servo control table EEPROM configuration.
double m_fWidth
width (mm)
Definition: DynaTypes.h:85
bool m_bDriveModeIsMaster
master (slave) servo
uint_t m_uSensedCurrentMilliAmps
sensed current milli-amperes
double m_fAngleMax
max rotation angle in servo mode (deg)
Definition: DynaTypes.h:93
bool m_bDriveModeIsNormal
normal (reverse) rotation to each other
bool m_bHas360Pos
does [not] have full 360 position info
Definition: DynaTypes.h:95
#define DYNA_EX106P_SPEC_DEPTH_MM
depth (mm)
Definition: EX.h:87
uint_t m_uRawVoltMax
maximum raw voltage value
Definition: DynaTypes.h:111
RoadNarrows Dynamixel Library Error and Logging Routines.
virtual int SyncState()
Synchronize the shadowed state data to the servo control table RAM state.
Dynamixel Bus Communications Abstract Base Class.
Definition: DynaComm.h:80
#define DYNA_TRY_COMM(comm)
Test if bus communication is available exception macro.