Sigfox library with integration of ATParser

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Sigfox.cpp Source File

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 }