瀏覽代碼

OO version

Juraj Ďuďák 2 年之前
父節點
當前提交
6979f8b6d8
共有 3 個文件被更改,包括 37 次插入201 次删除
  1. 15 9
      readme.md
  2. 0 175
      src/dataframe.c
  3. 22 17
      src/dataframe.h

+ 15 - 9
readme.md

@@ -1,4 +1,5 @@
 
+
 # Simple wrapper for DataFrame
 
 Create formatted frame from basic types:
@@ -15,6 +16,10 @@ Structure of data frame:
   - payload
   - CRC8
  
+ The library contans universal function:
+ - `uint8_t crc8(uint8_t crc, uint8_t Size, uint8_t *Buffer);`
+  - crc - inital value for CRC computig. For new frame, use 0x0
+  - Size - size of data Buffer
    
 
 ## Basic usage
@@ -24,18 +29,19 @@ Structure of data frame:
     void main(){
     uint8_t data[128];
 
-    packet_create(data, 128);
+    DataFrame packet(data_packet, sizeof(data_packet));
 
-    packet_add_uint8(0xAB);
-    packet_add_uint16(65874);
-    packet_add_int16(-45874);
-    packet_add_uint32(0x12345678);
-    packet_add_int32(-0xA2345678);
+    packet.AddUint8(0xAB);
+    packet.AddUint16(65874);
+    packet.AddInt8(-45874);
+    packet.AddUint32(0x12345678);
+    packet.AddInt32(-0xA2345678);
     
-    packet_add_float(0.265);
-    packet_add_float(-3.1415);
+    packet.AddFloat(0.265);
+    packet.AddFloat(-3.1415);
 
-    int data_length = packet_commit();
+    int data_length = packet.Commit();
+    uint8_t* frame = packet.GetFrame();
     }
 
 ```

+ 0 - 175
src/dataframe.c

@@ -1,175 +0,0 @@
-/*
- * @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. The first 2 bytes is not included to overal length. Maximum length: 254 (0xFE)
- * - payload
- * - CRC8
- *
- *  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;
-
-uint8_t crc8(uint8_t crc, uint8_t Size, uint8_t *Buffer)
-{
-    // https://community.st.com/s/question/0D50X0000CDmAkpSQF/calculate-crc8
-    static const unsigned char CrcTable[] = { // 0x97 Polynomial Table, 8-bit,
-            0x00,0x97,0xB9,0x2E,0xE5,0x72,0x5C,0xCB,
-            0x5D,0xCA,0xE4,0x73,0xB8,0x2F,0x01,0x96,
-            0xBA,0x2D,0x03,0x94,0x5F,0xC8,0xE6,0x71,
-            0xE7,0x70,0x5E,0xC9,0x02,0x95,0xBB,0x2C,
-            0xE3,0x74,0x5A,0xCD,0x06,0x91,0xBF,0x28,
-            0xBE,0x29,0x07,0x90,0x5B,0xCC,0xE2,0x75,
-            0x59,0xCE,0xE0,0x77,0xBC,0x2B,0x05,0x92,
-            0x04,0x93,0xBD,0x2A,0xE1,0x76,0x58,0xCF,
-            0x51,0xC6,0xE8,0x7F,0xB4,0x23,0x0D,0x9A,
-            0x0C,0x9B,0xB5,0x22,0xE9,0x7E,0x50,0xC7,
-            0xEB,0x7C,0x52,0xC5,0x0E,0x99,0xB7,0x20,
-            0xB6,0x21,0x0F,0x98,0x53,0xC4,0xEA,0x7D,
-            0xB2,0x25,0x0B,0x9C,0x57,0xC0,0xEE,0x79,
-            0xEF,0x78,0x56,0xC1,0x0A,0x9D,0xB3,0x24,
-            0x08,0x9F,0xB1,0x26,0xED,0x7A,0x54,0xC3,
-            0x55,0xC2,0xEC,0x7B,0xB0,0x27,0x09,0x9E,
-            0xA2,0x35,0x1B,0x8C,0x47,0xD0,0xFE,0x69,
-            0xFF,0x68,0x46,0xD1,0x1A,0x8D,0xA3,0x34,
-            0x18,0x8F,0xA1,0x36,0xFD,0x6A,0x44,0xD3,
-            0x45,0xD2,0xFC,0x6B,0xA0,0x37,0x19,0x8E,
-            0x41,0xD6,0xF8,0x6F,0xA4,0x33,0x1D,0x8A,
-            0x1C,0x8B,0xA5,0x32,0xF9,0x6E,0x40,0xD7,
-            0xFB,0x6C,0x42,0xD5,0x1E,0x89,0xA7,0x30,
-            0xA6,0x31,0x1F,0x88,0x43,0xD4,0xFA,0x6D,
-            0xF3,0x64,0x4A,0xDD,0x16,0x81,0xAF,0x38,
-            0xAE,0x39,0x17,0x80,0x4B,0xDC,0xF2,0x65,
-            0x49,0xDE,0xF0,0x67,0xAC,0x3B,0x15,0x82,
-            0x14,0x83,0xAD,0x3A,0xF1,0x66,0x48,0xDF,
-            0x10,0x87,0xA9,0x3E,0xF5,0x62,0x4C,0xDB,
-            0x4D,0xDA,0xF4,0x63,0xA8,0x3F,0x11,0x86,
-            0xAA,0x3D,0x13,0x84,0x4F,0xD8,0xF6,0x61,
-            0xF7,0x60,0x4E,0xD9,0x12,0x85,0xAB,0x3C };
-
-    while(Size--)
-    {
-        crc = crc ^ *Buffer++; // Apply Byte
-        crc = CrcTable[crc & 0xFF]; // One round of 8-bits
-    }
-
-    return(crc);
-}
-
-
-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 & 0xFF;
-	packet[length++] = (d >> 8) & 0xFF;
-	packet[length++] = (d >> 16) & 0xFF;
-	packet[length++] = (d >> 24) & 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()
-{
-	// compute CRC
-	packet[length--] = crc8(0, length-2, &(*(packet+2)));
-	packet[1] = length;
-	// length of payload: from byte 2 to CRC byte (the last)
-	return length;
-
-}

+ 22 - 17
src/dataframe.h

@@ -10,30 +10,35 @@
 
 #include "stdint.h"
 
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-
 #define HEADER_CHAR 0xCC
 
-#define VALUE_OK     0
-#define VALUE_ERR    1
 
-void packet_create(uint8_t *usr_packet, uint8_t size);
+class DataFrame{
 
-uint8_t packet_add_uint8(uint8_t d);
-uint8_t packet_add_uint16(uint16_t d);
-uint8_t packet_add_uint32(uint32_t d);
+private:
+	uint8_t *_frame;
+	uint8_t _length;
+	uint8_t _capacity;
 
-uint8_t packet_add_int8(int8_t d);
-uint8_t packet_add_int16(int16_t d);
-uint8_t packet_add_int32(int32_t d);
+public:
+	DataFrame(uint8_t*, uint8_t);
+	void Init(void);
+	bool AddUint8(uint8_t);
+	bool AddUint16(uint16_t);
+	bool AddUint32(uint32_t);
+	bool AddInt8(int8_t);
+	bool AddInt16(int16_t);
+	bool AddInt32(int32_t);
+	bool AddFloat(float);
+	uint8_t Commit(void);
+	uint8_t* GetFrame(void);
+};
 
-uint8_t packet_add_float(float f);
+#ifdef __cplusplus
+ extern "C" {
+#endif
 
-uint8_t packet_commit();
+uint8_t crc8(uint8_t crc, uint8_t Size, uint8_t *Buffer);
 
 #ifdef __cplusplus
 }