Dynamixel  2.9.5
RoadNarrows Robotics Dynamixel Package
bsDyna.h File Reference

bsProxy client library Dynamixel interface. More...

#include "rnr/rnrconfig.h"
#include "botsense/BotSense.h"
#include "botsense/libBotSense.h"
#include "Dynamixel/Dynamixel.h"
#include "Dynamixel/DynaTypes.h"

Go to the source code of this file.

Macros

#define BS_DYNA_SERVER_MOD   "libbsserver_dyna"
 server plugin dll module
 
#define BS_DYNA_CLIENT_LIB   "libbsclient_dyna"
 client app library
 

Functions

const char * bsDynaGetMsgName (BsClient_P pBsClient, BsVConnHnd_T hndVConn, uint_t uMsgId)
 Get the Dynamixel message name. More...
 
int bsDynaOpen (BsClient_P pBsClient, const char *sDevName, int nBaudRate, bool_t bInitTrace)
 Request proxy server to establish a virtual connection to the Dynamixel servo chain using the USB2Dynamixel serial dongle. More...
 
int bsDynaClose (BsClient_P pBsClient, BsVConnHnd_T hndBsVConn)
 Request proxy server to close client's proxied Dynamixel servo chain vitual connection. More...
 
int bsDynaSetBaudRate (BsClient_P pBsClient, BsVConnHnd_T hndBsVConn, int nBaudRate)
 Proxied request to set the Dynamixel Bus baud rate. More...
 
int bsDynaRead8 (BsClient_P pBsClient, BsVConnHnd_T hndBsVConn, int nServoId, uint_t uAddr, byte_t *pVal, uint_t *pAlarms)
 Proxied request to read an 8-bit value from a servo's control table. More...
 
int bsDynaWrite8 (BsClient_P pBsClient, BsVConnHnd_T hndBsVConn, int nServoId, uint_t uAddr, byte_t byVal, uint_t *pAlarms)
 Proxied request to write an 8-bit value to a servo's control table. More...
 
int bsDynaRead16 (BsClient_P pBsClient, BsVConnHnd_T hndBsVConn, int nServoId, uint_t uAddr, ushort_t *pVal, uint_t *pAlarms)
 Proxied request to read a 16-bit value from a servo's control table. More...
 
int bsDynaWrite16 (BsClient_P pBsClient, BsVConnHnd_T hndBsVConn, int nServoId, uint_t uAddr, ushort_t huVal, uint_t *pAlarms)
 Proxied request to write a 16-bit value to a servo's control table. More...
 
int bsDynaSyncWrite (BsClient_P pBsClient, BsVConnHnd_T hndBsVConn, uint_t uAddr, uint_t uDataSize, DynaSyncWriteTuple_T tuples[], uint_t uCount)
 Proxied request to synchronously write values to servos. More...
 
int bsDynaPing (BsClient_P pBsClient, BsVConnHnd_T hndBsVConn, int nServoId, bool_t *pPong)
 Proxied request to ping a servo. More...
 
int bsDynaReset (BsClient_P pBsClient, BsVConnHnd_T hndBsVConn, int nServoId)
 Proxied request to reset a servo to defaults. More...
 
int bsDynaSetHalfDuplexCtl (BsClient_P pClient, BsVConnHnd_T hndVConn, int nSignal)
 Proxied request to set the half-duplex control signal. More...
 

Detailed Description

bsProxy client library Dynamixel interface.

LastChangedDate
2015-01-12 10:56:06 -0700 (Mon, 12 Jan 2015)
Rev
3845
Author
Robin Knight (robin.nosp@m..kni.nosp@m.ght@r.nosp@m.oadn.nosp@m.arrow.nosp@m.s.co.nosp@m.m)

Definition in file bsDyna.h.

Function Documentation

int bsDynaClose ( BsClient_P  pBsClient,
BsVConnHnd_T  hndBsVConn 
)

Request proxy server to close client's proxied Dynamixel servo chain vitual connection.

Parameters
pClientclient.
hndVConnHandle to virtual connection to close.

Definition at line 143 of file bsDynaClient.cxx.

144 {
145  return bsServerReqCloseDev(pClient, hndVConn);
146 }
const char* bsDynaGetMsgName ( BsClient_P  pBsClient,
BsVConnHnd_T  hndVConn,
uint_t  uMsgId 
)

Get the Dynamixel message name.

Each (virtual connection, message id) 2-tuple provides a unique server mapping that can be used associate a name string to the message (provided the id is valid and an application provides the information).

Parameters
pClientclient.
hndVConnVirtual connection handle.
uMsgIdMessage id.
Returns
Returns message name if it can be determined. Otherwise returns "unknown".

Definition at line 89 of file bsDynaClient.cxx.

References BsDynaLookupMsgDef().

92 {
93  const NMMsgDef_T *pMsgDef;
94 
95  pMsgDef = BsDynaLookupMsgDef((BsDynaMsgId_T)uMsgId);
96 
97  return pMsgDef!=NULL? pMsgDef->m_sMsgName: "unknown";
98 }
const NMMsgDef_T * BsDynaLookupMsgDef(BsDynaMsgId_T eMsgId)
Look up the message definition associated with the message id.
Definition: bsDynaMsgs.c:943
BsDynaMsgId_T
Definition: bsDynaMsgs.h:36
int bsDynaOpen ( BsClient_P  pBsClient,
const char *  sDevName,
int  nBaudRate,
bool_t  bInitTrace 
)

Request proxy server to establish a virtual connection to the Dynamixel servo chain using the USB2Dynamixel serial dongle.

Parameters
pClientclient.
sDevNameProxied USB serial device name (e.g. /dev/ttyUSB0).
nBaudRateBaud rate.
bInitTraceInitial message tracing enable(true)/disable(false) state.
Returns
On success, the virtual connection handle is returned.

Definition at line 100 of file bsDynaClient.cxx.

References BS_DYNA_SERVER_MOD, bsDynaAppInfo, BsDynaMsgIdReqOpenArgs, BsDynaPackReqOpenArgs(), and BsDynaReqOpenArgs_T::m_baudrate.

104 {
105  static BsDynaMsgId_T msgIdReq = BsDynaMsgIdReqOpenArgs;
106 
107  BsDynaReqOpenArgs_T msgReq; // specific open args
108  byte_t buf[BSPROXY_MSG_MAX_LEN]; // specific open args buffer
109  bool_t bTrace; // do [not] trace messages
110  int n; // num of bytes/return code
111 
112  // trace state
113  bTrace = bsClientAttrGetTraceState(pClient, BSPROXY_VCONN_SERVER);
114 
115  //
116  // Set specific open argument values.
117  //
118  msgReq.m_baudrate = (uint_t)nBaudRate;
119 
120  //
121  // Pack specific open arguments (returns bytes packed \h_ge 0 on success).
122  //
123  n = BsDynaPackReqOpenArgs(&msgReq, buf, sizeof(buf), bTrace);
124 
125  // check packing return code
126  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdReq);
127 
128 
129  //
130  // Execute server transaction (returns handle \h_ge 0 on success).
131  //
132  n = bsServerReqOpenDev(pClient, sDevName, BS_DYNA_SERVER_MOD, buf, (size_t)n,
133  &bsDynaAppInfo, bInitTrace);
134 
135  // check transaction return code
136  BSCLIENT_TRY_ECODE(pClient, n, "bsServerReqOpenDev(dev='%s') failed.",
137  sDevName);
138 
139  // return handle
140  return n;
141 }
INLINE_IN_H int BsDynaPackReqOpenArgs(BsDynaReqOpenArgs_T *pStruct, byte_t buf[], size_t bufSize, bool_t bTrace)
Pack a BsDynaReqOpenArgs ITV message in big-endian byte order into the output buffer.
Definition: bsDynaMsgs.h:347
static BsClientAppInfo_T bsDynaAppInfo
client application information.
ReqOpenArgs.
Definition: bsDynaMsgs.h:39
uint_t m_baudrate
baudrate
Definition: bsDynaMsgs.h:91
BsDynaMsgId_T
Definition: bsDynaMsgs.h:36
#define BS_DYNA_SERVER_MOD
server plugin dll module
Definition: bsDyna.h:64
int bsDynaPing ( BsClient_P  pBsClient,
BsVConnHnd_T  hndBsVConn,
int  nServoId,
bool_t *  pPong 
)

Proxied request to ping a servo.

Parameters
pClientclient.
hndVConnHandle to virtual connection to close.
nServoIdServo id.
Returns
Returns true if the servo responded, else false.

Definition at line 534 of file bsDynaClient.cxx.

References BsDynaMsgIdReqPing, BsDynaMsgIdRspPing, BsDynaPackReqPing(), BsDynaUnpackRspPing(), BsDynaRspPing_T::m_pong, and BsDynaReqPing_T::m_servo_id.

538 {
539  static BsDynaMsgId_T msgIdReq = BsDynaMsgIdReqPing;
540  static BsDynaMsgId_T msgIdRsp = BsDynaMsgIdRspPing;
541 
542  BsDynaReqPing_T msgReq; // response message
543  BsDynaRspPing_T msgRsp; // response message
544  byte_t buf[BSPROXY_MSG_MAX_LEN]; // req/rsp buffer
545  bool_t bTrace; // do [not] trace messages
546  int n; // num of bytes/return code
547 
548  //
549  // Parameter checks.
550  //
551  BSCLIENT_TRY_EXPR(pClient, BSCLIENT_HAS_VCONN(pClient, hndVConn),
552  BS_ECODE_BAD_VAL, "VConn=%d", hndVConn);
553 
554  // trace state
555  bTrace = bsClientAttrGetTraceState(pClient, hndVConn);
556 
557  //
558  // Set request message values.
559  //
560  msgReq.m_servo_id = (byte_t)nServoId;
561 
562  //
563  // Pack request.
564  //
565  n = BsDynaPackReqPing(&msgReq, BSPROXY_BUF_BODY(buf), bTrace);
566 
567  // check packing return code
568  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdReq);
569 
570  //
571  // Execute request-response transaction.
572  //
573  n = bsClientTrans(pClient, hndVConn,
574  msgIdReq, buf, (size_t)n,
575  msgIdRsp, buf, sizeof(buf));
576 
577  // check transaction return code
578  BSCLIENT_TRY_ECODE(pClient, n, "MsgId=%u: Transaction failed.", msgIdReq);
579 
580  //
581  // Unpack response.
582  //
583  n = BsDynaUnpackRspPing(buf, (size_t)n, &msgRsp, bTrace);
584 
585  // check unpack return code
586  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdRsp);
587 
588  *pPong = msgRsp.m_pong? true: false;
589 
590  return BS_OK;
591 }
bool_t m_pong
pong
Definition: bsDynaMsgs.h:266
byte_t m_servo_id
servo_id
Definition: bsDynaMsgs.h:253
INLINE_IN_H int BsDynaPackReqPing(BsDynaReqPing_T *pStruct, byte_t buf[], size_t bufSize, bool_t bTrace)
Pack a BsDynaReqPing ITV message in big-endian byte order into the output buffer. ...
Definition: bsDynaMsgs.h:820
BsDynaMsgId_T
Definition: bsDynaMsgs.h:36
INLINE_IN_H int BsDynaUnpackRspPing(byte_t buf[], size_t uMsgLen, BsDynaRspPing_T *pStruct, bool_t bTrace)
Unpack a BsDynaRspPing ITV message in big-endian byte order from the input buffer.
Definition: bsDynaMsgs.h:884
int bsDynaRead16 ( BsClient_P  pBsClient,
BsVConnHnd_T  hndBsVConn,
int  nServoId,
uint_t  uAddr,
ushort_t *  pVal,
uint_t *  pAlarms 
)

Proxied request to read a 16-bit value from a servo's control table.

Parameters
pClientclient.
hndVConnHandle to virtual connection to close.
nServoIdServo id.
uAddrControl table address.
[out]pValValue read.
[out]pAlarmsCurrent servo alarms, if any.

Definition at line 266 of file bsDynaClient.cxx.

References BsDynaMsgIdReqRead16, BsDynaMsgIdRspRead16, BsDynaPackReqRead16(), BsDynaUnpackRspRead16(), BsDynaReqRead16_T::m_addr, BsDynaRspRead16_T::m_alarms, BsDynaReqRead16_T::m_servo_id, and BsDynaRspRead16_T::m_val.

272 {
273  static BsDynaMsgId_T msgIdReq = BsDynaMsgIdReqRead16;
274  static BsDynaMsgId_T msgIdRsp = BsDynaMsgIdRspRead16;
275 
276  BsDynaReqRead16_T msgReq; // response message
277  BsDynaRspRead16_T msgRsp; // response message
278  byte_t buf[BSPROXY_MSG_MAX_LEN]; // req/rsp buffer
279  bool_t bTrace; // do [not] trace messages
280  int n; // num of bytes/return code
281 
282  //
283  // Parameter checks.
284  //
285  BSCLIENT_TRY_EXPR(pClient, BSCLIENT_HAS_VCONN(pClient, hndVConn),
286  BS_ECODE_BAD_VAL, "VConn=%d", hndVConn);
287 
288  // trace state
289  bTrace = bsClientAttrGetTraceState(pClient, hndVConn);
290 
291  //
292  // Set request message values.
293  //
294  msgReq.m_servo_id = (byte_t)nServoId;
295  msgReq.m_addr = (byte_t)uAddr;
296 
297  //
298  // Pack request.
299  //
300  n = BsDynaPackReqRead16(&msgReq, BSPROXY_BUF_BODY(buf), bTrace);
301 
302  // check packing return code
303  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdReq);
304 
305  //
306  // Execute request-response transaction.
307  //
308  n = bsClientTrans(pClient, hndVConn,
309  msgIdReq, buf, (size_t)n,
310  msgIdRsp, buf, sizeof(buf));
311 
312  // check transaction return code
313  BSCLIENT_TRY_ECODE(pClient, n, "MsgId=%u: Transaction failed.", msgIdReq);
314 
315  //
316  // Unpack response.
317  //
318  n = BsDynaUnpackRspRead16(buf, (size_t)n, &msgRsp, bTrace);
319 
320  // check unpack return code
321  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdRsp);
322 
323  //
324  // Set return values from response.
325  //
326  *pAlarms = (uint_t)msgRsp.m_alarms;
327  *pVal = msgRsp.m_val;
328 
329  LOGDIAG3("%s: Read16: 0x%02x --> 0x%04x.",
330  bsClientAttrGetName(pClient), uAddr, *pVal);
331 
332  return BS_OK;
333 }
ushort_t m_val
val
Definition: bsDynaMsgs.h:160
BsDynaMsgId_T
Definition: bsDynaMsgs.h:36
byte_t m_alarms
alarms
Definition: bsDynaMsgs.h:159
INLINE_IN_H int BsDynaUnpackRspRead16(byte_t buf[], size_t uMsgLen, BsDynaRspRead16_T *pStruct, bool_t bTrace)
Unpack a BsDynaRspRead16 ITV message in big-endian byte order from the input buffer.
Definition: bsDynaMsgs.h:583
INLINE_IN_H int BsDynaPackReqRead16(BsDynaReqRead16_T *pStruct, byte_t buf[], size_t bufSize, bool_t bTrace)
Pack a BsDynaReqRead16 ITV message in big-endian byte order into the output buffer.
Definition: bsDynaMsgs.h:519
byte_t m_addr
addr
Definition: bsDynaMsgs.h:146
byte_t m_servo_id
servo_id
Definition: bsDynaMsgs.h:145
int bsDynaRead8 ( BsClient_P  pBsClient,
BsVConnHnd_T  hndBsVConn,
int  nServoId,
uint_t  uAddr,
byte_t *  pVal,
uint_t *  pAlarms 
)

Proxied request to read an 8-bit value from a servo's control table.

Parameters
pClientclient.
hndVConnHandle to virtual connection to close.
nServoIdServo id.
uAddrControl table address.
[out]pValValue read.
[out]pAlarmsCurrent servo alarms, if any.

Definition at line 197 of file bsDynaClient.cxx.

References BsDynaMsgIdReqRead8, BsDynaMsgIdRspRead8, BsDynaPackReqRead8(), BsDynaUnpackRspRead8(), BsDynaReqRead8_T::m_addr, BsDynaRspRead8_T::m_alarms, BsDynaReqRead8_T::m_servo_id, and BsDynaRspRead8_T::m_val.

203 {
204  static BsDynaMsgId_T msgIdReq = BsDynaMsgIdReqRead8;
205  static BsDynaMsgId_T msgIdRsp = BsDynaMsgIdRspRead8;
206 
207  BsDynaReqRead8_T msgReq; // response message
208  BsDynaRspRead8_T msgRsp; // response message
209  byte_t buf[BSPROXY_MSG_MAX_LEN]; // req/rsp buffer
210  bool_t bTrace; // do [not] trace messages
211  int n; // num of bytes/return code
212 
213  //
214  // Parameter checks.
215  //
216  BSCLIENT_TRY_EXPR(pClient, BSCLIENT_HAS_VCONN(pClient, hndVConn),
217  BS_ECODE_BAD_VAL, "VConn=%d", hndVConn);
218 
219  // trace state
220  bTrace = bsClientAttrGetTraceState(pClient, hndVConn);
221 
222  //
223  // Set request message values.
224  //
225  msgReq.m_servo_id = (byte_t)nServoId;
226  msgReq.m_addr = (byte_t)uAddr;
227 
228  //
229  // Pack request.
230  //
231  n = BsDynaPackReqRead8(&msgReq, BSPROXY_BUF_BODY(buf), bTrace);
232 
233  // check packing return code
234  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdReq);
235 
236  //
237  // Execute request-response transaction.
238  //
239  n = bsClientTrans(pClient, hndVConn,
240  msgIdReq, buf, (size_t)n,
241  msgIdRsp, buf, sizeof(buf));
242 
243  // check transaction return code
244  BSCLIENT_TRY_ECODE(pClient, n, "MsgId=%u: Transaction failed.", msgIdReq);
245 
246  //
247  // Unpack response.
248  //
249  n = BsDynaUnpackRspRead8(buf, (size_t)n, &msgRsp, bTrace);
250 
251  // check unpack return code
252  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdRsp);
253 
254  //
255  // Set return values from response.
256  //
257  *pAlarms = (uint_t)msgRsp.m_alarms;
258  *pVal = msgRsp.m_val;
259 
260  LOGDIAG3("%s: Read8: 0x%02x --> 0x%02x.",
261  bsClientAttrGetName(pClient), uAddr, *pVal);
262 
263  return BS_OK;
264 }
byte_t m_addr
addr
Definition: bsDynaMsgs.h:118
INLINE_IN_H int BsDynaUnpackRspRead8(byte_t buf[], size_t uMsgLen, BsDynaRspRead8_T *pStruct, bool_t bTrace)
Unpack a BsDynaRspRead8 ITV message in big-endian byte order from the input buffer.
Definition: bsDynaMsgs.h:497
byte_t m_val
val
Definition: bsDynaMsgs.h:132
INLINE_IN_H int BsDynaPackReqRead8(BsDynaReqRead8_T *pStruct, byte_t buf[], size_t bufSize, bool_t bTrace)
Pack a BsDynaReqRead8 ITV message in big-endian byte order into the output buffer.
Definition: bsDynaMsgs.h:433
byte_t m_servo_id
servo_id
Definition: bsDynaMsgs.h:117
BsDynaMsgId_T
Definition: bsDynaMsgs.h:36
byte_t m_alarms
alarms
Definition: bsDynaMsgs.h:131
int bsDynaReset ( BsClient_P  pBsClient,
BsVConnHnd_T  hndBsVConn,
int  nServoId 
)

Proxied request to reset a servo to defaults.

Parameters
pClientclient.
hndVConnHandle to virtual connection to close.
nServoIdServo id.
Returns
doc_return_bs_std

Definition at line 593 of file bsDynaClient.cxx.

References BsDynaMsgIdReqReset, BsDynaPackReqReset(), and BsDynaReqReset_T::m_servo_id.

596 {
597  static BsDynaMsgId_T msgIdReq = BsDynaMsgIdReqReset;
598  static BsProxyMsgId_T msgIdRsp = BsProxyMsgIdRspOk;
599 
600  BsDynaReqReset_T msgReq; // response message
601  byte_t buf[BSPROXY_MSG_MAX_LEN]; // req/rsp buffer
602  bool_t bTrace; // do [not] trace messages
603  int n; // num of bytes/return code
604 
605  //
606  // Parameter checks.
607  //
608  BSCLIENT_TRY_EXPR(pClient, BSCLIENT_HAS_VCONN(pClient, hndVConn),
609  BS_ECODE_BAD_VAL, "VConn=%d", hndVConn);
610 
611  // trace state
612  bTrace = bsClientAttrGetTraceState(pClient, hndVConn);
613 
614  //
615  // Set request message values.
616  //
617  msgReq.m_servo_id = (byte_t)nServoId;
618 
619  //
620  // Pack request.
621  //
622  n = BsDynaPackReqReset(&msgReq, BSPROXY_BUF_BODY(buf), bTrace);
623 
624  // check packing return code
625  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdReq);
626 
627  //
628  // Execute request-response transaction.
629  //
630  n = bsClientTrans(pClient, hndVConn,
631  msgIdReq, buf, (size_t)n,
632  msgIdRsp, buf, sizeof(buf));
633 
634  // check transaction return code
635  BSCLIENT_TRY_ECODE(pClient, n, "MsgId=%u: Transaction failed.", msgIdReq);
636 
637  return BS_OK;
638 }
INLINE_IN_H int BsDynaPackReqReset(BsDynaReqReset_T *pStruct, byte_t buf[], size_t bufSize, bool_t bTrace)
Pack a BsDynaReqReset ITV message in big-endian byte order into the output buffer.
Definition: bsDynaMsgs.h:906
BsDynaMsgId_T
Definition: bsDynaMsgs.h:36
byte_t m_servo_id
servo_id
Definition: bsDynaMsgs.h:279
int bsDynaSetBaudRate ( BsClient_P  pBsClient,
BsVConnHnd_T  hndBsVConn,
int  nBaudRate 
)

Proxied request to set the Dynamixel Bus baud rate.

Parameters
pClientclient.
hndVConnHandle to virtual connection to close.
nBaudRateNew baud rate.
Returns
doc_return_bs_std

Definition at line 148 of file bsDynaClient.cxx.

References BsDynaMsgIdReqSetBaudRate, BsDynaPackReqSetBaudRate(), and BsDynaReqSetBaudRate_T::m_baudrate.

151 {
152  static BsDynaMsgId_T msgIdReq = BsDynaMsgIdReqSetBaudRate;
153  static BsProxyMsgId_T msgIdRsp = BsProxyMsgIdRspOk;
154 
155  BsDynaReqSetBaudRate_T msgReq; // response message
156  byte_t buf[BSPROXY_MSG_MAX_LEN]; // req/rsp buffer
157  bool_t bTrace; // do [not] trace messages
158  int n; // num of bytes/return code
159 
160  //
161  // Parameter checks.
162  //
163  BSCLIENT_TRY_EXPR(pClient, BSCLIENT_HAS_VCONN(pClient, hndVConn),
164  BS_ECODE_BAD_VAL, "VConn=%d", hndVConn);
165 
166  // trace state
167  bTrace = bsClientAttrGetTraceState(pClient, hndVConn);
168 
169  //
170  // Set request message values.
171  //
172  msgReq.m_baudrate = (uint_t)nBaudRate;
173 
174  //
175  // Pack request.
176  //
177  n = BsDynaPackReqSetBaudRate(&msgReq, BSPROXY_BUF_BODY(buf), bTrace);
178 
179  // check packing return code
180  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdReq);
181 
182  //
183  // Execute request-response transaction.
184  //
185  n = bsClientTrans(pClient, hndVConn,
186  msgIdReq, buf, (size_t)n,
187  msgIdRsp, buf, sizeof(buf));
188 
189  // check transaction return code
190  BSCLIENT_TRY_ECODE(pClient, n, "MsgId=%u: Transaction failed.", msgIdReq);
191 
192  LOGDIAG3("%s: SetBaudRate: %d", bsClientAttrGetName(pClient), nBaudRate);
193 
194  return BS_OK;
195 }
ReqSetBaudRate.
Definition: bsDynaMsgs.h:40
uint_t m_baudrate
baudrate
Definition: bsDynaMsgs.h:104
BsDynaMsgId_T
Definition: bsDynaMsgs.h:36
INLINE_IN_H int BsDynaPackReqSetBaudRate(BsDynaReqSetBaudRate_T *pStruct, byte_t buf[], size_t bufSize, bool_t bTrace)
Pack a BsDynaReqSetBaudRate ITV message in big-endian byte order into the output buffer.
Definition: bsDynaMsgs.h:390
int bsDynaSetHalfDuplexCtl ( BsClient_P  pClient,
BsVConnHnd_T  hndVConn,
int  nSignal 
)

Proxied request to set the half-duplex control signal.

Parameters
pClientclient.
hndVConnHandle to virtual connection to close.
nSignalSignal number.
Returns
doc_return_bs_std

Definition at line 640 of file bsDynaClient.cxx.

References BsDynaMsgIdReqSetHalfDuplexCtl, BsDynaPackReqSetHalfDuplexCtl(), and BsDynaReqSetHalfDuplexCtl_T::m_signal.

643 {
645  static BsProxyMsgId_T msgIdRsp = BsProxyMsgIdRspOk;
646 
647  BsDynaReqSetHalfDuplexCtl_T msgReq; // response message
648  byte_t buf[BSPROXY_MSG_MAX_LEN]; // req/rsp buffer
649  bool_t bTrace; // do [not] trace messages
650  int n; // num of bytes/return code
651 
652  //
653  // Parameter checks.
654  //
655  BSCLIENT_TRY_EXPR(pClient, BSCLIENT_HAS_VCONN(pClient, hndVConn),
656  BS_ECODE_BAD_VAL, "VConn=%d", hndVConn);
657 
658  // trace state
659  bTrace = bsClientAttrGetTraceState(pClient, hndVConn);
660 
661  //
662  // Set request message values.
663  //
664  msgReq.m_signal = (uint_t)nSignal;
665 
666  //
667  // Pack request.
668  //
669  n = BsDynaPackReqSetHalfDuplexCtl(&msgReq, BSPROXY_BUF_BODY(buf), bTrace);
670 
671  // check packing return code
672  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdReq);
673 
674  //
675  // Execute request-response transaction.
676  //
677  n = bsClientTrans(pClient, hndVConn,
678  msgIdReq, buf, (size_t)n,
679  msgIdRsp, buf, sizeof(buf));
680 
681  // check transaction return code
682  BSCLIENT_TRY_ECODE(pClient, n, "MsgId=%u: Transaction failed.", msgIdReq);
683 
684  LOGDIAG3("%s: SetHalfDuplexCtl: %d", bsClientAttrGetName(pClient), nSignal);
685 
686  return BS_OK;
687 }
INLINE_IN_H int BsDynaPackReqSetHalfDuplexCtl(BsDynaReqSetHalfDuplexCtl_T *pStruct, byte_t buf[], size_t bufSize, bool_t bTrace)
Pack a BsDynaReqSetHalfDuplexCtl ITV message in big-endian byte order into the output buffer...
Definition: bsDynaMsgs.h:949
ReqSetHalfDuplexCtl.
Definition: bsDynaMsgs.h:53
BsDynaMsgId_T
Definition: bsDynaMsgs.h:36
int bsDynaSyncWrite ( BsClient_P  pBsClient,
BsVConnHnd_T  hndBsVConn,
uint_t  uAddr,
uint_t  uDataSize,
DynaSyncWriteTuple_T  tuples[],
uint_t  uCount 
)

Proxied request to synchronously write values to servos.

Parameters
pClientclient.
hndVConnHandle to virtual connection to close.
uAddrControl table address.
uDataSizeSize (bytes) of data to write.
tuplesServo Id, Value 2-tuples
uCountNumber of 2-tuples

Definition at line 473 of file bsDynaClient.cxx.

References BsDynaMsgIdReqSyncWrite, BsDynaPackReqSyncWrite(), DYNA_ID_NUMOF, BsDynaReqSyncWrite_T::m_addr, BsDynaReqSyncWrite_T::m_count, BsDynaReqSyncWrite_T::m_data_size, BsDynaReqSyncWrite_T::m_tuples, and BsDynaReqSyncWrite_T::u.

479 {
480  static BsDynaMsgId_T msgIdReq = BsDynaMsgIdReqSyncWrite;
481  static BsProxyMsgId_T msgIdRsp = BsProxyMsgIdRspOk;
482 
483  BsDynaReqSyncWrite_T msgReq; // response message
484  byte_t buf[BSPROXY_MSG_MAX_LEN]; // req/rsp buffer
485  bool_t bTrace; // do [not] trace messages
486  int n; // num of bytes/return code
487 
488  //
489  // Parameter checks.
490  //
491  BSCLIENT_TRY_EXPR(pClient, BSCLIENT_HAS_VCONN(pClient, hndVConn),
492  BS_ECODE_BAD_VAL, "VConn=%d", hndVConn);
493 
494  // trace state
495  bTrace = bsClientAttrGetTraceState(pClient, hndVConn);
496 
497  //
498  // Set request message values.
499  //
500  msgReq.m_addr = (byte_t)uAddr;
501  msgReq.m_data_size = (byte_t)uDataSize;
502 
503  for(n=0; (n<(int)uCount) && (n<DYNA_ID_NUMOF); ++n)
504  {
505  msgReq.m_tuples.u.m_buf[n].m_servo_id = (byte_t)tuples[n].m_nServoId;
506  msgReq.m_tuples.u.m_buf[n].m_val = (ushort_t)tuples[n].m_uVal;
507  }
508  msgReq.m_tuples.m_count = (size_t)n;
509 
510  //
511  // Pack request.
512  //
513  n = BsDynaPackReqSyncWrite(&msgReq, BSPROXY_BUF_BODY(buf), bTrace);
514 
515  // check packing return code
516  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdReq);
517 
518  //
519  // Execute request-response transaction.
520  //
521  n = bsClientTrans(pClient, hndVConn,
522  msgIdReq, buf, (size_t)n,
523  msgIdRsp, buf, sizeof(buf));
524 
525  // check transaction return code
526  BSCLIENT_TRY_ECODE(pClient, n, "MsgId=%u: Transaction failed.", msgIdReq);
527 
528  LOGDIAG3("%s: SyncWrite: %u tuples to 0x%02x",
529  bsClientAttrGetName(pClient), uCount, uAddr);
530 
531  return BS_OK;
532 }
INLINE_IN_H int BsDynaPackReqSyncWrite(BsDynaReqSyncWrite_T *pStruct, byte_t buf[], size_t bufSize, bool_t bTrace)
Pack a BsDynaReqSyncWrite ITV message in big-endian byte order into the output buffer.
Definition: bsDynaMsgs.h:777
byte_t m_data_size
data_size
Definition: bsDynaMsgs.h:230
struct BsDynaReqSyncWrite_T::@0 m_tuples
vector
#define DYNA_ID_NUMOF
number of unique servo id&#39;s
Definition: Dynamixel.h:148
byte_t m_addr
addr
Definition: bsDynaMsgs.h:229
ReqSyncWrite.
Definition: bsDynaMsgs.h:49
size_t m_count
vector item count
Definition: bsDynaMsgs.h:233
BsDynaMsgId_T
Definition: bsDynaMsgs.h:36
union BsDynaReqSyncWrite_T::@0::@1 u
aligned vector items
int bsDynaWrite16 ( BsClient_P  pBsClient,
BsVConnHnd_T  hndBsVConn,
int  nServoId,
uint_t  uAddr,
ushort_t  huVal,
uint_t *  pAlarms 
)

Proxied request to write a 16-bit value to a servo's control table.

Parameters
pClientclient.
hndVConnHandle to virtual connection to close.
nServoIdServo id.
uAddrControl table address.
[in]huValValue to write.
[out]pAlarmsCurrent servo alarms, if any.

Definition at line 404 of file bsDynaClient.cxx.

References BsDynaMsgIdReqWrite16, BsDynaMsgIdRspWrite16, BsDynaPackReqWrite16(), BsDynaUnpackRspWrite16(), BsDynaReqWrite16_T::m_addr, BsDynaRspWrite16_T::m_alarms, BsDynaReqWrite16_T::m_servo_id, and BsDynaReqWrite16_T::m_val.

410 {
411  static BsDynaMsgId_T msgIdReq = BsDynaMsgIdReqWrite16;
412  static BsDynaMsgId_T msgIdRsp = BsDynaMsgIdRspWrite16;
413 
414  BsDynaReqWrite16_T msgReq; // response message
415  BsDynaRspWrite16_T msgRsp; // response message
416  byte_t buf[BSPROXY_MSG_MAX_LEN]; // req/rsp buffer
417  bool_t bTrace; // do [not] trace messages
418  int n; // num of bytes/return code
419 
420  //
421  // Parameter checks.
422  //
423  BSCLIENT_TRY_EXPR(pClient, BSCLIENT_HAS_VCONN(pClient, hndVConn),
424  BS_ECODE_BAD_VAL, "VConn=%d", hndVConn);
425 
426  // trace state
427  bTrace = bsClientAttrGetTraceState(pClient, hndVConn);
428 
429  //
430  // Set request message values.
431  //
432  msgReq.m_servo_id = (byte_t)nServoId;
433  msgReq.m_addr = (byte_t)uAddr;
434  msgReq.m_val = huVal;
435 
436  //
437  // Pack request.
438  //
439  n = BsDynaPackReqWrite16(&msgReq, BSPROXY_BUF_BODY(buf), bTrace);
440 
441  // check packing return code
442  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdReq);
443 
444  //
445  // Execute request-response transaction.
446  //
447  n = bsClientTrans(pClient, hndVConn,
448  msgIdReq, buf, (size_t)n,
449  msgIdRsp, buf, sizeof(buf));
450 
451  // check transaction return code
452  BSCLIENT_TRY_ECODE(pClient, n, "MsgId=%u: Transaction failed.", msgIdReq);
453 
454  //
455  // Unpack response.
456  //
457  n = BsDynaUnpackRspWrite16(buf, (size_t)n, &msgRsp, bTrace);
458 
459  // check unpack return code
460  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdRsp);
461 
462  //
463  // Set return values from response.
464  //
465  *pAlarms = (uint_t)msgRsp.m_alarms;
466 
467  LOGDIAG3("%s: Write16: 0x%02x <-- 0x%04x.",
468  bsClientAttrGetName(pClient), uAddr, huVal);
469 
470  return BS_OK;
471 }
byte_t m_addr
addr
Definition: bsDynaMsgs.h:202
RspWrite16.
Definition: bsDynaMsgs.h:48
byte_t m_servo_id
servo_id
Definition: bsDynaMsgs.h:201
INLINE_IN_H int BsDynaPackReqWrite16(BsDynaReqWrite16_T *pStruct, byte_t buf[], size_t bufSize, bool_t bTrace)
Pack a BsDynaReqWrite16 ITV message in big-endian byte order into the output buffer.
Definition: bsDynaMsgs.h:691
ReqWrite16.
Definition: bsDynaMsgs.h:47
INLINE_IN_H int BsDynaUnpackRspWrite16(byte_t buf[], size_t uMsgLen, BsDynaRspWrite16_T *pStruct, bool_t bTrace)
Unpack a BsDynaRspWrite16 ITV message in big-endian byte order from the input buffer.
Definition: bsDynaMsgs.h:755
BsDynaMsgId_T
Definition: bsDynaMsgs.h:36
byte_t m_alarms
alarms
Definition: bsDynaMsgs.h:216
ushort_t m_val
val
Definition: bsDynaMsgs.h:203
int bsDynaWrite8 ( BsClient_P  pBsClient,
BsVConnHnd_T  hndBsVConn,
int  nServoId,
uint_t  uAddr,
byte_t  byVal,
uint_t *  pAlarms 
)

Proxied request to write an 8-bit value to a servo's control table.

Parameters
pClientclient.
hndVConnHandle to virtual connection to close.
nServoIdServo id.
uAddrControl table address.
[in]byValValue to write.
[out]pAlarmsCurrent servo alarms, if any.

Definition at line 335 of file bsDynaClient.cxx.

References BsDynaMsgIdReqWrite8, BsDynaMsgIdRspWrite8, BsDynaPackReqWrite8(), BsDynaUnpackRspWrite8(), BsDynaReqWrite8_T::m_addr, BsDynaRspWrite8_T::m_alarms, BsDynaReqWrite8_T::m_servo_id, and BsDynaReqWrite8_T::m_val.

341 {
342  static BsDynaMsgId_T msgIdReq = BsDynaMsgIdReqWrite8;
343  static BsDynaMsgId_T msgIdRsp = BsDynaMsgIdRspWrite8;
344 
345  BsDynaReqWrite8_T msgReq; // response message
346  BsDynaRspWrite8_T msgRsp; // response message
347  byte_t buf[BSPROXY_MSG_MAX_LEN]; // req/rsp buffer
348  bool_t bTrace; // do [not] trace messages
349  int n; // num of bytes/return code
350 
351  //
352  // Parameter checks.
353  //
354  BSCLIENT_TRY_EXPR(pClient, BSCLIENT_HAS_VCONN(pClient, hndVConn),
355  BS_ECODE_BAD_VAL, "VConn=%d", hndVConn);
356 
357  // trace state
358  bTrace = bsClientAttrGetTraceState(pClient, hndVConn);
359 
360  //
361  // Set request message values.
362  //
363  msgReq.m_servo_id = (byte_t)nServoId;
364  msgReq.m_addr = (byte_t)uAddr;
365  msgReq.m_val = byVal;
366 
367  //
368  // Pack request.
369  //
370  n = BsDynaPackReqWrite8(&msgReq, BSPROXY_BUF_BODY(buf), bTrace);
371 
372  // check packing return code
373  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdReq);
374 
375  //
376  // Execute request-response transaction.
377  //
378  n = bsClientTrans(pClient, hndVConn,
379  msgIdReq, buf, (size_t)n,
380  msgIdRsp, buf, sizeof(buf));
381 
382  // check transaction return code
383  BSCLIENT_TRY_ECODE(pClient, n, "MsgId=%u: Transaction failed.", msgIdReq);
384 
385  //
386  // Unpack response.
387  //
388  n = BsDynaUnpackRspWrite8(buf, (size_t)n, &msgRsp, bTrace);
389 
390  // check unpack return code
391  BSCLIENT_TRY_NM_ECODE(pClient, n, "MsgId=%u", msgIdRsp);
392 
393  //
394  // Set return values from response.
395  //
396  *pAlarms = (uint_t)msgRsp.m_alarms;
397 
398  LOGDIAG3("%s: Write8: 0x%02x <-- 0x%02x.",
399  bsClientAttrGetName(pClient), uAddr, byVal);
400 
401  return BS_OK;
402 }
INLINE_IN_H int BsDynaPackReqWrite8(BsDynaReqWrite8_T *pStruct, byte_t buf[], size_t bufSize, bool_t bTrace)
Pack a BsDynaReqWrite8 ITV message in big-endian byte order into the output buffer.
Definition: bsDynaMsgs.h:605
INLINE_IN_H int BsDynaUnpackRspWrite8(byte_t buf[], size_t uMsgLen, BsDynaRspWrite8_T *pStruct, bool_t bTrace)
Unpack a BsDynaRspWrite8 ITV message in big-endian byte order from the input buffer.
Definition: bsDynaMsgs.h:669
byte_t m_servo_id
servo_id
Definition: bsDynaMsgs.h:173
byte_t m_addr
addr
Definition: bsDynaMsgs.h:174
byte_t m_alarms
alarms
Definition: bsDynaMsgs.h:188
BsDynaMsgId_T
Definition: bsDynaMsgs.h:36
byte_t m_val
val
Definition: bsDynaMsgs.h:175