fota lib for mdot
mdot/FragmentationSession.h@8:7ba1f2abb8c0, 2019-01-15 (annotated)
- 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?
User | Revision | Line number | New 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 |