Project

General

Profile

DSP Binary message template

When creating a non string based message scheme it is common to use structs with a common header. Note that seq_no, majrev, minrev may not always be useful.
For example:

typedef struct
{
    uint8_t                         sig1;          // 2 byte identification
    uint8_t                         sig2;          // 
    uint8_t                         id;            // message ID
    uint8_t                         seq_no;        // sequence number
    uint8_t                         majrev;        // message revision
    uint8_t                         minrev;        // message revision
    uint16_t                        length;        // following bytes of data
} header_type;

typedef struct
{
    header_type                     header;         // length 4
    int32_t                         value;          // generic message type to pass integer
} tsIntValMsgType;

typedef struct
{
    header_type                     header;         // length 8
    uint32_t                        num_data;
    uint32_t *                      data_ptr;       // Pointer to shared memory. copied to ARM using tcDspApp::ReadMemory() call.
} tsData;

And have a union that combines all your message types for inital parsing.

union dsp_messages
{
    header_type                     header;

    tsIntValMsgType                 int_val_msg;

    tsData                          data_response;

    unsigned char                   data[MAX_MSG_LENGTH + sizeof(header_type)];
};

Then in your inbound message handler you can do something like.

    if (buffer != NULL && length != 0)
    {
        const dsp_messages *pmsg = (const dsp_messages*) buffer;

        // Check the message signature
        if (pmsg->header.sig1 != cnSig1 || pmsg->header.sig2 < cnSig2)
        {
            // PRINT ERROR MESSAGE
            goto inbounddone;
        }

        // Other data handling/verification

        // Switch on header.id and cast pmsg to the correct struct. And call a function that handles that particular message type.
    }

Go to top
Add picture from clipboard (Maximum size: 1 GB)