浏览代码

Initial commit

Juraj Ďuďák 2 年之前
当前提交
3c3c74b76a
共有 3 个文件被更改,包括 190 次插入0 次删除
  1. 35 0
      readme.md
  2. 122 0
      src/dataframe.c
  3. 33 0
      src/dataframe.h

+ 35 - 0
readme.md

@@ -0,0 +1,35 @@
+
+# Simple wrapper for DataFrame
+
+Create formatted frame from basic types:
+ - uint8_t, int8_t
+ - uint16_t, int16_t
+ - uint32_t, int32_t
+ - float
+
+Structure of data frame:
+  - starting byte (0xCC)
+  - length of frame: count of bytes in payload. Maximum length: 254 (0xFE)h
+  - payload
+ 
+   
+
+## Basic usage
+
+```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();
+    }
+
+```

+ 122 - 0
src/dataframe.c

@@ -0,0 +1,122 @@
+/*
+ * @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;
+}

+ 33 - 0
src/dataframe.h

@@ -0,0 +1,33 @@
+/*
+ * @file dataframe.h
+ *
+ * @date: 31. 12. 2022
+ * @author: juraj
+ */
+
+#ifndef DATAFRAME_H_
+#define DATAFRAME_H_
+
+#include "stdint.h"
+
+
+#define HEADER_CHAR 0xCC
+
+#define VALUE_OK     0
+#define VALUE_ERR    1
+
+void packet_create(uint8_t *usr_packet, uint8_t size);
+
+uint8_t packet_add_uint8(uint8_t d);
+uint8_t packet_add_uint16(uint16_t d);
+uint8_t packet_add_uint32(uint32_t d);
+
+uint8_t packet_add_int8(int8_t d);
+uint8_t packet_add_int16(int16_t d);
+uint8_t packet_add_int32(int32_t d);
+
+uint8_t packet_add_float(float f);
+
+uint8_t packet_commit();
+
+#endif /* DATAFRAME_H_ */