56 lines
1.8 KiB
C++
56 lines
1.8 KiB
C++
#include "protocol.h"
|
|
|
|
void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message){
|
|
int count_number = 0;
|
|
for(int i = 0; i < len_encode_message; i++){
|
|
if (encode_message[i] == FLAG_NUMBER){
|
|
union convert_float sample;
|
|
for (int z = 0; z < sizeof sample.buf; z++){
|
|
i++;
|
|
sample.buf[z] = encode_message[i];
|
|
}
|
|
decode_message->numbers[count_number++] = sample.fVal;
|
|
decode_message->len_numbers++;
|
|
}
|
|
|
|
|
|
if (encode_message[i] == FLAG_WORD){
|
|
int count_word = 0;
|
|
i++;
|
|
union convert_char sample;
|
|
for (int z = 0; z < encode_message[i]; z++){
|
|
i++;
|
|
sample.buf[z] = encode_message[i];
|
|
}
|
|
decode_message->str = sample.cVal;
|
|
decode_message->len_str = count_word;
|
|
}
|
|
}
|
|
decode_message->len_numbers = count_number;
|
|
}
|
|
|
|
void protocol_encode(struct message message, uint8_t encode_message[], size_t* len_encode_message){
|
|
size_t count = 0;
|
|
if (message.len_numbers > 0){
|
|
for (int i = 0; i < message.len_numbers; i++){
|
|
encode_message[count++] = FLAG_NUMBER;
|
|
union convert_float sample;
|
|
sample.fVal = message.numbers[i];
|
|
for (int z = 0; z < sizeof sample.buf; z++){
|
|
encode_message[count++] = sample.buf[z];
|
|
}
|
|
}
|
|
}
|
|
|
|
if (message.len_str > 0){
|
|
encode_message[count++] = FLAG_WORD;
|
|
encode_message[count++] = message.len_str;
|
|
union convert_char sample;
|
|
sample.cVal = message.str;
|
|
for (int i = 0; i < message.len_str; i++){
|
|
encode_message[count++] = sample.buf[i];
|
|
}
|
|
}
|
|
|
|
*len_encode_message = count;
|
|
} |