Small project to display some OBD values from the Toyota GT86/ Subaru BRZ/ Scion FRS on an OLED display.
Dependencies: Adafruit_GFX MODSERIAL mbed-rtos mbed
main.cpp@5:0b229ba8ede5, 2014-04-27 (annotated)
- Committer:
- chrta
- Date:
- Sun Apr 27 19:13:35 2014 +0000
- Revision:
- 5:0b229ba8ede5
- Parent:
- 4:0e2d6cc31afb
- Child:
- 6:506b703a8acf
Split pids into files.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
chrta | 0:6b1f6139fb25 | 1 | #include "mbed.h" |
chrta | 0:6b1f6139fb25 | 2 | #include "rtos.h" |
chrta | 0:6b1f6139fb25 | 3 | #include "IsoTpHandler.h" |
chrta | 2:d3d61d9d323e | 4 | #include "MODSERIAL.h" |
chrta | 1:ca506b88b1d6 | 5 | |
chrta | 2:d3d61d9d323e | 6 | #define CAN1_TEST |
chrta | 4:0e2d6cc31afb | 7 | #define CAN1_OBD_CAR_SIMULATOR |
chrta | 2:d3d61d9d323e | 8 | |
chrta | 2:d3d61d9d323e | 9 | // Make TX buffer 1024bytes and RX buffer use 512bytes. |
chrta | 2:d3d61d9d323e | 10 | MODSERIAL pc(USBTX, USBRX, 2 * 1024, 512); // tx, rx |
chrta | 0:6b1f6139fb25 | 11 | DigitalOut led1(LED1); |
chrta | 0:6b1f6139fb25 | 12 | DigitalOut led2(LED2); |
chrta | 2:d3d61d9d323e | 13 | DigitalOut led3(LED3); |
chrta | 2:d3d61d9d323e | 14 | DigitalOut led4(LED4); |
chrta | 2:d3d61d9d323e | 15 | |
chrta | 2:d3d61d9d323e | 16 | CAN can1(p9, p10); |
chrta | 2:d3d61d9d323e | 17 | DigitalOut can1_disable(p8); |
chrta | 0:6b1f6139fb25 | 18 | CAN can2(p30, p29); |
chrta | 2:d3d61d9d323e | 19 | DigitalOut can2_disable(p28); |
chrta | 2:d3d61d9d323e | 20 | |
chrta | 0:6b1f6139fb25 | 21 | IsoTpHandler tpHandler(&can2); |
chrta | 4:0e2d6cc31afb | 22 | |
chrta | 5:0b229ba8ede5 | 23 | //#define ACTIVATE_DEBUG_OUTPUT |
chrta | 4:0e2d6cc31afb | 24 | #ifdef ACTIVATE_DEBUG_OUTPUT |
chrta | 4:0e2d6cc31afb | 25 | #define DEBUG_PRINT(format, ...) pc.printf(format, ##__VA_ARGS__) |
chrta | 4:0e2d6cc31afb | 26 | #else |
chrta | 4:0e2d6cc31afb | 27 | #define DEBUG_PRINT(format, ...) |
chrta | 4:0e2d6cc31afb | 28 | #endif |
chrta | 0:6b1f6139fb25 | 29 | |
chrta | 0:6b1f6139fb25 | 30 | void led2_thread(void const *args) { |
chrta | 0:6b1f6139fb25 | 31 | while (true) { |
chrta | 0:6b1f6139fb25 | 32 | led2 = !led2; |
chrta | 0:6b1f6139fb25 | 33 | Thread::wait(1000); |
chrta | 0:6b1f6139fb25 | 34 | } |
chrta | 0:6b1f6139fb25 | 35 | } |
chrta | 0:6b1f6139fb25 | 36 | |
chrta | 0:6b1f6139fb25 | 37 | Mail<CANMessage, 16> can_rx_queue; |
chrta | 0:6b1f6139fb25 | 38 | |
chrta | 0:6b1f6139fb25 | 39 | void can_process_packets(void const *args) { |
chrta | 0:6b1f6139fb25 | 40 | while (true) { |
chrta | 4:0e2d6cc31afb | 41 | //pc.printf("Th wait for can packet\r\n"); |
chrta | 0:6b1f6139fb25 | 42 | osEvent evt = can_rx_queue.get(osWaitForever); |
chrta | 4:0e2d6cc31afb | 43 | //pc.printf("Got evt %d\r\n", evt.status); |
chrta | 0:6b1f6139fb25 | 44 | if (evt.status == osEventMail) { |
chrta | 4:0e2d6cc31afb | 45 | //pc.printf("Got can packet\r\n"); |
chrta | 0:6b1f6139fb25 | 46 | CANMessage *msg = (CANMessage*) evt.value.p; |
chrta | 4:0e2d6cc31afb | 47 | //pc.printf("Process can packet\r\n"); |
chrta | 0:6b1f6139fb25 | 48 | tpHandler.processCanMessage(msg); |
chrta | 4:0e2d6cc31afb | 49 | //pc.printf("Processed can packet\r\n"); |
chrta | 0:6b1f6139fb25 | 50 | can_rx_queue.free(msg); |
chrta | 4:0e2d6cc31afb | 51 | //pc.printf("Freed can packet\r\n"); |
chrta | 0:6b1f6139fb25 | 52 | } |
chrta | 0:6b1f6139fb25 | 53 | } |
chrta | 0:6b1f6139fb25 | 54 | } |
chrta | 0:6b1f6139fb25 | 55 | |
chrta | 0:6b1f6139fb25 | 56 | |
chrta | 0:6b1f6139fb25 | 57 | void can_rx_int_handler() { |
chrta | 2:d3d61d9d323e | 58 | //pc.printf("can_rx_int_handler\r\n"); |
chrta | 0:6b1f6139fb25 | 59 | CANMessage* msg = can_rx_queue.alloc(); |
chrta | 0:6b1f6139fb25 | 60 | if (!can2.read(*msg)) |
chrta | 0:6b1f6139fb25 | 61 | { |
chrta | 2:d3d61d9d323e | 62 | //pc.printf("can_rx_int_handler no read\r\n"); |
chrta | 0:6b1f6139fb25 | 63 | //this should not happen, because this function is called from the rx interrupt |
chrta | 0:6b1f6139fb25 | 64 | can_rx_queue.free(msg); |
chrta | 2:d3d61d9d323e | 65 | //pc.printf("can_rx_int_handler ret 1\r\n"); |
chrta | 2:d3d61d9d323e | 66 | return; |
chrta | 2:d3d61d9d323e | 67 | } |
chrta | 2:d3d61d9d323e | 68 | if (msg->id != 0x7E8) |
chrta | 2:d3d61d9d323e | 69 | { |
chrta | 2:d3d61d9d323e | 70 | //no OBD message |
chrta | 2:d3d61d9d323e | 71 | can_rx_queue.free(msg); |
chrta | 0:6b1f6139fb25 | 72 | return; |
chrta | 0:6b1f6139fb25 | 73 | } |
chrta | 2:d3d61d9d323e | 74 | //pc.printf("can_rx_int_handler got packet\r\n"); |
chrta | 2:d3d61d9d323e | 75 | osStatus error_code = can_rx_queue.put(msg); |
chrta | 2:d3d61d9d323e | 76 | //pc.printf("can_rx_int_handler in queue\r\n"); |
chrta | 2:d3d61d9d323e | 77 | if (error_code != osOK) { |
chrta | 2:d3d61d9d323e | 78 | //pc.printf("can_rx_int_handler failed\r\n"); |
chrta | 2:d3d61d9d323e | 79 | //error("Putting can message into mailbox failed with code %d!", error); |
chrta | 2:d3d61d9d323e | 80 | } |
chrta | 0:6b1f6139fb25 | 81 | |
chrta | 2:d3d61d9d323e | 82 | //pc.printf("can_rx_int_handler ok\r\n"); |
chrta | 2:d3d61d9d323e | 83 | } |
chrta | 2:d3d61d9d323e | 84 | |
chrta | 5:0b229ba8ede5 | 85 | Mail<CANMessage, 16> can2_tx_queue; |
chrta | 5:0b229ba8ede5 | 86 | void can2_send_packets(void const *args) { |
chrta | 5:0b229ba8ede5 | 87 | DEBUG_PRINT("TX2 start\r\n"); |
chrta | 5:0b229ba8ede5 | 88 | while (true) { |
chrta | 5:0b229ba8ede5 | 89 | osEvent evt = can2_tx_queue.get(osWaitForever); |
chrta | 5:0b229ba8ede5 | 90 | if (evt.status == osEventMail) { |
chrta | 5:0b229ba8ede5 | 91 | CANMessage *msg = (CANMessage*) evt.value.p; |
chrta | 5:0b229ba8ede5 | 92 | DEBUG_PRINT("TX2 check\r\n"); |
chrta | 5:0b229ba8ede5 | 93 | if (can2.write(*msg)) |
chrta | 5:0b229ba8ede5 | 94 | { |
chrta | 5:0b229ba8ede5 | 95 | DEBUG_PRINT("TX2 send\r\n"); |
chrta | 5:0b229ba8ede5 | 96 | can2_tx_queue.free(msg); |
chrta | 5:0b229ba8ede5 | 97 | Thread::wait(150); |
chrta | 5:0b229ba8ede5 | 98 | } |
chrta | 5:0b229ba8ede5 | 99 | else |
chrta | 5:0b229ba8ede5 | 100 | { |
chrta | 5:0b229ba8ede5 | 101 | DEBUG_PRINT("TX2 wait \r\n"); |
chrta | 5:0b229ba8ede5 | 102 | Thread::wait(150); |
chrta | 5:0b229ba8ede5 | 103 | } |
chrta | 5:0b229ba8ede5 | 104 | } |
chrta | 5:0b229ba8ede5 | 105 | } |
chrta | 5:0b229ba8ede5 | 106 | } |
chrta | 5:0b229ba8ede5 | 107 | |
chrta | 5:0b229ba8ede5 | 108 | |
chrta | 5:0b229ba8ede5 | 109 | struct behaviour_t { |
chrta | 5:0b229ba8ede5 | 110 | unsigned char rxData[8]; |
chrta | 5:0b229ba8ede5 | 111 | char txData[8]; |
chrta | 5:0b229ba8ede5 | 112 | }; |
chrta | 5:0b229ba8ede5 | 113 | |
chrta | 5:0b229ba8ede5 | 114 | |
chrta | 5:0b229ba8ede5 | 115 | |
chrta | 5:0b229ba8ede5 | 116 | behaviour_t behaviour[] = |
chrta | 5:0b229ba8ede5 | 117 | { |
chrta | 5:0b229ba8ede5 | 118 | {{0x02, 0x21, 0x01, 0, 0, 0, 0, 0}, {0x10, 0x1F, 0x61, 0x01, 0x51, 0, 0x37, 0x01}}, //first oil temp packet |
chrta | 5:0b229ba8ede5 | 119 | {{0x30, 0, 0, 0, 0, 0, 0, 0}, {0x21, 0x1F, 0x61, 0x01, 0x51, 0, 0x37, 0x01}}, //second oil temp packet, TODO more pakets must be sent |
chrta | 5:0b229ba8ede5 | 120 | {{0x02, 0x01, 0x21, 0, 0, 0, 0, 0}, {0x04, 0x41, 0x21, 0, 0, 0, 0, 0}}, |
chrta | 5:0b229ba8ede5 | 121 | {{0x02, 0x01, 0x0C, 0, 0, 0, 0, 0}, {0x04, 0x41, 0x0C, 0x0F, 0xA2, 0, 0, 0}}, |
chrta | 5:0b229ba8ede5 | 122 | {{0x02, 0x01, 0x11, 0, 0, 0, 0, 0}, {0x03, 0x41, 0x11, 0x26, 0, 0, 0, 0}}, |
chrta | 5:0b229ba8ede5 | 123 | {{0x02, 0x01, 0x05, 0, 0, 0, 0, 0}, {0x03, 0x41, 0x05, 0x4D, 0, 0, 0, 0}}, //engine coolant temp |
chrta | 5:0b229ba8ede5 | 124 | }; |
chrta | 5:0b229ba8ede5 | 125 | |
chrta | 5:0b229ba8ede5 | 126 | void can2_send_requests(void const *args) { |
chrta | 5:0b229ba8ede5 | 127 | while (true) { |
chrta | 5:0b229ba8ede5 | 128 | Thread::wait(2000); |
chrta | 5:0b229ba8ede5 | 129 | CANMessage sendMsg(0x7E0, (char*) behaviour[3].rxData, 8); |
chrta | 5:0b229ba8ede5 | 130 | CANMessage* msg = can2_tx_queue.alloc(); |
chrta | 5:0b229ba8ede5 | 131 | *msg = sendMsg; |
chrta | 5:0b229ba8ede5 | 132 | can2_tx_queue.put(msg); |
chrta | 5:0b229ba8ede5 | 133 | Thread::wait(200); |
chrta | 5:0b229ba8ede5 | 134 | msg = can2_tx_queue.alloc(); |
chrta | 5:0b229ba8ede5 | 135 | sendMsg.data[2] = behaviour[4].rxData[2]; |
chrta | 5:0b229ba8ede5 | 136 | *msg = sendMsg; |
chrta | 5:0b229ba8ede5 | 137 | can2_tx_queue.put(msg); |
chrta | 5:0b229ba8ede5 | 138 | Thread::wait(200); |
chrta | 5:0b229ba8ede5 | 139 | sendMsg.data[2] = behaviour[5].rxData[2]; |
chrta | 5:0b229ba8ede5 | 140 | *msg = sendMsg; |
chrta | 5:0b229ba8ede5 | 141 | can2_tx_queue.put(msg); |
chrta | 5:0b229ba8ede5 | 142 | Thread::wait(200); |
chrta | 5:0b229ba8ede5 | 143 | CANMessage sendMsg2(0x7E0, (char*) behaviour[0].rxData, 8); |
chrta | 5:0b229ba8ede5 | 144 | msg = can2_tx_queue.alloc(); |
chrta | 5:0b229ba8ede5 | 145 | *msg = sendMsg2; |
chrta | 5:0b229ba8ede5 | 146 | can2_tx_queue.put(msg); |
chrta | 5:0b229ba8ede5 | 147 | } |
chrta | 5:0b229ba8ede5 | 148 | } |
chrta | 5:0b229ba8ede5 | 149 | |
chrta | 2:d3d61d9d323e | 150 | #ifdef CAN1_TEST |
chrta | 2:d3d61d9d323e | 151 | Mail<CANMessage, 16> can1_rx_queue; |
chrta | 2:d3d61d9d323e | 152 | CANMessage msg1; |
chrta | 2:d3d61d9d323e | 153 | void can1_rx_int_handler() { |
chrta | 2:d3d61d9d323e | 154 | led3 = !led3; |
chrta | 2:d3d61d9d323e | 155 | CANMessage* msg = can1_rx_queue.alloc(); |
chrta | 2:d3d61d9d323e | 156 | if (!can1.read(*msg)) |
chrta | 2:d3d61d9d323e | 157 | { |
chrta | 2:d3d61d9d323e | 158 | can1_rx_queue.free(msg); |
chrta | 2:d3d61d9d323e | 159 | return; |
chrta | 2:d3d61d9d323e | 160 | } |
chrta | 3:eb807d330292 | 161 | if ((msg->id != 0x7E8) && (msg->id != 0x7E0)) |
chrta | 3:eb807d330292 | 162 | { |
chrta | 3:eb807d330292 | 163 | can1_rx_queue.free(msg); |
chrta | 3:eb807d330292 | 164 | return; |
chrta | 3:eb807d330292 | 165 | } |
chrta | 2:d3d61d9d323e | 166 | can1_rx_queue.put(msg); |
chrta | 2:d3d61d9d323e | 167 | led4 = !led4; |
chrta | 2:d3d61d9d323e | 168 | } |
chrta | 2:d3d61d9d323e | 169 | |
chrta | 2:d3d61d9d323e | 170 | |
chrta | 2:d3d61d9d323e | 171 | #ifdef CAN1_OBD_CAR_SIMULATOR |
chrta | 2:d3d61d9d323e | 172 | |
chrta | 2:d3d61d9d323e | 173 | Mail<CANMessage, 16> can1_tx_queue; |
chrta | 2:d3d61d9d323e | 174 | |
chrta | 2:d3d61d9d323e | 175 | void can1_obd_car_simulator_process_packet(CANMessage &msg) |
chrta | 2:d3d61d9d323e | 176 | { |
chrta | 2:d3d61d9d323e | 177 | if (msg.id != 0x7E0) |
chrta | 2:d3d61d9d323e | 178 | { |
chrta | 2:d3d61d9d323e | 179 | return; |
chrta | 2:d3d61d9d323e | 180 | } |
chrta | 2:d3d61d9d323e | 181 | |
chrta | 2:d3d61d9d323e | 182 | for (unsigned int i = 0; i < sizeof(behaviour) / sizeof (behaviour[0]); i++) |
chrta | 2:d3d61d9d323e | 183 | { |
chrta | 2:d3d61d9d323e | 184 | if (memcmp(msg.data, behaviour[i].rxData, 8) == 0) |
chrta | 2:d3d61d9d323e | 185 | { |
chrta | 2:d3d61d9d323e | 186 | CANMessage sendMsg(0x7E8, (char*) behaviour[i].txData, 8); |
chrta | 2:d3d61d9d323e | 187 | CANMessage* msg = can1_tx_queue.alloc(); |
chrta | 2:d3d61d9d323e | 188 | *msg = sendMsg; |
chrta | 2:d3d61d9d323e | 189 | can1_tx_queue.put(msg); |
chrta | 2:d3d61d9d323e | 190 | |
chrta | 2:d3d61d9d323e | 191 | if (i == 1) |
chrta | 2:d3d61d9d323e | 192 | { |
chrta | 2:d3d61d9d323e | 193 | //send additinal packets later |
chrta | 2:d3d61d9d323e | 194 | sendMsg.data[0] = 0x22; |
chrta | 2:d3d61d9d323e | 195 | msg = can1_tx_queue.alloc(); |
chrta | 2:d3d61d9d323e | 196 | *msg = sendMsg; |
chrta | 2:d3d61d9d323e | 197 | can1_tx_queue.put(msg); |
chrta | 2:d3d61d9d323e | 198 | sendMsg.data[0] = 0x23; |
chrta | 2:d3d61d9d323e | 199 | msg = can1_tx_queue.alloc(); |
chrta | 2:d3d61d9d323e | 200 | *msg = sendMsg; |
chrta | 2:d3d61d9d323e | 201 | can1_tx_queue.put(msg); |
chrta | 2:d3d61d9d323e | 202 | sendMsg.data[0] = 0x24; |
chrta | 2:d3d61d9d323e | 203 | msg = can1_tx_queue.alloc(); |
chrta | 2:d3d61d9d323e | 204 | *msg = sendMsg; |
chrta | 2:d3d61d9d323e | 205 | can1_tx_queue.put(msg); |
chrta | 2:d3d61d9d323e | 206 | } |
chrta | 2:d3d61d9d323e | 207 | } |
chrta | 0:6b1f6139fb25 | 208 | } |
chrta | 0:6b1f6139fb25 | 209 | } |
chrta | 1:ca506b88b1d6 | 210 | |
chrta | 2:d3d61d9d323e | 211 | #endif //CAN1_OBD_CAR_SIMULATOR |
chrta | 2:d3d61d9d323e | 212 | |
chrta | 2:d3d61d9d323e | 213 | void can1_process_packets(void const *args) { |
chrta | 2:d3d61d9d323e | 214 | while (true) { |
chrta | 2:d3d61d9d323e | 215 | osEvent evt = can1_rx_queue.get(osWaitForever); |
chrta | 2:d3d61d9d323e | 216 | if (evt.status == osEventMail) { |
chrta | 2:d3d61d9d323e | 217 | CANMessage *msg = (CANMessage*) evt.value.p; |
chrta | 2:d3d61d9d323e | 218 | |
chrta | 2:d3d61d9d323e | 219 | pc.printf("\r\nRX1: '%d' '%d' '%d' '%x' '", msg->format, msg->type, msg->len, msg->id); |
chrta | 2:d3d61d9d323e | 220 | for (unsigned int i = 0; i < msg->len; i++) |
chrta | 2:d3d61d9d323e | 221 | { |
chrta | 2:d3d61d9d323e | 222 | pc.printf("%x ", msg->data[i]); |
chrta | 2:d3d61d9d323e | 223 | } |
chrta | 2:d3d61d9d323e | 224 | pc.printf("'\r\n"); |
chrta | 2:d3d61d9d323e | 225 | #ifdef CAN1_OBD_CAR_SIMULATOR |
chrta | 2:d3d61d9d323e | 226 | can1_obd_car_simulator_process_packet(*msg); |
chrta | 2:d3d61d9d323e | 227 | #endif //CAN1_OBD_CAR_SIMULATOR |
chrta | 2:d3d61d9d323e | 228 | can1_rx_queue.free(msg); |
chrta | 2:d3d61d9d323e | 229 | } |
chrta | 2:d3d61d9d323e | 230 | } |
chrta | 2:d3d61d9d323e | 231 | } |
chrta | 2:d3d61d9d323e | 232 | |
chrta | 3:eb807d330292 | 233 | #ifdef CAN1_OBD_CAR_SIMULATOR |
chrta | 2:d3d61d9d323e | 234 | void can1_send_packets(void const *args) { |
chrta | 4:0e2d6cc31afb | 235 | DEBUG_PRINT("TX1 start\r\n"); |
chrta | 2:d3d61d9d323e | 236 | while (true) { |
chrta | 2:d3d61d9d323e | 237 | osEvent evt = can1_tx_queue.get(osWaitForever); |
chrta | 2:d3d61d9d323e | 238 | if (evt.status == osEventMail) { |
chrta | 2:d3d61d9d323e | 239 | CANMessage *msg = (CANMessage*) evt.value.p; |
chrta | 4:0e2d6cc31afb | 240 | DEBUG_PRINT("TX1 check\r\n"); |
chrta | 2:d3d61d9d323e | 241 | if (can1.write(*msg)) |
chrta | 2:d3d61d9d323e | 242 | { |
chrta | 4:0e2d6cc31afb | 243 | DEBUG_PRINT("TX1 send\r\n"); |
chrta | 2:d3d61d9d323e | 244 | can1_tx_queue.free(msg); |
chrta | 4:0e2d6cc31afb | 245 | Thread::wait(50); |
chrta | 2:d3d61d9d323e | 246 | } |
chrta | 2:d3d61d9d323e | 247 | else |
chrta | 2:d3d61d9d323e | 248 | { |
chrta | 4:0e2d6cc31afb | 249 | DEBUG_PRINT("TX1 wait \r\n"); |
chrta | 2:d3d61d9d323e | 250 | Thread::wait(50); |
chrta | 2:d3d61d9d323e | 251 | } |
chrta | 2:d3d61d9d323e | 252 | } |
chrta | 2:d3d61d9d323e | 253 | } |
chrta | 2:d3d61d9d323e | 254 | } |
chrta | 3:eb807d330292 | 255 | #endif //CAN1_OBD_CAR_SIMULATOR |
chrta | 2:d3d61d9d323e | 256 | |
chrta | 2:d3d61d9d323e | 257 | #endif //CAN1_TEST |
chrta | 2:d3d61d9d323e | 258 | |
chrta | 2:d3d61d9d323e | 259 | char can_msg[8] = {0}; |
chrta | 2:d3d61d9d323e | 260 | CANMessage msg(0x7E0, can_msg, 8); |
chrta | 1:ca506b88b1d6 | 261 | void serial_int_handler() { |
chrta | 1:ca506b88b1d6 | 262 | if (!pc.readable()) { |
chrta | 1:ca506b88b1d6 | 263 | return; |
chrta | 1:ca506b88b1d6 | 264 | } |
chrta | 1:ca506b88b1d6 | 265 | uint8_t character = pc.getc(); |
chrta | 2:d3d61d9d323e | 266 | //pc.printf("Received '%c'\r\n", character); |
chrta | 1:ca506b88b1d6 | 267 | |
chrta | 4:0e2d6cc31afb | 268 | msg.data[0] = 0x02; |
chrta | 2:d3d61d9d323e | 269 | msg.data[1] = 0x01; |
chrta | 1:ca506b88b1d6 | 270 | char pid = 0; |
chrta | 1:ca506b88b1d6 | 271 | switch (character) |
chrta | 1:ca506b88b1d6 | 272 | { |
chrta | 1:ca506b88b1d6 | 273 | case '1': |
chrta | 1:ca506b88b1d6 | 274 | pid = 0x0C; //engine rpm |
chrta | 1:ca506b88b1d6 | 275 | break; |
chrta | 1:ca506b88b1d6 | 276 | case '2': |
chrta | 1:ca506b88b1d6 | 277 | pid = 0x11; //throttle |
chrta | 1:ca506b88b1d6 | 278 | break; |
chrta | 1:ca506b88b1d6 | 279 | case '3': //oil 1 |
chrta | 2:d3d61d9d323e | 280 | msg.data[1] = 0x21; //endian |
chrta | 1:ca506b88b1d6 | 281 | pid = 1; |
chrta | 1:ca506b88b1d6 | 282 | break; |
chrta | 1:ca506b88b1d6 | 283 | case '4': //oil 2 |
chrta | 2:d3d61d9d323e | 284 | msg.data[1] = 1; //endian |
chrta | 1:ca506b88b1d6 | 285 | pid = 0x21; |
chrta | 1:ca506b88b1d6 | 286 | break; |
chrta | 1:ca506b88b1d6 | 287 | default: |
chrta | 1:ca506b88b1d6 | 288 | pid = 0x05; //engine coolant temp |
chrta | 1:ca506b88b1d6 | 289 | } |
chrta | 2:d3d61d9d323e | 290 | msg.data[2] = pid; |
chrta | 2:d3d61d9d323e | 291 | msg.len = 8; |
chrta | 1:ca506b88b1d6 | 292 | |
chrta | 2:d3d61d9d323e | 293 | //pc.printf("Sending message\r\n"); |
chrta | 2:d3d61d9d323e | 294 | int result = can2.write(msg); //or 0x7DF ? |
chrta | 2:d3d61d9d323e | 295 | //pc.printf("Can write %d\r\n", result); |
chrta | 2:d3d61d9d323e | 296 | //pc.printf("ret 1\r\n"); |
chrta | 1:ca506b88b1d6 | 297 | } |
chrta | 0:6b1f6139fb25 | 298 | |
chrta | 0:6b1f6139fb25 | 299 | int main() { |
chrta | 2:d3d61d9d323e | 300 | pc.baud(921600); |
chrta | 2:d3d61d9d323e | 301 | //pc.attach(&serial_int_handler); |
chrta | 2:d3d61d9d323e | 302 | can2_disable = 0; |
chrta | 0:6b1f6139fb25 | 303 | can2.frequency(500000); |
chrta | 2:d3d61d9d323e | 304 | //mbed can filter is not working? check it later |
chrta | 2:d3d61d9d323e | 305 | //can2.filter |
chrta | 0:6b1f6139fb25 | 306 | can2.attach(can_rx_int_handler); |
chrta | 0:6b1f6139fb25 | 307 | Thread thread(led2_thread); |
chrta | 0:6b1f6139fb25 | 308 | Thread can_thread(can_process_packets); |
chrta | 2:d3d61d9d323e | 309 | #ifdef CAN1_TEST |
chrta | 2:d3d61d9d323e | 310 | can1_disable = 0; |
chrta | 2:d3d61d9d323e | 311 | can1.frequency(500000); |
chrta | 2:d3d61d9d323e | 312 | can1.attach(&can1_rx_int_handler); |
chrta | 2:d3d61d9d323e | 313 | Thread can1_thread(can1_process_packets); |
chrta | 3:eb807d330292 | 314 | #ifdef CAN1_OBD_CAR_SIMULATOR |
chrta | 2:d3d61d9d323e | 315 | Thread can1_tx_thread(can1_send_packets); |
chrta | 3:eb807d330292 | 316 | #endif //CAN1_OBD_CAR_SIMULATOR |
chrta | 2:d3d61d9d323e | 317 | #endif //CAN1_TEST |
chrta | 5:0b229ba8ede5 | 318 | Thread can2_send_request_thread(can2_send_requests); |
chrta | 5:0b229ba8ede5 | 319 | Thread can2_tx_thread(can2_send_packets); |
chrta | 2:d3d61d9d323e | 320 | pc.printf("Start\r\n"); |
chrta | 0:6b1f6139fb25 | 321 | while (true) { |
chrta | 0:6b1f6139fb25 | 322 | led1 = !led1; |
chrta | 0:6b1f6139fb25 | 323 | Thread::wait(500); |
chrta | 2:d3d61d9d323e | 324 | if (pc.readable()) { |
chrta | 2:d3d61d9d323e | 325 | serial_int_handler(); |
chrta | 2:d3d61d9d323e | 326 | } |
chrta | 0:6b1f6139fb25 | 327 | } |
chrta | 0:6b1f6139fb25 | 328 | } |