car chassis
Dependencies: Servo mbed-rtos mbed
Diff: net.hpp
- Revision:
- 2:7dfc8dd6aab3
- Child:
- 3:bfc20ec72b15
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/net.hpp Thu Oct 08 13:36:17 2015 +0000 @@ -0,0 +1,174 @@ +#ifndef __NET_H__ +#define __NET_H__ + +#include "common_types.h" + +#define CAN_FLAG_EMPTY 0x00 +#define CAN_FLAG_RECEIVED 0x01 +#define CAN_FLAG_SEND 0x02 + +#define CMD_ECHO 0x0A0A + +/************************************************** + * MESSAGE IDs + **************************************************/ + +#define CAN_CMD_BODY_ID 0xAA +#define CAN_STS_BODY_ID 0xAB +#define CAN_CMD_ENGINE_ID 0x0A +#define CAN_CMD_TIME_ID 0xBB +#define CAN_CMD_DRIVER_ID 0x11 +#define CAN_STS_DRIVER_ID 0x10 +#define CAN_CMD_CAMERA_ID 0x22 + +/************************************************** + * PERIODs + **************************************************/ + +#define PERIOD_60s (60000/CAN_THREAD_PERIOD) +#define PERIOD_3s (3000/CAN_THREAD_PERIOD) +#define PERIOD_1s (1000/CAN_THREAD_PERIOD) +#define PERIOD_500ms (500/CAN_THREAD_PERIOD) +#define PERIOD_400ms (400/CAN_THREAD_PERIOD) +#define PERIOD_300ms (300/CAN_THREAD_PERIOD) +#define PERIOD_200ms (200/CAN_THREAD_PERIOD) +#define PERIOD_100ms (100/CAN_THREAD_PERIOD) + +#define CAN_CMD_BODY_PERIOD PERIOD_1s +#define CAN_STS_BODY_PERIOD PERIOD_1s +#define CAN_CMD_ENGINE_PERIOD PERIOD_500ms +#define CAN_CMD_CAMERA_PERIOD PERIOD_1s + +#define CAN_MISSING_DETECTION PERIOD_3s + +#define CAN_MISSING_CMD_BODY_ID 0 +#define CAN_MISSING_CMD_ENGINE_ID 1 +#define CAN_MISSING_CMD_CAMERA_ID 2 +#define CAN_MISSING_STS_BODY_ID 3 + +#define CAN_RX_PERIODIC_MSG 4 + +/************************************************** + * MESSAGE SIZEs + **************************************************/ + +#define CAN_CMD_PAYLOAD_BODY 4 +#define CAN_STS_PAYLOAD_BODY 8 +#define CAN_CMD_PAYLOAD_ENGINE 4 +#define CAN_CMD_PAYLOAD_TIME 4 +#define CAN_CMD_PAYLOAD_DRIVER 8 +#define CAN_STS_PAYLOAD_DRIVER 4 +#define CAN_CMD_PAYLOAD_CAMERA 2 + +/************************************************** + * MESSAGE TYPEs + **************************************************/ +typedef union can_cmd_body_payload_s { + uint8 buf[CAN_CMD_PAYLOAD_BODY]; + struct { + uint32 light_r:1; + uint32 light_c:1; + uint32 light_l:1; + uint32 unused:29; + } msg; +} can_cmd_body_payload_t; +typedef struct can_cmd_body_s { + can_cmd_body_payload_t payload; + uint8 flag; +} can_cmd_body_t; + +typedef union can_sts_body_payload_s { + uint8 buf[CAN_STS_PAYLOAD_BODY]; + struct { + uint32 hit_front:1; + uint32 hit_rear:1; + uint32 hit_left:1; + uint32 hit_right:1; + uint32 light_sens:1; + uint32 unused:3; + uint32 eye_back_l:8; + uint32 eye_back_r:8; + uint32 eye_front:16; + } msg; +} can_sts_body_payload_t; +typedef struct can_sts_body_s { + can_sts_body_payload_t payload; + uint8 flag; +} can_sts_body_t; + +typedef union can_cmd_engine_payload_s { + uint8 buf[CAN_CMD_PAYLOAD_BODY]; + struct { + uint32 steering:8; + uint32 power:8; + uint32 direction:1; + uint32 breaking:1; + uint32 unused:14; + } msg; +} can_cmd_engine_payload_t; +typedef struct can_cmd_engine_s { + can_cmd_engine_payload_t payload; + uint8 flag; +} can_cmd_engine_t; + +typedef union can_cmd_time_payload_s { + uint8 buf[CAN_CMD_PAYLOAD_TIME]; + struct { + uint32 time; + } msg; +} can_cmd_time_payload_t; +typedef struct can_cmd_time_s { + can_cmd_time_payload_t payload; + uint8 flag; +} can_cmd_time_t; + +typedef union can_cmd_driver_payload_s { + uint8 buf[CAN_CMD_PAYLOAD_DRIVER]; + struct { + uint32 cmd:16; + uint32 opt:16; + uint32 data; + } msg; +} can_cmd_driver_payload_t; +typedef struct can_cmd_driver_s { + can_cmd_driver_payload_t payload; + uint8 flag; +} can_cmd_driver_t; + +typedef union can_sts_driver_payload_s { + uint8 buf[CAN_STS_PAYLOAD_DRIVER]; + struct { + uint32 data; + } msg; +} can_sts_driver_payload_t; +typedef struct can_sts_driver_time_s { + can_sts_driver_payload_t payload; + uint8 flag; +} can_sts_driver_t; + +typedef union can_cmd_camera_payload_s { + uint8 buf[CAN_CMD_PAYLOAD_CAMERA]; + struct { + uint16 x:7; + uint16 y:7; + uint16 mode:2; + } msg; +} can_cmd_camera_payload_t; +typedef struct can_cmd_camera_s { + can_cmd_camera_payload_t payload; + uint8 flag; +} can_cmd_camera_t; + +/************************************************** + * MESSAGE BUFFERs + **************************************************/ + +extern can_cmd_body_t can_cmd_body; +extern can_sts_body_t can_sts_body; +extern can_cmd_engine_t can_cmd_engine; +extern can_cmd_time_t can_cmd_time; +extern can_cmd_driver_t can_cmd_driver; +extern can_sts_driver_t can_sts_driver; +extern can_cmd_camera_t can_cmd_camera; + +#endif //__NET_H__