Francisco Santos
/
SRA_VFF
pepe
MessageBuilder.cpp@0:a7324f51348d, 2019-03-13 (annotated)
- Committer:
- PedroMartins96
- Date:
- Wed Mar 13 23:04:14 2019 +0000
- Revision:
- 0:a7324f51348d
444
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
PedroMartins96 | 0:a7324f51348d | 1 | #include "MessageBuilder.h" |
PedroMartins96 | 0:a7324f51348d | 2 | #include "mbed.h" |
PedroMartins96 | 0:a7324f51348d | 3 | |
PedroMartins96 | 0:a7324f51348d | 4 | MessageBuilder::MessageBuilder() { |
PedroMartins96 | 0:a7324f51348d | 5 | reset(); |
PedroMartins96 | 0:a7324f51348d | 6 | } |
PedroMartins96 | 0:a7324f51348d | 7 | |
PedroMartins96 | 0:a7324f51348d | 8 | MessageBuilder::~MessageBuilder() { |
PedroMartins96 | 0:a7324f51348d | 9 | // TODO Auto-generated destructor stub |
PedroMartins96 | 0:a7324f51348d | 10 | } |
PedroMartins96 | 0:a7324f51348d | 11 | |
PedroMartins96 | 0:a7324f51348d | 12 | char MessageBuilder::add(const void* data, size_t len) { |
PedroMartins96 | 0:a7324f51348d | 13 | if (available() >= len) { |
PedroMartins96 | 0:a7324f51348d | 14 | memcpy(_pointer, data, len); |
PedroMartins96 | 0:a7324f51348d | 15 | _pointer += len; |
PedroMartins96 | 0:a7324f51348d | 16 | return 0; |
PedroMartins96 | 0:a7324f51348d | 17 | } else { |
PedroMartins96 | 0:a7324f51348d | 18 | return 1; |
PedroMartins96 | 0:a7324f51348d | 19 | } |
PedroMartins96 | 0:a7324f51348d | 20 | } |
PedroMartins96 | 0:a7324f51348d | 21 | |
PedroMartins96 | 0:a7324f51348d | 22 | void MessageBuilder::reset() { |
PedroMartins96 | 0:a7324f51348d | 23 | message[0] = 0x06; |
PedroMartins96 | 0:a7324f51348d | 24 | message[1] = 0x85; |
PedroMartins96 | 0:a7324f51348d | 25 | _pointer = &message[2]; |
PedroMartins96 | 0:a7324f51348d | 26 | } |
PedroMartins96 | 0:a7324f51348d | 27 | |
PedroMartins96 | 0:a7324f51348d | 28 | // Note: if message size grow beyond 32 bytes, return "size_t" insted, because it |
PedroMartins96 | 0:a7324f51348d | 29 | // is the most appropriate type for "sizeof" operator. Now, unsgined char is used |
PedroMartins96 | 0:a7324f51348d | 30 | // for memory economy. |
PedroMartins96 | 0:a7324f51348d | 31 | unsigned char MessageBuilder::available() { |
PedroMartins96 | 0:a7324f51348d | 32 | return &message[max_len - 1] - _pointer + 1; |
PedroMartins96 | 0:a7324f51348d | 33 | } |
PedroMartins96 | 0:a7324f51348d | 34 | |
PedroMartins96 | 0:a7324f51348d | 35 | unsigned char MessageBuilder::length() { |
PedroMartins96 | 0:a7324f51348d | 36 | return _pointer - &message[0]; |
PedroMartins96 | 0:a7324f51348d | 37 | } |
PedroMartins96 | 0:a7324f51348d | 38 | |
PedroMartins96 | 0:a7324f51348d | 39 | char MessageBuilder::add(float data) { |
PedroMartins96 | 0:a7324f51348d | 40 | if (available() >= sizeof(data)) { |
PedroMartins96 | 0:a7324f51348d | 41 | memcpy(_pointer, &data, sizeof(data)); |
PedroMartins96 | 0:a7324f51348d | 42 | _pointer += sizeof(data); |
PedroMartins96 | 0:a7324f51348d | 43 | return 0; |
PedroMartins96 | 0:a7324f51348d | 44 | } else { |
PedroMartins96 | 0:a7324f51348d | 45 | return 1; |
PedroMartins96 | 0:a7324f51348d | 46 | } |
PedroMartins96 | 0:a7324f51348d | 47 | } |
PedroMartins96 | 0:a7324f51348d | 48 | |
PedroMartins96 | 0:a7324f51348d | 49 | char MessageBuilder::add(int data) { |
PedroMartins96 | 0:a7324f51348d | 50 | if (available() >= sizeof(data)) { |
PedroMartins96 | 0:a7324f51348d | 51 | memcpy(_pointer, &data, sizeof(data)); |
PedroMartins96 | 0:a7324f51348d | 52 | _pointer += sizeof(data); |
PedroMartins96 | 0:a7324f51348d | 53 | return 0; |
PedroMartins96 | 0:a7324f51348d | 54 | } else { |
PedroMartins96 | 0:a7324f51348d | 55 | return 1; |
PedroMartins96 | 0:a7324f51348d | 56 | } |
PedroMartins96 | 0:a7324f51348d | 57 | } |
PedroMartins96 | 0:a7324f51348d | 58 | |
PedroMartins96 | 0:a7324f51348d | 59 | char MessageBuilder::add(char data) { |
PedroMartins96 | 0:a7324f51348d | 60 | if (available() >= sizeof(data)) { |
PedroMartins96 | 0:a7324f51348d | 61 | memcpy(_pointer, &data, sizeof(data)); |
PedroMartins96 | 0:a7324f51348d | 62 | _pointer += sizeof(data); |
PedroMartins96 | 0:a7324f51348d | 63 | return 0; |
PedroMartins96 | 0:a7324f51348d | 64 | } else { |
PedroMartins96 | 0:a7324f51348d | 65 | return 1; |
PedroMartins96 | 0:a7324f51348d | 66 | } |
PedroMartins96 | 0:a7324f51348d | 67 | } |
PedroMartins96 | 0:a7324f51348d | 68 | |
PedroMartins96 | 0:a7324f51348d | 69 | char MessageBuilder::add(unsigned int data) { |
PedroMartins96 | 0:a7324f51348d | 70 | if (available() >= sizeof(data)) { |
PedroMartins96 | 0:a7324f51348d | 71 | memcpy(_pointer, &data, sizeof(data)); |
PedroMartins96 | 0:a7324f51348d | 72 | _pointer += sizeof(data); |
PedroMartins96 | 0:a7324f51348d | 73 | return 0; |
PedroMartins96 | 0:a7324f51348d | 74 | } else { |
PedroMartins96 | 0:a7324f51348d | 75 | return 1; |
PedroMartins96 | 0:a7324f51348d | 76 | } |
PedroMartins96 | 0:a7324f51348d | 77 | } |