Serial Lib for Process-Visualisation with SvVis3
Dependents: ProcVisDemo1 bluetooth_0110 Ansteuerung_motor_2509 bluetooth_0110 ... more
Serial_HL.cpp@1:1a03b6d5226f, 2016-04-07 (annotated)
- Committer:
- hollegha2
- Date:
- Thu Apr 07 09:50:12 2016 +0000
- Revision:
- 1:1a03b6d5226f
- Parent:
- 0:b958bdf108cf
V 1.2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hollegha2 | 0:b958bdf108cf | 1 | |
hollegha2 | 0:b958bdf108cf | 2 | #include "Serial_HL.h" |
hollegha2 | 0:b958bdf108cf | 3 | #include <stdarg.h> |
hollegha2 | 0:b958bdf108cf | 4 | #include <stdio.h> |
hollegha2 | 0:b958bdf108cf | 5 | |
hollegha2 | 1:1a03b6d5226f | 6 | // V1.2 |
hollegha2 | 1:1a03b6d5226f | 7 | |
hollegha2 | 0:b958bdf108cf | 8 | namespace mbed { |
hollegha2 | 0:b958bdf108cf | 9 | |
hollegha2 | 0:b958bdf108cf | 10 | SerialBLK::SerialBLK(PinName tx, PinName rx) { |
hollegha2 | 0:b958bdf108cf | 11 | serial_init(&_serial, tx, rx); |
hollegha2 | 0:b958bdf108cf | 12 | _baud = 9600; |
hollegha2 | 0:b958bdf108cf | 13 | serial_irq_handler(&_serial, SerialBLK::_irq_handler, (uint32_t)this); |
hollegha2 | 0:b958bdf108cf | 14 | } |
hollegha2 | 0:b958bdf108cf | 15 | |
hollegha2 | 0:b958bdf108cf | 16 | void SerialBLK::baud(int baudrate) { |
hollegha2 | 0:b958bdf108cf | 17 | serial_baud(&_serial, baudrate); |
hollegha2 | 0:b958bdf108cf | 18 | _baud = baudrate; |
hollegha2 | 0:b958bdf108cf | 19 | } |
hollegha2 | 0:b958bdf108cf | 20 | |
hollegha2 | 0:b958bdf108cf | 21 | void SerialBLK::format(int bits, Parity parity, int stop_bits) { |
hollegha2 | 0:b958bdf108cf | 22 | serial_format(&_serial, bits, (SerialParity)parity, stop_bits); |
hollegha2 | 0:b958bdf108cf | 23 | } |
hollegha2 | 0:b958bdf108cf | 24 | |
hollegha2 | 0:b958bdf108cf | 25 | int SerialBLK::readable() { |
hollegha2 | 0:b958bdf108cf | 26 | return serial_readable(&_serial); |
hollegha2 | 0:b958bdf108cf | 27 | } |
hollegha2 | 0:b958bdf108cf | 28 | |
hollegha2 | 0:b958bdf108cf | 29 | int SerialBLK::writeable() { |
hollegha2 | 0:b958bdf108cf | 30 | return serial_writable(&_serial); |
hollegha2 | 0:b958bdf108cf | 31 | } |
hollegha2 | 0:b958bdf108cf | 32 | |
hollegha2 | 0:b958bdf108cf | 33 | void SerialBLK::attach(void (*fptr)(void), IrqType type) { |
hollegha2 | 0:b958bdf108cf | 34 | if (fptr) { |
hollegha2 | 0:b958bdf108cf | 35 | _irq[type].attach(fptr); |
hollegha2 | 0:b958bdf108cf | 36 | serial_irq_set(&_serial, (SerialIrq)type, 1); |
hollegha2 | 0:b958bdf108cf | 37 | } else { |
hollegha2 | 0:b958bdf108cf | 38 | serial_irq_set(&_serial, (SerialIrq)type, 0); |
hollegha2 | 0:b958bdf108cf | 39 | } |
hollegha2 | 0:b958bdf108cf | 40 | } |
hollegha2 | 0:b958bdf108cf | 41 | |
hollegha2 | 0:b958bdf108cf | 42 | void SerialBLK::_irq_handler(uint32_t id, SerialIrq irq_type) { |
hollegha2 | 0:b958bdf108cf | 43 | SerialBLK *obj = (SerialBLK*)id; |
hollegha2 | 0:b958bdf108cf | 44 | obj->_irq[irq_type].call(); |
hollegha2 | 0:b958bdf108cf | 45 | } |
hollegha2 | 0:b958bdf108cf | 46 | |
hollegha2 | 0:b958bdf108cf | 47 | int SerialBLK::GetChar() { |
hollegha2 | 0:b958bdf108cf | 48 | return serial_getc(&_serial); |
hollegha2 | 0:b958bdf108cf | 49 | } |
hollegha2 | 0:b958bdf108cf | 50 | |
hollegha2 | 0:b958bdf108cf | 51 | void SerialBLK::PutChar(int aCh) { |
hollegha2 | 0:b958bdf108cf | 52 | serial_putc(&_serial, aCh); |
hollegha2 | 0:b958bdf108cf | 53 | } |
hollegha2 | 0:b958bdf108cf | 54 | |
hollegha2 | 0:b958bdf108cf | 55 | void SerialBLK::Write(void* aData, uint32_t aLenBytes) |
hollegha2 | 0:b958bdf108cf | 56 | { |
hollegha2 | 0:b958bdf108cf | 57 | uint8_t* ptr = (uint8_t*)aData; |
hollegha2 | 0:b958bdf108cf | 58 | for(int i=0; i<aLenBytes; i++) { |
hollegha2 | 0:b958bdf108cf | 59 | this->PutChar(*ptr); ptr++; |
hollegha2 | 0:b958bdf108cf | 60 | } |
hollegha2 | 0:b958bdf108cf | 61 | } |
hollegha2 | 0:b958bdf108cf | 62 | |
hollegha2 | 0:b958bdf108cf | 63 | void SerialBLK::Read(void* aData, uint32_t aLenBytes) |
hollegha2 | 0:b958bdf108cf | 64 | { |
hollegha2 | 0:b958bdf108cf | 65 | uint8_t* ptr = (uint8_t*)aData; |
hollegha2 | 0:b958bdf108cf | 66 | for(int i=0; i<aLenBytes; i++) { |
hollegha2 | 0:b958bdf108cf | 67 | *ptr=this->GetChar(); ptr++; |
hollegha2 | 0:b958bdf108cf | 68 | } |
hollegha2 | 0:b958bdf108cf | 69 | } |
hollegha2 | 0:b958bdf108cf | 70 | |
hollegha2 | 0:b958bdf108cf | 71 | |
hollegha2 | 0:b958bdf108cf | 72 | |
hollegha2 | 0:b958bdf108cf | 73 | |
hollegha2 | 0:b958bdf108cf | 74 | void SvProtocol::Puts(char* aCStr) |
hollegha2 | 0:b958bdf108cf | 75 | { |
hollegha2 | 0:b958bdf108cf | 76 | while( *aCStr != '\0' ) |
hollegha2 | 0:b958bdf108cf | 77 | { |
hollegha2 | 0:b958bdf108cf | 78 | if( *aCStr=='\n' ) |
hollegha2 | 0:b958bdf108cf | 79 | _st->PutChar('\r'); |
hollegha2 | 0:b958bdf108cf | 80 | _st->PutChar(*aCStr); |
hollegha2 | 0:b958bdf108cf | 81 | aCStr++; |
hollegha2 | 0:b958bdf108cf | 82 | } |
hollegha2 | 0:b958bdf108cf | 83 | _st->PutChar(0); // terminate with 0 |
hollegha2 | 0:b958bdf108cf | 84 | } |
hollegha2 | 0:b958bdf108cf | 85 | |
hollegha2 | 0:b958bdf108cf | 86 | static char sBuffer[50]; |
hollegha2 | 0:b958bdf108cf | 87 | |
hollegha2 | 0:b958bdf108cf | 88 | void SvProtocol::Printf(const char *format, ...) |
hollegha2 | 0:b958bdf108cf | 89 | { |
hollegha2 | 0:b958bdf108cf | 90 | va_list vArgs; |
hollegha2 | 0:b958bdf108cf | 91 | va_start(vArgs, format); |
hollegha2 | 0:b958bdf108cf | 92 | vsprintf(sBuffer, (char const *)format, vArgs); |
hollegha2 | 0:b958bdf108cf | 93 | va_end(vArgs); |
hollegha2 | 0:b958bdf108cf | 94 | Puts(sBuffer); |
hollegha2 | 0:b958bdf108cf | 95 | } |
hollegha2 | 0:b958bdf108cf | 96 | |
hollegha2 | 0:b958bdf108cf | 97 | void SvProtocol::SvPrintf(const char *format, ...) |
hollegha2 | 0:b958bdf108cf | 98 | { |
hollegha2 | 0:b958bdf108cf | 99 | va_list vArgs; |
hollegha2 | 0:b958bdf108cf | 100 | va_start(vArgs, format); |
hollegha2 | 0:b958bdf108cf | 101 | vsprintf(sBuffer, (char const *)format, vArgs); |
hollegha2 | 0:b958bdf108cf | 102 | va_end(vArgs); |
hollegha2 | 0:b958bdf108cf | 103 | if( !svMessageON ) return; |
hollegha2 | 0:b958bdf108cf | 104 | _st->PutChar(10); |
hollegha2 | 0:b958bdf108cf | 105 | Puts(sBuffer); |
hollegha2 | 0:b958bdf108cf | 106 | } |
hollegha2 | 0:b958bdf108cf | 107 | |
hollegha2 | 0:b958bdf108cf | 108 | void SvProtocol::WriteSV3p13(int aId, float aData) { |
hollegha2 | 0:b958bdf108cf | 109 | // int16_t val = To3p13(aData); |
hollegha2 | 0:b958bdf108cf | 110 | // PutChar(aId); Write(&val,2); |
hollegha2 | 0:b958bdf108cf | 111 | } |
hollegha2 | 0:b958bdf108cf | 112 | |
hollegha2 | 0:b958bdf108cf | 113 | int SvProtocol::GetCommand() |
hollegha2 | 0:b958bdf108cf | 114 | { |
hollegha2 | 0:b958bdf108cf | 115 | uint8_t cmd = _st->GetChar(); |
hollegha2 | 0:b958bdf108cf | 116 | if( cmd==1 ) |
hollegha2 | 0:b958bdf108cf | 117 | { |
hollegha2 | 0:b958bdf108cf | 118 | this->acqON = _st->GetChar(); |
hollegha2 | 0:b958bdf108cf | 119 | if( this->acqON ) |
hollegha2 | 0:b958bdf108cf | 120 | this->SvMessage("AcqON"); |
hollegha2 | 0:b958bdf108cf | 121 | else |
hollegha2 | 0:b958bdf108cf | 122 | this->SvMessage("AcqOFF"); |
hollegha2 | 0:b958bdf108cf | 123 | return 0; |
hollegha2 | 0:b958bdf108cf | 124 | } |
hollegha2 | 0:b958bdf108cf | 125 | return cmd; |
hollegha2 | 0:b958bdf108cf | 126 | } |
hollegha2 | 0:b958bdf108cf | 127 | |
hollegha2 | 1:1a03b6d5226f | 128 | |
hollegha2 | 1:1a03b6d5226f | 129 | void SvProtocol::ReadCString(char* aBuff, char aTermChar) |
hollegha2 | 1:1a03b6d5226f | 130 | { |
hollegha2 | 1:1a03b6d5226f | 131 | int ch = _st->GetChar(); |
hollegha2 | 1:1a03b6d5226f | 132 | char* ptr = aBuff; |
hollegha2 | 1:1a03b6d5226f | 133 | while( ch!=aTermChar ) |
hollegha2 | 1:1a03b6d5226f | 134 | { |
hollegha2 | 1:1a03b6d5226f | 135 | *ptr=ch; ptr++; |
hollegha2 | 1:1a03b6d5226f | 136 | ch=_st->GetChar(); |
hollegha2 | 1:1a03b6d5226f | 137 | } |
hollegha2 | 1:1a03b6d5226f | 138 | *ptr=ch; ptr++; |
hollegha2 | 1:1a03b6d5226f | 139 | *ptr=0; |
hollegha2 | 1:1a03b6d5226f | 140 | } |
hollegha2 | 1:1a03b6d5226f | 141 | |
hollegha2 | 0:b958bdf108cf | 142 | } // namespace mbed |
hollegha2 | 0:b958bdf108cf | 143 | |
hollegha2 | 0:b958bdf108cf | 144 | |
hollegha2 | 0:b958bdf108cf | 145 | |
hollegha2 | 0:b958bdf108cf | 146 |