moccos mizuki / ATP3011F4
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ATP3011F4UART.cpp Source File

ATP3011F4UART.cpp

00001 #include "ATP3011F4UART.h"
00002 
00003 ATP3011F4UART::ATP3011F4UART(Serial *serial) :
00004         ch(serial) {
00005     ch->attach(this, &ATP3011F4UART::receiveChar);
00006 }
00007 
00008 bool ATP3011F4UART::init() {
00009     // TODO: check response
00010     response_ready = false;
00011     ch->putc('?');
00012     ch->putc('\r');
00013     return true;
00014 }
00015 
00016 bool ATP3011F4UART::send(const char* str) {
00017     ch->printf("%s", str);
00018     return true;
00019 }
00020 
00021 bool ATP3011F4UART::sendr(const char* str) {
00022     if (!send(str)) return false;
00023     response_ready = false;
00024     ret[0] = '\0';
00025     p_ret = ret;
00026     if (!send("\r")) return false;
00027     return true;
00028 }
00029 
00030 void ATP3011F4UART::waitCompletion() {
00031     while(!response_ready) wait_ms(10);
00032     response_ready = false;
00033 }
00034 
00035 void ATP3011F4UART::flush() {
00036     while (ch->readable()) ch->getc();
00037 }
00038 
00039 void ATP3011F4UART::receiveChar() {
00040     *p_ret = ch->getc();
00041     if (*p_ret == '>') {
00042         *(++p_ret) = '\0';
00043         p_ret = ret;
00044         response_ready = true;
00045     } else if (*p_ret == '*') {
00046         p_ret = ret;
00047         ret[0] = '*';
00048         ret[1] = '\0';
00049     } else {
00050         p_ret++;
00051         if (p_ret >= &ret[RET_CODE_LEN]) p_ret = ret;
00052     }
00053 }