Henrique Cardoso / Mbed OS Lidar_Rodas

Dependencies:   BufferedSerial

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MessageBuilder.cpp Source File

MessageBuilder.cpp

00001 #include "MessageBuilder.h"
00002 #include "mbed.h"
00003 
00004 MessageBuilder::MessageBuilder() {
00005     reset();
00006 }
00007 
00008 MessageBuilder::~MessageBuilder() {
00009     // TODO Auto-generated destructor stub
00010 }
00011 
00012 char MessageBuilder::add(const void* data, size_t len) {
00013     if (available() >= len) {
00014         memcpy(_pointer, data, len);
00015         _pointer += len;
00016         return 0;
00017     } else {
00018         return 1;
00019     }
00020 }
00021 
00022 void MessageBuilder::reset() {
00023     message[0] = 0x06;
00024     message[1] = 0x85;
00025     _pointer = &message[2];
00026 }
00027 
00028 // Note: if message size grow beyond 32 bytes, return "size_t" insted, because it
00029 // is the most appropriate type for "sizeof" operator. Now, unsgined char is used
00030 // for memory economy.
00031 unsigned char MessageBuilder::available() {
00032     return &message[max_len - 1] - _pointer + 1;
00033 }
00034 
00035 unsigned char MessageBuilder::length() {
00036     return _pointer - &message[0];
00037 }
00038 
00039 char MessageBuilder::add(float data) {
00040     if (available() >= sizeof(data)) {
00041         memcpy(_pointer, &data, sizeof(data));
00042         _pointer += sizeof(data);
00043         return 0;
00044     } else {
00045         return 1;
00046     }
00047 }
00048 
00049 char MessageBuilder::add(int data) {
00050     if (available() >= sizeof(data)) {
00051         memcpy(_pointer, &data, sizeof(data));
00052         _pointer += sizeof(data);
00053         return 0;
00054     } else {
00055         return 1;
00056     }
00057 }
00058 
00059 char MessageBuilder::add(char data) {
00060     if (available() >= sizeof(data)) {
00061         memcpy(_pointer, &data, sizeof(data));
00062         _pointer += sizeof(data);
00063         return 0;
00064     } else {
00065         return 1;
00066     }
00067 }
00068 
00069 char MessageBuilder::add(unsigned int data) {
00070     if (available() >= sizeof(data)) {
00071         memcpy(_pointer, &data, sizeof(data));
00072         _pointer += sizeof(data);
00073         return 0;
00074     } else {
00075         return 1;
00076     }
00077 }