car chassis

Dependencies:   Servo mbed-rtos mbed

Committer:
mariob
Date:
Mon Aug 31 22:25:57 2015 +0000
Revision:
1:79b1ee0f97ef
Child:
2:7dfc8dd6aab3
first commit with the following features: CAN driver (it works), eeprom (it works but it is not used)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mariob 1:79b1ee0f97ef 1 #ifndef __NET_H__
mariob 1:79b1ee0f97ef 2 #define __NET_H__
mariob 1:79b1ee0f97ef 3
mariob 1:79b1ee0f97ef 4 #include "common_types.h"
mariob 1:79b1ee0f97ef 5
mariob 1:79b1ee0f97ef 6 #define CAN_FLAG_EMPTY 0x00
mariob 1:79b1ee0f97ef 7 #define CAN_FLAG_RECEIVED 0x01
mariob 1:79b1ee0f97ef 8 #define CAN_FLAG_SEND 0x02
mariob 1:79b1ee0f97ef 9
mariob 1:79b1ee0f97ef 10 #define CAN_THREAD_PERIOD 100 //ms
mariob 1:79b1ee0f97ef 11
mariob 1:79b1ee0f97ef 12
mariob 1:79b1ee0f97ef 13
mariob 1:79b1ee0f97ef 14 #define CMD_ECHO 0x0A0A
mariob 1:79b1ee0f97ef 15
mariob 1:79b1ee0f97ef 16 /**************************************************
mariob 1:79b1ee0f97ef 17 * GLOBAL DEFINES
mariob 1:79b1ee0f97ef 18 **************************************************/
mariob 1:79b1ee0f97ef 19 #define CAN_CMD_BODY_ID 0xAA
mariob 1:79b1ee0f97ef 20 #define CAN_STS_BODY_ID 0xAB
mariob 1:79b1ee0f97ef 21 #define CAN_CMD_ENGINE_ID 0x0A
mariob 1:79b1ee0f97ef 22 #define CAN_CMD_TIME_ID 0xBB
mariob 1:79b1ee0f97ef 23 #define CAN_CMD_DRIVER_ID 0x11
mariob 1:79b1ee0f97ef 24 #define CAN_STS_DRIVER_ID 0x10
mariob 1:79b1ee0f97ef 25
mariob 1:79b1ee0f97ef 26 #define PERIOD_3s (3000/CAN_THREAD_PERIOD)
mariob 1:79b1ee0f97ef 27 #define PERIOD_1s (1000/CAN_THREAD_PERIOD)
mariob 1:79b1ee0f97ef 28 #define PERIOD_500ms (500/CAN_THREAD_PERIOD)
mariob 1:79b1ee0f97ef 29 #define PERIOD_400ms (400/CAN_THREAD_PERIOD)
mariob 1:79b1ee0f97ef 30 #define PERIOD_300ms (300/CAN_THREAD_PERIOD)
mariob 1:79b1ee0f97ef 31 #define PERIOD_200ms (200/CAN_THREAD_PERIOD)
mariob 1:79b1ee0f97ef 32 #define PERIOD_100ms (100/CAN_THREAD_PERIOD)
mariob 1:79b1ee0f97ef 33
mariob 1:79b1ee0f97ef 34 #define CAN_STS_BODY_PERIOD PERIOD_1s
mariob 1:79b1ee0f97ef 35
mariob 1:79b1ee0f97ef 36
mariob 1:79b1ee0f97ef 37 #define CAN_MISSING_DETECTION PERIOD_3s
mariob 1:79b1ee0f97ef 38
mariob 1:79b1ee0f97ef 39 #define CAN_MISSING_BODY_ID 0
mariob 1:79b1ee0f97ef 40 #define CAN_MISSING_ENGINE_ID 1
mariob 1:79b1ee0f97ef 41 #define CAN_MISSING_TIME_ID 2
mariob 1:79b1ee0f97ef 42
mariob 1:79b1ee0f97ef 43 #define CAN_RX_PERIODIC_MSG 3
mariob 1:79b1ee0f97ef 44
mariob 1:79b1ee0f97ef 45 /**************************************************
mariob 1:79b1ee0f97ef 46 * GLOBAL TYPES
mariob 1:79b1ee0f97ef 47 **************************************************/
mariob 1:79b1ee0f97ef 48 #define CAN_CMD_PAYLOAD_BODY 4
mariob 1:79b1ee0f97ef 49 #define CAN_STS_PAYLOAD_BODY 8
mariob 1:79b1ee0f97ef 50 #define CAN_CMD_PAYLOAD_ENGINE 4
mariob 1:79b1ee0f97ef 51 #define CAN_CMD_PAYLOAD_TIME 4
mariob 1:79b1ee0f97ef 52 #define CAN_CMD_PAYLOAD_DRIVER 8
mariob 1:79b1ee0f97ef 53 #define CAN_STS_PAYLOAD_DRIVER 4
mariob 1:79b1ee0f97ef 54
mariob 1:79b1ee0f97ef 55 typedef union can_cmd_body_payload_s {
mariob 1:79b1ee0f97ef 56 uint8 buf[CAN_CMD_PAYLOAD_BODY];
mariob 1:79b1ee0f97ef 57 struct {
mariob 1:79b1ee0f97ef 58 uint32 light_r:1;
mariob 1:79b1ee0f97ef 59 uint32 light_c:1;
mariob 1:79b1ee0f97ef 60 uint32 light_l:1;
mariob 1:79b1ee0f97ef 61 uint32 unused:29;
mariob 1:79b1ee0f97ef 62 } msg;
mariob 1:79b1ee0f97ef 63 } can_cmd_body_payload_t;
mariob 1:79b1ee0f97ef 64 typedef struct can_cmd_body_s {
mariob 1:79b1ee0f97ef 65 can_cmd_body_payload_t payload;
mariob 1:79b1ee0f97ef 66 uint8 flag;
mariob 1:79b1ee0f97ef 67 } can_cmd_body_t;
mariob 1:79b1ee0f97ef 68
mariob 1:79b1ee0f97ef 69 typedef union can_sts_body_payload_s {
mariob 1:79b1ee0f97ef 70 uint8 buf[CAN_STS_PAYLOAD_BODY];
mariob 1:79b1ee0f97ef 71 struct {
mariob 1:79b1ee0f97ef 72 uint32 hit_front:1;
mariob 1:79b1ee0f97ef 73 uint32 hit_rear:1;
mariob 1:79b1ee0f97ef 74 uint32 hit_left:1;
mariob 1:79b1ee0f97ef 75 uint32 hit_right:1;
mariob 1:79b1ee0f97ef 76 uint32 light_sens:1;
mariob 1:79b1ee0f97ef 77 uint32 unused:3;
mariob 1:79b1ee0f97ef 78 uint32 eye_back_l:8;
mariob 1:79b1ee0f97ef 79 uint32 eye_back_r:8;
mariob 1:79b1ee0f97ef 80 uint32 eye_front:16;
mariob 1:79b1ee0f97ef 81 } msg;
mariob 1:79b1ee0f97ef 82 } can_sts_body_payload_t;
mariob 1:79b1ee0f97ef 83 typedef struct can_sts_body_s {
mariob 1:79b1ee0f97ef 84 can_sts_body_payload_t payload;
mariob 1:79b1ee0f97ef 85 uint8 flag;
mariob 1:79b1ee0f97ef 86 } can_sts_body_t;
mariob 1:79b1ee0f97ef 87
mariob 1:79b1ee0f97ef 88 typedef union can_cmd_engine_payload_s {
mariob 1:79b1ee0f97ef 89 uint8 buf[CAN_CMD_PAYLOAD_BODY];
mariob 1:79b1ee0f97ef 90 struct {
mariob 1:79b1ee0f97ef 91 uint32 steering:8;
mariob 1:79b1ee0f97ef 92 uint32 power:8;
mariob 1:79b1ee0f97ef 93 uint32 direction:1;
mariob 1:79b1ee0f97ef 94 uint32 breaking:1;
mariob 1:79b1ee0f97ef 95 uint32 unused:14;
mariob 1:79b1ee0f97ef 96 } msg;
mariob 1:79b1ee0f97ef 97 } can_cmd_engine_payload_t;
mariob 1:79b1ee0f97ef 98 typedef struct can_cmd_engine_s {
mariob 1:79b1ee0f97ef 99 can_cmd_engine_payload_t payload;
mariob 1:79b1ee0f97ef 100 uint8 flag;
mariob 1:79b1ee0f97ef 101 } can_cmd_engine_t;
mariob 1:79b1ee0f97ef 102
mariob 1:79b1ee0f97ef 103 typedef union can_cmd_time_payload_s {
mariob 1:79b1ee0f97ef 104 uint8 buf[CAN_CMD_PAYLOAD_TIME];
mariob 1:79b1ee0f97ef 105 struct {
mariob 1:79b1ee0f97ef 106 uint32 time;
mariob 1:79b1ee0f97ef 107 } msg;
mariob 1:79b1ee0f97ef 108 } can_cmd_time_payload_t;
mariob 1:79b1ee0f97ef 109 typedef struct can_cmd_time_s {
mariob 1:79b1ee0f97ef 110 can_cmd_time_payload_t payload;
mariob 1:79b1ee0f97ef 111 uint8 flag;
mariob 1:79b1ee0f97ef 112 } can_cmd_time_t;
mariob 1:79b1ee0f97ef 113
mariob 1:79b1ee0f97ef 114 typedef union can_cmd_driver_payload_s {
mariob 1:79b1ee0f97ef 115 uint8 buf[CAN_CMD_PAYLOAD_DRIVER];
mariob 1:79b1ee0f97ef 116 struct {
mariob 1:79b1ee0f97ef 117 uint32 cmd:16;
mariob 1:79b1ee0f97ef 118 uint32 opt:16;
mariob 1:79b1ee0f97ef 119 uint32 data;
mariob 1:79b1ee0f97ef 120 } msg;
mariob 1:79b1ee0f97ef 121 } can_cmd_driver_payload_t;
mariob 1:79b1ee0f97ef 122 typedef struct can_cmd_driver_s {
mariob 1:79b1ee0f97ef 123 can_cmd_driver_payload_t payload;
mariob 1:79b1ee0f97ef 124 uint8 flag;
mariob 1:79b1ee0f97ef 125 } can_cmd_driver_t;
mariob 1:79b1ee0f97ef 126
mariob 1:79b1ee0f97ef 127 typedef union can_sts_driver_payload_s {
mariob 1:79b1ee0f97ef 128 uint8 buf[CAN_STS_PAYLOAD_DRIVER];
mariob 1:79b1ee0f97ef 129 struct {
mariob 1:79b1ee0f97ef 130 uint32 data;
mariob 1:79b1ee0f97ef 131 } msg;
mariob 1:79b1ee0f97ef 132 } can_sts_driver_payload_t;
mariob 1:79b1ee0f97ef 133 typedef struct can_sts_driver_time_s {
mariob 1:79b1ee0f97ef 134 can_sts_driver_payload_t payload;
mariob 1:79b1ee0f97ef 135 uint8 flag;
mariob 1:79b1ee0f97ef 136 } can_sts_driver_t;
mariob 1:79b1ee0f97ef 137
mariob 1:79b1ee0f97ef 138 /**************************************************
mariob 1:79b1ee0f97ef 139 * DATA STRUCTURES
mariob 1:79b1ee0f97ef 140 **************************************************/
mariob 1:79b1ee0f97ef 141
mariob 1:79b1ee0f97ef 142 void init_can();
mariob 1:79b1ee0f97ef 143
mariob 1:79b1ee0f97ef 144 void thread_can(void const *args);
mariob 1:79b1ee0f97ef 145
mariob 1:79b1ee0f97ef 146 bool can_msg_is_missing(uint8 msg_id);
mariob 1:79b1ee0f97ef 147
mariob 1:79b1ee0f97ef 148 #endif //__NET_H__