Skip to content

Commit 6a000cb

Browse files
committed
Provide REG/CMD macros to hide 'ugly' conversion function 'toVal'.
1 parent f564e9f commit 6a000cb

File tree

2 files changed

+32
-25
lines changed

2 files changed

+32
-25
lines changed

src/lib/motors/SmartServo.cpp

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void SmartServoClass::writeCmd(uint8_t const id, SmartServoOperation const instr
6060
void SmartServoClass::writeByteCmd(uint8_t const id, uint8_t const address, uint8_t const data) {
6161
_txPacket.id = id;
6262
_txPacket.length = 2+2;
63-
_txPacket.instruction = toVal(SmartServoOperation::WRITE);
63+
_txPacket.instruction = CMD(SmartServoOperation::WRITE);
6464
_txPacket.payload[0]=address;
6565
_txPacket.payload[1]=data;
6666
sendPacket();
@@ -69,7 +69,7 @@ void SmartServoClass::writeByteCmd(uint8_t const id, uint8_t const address, uint
6969
void SmartServoClass::writeWordCmd(uint8_t const id, uint8_t const address, uint16_t const data) {
7070
_txPacket.id = id;
7171
_txPacket.length = 2+3;
72-
_txPacket.instruction = toVal(SmartServoOperation::WRITE);
72+
_txPacket.instruction = CMD(SmartServoOperation::WRITE);
7373
_txPacket.payload[0]=address;
7474
_txPacket.payload[1]=data>>8;
7575
_txPacket.payload[2]=data;
@@ -93,7 +93,7 @@ void SmartServoClass::receiveResponse(int const howMany) {
9393
int SmartServoClass::readBuffer(uint8_t const id, uint8_t const address,uint8_t const len) {
9494
_txPacket.id = id;
9595
_txPacket.length = 2+2;
96-
_txPacket.instruction = toVal(SmartServoOperation::READ);
96+
_txPacket.instruction = CMD(SmartServoOperation::READ);
9797
_txPacket.payload[0]=address;
9898
_txPacket.payload[1]=len;
9999
sendPacket();
@@ -171,8 +171,8 @@ int SmartServoClass::begin() {
171171
_txPacket.header[1] = 0xff;
172172
_RS485.begin(115200, 0, 90);
173173
_RS485.receive();
174-
writeByteCmd(BROADCAST, toVal(SmartServoRegister::SERVO_MOTOR_MODE), 1);
175-
writeByteCmd(BROADCAST, toVal(SmartServoRegister::TORQUE_SWITCH) ,1);
174+
writeByteCmd(BROADCAST, REG(SmartServoRegister::SERVO_MOTOR_MODE), 1);
175+
writeByteCmd(BROADCAST, REG(SmartServoRegister::TORQUE_SWITCH) ,1);
176176
_positionMode = PositionMode::IMMEDIATE;
177177
return 0;
178178
} else {
@@ -186,7 +186,7 @@ void SmartServoClass::setPosition(uint8_t const id, float const angle, uint16_t
186186
_targetPosition[id] = angleToPosition(angle);
187187
_targetSpeed[id] = speed;
188188
if (_positionMode==PositionMode::IMMEDIATE) {
189-
writeWordCmd(id, toVal(SmartServoRegister::TARGET_POSITION_H), angleToPosition(angle));
189+
writeWordCmd(id, REG(SmartServoRegister::TARGET_POSITION_H), angleToPosition(angle));
190190
}
191191
}
192192
mutex.unlock();
@@ -196,24 +196,24 @@ float SmartServoClass::getPosition(uint8_t const id) {
196196
mutex.lock();
197197
float ret = -1;
198198
if (id<MAX_MOTORS) {
199-
ret = positionToAngle(readWordCmd(id, toVal(SmartServoRegister::POSITION_H)));
199+
ret = positionToAngle(readWordCmd(id, REG(SmartServoRegister::POSITION_H)));
200200
}
201201
mutex.unlock();
202202
return ret;
203203
}
204204

205205
void SmartServoClass::center(uint8_t const id, uint16_t const position) {
206206
mutex.lock();
207-
writeWordCmd(id, toVal(SmartServoRegister::CENTER_POINT_ADJ_H), position);
207+
writeWordCmd(id, REG(SmartServoRegister::CENTER_POINT_ADJ_H), position);
208208
mutex.unlock();
209209
}
210210

211211
void SmartServoClass::synchronize() {
212212
mutex.lock();
213213
_txPacket.id = 0xFE;
214214
_txPacket.length = (4+1)*MAX_MOTORS +4;
215-
_txPacket.instruction = toVal(SmartServoOperation::SYNC_WRITE);
216-
_txPacket.payload[0] = toVal(SmartServoRegister::TARGET_POSITION_H);
215+
_txPacket.instruction = CMD(SmartServoOperation::SYNC_WRITE);
216+
_txPacket.payload[0] = REG(SmartServoRegister::TARGET_POSITION_H);
217217
_txPacket.payload[1] = 4;
218218
int index = 2;
219219

@@ -230,92 +230,92 @@ void SmartServoClass::synchronize() {
230230

231231
void SmartServoClass::setTorque(bool const torque) {
232232
mutex.lock();
233-
writeByteCmd(BROADCAST, toVal(SmartServoRegister::TORQUE_SWITCH), torque ? 1 : 0);
233+
writeByteCmd(BROADCAST, REG(SmartServoRegister::TORQUE_SWITCH), torque ? 1 : 0);
234234
mutex.unlock();
235235
}
236236

237237
void SmartServoClass::setTorque(uint8_t const id, bool const torque) {
238238
mutex.lock();
239-
writeByteCmd(id, toVal(SmartServoRegister::TORQUE_SWITCH), torque ? 1 : 0);
239+
writeByteCmd(id, REG(SmartServoRegister::TORQUE_SWITCH), torque ? 1 : 0);
240240
mutex.unlock();
241241
}
242242

243243
void SmartServoClass::setTime(uint8_t const id, uint16_t const time) {
244244
mutex.lock();
245-
writeWordCmd(id, toVal(SmartServoRegister::RUN_TIME_H), time);
245+
writeWordCmd(id, REG(SmartServoRegister::RUN_TIME_H), time);
246246
mutex.unlock();
247247
}
248248

249249
void SmartServoClass::setMaxTorque(uint16_t const torque) {
250250
mutex.lock();
251-
writeWordCmd(BROADCAST, toVal(SmartServoRegister::MAX_TORQUE_H), torque);
251+
writeWordCmd(BROADCAST, REG(SmartServoRegister::MAX_TORQUE_H), torque);
252252
mutex.unlock();
253253
}
254254

255255
void SmartServoClass::setMaxTorque(uint8_t const id, uint16_t const torque) {
256256
mutex.lock();
257-
writeWordCmd(id+1, toVal(SmartServoRegister::MAX_TORQUE_H), torque);
257+
writeWordCmd(id+1, REG(SmartServoRegister::MAX_TORQUE_H), torque);
258258
mutex.unlock();
259259
}
260260

261261
void SmartServoClass::setID(uint8_t const id) {
262262
mutex.lock();
263-
writeByteCmd(BROADCAST, toVal(SmartServoRegister::ID), id);
263+
writeByteCmd(BROADCAST, REG(SmartServoRegister::ID), id);
264264
mutex.unlock();
265265
}
266266

267267
void SmartServoClass::engage(uint8_t const id) {
268268
mutex.lock();
269-
writeByteCmd(id, toVal(SmartServoRegister::TORQUE_SWITCH), 0x1);
269+
writeByteCmd(id, REG(SmartServoRegister::TORQUE_SWITCH), 0x1);
270270
mutex.unlock();
271271
}
272272

273273
void SmartServoClass::disengage(uint8_t const id) {
274274
mutex.lock();
275-
writeByteCmd(id, toVal(SmartServoRegister::TORQUE_SWITCH), 0);
275+
writeByteCmd(id, REG(SmartServoRegister::TORQUE_SWITCH), 0);
276276
mutex.unlock();
277277
}
278278

279279
bool SmartServoClass::isEngaged(uint8_t const id) {
280280
mutex.lock();
281-
int ret = readByteCmd(id, toVal(SmartServoRegister::TORQUE_SWITCH));
281+
int ret = readByteCmd(id, REG(SmartServoRegister::TORQUE_SWITCH));
282282
mutex.unlock();
283283
return ret != 0;
284284
}
285285

286286
void SmartServoClass::setStallProtectionTime(uint8_t const time) {
287287
mutex.lock();
288-
writeByteCmd(BROADCAST, toVal(SmartServoRegister::STALL_PROTECTION_TIME), time);
288+
writeByteCmd(BROADCAST, REG(SmartServoRegister::STALL_PROTECTION_TIME), time);
289289
mutex.unlock();
290290
}
291291

292292
void SmartServoClass::setStallProtectionTime(uint8_t const id, uint8_t const time) {
293293
mutex.lock();
294-
writeByteCmd(id, toVal(SmartServoRegister::STALL_PROTECTION_TIME), time);
294+
writeByteCmd(id, REG(SmartServoRegister::STALL_PROTECTION_TIME), time);
295295
mutex.unlock();
296296
}
297297

298298
void SmartServoClass::setMinAngle(float const angle) {
299299
mutex.lock();
300-
writeByteCmd(BROADCAST, toVal(SmartServoRegister::MIN_ANGLE_LIMIT_H), angleToPosition(angle));
300+
writeByteCmd(BROADCAST, REG(SmartServoRegister::MIN_ANGLE_LIMIT_H), angleToPosition(angle));
301301
mutex.unlock();
302302
}
303303

304304
void SmartServoClass::setMinAngle(uint8_t const id, float const angle) {
305305
mutex.lock();
306-
writeByteCmd(id, toVal(SmartServoRegister::MIN_ANGLE_LIMIT_H), angleToPosition(angle));
306+
writeByteCmd(id, REG(SmartServoRegister::MIN_ANGLE_LIMIT_H), angleToPosition(angle));
307307
mutex.unlock();
308308
}
309309

310310
void SmartServoClass::setMaxAngle(float const angle) {
311311
mutex.lock();
312-
writeByteCmd(BROADCAST, toVal(SmartServoRegister::MAX_ANGLE_LIMIT_H), angleToPosition(angle));
312+
writeByteCmd(BROADCAST, REG(SmartServoRegister::MAX_ANGLE_LIMIT_H), angleToPosition(angle));
313313
mutex.unlock();
314314
}
315315

316316
void SmartServoClass::setMaxAngle(uint8_t const id, float const angle) {
317317
mutex.lock();
318-
writeByteCmd(id, toVal(SmartServoRegister::MAX_ANGLE_LIMIT_H), angleToPosition(angle));
318+
writeByteCmd(id, REG(SmartServoRegister::MAX_ANGLE_LIMIT_H), angleToPosition(angle));
319319
mutex.unlock();
320320
}
321321

src/lib/motors/SmartServoConst.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,11 @@ constexpr auto toVal(Enumeration const value) -> typename std::underlying_type<E
9292
return static_cast<typename std::underlying_type<Enumeration>::type>(value);
9393
}
9494

95+
/**************************************************************************************
96+
* MACROS
97+
**************************************************************************************/
98+
99+
#define REG(enum_val) toVal(enum_val)
100+
#define CMD(enum_val) toVal(enum_val)
101+
95102
#endif /* SMART_SERVO_CONST_H_ */

0 commit comments

Comments
 (0)