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 *min)
- {
- msg m = *min;
- 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) frame_id, (_msg_id) msg_id, (uint8_t) msg_len, (uint8_t *) data}
- #define TO_MSG(raw) \
- (msg){(_frame_id) raw[0], (_msg_id) raw[1], (uint8_t) raw[2], (uint8_t *) &raw[3]};
- int main() {
- // Sending / pack frame
- uint8_t data[8] = {0, 1, 2, 3, 4, 5, 6, 7};
- msg m_send = MK_MSG(FRAME_ID_TIME, MSG_ID_DATA, 8, data);
- // Receiving / unpack frame
- uint8_t raw[11] = {FRAME_ID_POSITION, MSG_ID_DATA, 8, 7, 6, 5 ,4, 3, 2, 1, 0};
- msg m_recv = TO_MSG(raw);
- msg_print(&m_send);
- msg_print(&m_recv);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement