test code megasquirt and digole lcd

Dependencies:   FatFileSystem mbed

Committer:
jpnovak
Date:
Fri Nov 27 16:32:41 2015 +0000
Revision:
0:7ea8f0d27a4f
test code megasquirt digole;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jpnovak 0:7ea8f0d27a4f 1
jpnovak 0:7ea8f0d27a4f 2 #include "mbed.h"
jpnovak 0:7ea8f0d27a4f 3 #include "SerialBuffered.h"
jpnovak 0:7ea8f0d27a4f 4
jpnovak 0:7ea8f0d27a4f 5 extern Serial loggerSerial;
jpnovak 0:7ea8f0d27a4f 6
jpnovak 0:7ea8f0d27a4f 7 SerialBuffered::SerialBuffered( size_t bufferSize, PinName tx, PinName rx ) : Serial( tx, rx )
jpnovak 0:7ea8f0d27a4f 8 {
jpnovak 0:7ea8f0d27a4f 9 m_buffSize = 0;
jpnovak 0:7ea8f0d27a4f 10 m_contentStart = 0;
jpnovak 0:7ea8f0d27a4f 11 m_contentEnd = 0;
jpnovak 0:7ea8f0d27a4f 12 m_timeout = 1.0;
jpnovak 0:7ea8f0d27a4f 13
jpnovak 0:7ea8f0d27a4f 14
jpnovak 0:7ea8f0d27a4f 15 attach( this, &SerialBuffered::handleInterrupt );
jpnovak 0:7ea8f0d27a4f 16
jpnovak 0:7ea8f0d27a4f 17 m_buff = (uint8_t *) malloc( bufferSize );
jpnovak 0:7ea8f0d27a4f 18 if( m_buff == NULL )
jpnovak 0:7ea8f0d27a4f 19 {
jpnovak 0:7ea8f0d27a4f 20 //loggerSerial.printf("SerialBuffered - failed to alloc buffer size %d\r\n", (int) bufferSize );
jpnovak 0:7ea8f0d27a4f 21 }
jpnovak 0:7ea8f0d27a4f 22 else
jpnovak 0:7ea8f0d27a4f 23 {
jpnovak 0:7ea8f0d27a4f 24 m_buffSize = bufferSize;
jpnovak 0:7ea8f0d27a4f 25 }
jpnovak 0:7ea8f0d27a4f 26 }
jpnovak 0:7ea8f0d27a4f 27
jpnovak 0:7ea8f0d27a4f 28
jpnovak 0:7ea8f0d27a4f 29 SerialBuffered::~SerialBuffered()
jpnovak 0:7ea8f0d27a4f 30 {
jpnovak 0:7ea8f0d27a4f 31 if( m_buff )
jpnovak 0:7ea8f0d27a4f 32 free( m_buff );
jpnovak 0:7ea8f0d27a4f 33 }
jpnovak 0:7ea8f0d27a4f 34
jpnovak 0:7ea8f0d27a4f 35 void SerialBuffered::setTimeout( float seconds )
jpnovak 0:7ea8f0d27a4f 36 {
jpnovak 0:7ea8f0d27a4f 37 m_timeout = seconds;
jpnovak 0:7ea8f0d27a4f 38 }
jpnovak 0:7ea8f0d27a4f 39
jpnovak 0:7ea8f0d27a4f 40 size_t SerialBuffered::readBytes( uint8_t *bytes, size_t requested )
jpnovak 0:7ea8f0d27a4f 41 {
jpnovak 0:7ea8f0d27a4f 42 int i = 0;
jpnovak 0:7ea8f0d27a4f 43
jpnovak 0:7ea8f0d27a4f 44 for( ; i < requested; )
jpnovak 0:7ea8f0d27a4f 45 {
jpnovak 0:7ea8f0d27a4f 46 int c = getc();
jpnovak 0:7ea8f0d27a4f 47 if( c < 0 )
jpnovak 0:7ea8f0d27a4f 48 break;
jpnovak 0:7ea8f0d27a4f 49 bytes[i] = c;
jpnovak 0:7ea8f0d27a4f 50 i++;
jpnovak 0:7ea8f0d27a4f 51 }
jpnovak 0:7ea8f0d27a4f 52
jpnovak 0:7ea8f0d27a4f 53 return i;
jpnovak 0:7ea8f0d27a4f 54
jpnovak 0:7ea8f0d27a4f 55 }
jpnovak 0:7ea8f0d27a4f 56
jpnovak 0:7ea8f0d27a4f 57
jpnovak 0:7ea8f0d27a4f 58 int SerialBuffered::getc()
jpnovak 0:7ea8f0d27a4f 59 {
jpnovak 0:7ea8f0d27a4f 60 m_timer.reset();
jpnovak 0:7ea8f0d27a4f 61 m_timer.start();
jpnovak 0:7ea8f0d27a4f 62 while( m_contentStart == m_contentEnd )
jpnovak 0:7ea8f0d27a4f 63 {
jpnovak 0:7ea8f0d27a4f 64
jpnovak 0:7ea8f0d27a4f 65
jpnovak 0:7ea8f0d27a4f 66 wait_ms( 1 );
jpnovak 0:7ea8f0d27a4f 67 if( m_timeout > 0 && m_timer.read() > m_timeout )
jpnovak 0:7ea8f0d27a4f 68 return EOF;
jpnovak 0:7ea8f0d27a4f 69 }
jpnovak 0:7ea8f0d27a4f 70
jpnovak 0:7ea8f0d27a4f 71 m_timer.stop();
jpnovak 0:7ea8f0d27a4f 72
jpnovak 0:7ea8f0d27a4f 73 uint8_t result = m_buff[m_contentStart++];
jpnovak 0:7ea8f0d27a4f 74 m_contentStart = m_contentStart % m_buffSize;
jpnovak 0:7ea8f0d27a4f 75
jpnovak 0:7ea8f0d27a4f 76
jpnovak 0:7ea8f0d27a4f 77 return result;
jpnovak 0:7ea8f0d27a4f 78 }
jpnovak 0:7ea8f0d27a4f 79
jpnovak 0:7ea8f0d27a4f 80
jpnovak 0:7ea8f0d27a4f 81 int SerialBuffered::readable()
jpnovak 0:7ea8f0d27a4f 82 {
jpnovak 0:7ea8f0d27a4f 83 return m_contentStart != m_contentEnd ;
jpnovak 0:7ea8f0d27a4f 84 }
jpnovak 0:7ea8f0d27a4f 85
jpnovak 0:7ea8f0d27a4f 86 void SerialBuffered::handleInterrupt()
jpnovak 0:7ea8f0d27a4f 87 {
jpnovak 0:7ea8f0d27a4f 88
jpnovak 0:7ea8f0d27a4f 89 while( Serial::readable())
jpnovak 0:7ea8f0d27a4f 90 {
jpnovak 0:7ea8f0d27a4f 91 if( m_contentStart == (m_contentEnd +1) % m_buffSize)
jpnovak 0:7ea8f0d27a4f 92 {
jpnovak 0:7ea8f0d27a4f 93 loggerSerial.printf("SerialBuffered - buffer overrun, data lost!\r\n" );
jpnovak 0:7ea8f0d27a4f 94 Serial::getc();
jpnovak 0:7ea8f0d27a4f 95
jpnovak 0:7ea8f0d27a4f 96 }
jpnovak 0:7ea8f0d27a4f 97 else
jpnovak 0:7ea8f0d27a4f 98 {
jpnovak 0:7ea8f0d27a4f 99
jpnovak 0:7ea8f0d27a4f 100 m_buff[ m_contentEnd ++ ] = Serial::getc();
jpnovak 0:7ea8f0d27a4f 101 m_contentEnd = m_contentEnd % m_buffSize;
jpnovak 0:7ea8f0d27a4f 102
jpnovak 0:7ea8f0d27a4f 103
jpnovak 0:7ea8f0d27a4f 104
jpnovak 0:7ea8f0d27a4f 105 }
jpnovak 0:7ea8f0d27a4f 106 }
jpnovak 0:7ea8f0d27a4f 107 }
jpnovak 0:7ea8f0d27a4f 108