I messed up the merge, so pushing it over to another repo so I don't lose it. Will tidy up and remove later
Dependencies: BufferedSerial FatFileSystemCpp mbed
LTCDecode.h
- Committer:
- AndyA
- Date:
- 2021-01-15
- Revision:
- 0:97661408d0f9
- Child:
- 7:87aea27cc68b
File content as of revision 0:97661408d0f9:
#ifndef __LTCDECODE_H__ #define __LTCDECODE_H__ #include "mbed.h" const uint32_t minBitPeriodUS = (uint32_t)((1000000.0f / 2400) / 1.1f); // allow for 10% time error const uint32_t maxMidSymbolTimeUS = (uint32_t)( ((1000000.0f / (1920 * 2))) * 1.1f); // allow for 10% time error class LTCDecode { public: LTCDecode(const PinName pin); void setInputTimer(Timer *inputTimer); bool synced() { return LTCsynced; }; // reads pending data up to a sync marker, returns true is sync is found. bool searchForSync(); // reads pending data up to the end of the frame, returns true at the end of a // frame. check sync stats and lastFrameData for results. bool readWaitingData(); typedef struct { int hours; int minutes; int seconds; int frame; bool frameDrop; uint32_t frameStartTime; } LTCData_t; const LTCData_t *getLastFrame() { return &lastFrame; }; // buffer holding received LTC bits and their start times. private: void LTCOnEdge(void); InterruptIn _LTCIn; Timer *_inputTimer; LTCData_t lastFrame; static const int _newBitBufferSize_ = 80; bool newBitBuffer[_newBitBufferSize_]; uint32_t bitTimes[_newBitBufferSize_]; bool LTCsynced; volatile int newBitsWrite; int newBitsRead; // max bit period = 520.8 ms (1920 Hz) // min bit period = 416.7 ms (2400 Hz) // max period of a '1' symbol = 260.4ms (1920Hz * 2) uint32_t lastTransition; uint32_t lastBitStart; uint32_t LTCBuffer[3]; uint32_t firstMark; int markCount; uint32_t nextSecondStart; uint32_t PPSWidth; int bitCounter ; int dwordCounter ; uint32_t timeOfBit, frameStartTime; }; #endif