Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
payload.cpp@17:faa4d4976d22, 2019-07-06 (annotated)
- Committer:
- hi1000
- Date:
- Sat Jul 06 09:47:09 2019 +0000
- Revision:
- 17:faa4d4976d22
- Parent:
- 16:f4277e9b8612
- Child:
- 18:e6ed582f7022
Add first command - Init
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hi1000 | 7:e0c7e624c5fa | 1 | #include "mbed.h" |
hi1000 | 17:faa4d4976d22 | 2 | #include "eventflags.h" |
hi1000 | 7:e0c7e624c5fa | 3 | |
hi1000 | 8:6105ffbaf237 | 4 | extern unsigned char rx_buffer[8], tx_buffer[8]; |
hi1000 | 7:e0c7e624c5fa | 5 | extern unsigned char rx_length, tx_length; |
hi1000 | 9:486f65124378 | 6 | extern uint8_t can_tx_data[8]; |
hi1000 | 9:486f65124378 | 7 | extern uint8_t can_rx_data[8]; |
hi1000 | 17:faa4d4976d22 | 8 | extern int current_weight; |
hi1000 | 16:f4277e9b8612 | 9 | |
hi1000 | 16:f4277e9b8612 | 10 | typedef struct can_id_d { |
hi1000 | 16:f4277e9b8612 | 11 | int dest_id; |
hi1000 | 16:f4277e9b8612 | 12 | int source_id; |
hi1000 | 16:f4277e9b8612 | 13 | int message_id; |
hi1000 | 16:f4277e9b8612 | 14 | }; |
hi1000 | 16:f4277e9b8612 | 15 | |
hi1000 | 16:f4277e9b8612 | 16 | typedef struct data_field_d { |
hi1000 | 16:f4277e9b8612 | 17 | uint8_t cmd; |
hi1000 | 16:f4277e9b8612 | 18 | uint16_t value1; |
hi1000 | 16:f4277e9b8612 | 19 | uint16_t value2; |
hi1000 | 16:f4277e9b8612 | 20 | uint16_t value3; |
hi1000 | 16:f4277e9b8612 | 21 | uint8_t value4; |
hi1000 | 16:f4277e9b8612 | 22 | }; |
hi1000 | 16:f4277e9b8612 | 23 | can_id_d can_id_s; |
hi1000 | 16:f4277e9b8612 | 24 | data_field_d can_rxdata_frame; |
hi1000 | 17:faa4d4976d22 | 25 | data_field_d can_txdata_frame; |
hi1000 | 9:486f65124378 | 26 | CANMessage tx_message; |
hi1000 | 9:486f65124378 | 27 | extern MemoryPool<CANMessage, 16> can_mpool; |
hi1000 | 9:486f65124378 | 28 | extern Queue<CANMessage, 16> can_queue; |
hi1000 | 17:faa4d4976d22 | 29 | extern void can_sendData(int can_id, uint8_t *tx_data, int length); |
hi1000 | 17:faa4d4976d22 | 30 | |
hi1000 | 7:e0c7e624c5fa | 31 | void analyzePayload() |
hi1000 | 7:e0c7e624c5fa | 32 | { |
hi1000 | 17:faa4d4976d22 | 33 | int can_id; |
hi1000 | 9:486f65124378 | 34 | int loop; |
hi1000 | 8:6105ffbaf237 | 35 | |
hi1000 | 8:6105ffbaf237 | 36 | printf("analyzePayload thread\r\n"); |
hi1000 | 8:6105ffbaf237 | 37 | while (true) { |
hi1000 | 8:6105ffbaf237 | 38 | osEvent evt = can_queue.get(); |
hi1000 | 8:6105ffbaf237 | 39 | if (evt.status == osEventMessage) { |
hi1000 | 8:6105ffbaf237 | 40 | CANMessage *message = (CANMessage*)evt.value.p; |
hi1000 | 9:486f65124378 | 41 | memcpy((void *)&tx_message, (void *)message, sizeof(tx_message)); |
hi1000 | 8:6105ffbaf237 | 42 | |
hi1000 | 9:486f65124378 | 43 | printf("analyzePayload got message id=%d 0x%08x\r\n", tx_message.id, tx_message.id); |
hi1000 | 16:f4277e9b8612 | 44 | |
hi1000 | 9:486f65124378 | 45 | for (loop = 0; loop < tx_message.len; loop++) |
hi1000 | 9:486f65124378 | 46 | { |
hi1000 | 9:486f65124378 | 47 | can_rx_data[loop] = tx_message.data[loop]; |
hi1000 | 9:486f65124378 | 48 | } |
hi1000 | 9:486f65124378 | 49 | |
hi1000 | 9:486f65124378 | 50 | printf("analyzePayload got data: length:%d\r\n", tx_message.len); |
hi1000 | 9:486f65124378 | 51 | for (loop = 0; loop < tx_message.len; loop++) |
hi1000 | 9:486f65124378 | 52 | { |
hi1000 | 9:486f65124378 | 53 | printf("data[%d]=%d\r\n", loop, can_rx_data[loop]); |
hi1000 | 9:486f65124378 | 54 | } |
hi1000 | 16:f4277e9b8612 | 55 | can_id_s.dest_id = (tx_message.id & 0x1FFC0000) >> 18; |
hi1000 | 16:f4277e9b8612 | 56 | can_id_s.source_id = (tx_message.id & 0x0003FF80) >> 7; |
hi1000 | 16:f4277e9b8612 | 57 | can_id_s.message_id = (tx_message.id & 0x0000007F) >> 0; |
hi1000 | 16:f4277e9b8612 | 58 | // memcpy((void*)&can_rxdata_frame, (void*)can_rx_data, sizeof(can_rx_data)); |
hi1000 | 16:f4277e9b8612 | 59 | can_mpool.free(message); |
hi1000 | 16:f4277e9b8612 | 60 | 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 | 61 | can_rxdata_frame.cmd = can_rx_data[0]; |
hi1000 | 16:f4277e9b8612 | 62 | can_rxdata_frame.value1 = (can_rx_data[2] << 8 ) | can_rx_data[1]; |
hi1000 | 16:f4277e9b8612 | 63 | can_rxdata_frame.value2 = (can_rx_data[4] << 8 ) | can_rx_data[3]; |
hi1000 | 16:f4277e9b8612 | 64 | can_rxdata_frame.value3 = (can_rx_data[6] << 8 ) | can_rx_data[5]; |
hi1000 | 16:f4277e9b8612 | 65 | can_rxdata_frame.value4 = can_rx_data[7]; |
hi1000 | 16:f4277e9b8612 | 66 | 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 | 17:faa4d4976d22 | 67 | switch (can_rxdata_frame.cmd) |
hi1000 | 17:faa4d4976d22 | 68 | { |
hi1000 | 17:faa4d4976d22 | 69 | case COMMAND_INIT: |
hi1000 | 17:faa4d4976d22 | 70 | can_txdata_frame.cmd = COMMAND_INIT; |
hi1000 | 17:faa4d4976d22 | 71 | can_txdata_frame.value1 = current_weight; |
hi1000 | 17:faa4d4976d22 | 72 | can_txdata_frame.value2 = 0; |
hi1000 | 17:faa4d4976d22 | 73 | can_txdata_frame.value3 = 0; |
hi1000 | 17:faa4d4976d22 | 74 | can_txdata_frame.value4 = 0; |
hi1000 | 17:faa4d4976d22 | 75 | can_tx_data[0] = can_txdata_frame.cmd; |
hi1000 | 17:faa4d4976d22 | 76 | can_tx_data[1] = (can_txdata_frame.value1 & 0x00FF); |
hi1000 | 17:faa4d4976d22 | 77 | can_tx_data[2] = ((can_txdata_frame.value1 >> 8) & 0x00FF); |
hi1000 | 17:faa4d4976d22 | 78 | can_tx_data[3] = (can_txdata_frame.value2 & 0x00FF); |
hi1000 | 17:faa4d4976d22 | 79 | can_tx_data[4] = ((can_txdata_frame.value2 >> 8) & 0x00FF); |
hi1000 | 17:faa4d4976d22 | 80 | can_tx_data[5] = (can_txdata_frame.value3 & 0x00FF); |
hi1000 | 17:faa4d4976d22 | 81 | can_tx_data[6] = ((can_txdata_frame.value3 >> 8) & 0x00FF); |
hi1000 | 17:faa4d4976d22 | 82 | can_tx_data[7] = can_txdata_frame.value4; |
hi1000 | 17:faa4d4976d22 | 83 | can_id = (can_id_s.source_id << 18) | (can_id_s.dest_id << 7) | can_id_s.message_id | 0x80000000; |
hi1000 | 17:faa4d4976d22 | 84 | can_sendData(can_id, can_tx_data, 8); |
hi1000 | 17:faa4d4976d22 | 85 | break; |
hi1000 | 17:faa4d4976d22 | 86 | default: |
hi1000 | 17:faa4d4976d22 | 87 | break; |
hi1000 | 17:faa4d4976d22 | 88 | |
hi1000 | 17:faa4d4976d22 | 89 | } |
hi1000 | 8:6105ffbaf237 | 90 | } |
hi1000 | 8:6105ffbaf237 | 91 | } |
hi1000 | 8:6105ffbaf237 | 92 | |
hi1000 | 7:e0c7e624c5fa | 93 | |
hi1000 | 7:e0c7e624c5fa | 94 | } |