Gets messages form the pc and translates it to I2C and back.
Dependencies: DevInterfaces I2Cinterfaces MCP4725 mbed
Reader.cpp@2:2330ad8b1baa, 2016-06-15 (annotated)
- 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?
User | Revision | Line number | New 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 | } |