2020 Abend Lab

Committer:
hollegha3
Date:
Thu Jun 18 17:17:39 2020 +0000
Revision:
8:2f81517a2d7c
Parent:
0:e0131e671ea0
2020  Abend Lab

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hollegha2 0:e0131e671ea0 1
hollegha2 0:e0131e671ea0 2 #ifndef Serial_HL_h
hollegha2 0:e0131e671ea0 3 #define Serial_HL_h
hollegha2 0:e0131e671ea0 4
hollegha2 0:e0131e671ea0 5 #include "platform.h"
hollegha2 0:e0131e671ea0 6 // #include "Stream.h"
hollegha2 0:e0131e671ea0 7 #include "FunctionPointer.h"
hollegha2 0:e0131e671ea0 8 #include "serial_api.h"
hollegha2 0:e0131e671ea0 9 #include "SvProtocol.h"
hollegha2 0:e0131e671ea0 10
hollegha2 0:e0131e671ea0 11 namespace mbed {
hollegha2 0:e0131e671ea0 12
hollegha2 0:e0131e671ea0 13 class SerialBLK : public IStreamHL {
hollegha2 0:e0131e671ea0 14 public:
hollegha2 0:e0131e671ea0 15 SerialBLK(PinName tx, PinName rx);
hollegha2 0:e0131e671ea0 16 void baud(int baudrate);
hollegha2 0:e0131e671ea0 17
hollegha2 0:e0131e671ea0 18 virtual void PutChar(int aCh);
hollegha2 0:e0131e671ea0 19 virtual int GetChar();
hollegha2 0:e0131e671ea0 20 virtual void Write(void* aData, uint32_t aLenBytes);
hollegha2 0:e0131e671ea0 21 virtual void Read(void* aData, uint32_t aLenBytes);
hollegha2 0:e0131e671ea0 22
hollegha2 0:e0131e671ea0 23 enum Parity {
hollegha2 0:e0131e671ea0 24 None = 0,
hollegha2 0:e0131e671ea0 25 Odd,
hollegha2 0:e0131e671ea0 26 Even,
hollegha2 0:e0131e671ea0 27 Forced1,
hollegha2 0:e0131e671ea0 28 Forced0
hollegha2 0:e0131e671ea0 29 };
hollegha2 0:e0131e671ea0 30 enum IrqType {
hollegha2 0:e0131e671ea0 31 RxIrq = 0,
hollegha2 0:e0131e671ea0 32 TxIrq
hollegha2 0:e0131e671ea0 33 };
hollegha2 0:e0131e671ea0 34
hollegha2 0:e0131e671ea0 35 void format(int bits=8, Parity parity=SerialBLK::None, int stop_bits=1);
hollegha2 0:e0131e671ea0 36
hollegha2 0:e0131e671ea0 37 int readable();
hollegha2 0:e0131e671ea0 38 int writeable();
hollegha2 0:e0131e671ea0 39 int IsDataAvail()
hollegha2 0:e0131e671ea0 40 { return readable(); }
hollegha2 0:e0131e671ea0 41
hollegha2 0:e0131e671ea0 42 // fptr A pointer to a void function, or 0 to set as none
hollegha2 0:e0131e671ea0 43 // type Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty)
hollegha2 0:e0131e671ea0 44 void attach(void (*fptr)(void), IrqType type=RxIrq);
hollegha2 0:e0131e671ea0 45
hollegha2 0:e0131e671ea0 46 // tptr pointer to the object to call the member function on
hollegha2 0:e0131e671ea0 47 // mptr pointer to the member function to be called
hollegha2 0:e0131e671ea0 48 // type Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty)
hollegha2 0:e0131e671ea0 49 template<typename T>
hollegha2 0:e0131e671ea0 50 void attach(T* tptr, void (T::*mptr)(void), IrqType type=RxIrq) {
hollegha2 0:e0131e671ea0 51 if((mptr != NULL) && (tptr != NULL)) {
hollegha2 0:e0131e671ea0 52 _irq[type].attach(tptr, mptr);
hollegha2 0:e0131e671ea0 53 serial_irq_set(&_serial, (SerialIrq)type, 1);
hollegha2 0:e0131e671ea0 54 }
hollegha2 0:e0131e671ea0 55 }
hollegha2 0:e0131e671ea0 56
hollegha2 0:e0131e671ea0 57 static void _irq_handler(uint32_t id, SerialIrq irq_type);
hollegha2 0:e0131e671ea0 58 protected:
hollegha2 0:e0131e671ea0 59 serial_t _serial;
hollegha2 0:e0131e671ea0 60 FunctionPointer _irq[2];
hollegha2 0:e0131e671ea0 61 int _baud;
hollegha2 0:e0131e671ea0 62 };
hollegha2 0:e0131e671ea0 63
hollegha2 0:e0131e671ea0 64 } // namespace mbed
hollegha2 0:e0131e671ea0 65
hollegha2 0:e0131e671ea0 66 #endif