4 Commits
Author SHA1 Message Date
pgsocks 23a07f99d9 Add robot position push topic 2024-04-25 09:52:58 -05:00
pgsocks 19861ca234 fixup! Integrate new message into robo easy 2024-04-11 13:38:27 -05:00
pgsocks 4d11e5b66f Integrate new message into robo easy 2024-04-11 12:27:09 -05:00
pgsocks 72b9a2ba92 Start adding push message support 2024-04-10 13:49:18 -05:00
5 changed files with 120 additions and 0 deletions
+39
View File
@@ -280,6 +280,42 @@ struct PACKED StreamCtrlResp {
struct Footer footer;
};
struct PACKED AddSubMsgReq {
struct Header header;
uint8_t node_id;
uint8_t msg_id;
uint8_t reserved;
uint8_t sub_mode;
uint8_t subject_count;
uint64_t subject_uuid;
uint16_t freq;
struct Footer footer;
};
struct PACKED AddSubMsgResp {
struct Header header;
uint8_t retcode;
uint8_t pub_node_id;
uint8_t ack_sub_mode;
uint8_t ack_msg_id;
uint16_t ack_err_uid_data;
struct Footer footer;
};
struct PACKED PushPeriodMsg {
struct Header header;
uint8_t sub_mode;
uint8_t msg_id;
union {
struct {
float x;
float y;
float z;
} position;
};
struct Footer footer;
};
union Request {
struct Header header;
struct SetSdkConnectionReq sdkconn;
@@ -295,6 +331,7 @@ union Request {
struct GimbalCtrlSpeedReq gimbspeed;
struct BlasterFireReq blaster;
struct StreamCtrlReq stream;
struct AddSubMsgReq sub;
};
union Response {
struct Header header;
@@ -311,6 +348,8 @@ union Response {
struct GimbalCtrlSpeedResp gimbspeed;
struct BlasterFireResp blaster;
struct StreamCtrlResp stream;
struct AddSubMsgResp sub;
struct PushPeriodMsg push;
};
union Message {
struct Header header;
+31
View File
@@ -108,3 +108,34 @@ subscribe_add_node (
uint16_t seq,
bool ack );
#define ADD_SUB_MSG_CMD 0x0348
#define PUSH_PERIOD_MSG_CMD 0x0848
#define DDS_BATTERY 0x000200096862229f
#define DDS_GIMBAL_BASE 0x00020009f5882874
#define DDS_VELOCITY 0x0002000949a4009c
#define DDS_ESC 0x00020009c14cb7c5
#define DDS_ATTITUDE 0x000200096b986306
#define DDS_IMU 0x00020009a7985b8d
#define DDS_POSITION 0x00020009eeb7cece
#define DDS_SA_STATUS 0x000200094a2c6d55
#define DDS_CHASSIS_MODE 0x000200094fcb1146
#define DDS_SBUS 0x0002000988223568
#define DDS_SERVO 0x000200095f0059e7
#define DDS_ARM 0x0002000926abd64d
#define DDS_GRIPPER 0x00020009124d156a
#define DDS_GIMBAL_POS 0x00020009f79b3c97
#define DDS_STICK 0x0002000955e9a0fa
#define DDS_MOVE_MODE 0x00020009784c7bfd
#define DDS_TOF 0x0002000986e4c05a
#define DDS_PINBOARD 0x00020009eebb9ffc
void
add_sub_msg (
union Request* req,
uint16_t seq,
bool ack,
uint8_t msg_id,
uint8_t freq,
uint64_t subject_uuid );
+3
View File
@@ -41,6 +41,8 @@ message_length(int cmd) {
return sizeof(struct BlasterFireReq);
case STREAM_CTRL_CMD:
return sizeof(struct StreamCtrlReq);
case ADD_SUB_MSG_CMD:
return sizeof(struct AddSubMsgReq);
default:
return 0;
}
@@ -58,6 +60,7 @@ message_module(int cmd) {
case SET_ROBOT_MODE_CMD:
case SUBNODE_RESET_CMD:
case SUBSCRIBE_ADD_NODE_CMD:
case ADD_SUB_MSG_CMD:
return host2byte(SDK_HOST, SDK_INDEX);
case SET_WHEEL_SPEED_CMD:
case CHASSIS_SPEED_MODE_CMD:
+21
View File
@@ -96,3 +96,24 @@ set_system_led (
req_finalize(seq, SET_SYSTEM_LED_CMD, ack, req);
}
void
add_sub_msg (
union Request* req,
uint16_t seq,
bool ack,
uint8_t msg_id,
uint8_t freq,
uint64_t subject_uuid ) {
req->sub.node_id = host2byte(CLIENT_HOST, CLIENT_INDEX);
req->sub.msg_id = msg_id;
req->sub.reserved = 0; // NOTE: Always 0
req->sub.sub_mode = 0; // NOTE: Always 0
req->sub.subject_count = 1; // TODO: Add support for multiple
req->sub.subject_uuid = subject_uuid; // TODO: Add support for multiple
req->sub.freq = freq;
req_finalize(seq, ADD_SUB_MSG_CMD, ack, req);
}
+26
View File
@@ -28,6 +28,8 @@ struct RobotImp {
bool sdk_mode;
float x, y, z;
enum {
CONNECTING_TO_PROXY_PORT,
SETTING_SDK_CONNECTION,
@@ -36,6 +38,7 @@ struct RobotImp {
RESETTING_SUBNODE,
SUSBCRIBING_SUBNODE,
SETTING_MOVEMENT_MODE,
SUBSCRIBING_POSITION_STATUS,
SENDING_HEARTBEAT,
WAITING,
READY,
@@ -170,6 +173,14 @@ robot_work(Robot robot) {
break;
}
case SUBSCRIBING_POSITION_STATUS:
{
add_sub_msg ( &req, robot->seq++, true, 20, 1, DDS_POSITION );
req_send(robot->client->dev_conn, &req);
robot->state = WAITING;
break;
}
case READY:
{
if(robot->dirty_wheels) {
@@ -244,6 +255,8 @@ robot_work(Robot robot) {
switch(resp.header.cmd) {
case 0:
break;
default:
break;
case SET_SDK_CONNECTION_CMD:
// TODO: Do more with this
if(resp.resp.sdkconn.retcode) {
@@ -279,6 +292,13 @@ robot_work(Robot robot) {
robot->state = STOPPED;
break;
}
robot->state = SUBSCRIBING_POSITION_STATUS;
break;
case ADD_SUB_MSG_CMD:
if(resp.resp.sub.retcode) {
robot->state = STOPPED;
break;
}
robot->state = SENDING_HEARTBEAT;
break;
case SDK_HEARTBEAT_CMD:
@@ -288,6 +308,12 @@ robot_work(Robot robot) {
}
robot->state = READY;
break;
case PUSH_PERIOD_MSG_CMD:
// assume it is a position status for now
robot->x = resp.resp.push.position.x;
robot->y = resp.resp.push.position.y;
robot->z = resp.resp.push.position.z;
break;
}
return 1;