| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /*
- * @file dataframe.c
- *
- * @date: 31. 12. 2022
- * @author: juraj
- *
- * @brief Simple Data Frame
- *
- * Structure of data frame:
- * - starting byte (0xCC)
- * - length of frame: count of bytes in payload. Maximum length: 254 (0xFE)h
- * - payload
- *
- * Supported data types:
- * - uint8_t, int8_t
- * - uint16_t, int16_t
- * - uint32_t, int32_t
- * - float
- *
- * \code{.c}
- void main(){
- uint8_t data[128];
- packet_create(data, 128);
- packet_add_uint8(0xAB);
- packet_add_uint16(0xABCD);
- packet_add_uint32(0x12345678);
- packet_add_float(0.265);
- int data_length = packet_commit();
- }
- * \endcode
- *
- */
- #include "dataframe.h"
- uint8_t *packet;
- static volatile uint8_t length;
- static volatile uint8_t capacity;
- void packet_create(uint8_t *usr_packet, uint8_t size) {
- packet = usr_packet;
- capacity = size;
- packet[0] = HEADER_CHAR;
- packet[1] = 0; //length of packet
- length = 2;
- }
- uint8_t packet_add_uint8(uint8_t d)
- {
- if((length+1) >= capacity){
- return VALUE_ERR;
- }
- packet[length] = d;
- length++;
- return VALUE_OK;
- }
- uint8_t packet_add_uint16(uint16_t d)
- {
- if((length+2) >= capacity){
- return VALUE_ERR;
- }
- packet[length++] = (d >> 8) & 0xFF;
- packet[length++] = d & 0xFF;
- return VALUE_OK;
- }
- uint8_t packet_add_uint32(uint32_t d)
- {
- if((length+4) >= capacity){
- return VALUE_ERR;
- }
- packet[length++] = (d >> 24) & 0xFF;
- packet[length++] = (d >> 16) & 0xFF;
- packet[length++] = (d >> 8) & 0xFF;
- packet[length++] = d & 0xFF;
- return VALUE_OK;
- }
- uint8_t packet_add_int8(int8_t d)
- {
- return packet_add_uint8((uint8_t)d);
- }
- uint8_t packet_add_int16(int16_t d)
- {
- return packet_add_uint16((uint16_t)d);
- }
- uint8_t packet_add_int32(int32_t d)
- {
- return packet_add_uint32((uint32_t)d);
- }
- uint8_t packet_add_float(float f)
- {
- if((length+4) >= capacity){
- return VALUE_ERR;
- }
- uint8_t *ptr;
- ptr = (unsigned char *)&f;
- packet[length++] = *(ptr);
- packet[length++] = *(ptr+1);
- packet[length++] = *(ptr+2);
- packet[length++] = *(ptr+3);
- return VALUE_OK;
- }
- uint8_t packet_commit()
- {
- packet[1] = length;
- return length;
- }
|