project atmel
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
#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;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
#ifndef PROTOCOL_H
|
||||
#define PROTOCOL_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "stdio.h"
|
||||
|
||||
#define FLAG_NUMBER 0
|
||||
#define FLAG_WORD 1
|
||||
|
||||
struct message{
|
||||
float numbers[3];
|
||||
size_t len_numbers;
|
||||
char* str;
|
||||
size_t len_str;
|
||||
};
|
||||
|
||||
union convert_float{
|
||||
float fVal;
|
||||
uint8_t buf[4];
|
||||
};
|
||||
|
||||
union convert_char{
|
||||
char* cVal;
|
||||
uint8_t buf[64];
|
||||
};
|
||||
|
||||
void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message);
|
||||
void protocol_encode(struct message message, uint8_t encode_message[], size_t* len_encode_message);
|
||||
|
||||
#endif //PROTOCOL_H
|
||||
Reference in New Issue
Block a user