Dependencies:   mbed

Committer:
Wizo
Date:
Thu Nov 15 18:00:04 2018 +0000
Revision:
0:a17cdd8e23ac
Labor_RGB1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wizo 0:a17cdd8e23ac 1
Wizo 0:a17cdd8e23ac 2 #include "Serial_HL.h"
Wizo 0:a17cdd8e23ac 3 #include <stdarg.h>
Wizo 0:a17cdd8e23ac 4 #include <stdio.h>
Wizo 0:a17cdd8e23ac 5
Wizo 0:a17cdd8e23ac 6 namespace mbed {
Wizo 0:a17cdd8e23ac 7
Wizo 0:a17cdd8e23ac 8 SerialBLK::SerialBLK(PinName tx, PinName rx) {
Wizo 0:a17cdd8e23ac 9 serial_init(&_serial, tx, rx);
Wizo 0:a17cdd8e23ac 10 _baud = 9600;
Wizo 0:a17cdd8e23ac 11 serial_irq_handler(&_serial, SerialBLK::_irq_handler, (uint32_t)this);
Wizo 0:a17cdd8e23ac 12 }
Wizo 0:a17cdd8e23ac 13
Wizo 0:a17cdd8e23ac 14 void SerialBLK::baud(int baudrate) {
Wizo 0:a17cdd8e23ac 15 serial_baud(&_serial, baudrate);
Wizo 0:a17cdd8e23ac 16 _baud = baudrate;
Wizo 0:a17cdd8e23ac 17 }
Wizo 0:a17cdd8e23ac 18
Wizo 0:a17cdd8e23ac 19 void SerialBLK::format(int bits, Parity parity, int stop_bits) {
Wizo 0:a17cdd8e23ac 20 serial_format(&_serial, bits, (SerialParity)parity, stop_bits);
Wizo 0:a17cdd8e23ac 21 }
Wizo 0:a17cdd8e23ac 22
Wizo 0:a17cdd8e23ac 23 int SerialBLK::readable() {
Wizo 0:a17cdd8e23ac 24 return serial_readable(&_serial);
Wizo 0:a17cdd8e23ac 25 }
Wizo 0:a17cdd8e23ac 26
Wizo 0:a17cdd8e23ac 27 int SerialBLK::writeable() {
Wizo 0:a17cdd8e23ac 28 return serial_writable(&_serial);
Wizo 0:a17cdd8e23ac 29 }
Wizo 0:a17cdd8e23ac 30
Wizo 0:a17cdd8e23ac 31 void SerialBLK::attach(void (*fptr)(void), IrqType type) {
Wizo 0:a17cdd8e23ac 32 if (fptr) {
Wizo 0:a17cdd8e23ac 33 _irq[type].attach(fptr);
Wizo 0:a17cdd8e23ac 34 serial_irq_set(&_serial, (SerialIrq)type, 1);
Wizo 0:a17cdd8e23ac 35 } else {
Wizo 0:a17cdd8e23ac 36 serial_irq_set(&_serial, (SerialIrq)type, 0);
Wizo 0:a17cdd8e23ac 37 }
Wizo 0:a17cdd8e23ac 38 }
Wizo 0:a17cdd8e23ac 39
Wizo 0:a17cdd8e23ac 40 void SerialBLK::_irq_handler(uint32_t id, SerialIrq irq_type) {
Wizo 0:a17cdd8e23ac 41 SerialBLK *obj = (SerialBLK*)id;
Wizo 0:a17cdd8e23ac 42 obj->_irq[irq_type].call();
Wizo 0:a17cdd8e23ac 43 }
Wizo 0:a17cdd8e23ac 44
Wizo 0:a17cdd8e23ac 45 int SerialBLK::GetChar() {
Wizo 0:a17cdd8e23ac 46 return serial_getc(&_serial);
Wizo 0:a17cdd8e23ac 47 }
Wizo 0:a17cdd8e23ac 48
Wizo 0:a17cdd8e23ac 49 void SerialBLK::PutChar(int aCh) {
Wizo 0:a17cdd8e23ac 50 serial_putc(&_serial, aCh);
Wizo 0:a17cdd8e23ac 51 }
Wizo 0:a17cdd8e23ac 52
Wizo 0:a17cdd8e23ac 53 void SerialBLK::Write(void* aData, uint32_t aLenBytes)
Wizo 0:a17cdd8e23ac 54 {
Wizo 0:a17cdd8e23ac 55 uint8_t* ptr = (uint8_t*)aData;
Wizo 0:a17cdd8e23ac 56 for(int i=0; i<aLenBytes; i++) {
Wizo 0:a17cdd8e23ac 57 this->PutChar(*ptr); ptr++;
Wizo 0:a17cdd8e23ac 58 }
Wizo 0:a17cdd8e23ac 59 }
Wizo 0:a17cdd8e23ac 60
Wizo 0:a17cdd8e23ac 61 void SerialBLK::Read(void* aData, uint32_t aLenBytes)
Wizo 0:a17cdd8e23ac 62 {
Wizo 0:a17cdd8e23ac 63 uint8_t* ptr = (uint8_t*)aData;
Wizo 0:a17cdd8e23ac 64 for(int i=0; i<aLenBytes; i++) {
Wizo 0:a17cdd8e23ac 65 *ptr=this->GetChar(); ptr++;
Wizo 0:a17cdd8e23ac 66 }
Wizo 0:a17cdd8e23ac 67 }
Wizo 0:a17cdd8e23ac 68
Wizo 0:a17cdd8e23ac 69
Wizo 0:a17cdd8e23ac 70
Wizo 0:a17cdd8e23ac 71
Wizo 0:a17cdd8e23ac 72 void SvProtocol::Puts(char* aCStr)
Wizo 0:a17cdd8e23ac 73 {
Wizo 0:a17cdd8e23ac 74 while( *aCStr != '\0' )
Wizo 0:a17cdd8e23ac 75 {
Wizo 0:a17cdd8e23ac 76 if( *aCStr=='\n' )
Wizo 0:a17cdd8e23ac 77 _st->PutChar('\r');
Wizo 0:a17cdd8e23ac 78 _st->PutChar(*aCStr);
Wizo 0:a17cdd8e23ac 79 aCStr++;
Wizo 0:a17cdd8e23ac 80 }
Wizo 0:a17cdd8e23ac 81 _st->PutChar(0); // terminate with 0
Wizo 0:a17cdd8e23ac 82 }
Wizo 0:a17cdd8e23ac 83
Wizo 0:a17cdd8e23ac 84 static char sBuffer[50];
Wizo 0:a17cdd8e23ac 85
Wizo 0:a17cdd8e23ac 86 void SvProtocol::Printf(const char *format, ...)
Wizo 0:a17cdd8e23ac 87 {
Wizo 0:a17cdd8e23ac 88 va_list vArgs;
Wizo 0:a17cdd8e23ac 89 va_start(vArgs, format);
Wizo 0:a17cdd8e23ac 90 vsprintf(sBuffer, (char const *)format, vArgs);
Wizo 0:a17cdd8e23ac 91 va_end(vArgs);
Wizo 0:a17cdd8e23ac 92 Puts(sBuffer);
Wizo 0:a17cdd8e23ac 93 }
Wizo 0:a17cdd8e23ac 94
Wizo 0:a17cdd8e23ac 95 void SvProtocol::SvPrintf(const char *format, ...)
Wizo 0:a17cdd8e23ac 96 {
Wizo 0:a17cdd8e23ac 97 va_list vArgs;
Wizo 0:a17cdd8e23ac 98 va_start(vArgs, format);
Wizo 0:a17cdd8e23ac 99 vsprintf(sBuffer, (char const *)format, vArgs);
Wizo 0:a17cdd8e23ac 100 va_end(vArgs);
Wizo 0:a17cdd8e23ac 101 if( !svMessageON ) return;
Wizo 0:a17cdd8e23ac 102 _st->PutChar(10);
Wizo 0:a17cdd8e23ac 103 Puts(sBuffer);
Wizo 0:a17cdd8e23ac 104 }
Wizo 0:a17cdd8e23ac 105
Wizo 0:a17cdd8e23ac 106 void SvProtocol::WriteSV3p13(int aId, float aData) {
Wizo 0:a17cdd8e23ac 107 // int16_t val = To3p13(aData);
Wizo 0:a17cdd8e23ac 108 // PutChar(aId); Write(&val,2);
Wizo 0:a17cdd8e23ac 109 }
Wizo 0:a17cdd8e23ac 110
Wizo 0:a17cdd8e23ac 111 int SvProtocol::GetCommand()
Wizo 0:a17cdd8e23ac 112 {
Wizo 0:a17cdd8e23ac 113 uint8_t cmd = _st->GetChar();
Wizo 0:a17cdd8e23ac 114 if( cmd==1 )
Wizo 0:a17cdd8e23ac 115 {
Wizo 0:a17cdd8e23ac 116 this->acqON = _st->GetChar();
Wizo 0:a17cdd8e23ac 117 if( this->acqON )
Wizo 0:a17cdd8e23ac 118 this->SvMessage("AcqON");
Wizo 0:a17cdd8e23ac 119 else
Wizo 0:a17cdd8e23ac 120 this->SvMessage("AcqOFF");
Wizo 0:a17cdd8e23ac 121 return 0;
Wizo 0:a17cdd8e23ac 122 }
Wizo 0:a17cdd8e23ac 123 return cmd;
Wizo 0:a17cdd8e23ac 124 }
Wizo 0:a17cdd8e23ac 125
Wizo 0:a17cdd8e23ac 126 } // namespace mbed
Wizo 0:a17cdd8e23ac 127
Wizo 0:a17cdd8e23ac 128
Wizo 0:a17cdd8e23ac 129
Wizo 0:a17cdd8e23ac 130