Display_Avr_3/main_sketch/protocol.c
2024-02-22 10:36:10 +03:00

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;
}