fota lib for mdot

Dependents:   UQ_LoraWAN

Committer:
rklaassen
Date:
Tue Jan 15 09:25:58 2019 -0600
Revision:
8:7ba1f2abb8c0
Parent:
0:e1b89c6c6dd5
README test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 1 #ifndef _FRAGMENTATION_SESSION_H
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 2 #define _FRAGMENTATION_SESSION_H
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 3 #ifdef FOTA
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 4
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 5 #include "mbed.h"
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 6 #include "FragmentationMath.h"
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 7 #include "mDot.h"
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 8 #include "WriteFile.h"
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 9
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 10 #define MAX_PARITY 200
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 11 #define FRAG_OFFSET 3
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 12 #define MULTICAST_SESSIONS 3
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 13
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 14 class FragmentationSession {
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 15
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 16 public:
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 17 FragmentationSession(mDot* dot, std::vector<uint8_t>* ret, bool* filled, uint32_t* delay, int32_t* time_of_last_frag);
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 18 ~FragmentationSession();
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 19 void processCmd(uint8_t* payload, uint8_t size);
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 20 void reset();
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 21 bool isSetup();
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 22
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 23 private:
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 24
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 25 typedef struct {
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 26 uint8_t Padding;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 27 uint8_t FragmentSize;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 28 uint16_t NumberOfFragments;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 29 uint16_t RedundancyPackets;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 30 } FragmentationSessionOpts_t;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 31
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 32 typedef struct {
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 33 bool reset;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 34 bool failed;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 35 uint8_t fragMatrix;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 36 uint8_t blockAckDelay;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 37 uint8_t total_sessions;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 38 uint8_t mcGroupBitMask;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 39 uint8_t current_session;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 40 uint16_t index;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 41 uint16_t last_frag_num;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 42 uint32_t total_frags;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 43 FragmentationMath* math;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 44 FragmentationSessionOpts_t opts;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 45 } fragGroup;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 46
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 47
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 48 enum FragResult {
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 49 FRAG_OK,
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 50 FRAG_SIZE_INCORRECT,
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 51 FRAG_FLASH_WRITE_ERROR,
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 52 FRAG_NO_MEMORY,
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 53 FRAG_COMPLETE
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 54 };
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 55
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 56 enum FragCmd {
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 57 PACKAGE_VERSION_FRAG,
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 58 FRAG_STATUS,
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 59 FRAG_SESSION_SETUP,
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 60 FRAG_SESSION_DELETE,
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 61 DATA_FRAGMENT = 0x08,
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 62 CHECKSUM = 0x80
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 63 };
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 64
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 65 void reset(uint16_t num);
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 66 void upgradeFile(uint8_t fragIndex);
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 67 bool process_frame(uint8_t fragIndex,uint16_t index, uint8_t buffer[], size_t size);
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 68
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 69 mDot* _dot;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 70 WriteFile* _fh;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 71 fragGroup fg[MULTICAST_SESSIONS];
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 72 FragmentationSessionParams_t params;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 73
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 74 uint8_t ans;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 75 bool* _filled;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 76 bool _setup;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 77 uint32_t* _delay;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 78 uint8_t fragIndex;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 79 std::vector<uint8_t>* _ret;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 80 std::string _org_class;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 81 int32_t* _time_of_last_frag;
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 82 };
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 83 #endif
Jenkins@KEILDM1.dc.multitech.prv 0:e1b89c6c6dd5 84 #endif // _FRAGMENTATION_SESSION_H