Feng Hong / Mbed OS Nucleo_rtos_basic
Committer:
hi1000
Date:
Sat Jun 29 09:53:19 2019 +0000
Revision:
16:f4277e9b8612
Parent:
9:486f65124378
Child:
17:faa4d4976d22
add device_type and command struct

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hi1000 7:e0c7e624c5fa 1 #include "mbed.h"
hi1000 7:e0c7e624c5fa 2
hi1000 8:6105ffbaf237 3 extern unsigned char rx_buffer[8], tx_buffer[8];
hi1000 7:e0c7e624c5fa 4 extern unsigned char rx_length, tx_length;
hi1000 9:486f65124378 5 extern uint8_t can_tx_data[8];
hi1000 9:486f65124378 6 extern uint8_t can_rx_data[8];
hi1000 16:f4277e9b8612 7
hi1000 16:f4277e9b8612 8 typedef struct can_id_d {
hi1000 16:f4277e9b8612 9 int dest_id;
hi1000 16:f4277e9b8612 10 int source_id;
hi1000 16:f4277e9b8612 11 int message_id;
hi1000 16:f4277e9b8612 12 };
hi1000 16:f4277e9b8612 13
hi1000 16:f4277e9b8612 14 typedef struct data_field_d {
hi1000 16:f4277e9b8612 15 uint8_t cmd;
hi1000 16:f4277e9b8612 16 uint16_t value1;
hi1000 16:f4277e9b8612 17 uint16_t value2;
hi1000 16:f4277e9b8612 18 uint16_t value3;
hi1000 16:f4277e9b8612 19 uint8_t value4;
hi1000 16:f4277e9b8612 20 };
hi1000 16:f4277e9b8612 21 can_id_d can_id_s;
hi1000 16:f4277e9b8612 22 data_field_d can_rxdata_frame;
hi1000 9:486f65124378 23 CANMessage tx_message;
hi1000 9:486f65124378 24 extern MemoryPool<CANMessage, 16> can_mpool;
hi1000 9:486f65124378 25 extern Queue<CANMessage, 16> can_queue;
hi1000 7:e0c7e624c5fa 26 void analyzePayload()
hi1000 7:e0c7e624c5fa 27 {
hi1000 9:486f65124378 28 int loop;
hi1000 8:6105ffbaf237 29
hi1000 8:6105ffbaf237 30 printf("analyzePayload thread\r\n");
hi1000 8:6105ffbaf237 31 while (true) {
hi1000 8:6105ffbaf237 32 osEvent evt = can_queue.get();
hi1000 8:6105ffbaf237 33 if (evt.status == osEventMessage) {
hi1000 8:6105ffbaf237 34 CANMessage *message = (CANMessage*)evt.value.p;
hi1000 9:486f65124378 35 memcpy((void *)&tx_message, (void *)message, sizeof(tx_message));
hi1000 8:6105ffbaf237 36
hi1000 9:486f65124378 37 printf("analyzePayload got message id=%d 0x%08x\r\n", tx_message.id, tx_message.id);
hi1000 16:f4277e9b8612 38
hi1000 9:486f65124378 39 for (loop = 0; loop < tx_message.len; loop++)
hi1000 9:486f65124378 40 {
hi1000 9:486f65124378 41 can_rx_data[loop] = tx_message.data[loop];
hi1000 9:486f65124378 42 }
hi1000 9:486f65124378 43
hi1000 9:486f65124378 44 printf("analyzePayload got data: length:%d\r\n", tx_message.len);
hi1000 9:486f65124378 45 for (loop = 0; loop < tx_message.len; loop++)
hi1000 9:486f65124378 46 {
hi1000 9:486f65124378 47 printf("data[%d]=%d\r\n", loop, can_rx_data[loop]);
hi1000 9:486f65124378 48 }
hi1000 16:f4277e9b8612 49 can_id_s.dest_id = (tx_message.id & 0x1FFC0000) >> 18;
hi1000 16:f4277e9b8612 50 can_id_s.source_id = (tx_message.id & 0x0003FF80) >> 7;
hi1000 16:f4277e9b8612 51 can_id_s.message_id = (tx_message.id & 0x0000007F) >> 0;
hi1000 16:f4277e9b8612 52 // memcpy((void*)&can_rxdata_frame, (void*)can_rx_data, sizeof(can_rx_data));
hi1000 16:f4277e9b8612 53 can_mpool.free(message);
hi1000 16:f4277e9b8612 54 printf("dest_id=%d source_id=%d message_id=%d \r\n", can_id_s.dest_id, can_id_s.source_id, can_id_s.message_id);
hi1000 16:f4277e9b8612 55 can_rxdata_frame.cmd = can_rx_data[0];
hi1000 16:f4277e9b8612 56 can_rxdata_frame.value1 = (can_rx_data[2] << 8 ) | can_rx_data[1];
hi1000 16:f4277e9b8612 57 can_rxdata_frame.value2 = (can_rx_data[4] << 8 ) | can_rx_data[3];
hi1000 16:f4277e9b8612 58 can_rxdata_frame.value3 = (can_rx_data[6] << 8 ) | can_rx_data[5];
hi1000 16:f4277e9b8612 59 can_rxdata_frame.value4 = can_rx_data[7];
hi1000 16:f4277e9b8612 60 printf("cmd=%d, value1=0x%04x, value2=0x%04x, value3=0x%04x, value4=0x%02x \r\n", can_rxdata_frame.cmd, can_rxdata_frame.value1, can_rxdata_frame.value2, can_rxdata_frame.value3, can_rxdata_frame.value4);
hi1000 8:6105ffbaf237 61 }
hi1000 8:6105ffbaf237 62 }
hi1000 8:6105ffbaf237 63
hi1000 7:e0c7e624c5fa 64
hi1000 7:e0c7e624c5fa 65 }