diff --git a/protocol/main.c b/protocol/main.c new file mode 100644 index 0000000..6b193c3 --- /dev/null +++ b/protocol/main.c @@ -0,0 +1,37 @@ +#include "protocol.h" +#include "stdio.h" + +int main(){ + printf("Test number\n"); + char number = 112; + uint8_t buffer_number[] = {}; + size_t len_buffer_number; + protocol_encode_number(number, buffer_number, &len_buffer_number); + for (int i = 0; i < len_buffer_number; i++){ + printf("buffer %d: %d\n", i, buffer_number[i]); + } + + printf("---------------------------------------\n"); + + char encode_message_number[] = {}; + size_t len_message_number; + protocol_decode(buffer_number, len_buffer_number, encode_message_number, &len_message_number); + printf("number: %d\n", encode_message_number[0]); + + printf("\nTest word\n"); + char* word = "word"; + uint8_t buffer[] = {}; + size_t len_buffer; + protocol_encode_word(word, strlen(word), buffer, &len_buffer); + for (int i = 0; i < len_buffer; i++){ + printf("buffer %d: %d\n", i, buffer[i]); + } + + printf("---------------------------------------\n"); + + char encode_message[] = {}; + size_t len_message; + protocol_decode(buffer, len_buffer, encode_message, &len_message); + printf("message: %s\n", encode_message); + return 0; +} \ No newline at end of file diff --git a/protocol/protocol.c b/protocol/protocol.c new file mode 100644 index 0000000..c6dead7 --- /dev/null +++ b/protocol/protocol.c @@ -0,0 +1,39 @@ +#include "protocol.h" + +void protocol_decode(uint8_t encode_message[], size_t len_encode_message, char decode_message[], size_t* len_decode_message){ + int count = 0; + for(int i = 0; i < len_encode_message; i++){ + switch (encode_message[i]) { + case FLAG_NUMBER: + i++; + decode_message[count++] = encode_message[i]; // max 127 + i++; + break; + case FLAG_WORD: + i++; + for (int z = 0; z < encode_message[i]; z++){ + i++; + decode_message[count++] = encode_message[i]; + } + break; + } + } + *len_decode_message = count; +} + +void protocol_encode_number(char number, uint8_t encode_message[], size_t* len_encode_message){ + int count = 0; + encode_message[count++] = FLAG_NUMBER; + encode_message[count++] = number; + *len_encode_message = count; +} + +void protocol_encode_word(char decode_word[], size_t len_encode_word, uint8_t encode_message[], size_t* len_encode_message){ + int count = 0; + encode_message[count++] = FLAG_WORD; + encode_message[count++] = len_encode_word; + for (int i = 0; i < len_encode_word; i++){ + encode_message[count++] = decode_word[i]; + } + *len_encode_message = count; +} \ No newline at end of file diff --git a/protocol/protocol.h b/protocol/protocol.h new file mode 100644 index 0000000..53819c4 --- /dev/null +++ b/protocol/protocol.h @@ -0,0 +1,14 @@ +#ifndef PROTOCOL_H +#define PROTOCOL_H + +#include +#include + +#define FLAG_NUMBER 0 +#define FLAG_WORD 1 + +void protocol_decode(uint8_t encode_message[], size_t len_encode_message, char decode_message[], size_t* len_decode_message); +void protocol_encode_number(char number, uint8_t encode_message[], size_t* len_encode_message); +void protocol_encode_word(char decode_word[], size_t len_encode_word, uint8_t encode_message[], size_t* len_encode_message); + +#endif //PROTOCOL_H