Last commit 06 May 2012
Description: for testing ATP3011F4
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 }
