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@9:7214e3c3e5f8, 2021-02-18 (annotated)
- Committer:
- AndyA
- Date:
- Thu Feb 18 18:15:48 2021 +0000
- Revision:
- 9:7214e3c3e5f8
- Parent:
- 7:87aea27cc68b
- Child:
- 10:053bac3e326b
massive ripup and redesign; currently has file system build errors
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AndyA | 0:97661408d0f9 | 1 | #ifndef __LTCDECODE_H__ |
AndyA | 0:97661408d0f9 | 2 | #define __LTCDECODE_H__ |
AndyA | 0:97661408d0f9 | 3 | |
AndyA | 0:97661408d0f9 | 4 | #include "mbed.h" |
AndyA | 0:97661408d0f9 | 5 | |
AndyA | 0:97661408d0f9 | 6 | |
AndyA | 9:7214e3c3e5f8 | 7 | class LTCDecode |
AndyA | 9:7214e3c3e5f8 | 8 | { |
AndyA | 0:97661408d0f9 | 9 | |
AndyA | 0:97661408d0f9 | 10 | public: |
AndyA | 9:7214e3c3e5f8 | 11 | LTCDecode(const PinName pin); |
AndyA | 0:97661408d0f9 | 12 | |
AndyA | 9:7214e3c3e5f8 | 13 | inline bool synced() |
AndyA | 9:7214e3c3e5f8 | 14 | { |
AndyA | 9:7214e3c3e5f8 | 15 | return LTCsynced; |
AndyA | 9:7214e3c3e5f8 | 16 | }; |
AndyA | 0:97661408d0f9 | 17 | |
AndyA | 9:7214e3c3e5f8 | 18 | void enable(bool enable); |
AndyA | 0:97661408d0f9 | 19 | |
AndyA | 9:7214e3c3e5f8 | 20 | void attachFrame(void (*callback)(void)) |
AndyA | 9:7214e3c3e5f8 | 21 | { |
AndyA | 9:7214e3c3e5f8 | 22 | FrameCallback.attach(callback); |
AndyA | 9:7214e3c3e5f8 | 23 | } |
AndyA | 0:97661408d0f9 | 24 | |
AndyA | 9:7214e3c3e5f8 | 25 | inline void getTime(int *hour, int *minute, int *second, int *frame) |
AndyA | 9:7214e3c3e5f8 | 26 | { |
AndyA | 9:7214e3c3e5f8 | 27 | *hour = _hours; |
AndyA | 9:7214e3c3e5f8 | 28 | *minute = _minutes; |
AndyA | 9:7214e3c3e5f8 | 29 | *second = _seconds; |
AndyA | 9:7214e3c3e5f8 | 30 | *frame = _frame; |
AndyA | 9:7214e3c3e5f8 | 31 | } |
AndyA | 9:7214e3c3e5f8 | 32 | |
AndyA | 9:7214e3c3e5f8 | 33 | inline bool isFrameDrop() {return _frameDrop;} |
AndyA | 0:97661408d0f9 | 34 | |
AndyA | 9:7214e3c3e5f8 | 35 | template<typename T> |
AndyA | 9:7214e3c3e5f8 | 36 | void attachFrame(T* tptr, void (T::*mptr)(void)) |
AndyA | 9:7214e3c3e5f8 | 37 | { |
AndyA | 9:7214e3c3e5f8 | 38 | FrameCallback.attach(tptr, mptr); |
AndyA | 9:7214e3c3e5f8 | 39 | } |
AndyA | 0:97661408d0f9 | 40 | |
AndyA | 9:7214e3c3e5f8 | 41 | // buffer holding received LTC bits and their start times. |
AndyA | 0:97661408d0f9 | 42 | |
AndyA | 0:97661408d0f9 | 43 | private: |
AndyA | 9:7214e3c3e5f8 | 44 | void LTCOnEdge(void); |
AndyA | 0:97661408d0f9 | 45 | |
AndyA | 9:7214e3c3e5f8 | 46 | InterruptIn _LTCIn; |
AndyA | 9:7214e3c3e5f8 | 47 | Timer inputTimer; |
AndyA | 0:97661408d0f9 | 48 | |
AndyA | 9:7214e3c3e5f8 | 49 | FunctionPointer FrameCallback; |
AndyA | 0:97661408d0f9 | 50 | |
AndyA | 9:7214e3c3e5f8 | 51 | // add a bit. Return true if we got the end of frame pattern |
AndyA | 9:7214e3c3e5f8 | 52 | bool addBitToBuffer(bool bit); |
AndyA | 9:7214e3c3e5f8 | 53 | void decodeTime(); |
AndyA | 9:7214e3c3e5f8 | 54 | int _hours; |
AndyA | 9:7214e3c3e5f8 | 55 | int _minutes; |
AndyA | 9:7214e3c3e5f8 | 56 | int _seconds; |
AndyA | 9:7214e3c3e5f8 | 57 | int _frame; |
AndyA | 9:7214e3c3e5f8 | 58 | bool _frameDrop; |
AndyA | 0:97661408d0f9 | 59 | |
AndyA | 9:7214e3c3e5f8 | 60 | bool LTCsynced; |
AndyA | 0:97661408d0f9 | 61 | |
AndyA | 9:7214e3c3e5f8 | 62 | volatile int newBitsWrite; |
AndyA | 9:7214e3c3e5f8 | 63 | int newBitsRead; |
AndyA | 0:97661408d0f9 | 64 | |
AndyA | 9:7214e3c3e5f8 | 65 | // max bit period = 520.8 ms (1920 Hz) |
AndyA | 9:7214e3c3e5f8 | 66 | // min bit period = 416.7 ms (2400 Hz) |
AndyA | 9:7214e3c3e5f8 | 67 | // max period of a '1' symbol = 260.4ms (1920Hz * 2) |
AndyA | 9:7214e3c3e5f8 | 68 | |
AndyA | 9:7214e3c3e5f8 | 69 | uint32_t lastTransition; |
AndyA | 9:7214e3c3e5f8 | 70 | uint32_t lastBitStart; |
AndyA | 9:7214e3c3e5f8 | 71 | |
AndyA | 9:7214e3c3e5f8 | 72 | uint32_t LTCBuffer[3]; |
AndyA | 0:97661408d0f9 | 73 | }; |
AndyA | 0:97661408d0f9 | 74 | |
AndyA | 0:97661408d0f9 | 75 | #endif |