Feng Hong / Mbed OS Nucleo_rtos_basic

payload.cpp

Committer:
hi1000
Date:
2019-06-29
Revision:
16:f4277e9b8612
Parent:
9:486f65124378
Child:
17:faa4d4976d22

File content as of revision 16:f4277e9b8612:

#include "mbed.h"

extern unsigned char rx_buffer[8], tx_buffer[8];
extern unsigned char rx_length, tx_length;
extern uint8_t can_tx_data[8];
extern uint8_t can_rx_data[8];

typedef struct can_id_d {
    int dest_id;
    int source_id;
    int message_id;
};

typedef struct data_field_d {
    uint8_t cmd;
    uint16_t value1;
    uint16_t value2;
    uint16_t value3;
    uint8_t value4;
};
can_id_d can_id_s;
data_field_d can_rxdata_frame;
CANMessage tx_message;
extern MemoryPool<CANMessage, 16> can_mpool;
extern Queue<CANMessage, 16> can_queue;
void analyzePayload()
{
    int loop;
    
    printf("analyzePayload thread\r\n");
    while (true) {
        osEvent evt = can_queue.get();
        if (evt.status == osEventMessage) {
            CANMessage *message = (CANMessage*)evt.value.p;
            memcpy((void *)&tx_message, (void *)message, sizeof(tx_message)); 

            printf("analyzePayload got message id=%d 0x%08x\r\n", tx_message.id, tx_message.id);

            for (loop = 0; loop < tx_message.len; loop++)
            {
                can_rx_data[loop] = tx_message.data[loop];
            }
            
            printf("analyzePayload got data: length:%d\r\n", tx_message.len);
            for (loop = 0; loop < tx_message.len; loop++)
            {
                printf("data[%d]=%d\r\n", loop, can_rx_data[loop]);
            }  
            can_id_s.dest_id = (tx_message.id & 0x1FFC0000) >> 18;
            can_id_s.source_id = (tx_message.id & 0x0003FF80) >> 7;
            can_id_s.message_id = (tx_message.id & 0x0000007F) >> 0;
//            memcpy((void*)&can_rxdata_frame, (void*)can_rx_data, sizeof(can_rx_data));            
            can_mpool.free(message);   
            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);
            can_rxdata_frame.cmd = can_rx_data[0];
            can_rxdata_frame.value1 = (can_rx_data[2] << 8 ) | can_rx_data[1];
            can_rxdata_frame.value2 = (can_rx_data[4] << 8 ) | can_rx_data[3];
            can_rxdata_frame.value3 = (can_rx_data[6] << 8 ) | can_rx_data[5];
            can_rxdata_frame.value4 = can_rx_data[7];
            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);                             
        }
    }   
        
    
}