49 #ifndef _DYNA_LIB_INTERNAL_H 50 #define _DYNA_LIB_INTERNAL_H 54 #include "rnr/rnrconfig.h" 73 #define DYNA_LOG_ERROR(ecode, efmt, ...) \ 74 LOGERROR("%s(ecode=%d): " efmt, \ 75 DynaStrError(ecode), (ecode>=0? ecode: -ecode), \ 85 #define DYNA_LOG_SYS_ERROR(ecode, efmt, ...) \ 86 LOGSYSERROR("%s(ecode=%d): " efmt, \ 87 DynaStrError(ecode), (ecode>=0? ecode: -ecode), \ 97 #define DYNA_LOG_COMM_ERROR(estat, efmt, ...) \ 98 LOGERROR("%s(ecode=%d): %s(%d): " efmt, \ 99 DynaStrError(DYNA_ECODE_ECOMM), DYNA_ECODE_ECOMM, \ 100 dynaCommStatString(estat), estat, \ 112 #define DYNA_LOG_BUF(sPreface, buf, uCount, sFmt) \ 115 if( LOGABLE(LOG_LEVEL_DIAG3) ) \ 117 DynaLogBuf(sPreface, buf, uCount, sFmt); \ 121 #define DYNA_LOG_BUF(sPreface, buf, uCount, sFmt) 131 #define DYNA_LOG_SERVO_ALARMS(id, alarms) \ 134 if( LOGABLE(LOG_LEVEL_DIAG3) && ((alarms) != DYNA_ALARM_NONE) ) \ 136 DynaLogServoAlarms(id, alarms); \ 140 #define DYNA_LOG_SERVO_ALARMS(id, alarms) 152 #define DYNA_TRY_RC(rc, fmt, ...) \ 157 DYNA_LOG_ERROR(rc, fmt, ##__VA_ARGS__); \ 171 #define DYNA_TRY_COMM(comm) \ 174 if( !(comm).IsOpen() ) \ 176 DYNA_LOG_ERROR(DYNA_ECODE_BADF, "Communication not open."); \ 177 return -DYNA_ECODE_BADF; \ 190 #define DYNA_TRY_SERVO_ID(id) \ 193 if( ((int)(id) < DYNA_ID_MIN) || ((int)(id) > DYNA_ID_MAX) ) \ 195 DYNA_LOG_ERROR(DYNA_ECODE_BAD_VAL, "Servo id %d: Out-of-range.", \ 197 return -DYNA_ECODE_BAD_VAL; \ 210 #define DYNA_TRY_IS_MASTER(pservo) \ 213 if( !((pservo)->IsMaster()) ) \ 215 DYNA_LOG_ERROR(DYNA_ECODE_SLAVE, \ 216 "Servo %d: Not a master servo.", \ 217 (pservo)->m_nServoId); \ 218 return -DYNA_ECODE_SLAVE; \ 231 #define DYNA_TRY_IS_UNLINKED(pservo) \ 234 if( !((pservo)->IsUnlinked()) ) \ 236 DYNA_LOG_ERROR(DYNA_ECODE_LINKED, \ 237 "Servo %d: Operation not supported: Linked with servo %d.", \ 238 (pservo)->m_nServoId, (pservo)->m_link.m_pServoMate->GetServoId()); \ 239 return -DYNA_ECODE_LINKED; \ 253 #define DYNA_TRY_SERVO_HAS_MODE(pservo, mode) \ 256 if( !((pservo)->m_spec.m_uSupportedModes & (mode)) ) \ 258 DYNA_LOG_ERROR(DYNA_ECODE_NOT_SUPP, \ 259 "Servo %d: Required %s mode not supported.",\ 260 (pservo)->m_nServoId, \ 261 (((mode)&DYNA_MODE_CONTINUOUS)? "continuous": "servo")); \ 262 return -DYNA_ECODE_NOT_SUPP; \ 276 #define DYNA_TRY_SERVO_IN_MODE(pservo, mode) \ 279 if( ((pservo)->m_cfg.m_uServoMode != (mode)) ) \ 281 DYNA_LOG_ERROR(DYNA_ECODE_NOT_SUPP, \ 282 "Servo %d: Not in required %s mode.",\ 283 (pservo)->m_nServoId, \ 284 (((mode)&DYNA_MODE_CONTINUOUS)? "continuous": "servo")); \ 285 return -DYNA_ECODE_NOT_SUPP; \ 303 #define DYNA_TRY_SERVO_HAS_POS_CTL(pservo) \ 306 if( ((pservo)->m_cfg.m_uServoMode != DYNA_MODE_SERVO) && \ 307 !(pservo)->m_spec.m_bHas360Pos ) \ 309 DYNA_LOG_ERROR(DYNA_ECODE_NOT_SUPP, \ 310 "Servo %d: Does not support position control.", \ 311 (pservo)->m_nServoId); \ 312 return -DYNA_ECODE_NOT_SUPP; \ 328 #define DYNA_TRY_SERVO_HAS_AGENT(pservo) \ 331 if( (pservo)->m_pAgent == NULL ) \ 333 DYNA_LOG_ERROR(DYNA_ECODE_NOT_SUPP, \ 334 "Servo %d: No servo proxy agent.", \ 335 (pservo)->m_nServoId); \ 336 return -DYNA_ECODE_NOT_SUPP; \ 349 #define DYNA_TRY_ADDR(addr) \ 352 if( !( (((int)(addr) >= DYNA_EEPROM_MIN_ADDR) && \ 353 ((int)(addr) <= DYNA_EEPROM_MAX_ADDR)) || \ 354 (((int)(addr) >= DYNA_RAM_MIN_ADDR) && \ 355 ((int)(addr) <= DYNA_RAM_MAX_ADDR)) ) ) \ 357 DYNA_LOG_ERROR(DYNA_ECODE_BAD_VAL, \ 358 "Control table address 0x%02x: Out of range.", (int)(addr)); \ 359 return -DYNA_ECODE_BAD_VAL; \ 373 #define DYNA_TRY_SERVO_IN_CHAIN(pchain, id) \ 376 if( ((int)(id) < DYNA_ID_MIN) || ((int)(id) > DYNA_ID_MAX) ) \ 378 DYNA_LOG_ERROR(DYNA_ECODE_BAD_VAL, "Servo %d: Id out of range.", \ 380 return -DYNA_ECODE_BAD_VAL; \ 382 else if( (pchain)->m_pChain[(id)] == NULL ) \ 384 DYNA_LOG_ERROR(DYNA_ECODE_NO_SERVO, "Servor %d: No servo in chain.", \ 386 return -DYNA_ECODE_NO_SERVO; \ 401 #define DYNA_TRY_EXPR(expr, ecode, efmt, ...) \ 406 DYNA_LOG_ERROR(ecode, "%s: " efmt, #expr, ##__VA_ARGS__); \ 407 return (ecode > 0) ? -(ecode) : ecode; \ 435 if( (s != NULL) && (*s != 0) )
437 t =
new char[strlen(s)+1];
462 #endif // _DYNA_LIB_INTERNAL_H char * newstr(const char *s)
Allocate new duplicated string.
int DynaMapDxlToEcode(int nDxlError)
Map DXL library error code to Dynamixel error code.
RoadNarrows Dynamixel Top-Level Package Header File.
RoadNarrows Dynamixel Library Error and Logging Routines.