Gets messages form the pc and translates it to I2C and back.

Dependencies:   DevInterfaces I2Cinterfaces MCP4725 mbed

Committer:
katrijnverhasselt
Date:
Wed Jun 15 10:53:32 2016 +0000
Revision:
2:2330ad8b1baa
Parent:
1:8ba039abd9b8
Finished programming. This program now simply extract only the info it needs and sends all of it immediately through its I2C port.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
katrijnverhasselt 0:b40341017545 1 #include "Reader.h"
katrijnverhasselt 0:b40341017545 2
katrijnverhasselt 0:b40341017545 3 // Default constructor
katrijnverhasselt 0:b40341017545 4 Reader::Reader()
katrijnverhasselt 0:b40341017545 5 : pc(USBTX, USBRX),
katrijnverhasselt 0:b40341017545 6 _isNewMessageReceived(false),
katrijnverhasselt 0:b40341017545 7 _lastMessage(),
katrijnverhasselt 0:b40341017545 8 _lastMessageSize(0),
katrijnverhasselt 0:b40341017545 9 _buffer(),
katrijnverhasselt 0:b40341017545 10 _bufferSize(0),
katrijnverhasselt 0:b40341017545 11 _lastChar(0),
katrijnverhasselt 0:b40341017545 12 _index(0)
katrijnverhasselt 0:b40341017545 13 {
katrijnverhasselt 0:b40341017545 14 // Attach read function to pc
katrijnverhasselt 0:b40341017545 15 pc.attach(this, &Reader::pcCallback);
katrijnverhasselt 0:b40341017545 16 }
katrijnverhasselt 0:b40341017545 17
katrijnverhasselt 0:b40341017545 18
katrijnverhasselt 0:b40341017545 19 bool Reader::IsNewMessageReceived() {
katrijnverhasselt 0:b40341017545 20 // If no message received, return false
katrijnverhasselt 0:b40341017545 21 if (!_isNewMessageReceived)
katrijnverhasselt 0:b40341017545 22 return false;
katrijnverhasselt 0:b40341017545 23
katrijnverhasselt 0:b40341017545 24 // If message received, set to false and return true
katrijnverhasselt 0:b40341017545 25 _isNewMessageReceived = false;
katrijnverhasselt 0:b40341017545 26 return true;
katrijnverhasselt 0:b40341017545 27 }
katrijnverhasselt 0:b40341017545 28
katrijnverhasselt 0:b40341017545 29 Translator::MessageInfo Reader::GetLastMessageInfo() const {
katrijnverhasselt 0:b40341017545 30 return _lastMessageInfo;
katrijnverhasselt 0:b40341017545 31 }
katrijnverhasselt 0:b40341017545 32
katrijnverhasselt 2:2330ad8b1baa 33 const char* Reader::GetLastMessage() const {
katrijnverhasselt 0:b40341017545 34 return _lastMessage;
katrijnverhasselt 0:b40341017545 35 }
katrijnverhasselt 0:b40341017545 36
katrijnverhasselt 0:b40341017545 37 int Reader::GetLastMessageSize() const {
katrijnverhasselt 0:b40341017545 38 return _lastMessageSize;
katrijnverhasselt 0:b40341017545 39 }
katrijnverhasselt 0:b40341017545 40
katrijnverhasselt 0:b40341017545 41 void Reader::pcCallback() {
katrijnverhasselt 0:b40341017545 42 // Get the sent character
katrijnverhasselt 0:b40341017545 43 _lastChar = pc.getc();
katrijnverhasselt 0:b40341017545 44
katrijnverhasselt 2:2330ad8b1baa 45 // If message not started and StartChar was read
katrijnverhasselt 2:2330ad8b1baa 46 //if (!_isMessageStarted && _lastChar == Translator::Rules::StartChar) {
katrijnverhasselt 2:2330ad8b1baa 47 // // Reset and signal start
katrijnverhasselt 2:2330ad8b1baa 48 // _index = 0;
katrijnverhasselt 2:2330ad8b1baa 49 // _isMessageStarted = true;
katrijnverhasselt 2:2330ad8b1baa 50 //}
katrijnverhasselt 0:b40341017545 51
katrijnverhasselt 2:2330ad8b1baa 52 // If ongoing message
katrijnverhasselt 2:2330ad8b1baa 53 //if (_isMessageStarted) {
katrijnverhasselt 2:2330ad8b1baa 54
katrijnverhasselt 2:2330ad8b1baa 55 // Add character to buffer
katrijnverhasselt 2:2330ad8b1baa 56 _buffer[_index] = _lastChar;
katrijnverhasselt 2:2330ad8b1baa 57 // Check if valid message by translating it
katrijnverhasselt 2:2330ad8b1baa 58 Translator::MessageInfo info;
katrijnverhasselt 2:2330ad8b1baa 59
katrijnverhasselt 2:2330ad8b1baa 60 switch (Translator::Translate(_buffer, _index + 1, &info)) {
katrijnverhasselt 2:2330ad8b1baa 61 case Translator::INCOMPLETE:
katrijnverhasselt 2:2330ad8b1baa 62 // Keep adding chars
katrijnverhasselt 0:b40341017545 63 _index++;
katrijnverhasselt 2:2330ad8b1baa 64 break;;
katrijnverhasselt 2:2330ad8b1baa 65 case Translator::SUCCES:
katrijnverhasselt 2:2330ad8b1baa 66 // Copy message info
katrijnverhasselt 2:2330ad8b1baa 67 _lastMessageInfo = info;
katrijnverhasselt 2:2330ad8b1baa 68 // Notify user
katrijnverhasselt 2:2330ad8b1baa 69 _isNewMessageReceived = true;
katrijnverhasselt 2:2330ad8b1baa 70 // Reset counter
katrijnverhasselt 2:2330ad8b1baa 71 _index = 0;
katrijnverhasselt 2:2330ad8b1baa 72 break;
katrijnverhasselt 2:2330ad8b1baa 73 case Translator::INVALID:
katrijnverhasselt 2:2330ad8b1baa 74 default:
katrijnverhasselt 2:2330ad8b1baa 75 // Reset buffer
katrijnverhasselt 2:2330ad8b1baa 76 _index = 0;
katrijnverhasselt 2:2330ad8b1baa 77 break;
katrijnverhasselt 0:b40341017545 78 }
katrijnverhasselt 2:2330ad8b1baa 79 //}
katrijnverhasselt 2:2330ad8b1baa 80 return;
katrijnverhasselt 0:b40341017545 81 }