Serial Lib for Process-Visualisation with SvVis3

Dependents:   ProcVisDemo1 bluetooth_0110 Ansteuerung_motor_2509 bluetooth_0110 ... more

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?

UserRevisionLine numberNew 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