Sigfox library with integration of ATParser
Embed:
(wiki syntax)
Show/hide line numbers
Sigfox.cpp
00001 00002 #include "Sigfox.h" 00003 00004 bool Sigfox::ready() { 00005 _at->send("AT"); 00006 return _at->recv("OK"); 00007 } 00008 00009 bool Sigfox::send(const char *data, char* response) { 00010 // If require a response add plus in message 00011 if(response != NULL) { 00012 // Add request response data 00013 _at->send("AT$SF=%s,1", data); 00014 // Wait response from sigfox after send 00015 if(_at->recv("OK")) { 00016 // Wait return 00017 return _at->recv("RX=%[^\r]", response); 00018 } 00019 return false; 00020 } else { 00021 _at->send("AT$SF=%s", data); 00022 return _at->recv("OK"); 00023 } 00024 } 00025 00026 bool Sigfox::setKey(bool type) { 00027 _at->send("ATS410=%d", type); 00028 return _at->recv("OK"); 00029 } 00030 00031 bool Sigfox::setPower(uint8_t power) { 00032 _at->send("ATS302=%d", power); 00033 return _at->recv("OK"); 00034 } 00035 00036 bool Sigfox::setPowerMode(uint8_t power) { 00037 _at->send("AT$P=%d", power); 00038 return _at->recv("OK"); 00039 } 00040 00041 bool Sigfox::saveConfig() { 00042 _at->send("AT$WR"); 00043 return _at->recv("OK"); 00044 } 00045 00046 void Sigfox::wakeup(DigitalInOut sig_rst, float time) { 00047 // Wake up sigfox 00048 sig_rst.output(); 00049 sig_rst = 0; 00050 wait(time); 00051 // Set high impendance the sigfox reset pin 00052 sig_rst.input(); 00053 wait(time); 00054 } 00055 00056 char *Sigfox::getID() { 00057 char buff[8+2]; 00058 _at->send("AT$I=10"); 00059 _at->read(buff, 8+2); 00060 memcpy(&ID[0],&buff[0],8); 00061 return &ID[0]; 00062 } 00063 00064 char *Sigfox::getPAC() { 00065 char buff[16+2]; 00066 _at->send("AT$I=11"); 00067 _at->read(buff, 16+2); 00068 memcpy(&PAC[0],&buff[0],16); 00069 return &PAC[0]; 00070 } 00071 00072 float Sigfox::getTemperature() { 00073 char buff[6]; 00074 _at->send("AT$T?"); 00075 _at->read(buff, 6); 00076 buff[5] = 0; 00077 return ((double)atoi(buff))/10; 00078 } 00079 00080 sigfoxvoltage_t Sigfox::getVoltages() { 00081 sigfoxvoltage_t volt; 00082 char buff[12]; 00083 _at->send("AT$V?"); 00084 _at->read(buff, 12); 00085 char buff2[5]; 00086 memset(buff2,0,5); 00087 memcpy(buff2, &buff[0], 4); 00088 volt.current = ((double)atoi(buff2))/1000; 00089 memset(buff2,0,5); 00090 memcpy(buff2, &buff[6], 4); 00091 volt.last = ((double)atoi(buff2))/1000; 00092 return volt; 00093 }
Generated on Wed Jul 20 2022 06:34:23 by 1.7.2