Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- typedef enum {
- FRAME_ID_TIME,
- FRAME_ID_POSITION,
- FRAME_ID_VELOCITY,
- } _frame_id;
- typedef enum {
- MSG_ID_DATA,
- MSG_ID_ERROR,
- MSG_ID_STATUS,
- } _msg_id;
- typedef struct {
- _frame_id frame_id;
- _msg_id msg_id;
- uint8_t msg_len;
- uint8_t *msg_data;
- } msg;
- void msg_print(msg *m_in)
- {
- msg m = *m_in;
- printf(" frame_id: 0x%02x\n", m.frame_id);
- printf(" msg_id: 0x%02x\n", m.msg_id);
- printf(" msg_len: 0x%02x\n", m.msg_len);
- printf(" msg_data: ");
- while(m.msg_len--) {
- printf("0x%02x, ", *m.msg_data++);
- }
- printf("\n");
- }
- #define MK_MSG(frame_id, msg_id, msg_len, data) \
- (msg){frame_id, msg_id, msg_len, data}
- #define TO_MSG(raw) \
- (msg){raw[0], raw[1], raw[2], &raw[3]};
- int main() {
- // pack a msg struct to raw frame
- // msg_data could be struct and (uint_t *) casted
- uint8_t msg_data[4] = {0, 1, 2, 3};
- msg m_send = MK_MSG(FRAME_ID_TIME, MSG_ID_DATA, 4, msg_data);
- msg_print(&m_send);
- // or
- m_send.frame_id = FRAME_ID_POSITION;
- m_send.msg_id = MSG_ID_DATA;
- m_send.msg_len = 4;
- m_send.msg_data = msg_data;
- msg_print(&m_send);
- // unpack a raw frame to msg type
- uint8_t data_recv[7] = {FRAME_ID_POSITION, MSG_ID_DATA, 4, 0, 1, 2, 3};
- msg m_recv = TO_MSG(data_recv);
- msg_print(&m_recv);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement