fota lib for mdot

Dependents:   UQ_LoraWAN

Revision:
0:e1b89c6c6dd5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mdot/FragmentationMath.h	Fri Sep 14 10:27:09 2018 -0500
@@ -0,0 +1,62 @@
+#ifndef _FRAGMENTATION_MATH_H
+#define _FRAGMENTATION_MATH_H
+#ifdef FOTA
+
+#include "mbed.h"
+#include "mDot.h"
+#include "WriteFile.h"
+
+#define FRAG_SESSION_ONGOING    0xffffffff
+
+typedef struct {
+    uint16_t NbOfFrag;   
+    uint16_t Redundancy;
+    uint8_t  DataSize; 
+} FragmentationSessionParams_t;
+
+class FragmentationMath
+{
+  public:
+    FragmentationMath(mDot* dot, uint16_t frame_count, uint8_t frame_size, uint16_t redundancy_max,  WriteFile* fh);
+    ~FragmentationMath();
+    bool initialize();
+    int get_lost_frame_count();
+    void reset(uint16_t fcount);
+    void set_frame_found(uint16_t frameCounter);
+    bool process_redundant_frame(uint16_t frameCounter, uint8_t *rowData, FragmentationSessionParams_t sFotaParameter);
+
+  private:
+    int FragmentationPrbs23(int x);
+    bool IsPowerOfTwo(unsigned int x);
+    uint16_t FindMissingFrameIndex(uint16_t x);
+    void GetRowInFlash(int l, uint8_t *rowData);
+    int FindFirstOne(uint8_t *boolData, int size);
+    bool VectorIsNull(uint8_t *boolData, int size);
+    void StoreRowInFlash(uint8_t *rowData, int index);
+    void FindMissingReceiveFrame(uint16_t frameCounter);
+    void XorLineData(uint8_t *dataL1, uint8_t *dataL2, int size);
+    void XorLineBool(uint8_t *dataL1, uint8_t *dataL2, int size);
+    void FragmentationGetParityMatrixRow(int N, int M, uint8_t *matrixRow);
+    void PushLineToBinaryMatrix(uint8_t *boolVector, int rownumber, int numberOfBit);
+    void ExtractLineFromBinaryMatrix(uint8_t *boolVector, int rownumber, int numberOfBit);
+
+    int m2l;
+    uint8_t _frame_size; 
+    uint16_t _frame_count;
+    uint16_t _redundancy_max;
+    uint16_t numFramesMissing;
+    uint16_t lastReceiveFrameCnt;
+
+    uint8_t *s;
+    uint8_t *matrixM2B;
+    uint8_t *matrixRow;
+    uint8_t *matrixDataTemp;
+    uint8_t *dataTempVector;
+    uint8_t *dataTempVector2;
+    uint8_t *missingFrameIndex;
+
+    mDot* _dot;
+    WriteFile* _fh;
+};
+#endif
+#endif // _FRAGMENTATION_MATH_H