![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
softemp
Dependencies: mbed DHT22 ATParser SerialGPS
Sigfox.cpp@3:06b0680034a7, 2018-11-21 (annotated)
- Committer:
- svupper
- Date:
- Wed Nov 21 17:33:07 2018 +0000
- Revision:
- 3:06b0680034a7
sofmbedtemp
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
svupper | 3:06b0680034a7 | 1 | |
svupper | 3:06b0680034a7 | 2 | #include "Sigfox.h" |
svupper | 3:06b0680034a7 | 3 | |
svupper | 3:06b0680034a7 | 4 | bool Sigfox::ready() { |
svupper | 3:06b0680034a7 | 5 | _at->send("AT"); |
svupper | 3:06b0680034a7 | 6 | return _at->recv("OK"); |
svupper | 3:06b0680034a7 | 7 | } |
svupper | 3:06b0680034a7 | 8 | |
svupper | 3:06b0680034a7 | 9 | bool Sigfox::send(const char *data, char* response) { |
svupper | 3:06b0680034a7 | 10 | // If require a response add plus in message |
svupper | 3:06b0680034a7 | 11 | if(response != NULL) { |
svupper | 3:06b0680034a7 | 12 | // Add request response data |
svupper | 3:06b0680034a7 | 13 | _at->send("AT$SF=%s,1", data); |
svupper | 3:06b0680034a7 | 14 | // Wait response from sigfox after send |
svupper | 3:06b0680034a7 | 15 | if(_at->recv("OK")) { |
svupper | 3:06b0680034a7 | 16 | // Wait return |
svupper | 3:06b0680034a7 | 17 | return _at->recv("RX=%[^\r]", response); |
svupper | 3:06b0680034a7 | 18 | } |
svupper | 3:06b0680034a7 | 19 | return false; |
svupper | 3:06b0680034a7 | 20 | } else { |
svupper | 3:06b0680034a7 | 21 | _at->send("AT$SF=%s", data); |
svupper | 3:06b0680034a7 | 22 | return _at->recv("OK"); |
svupper | 3:06b0680034a7 | 23 | } |
svupper | 3:06b0680034a7 | 24 | } |
svupper | 3:06b0680034a7 | 25 | |
svupper | 3:06b0680034a7 | 26 | /* |
svupper | 3:06b0680034a7 | 27 | bool Sigfox::send(const char *data) { |
svupper | 3:06b0680034a7 | 28 | // If require a response add plus in message |
svupper | 3:06b0680034a7 | 29 | // Add request response data |
svupper | 3:06b0680034a7 | 30 | _at->send("AT$SF=%s,1", data); |
svupper | 3:06b0680034a7 | 31 | // Wait response from sigfox after send |
svupper | 3:06b0680034a7 | 32 | |
svupper | 3:06b0680034a7 | 33 | |
svupper | 3:06b0680034a7 | 34 | |
svupper | 3:06b0680034a7 | 35 | |
svupper | 3:06b0680034a7 | 36 | }*/ |
svupper | 3:06b0680034a7 | 37 | |
svupper | 3:06b0680034a7 | 38 | bool Sigfox::setKey(bool type) { |
svupper | 3:06b0680034a7 | 39 | _at->send("ATS410=%d", type); |
svupper | 3:06b0680034a7 | 40 | return _at->recv("OK"); |
svupper | 3:06b0680034a7 | 41 | } |
svupper | 3:06b0680034a7 | 42 | |
svupper | 3:06b0680034a7 | 43 | bool Sigfox::setPower(uint8_t power) { |
svupper | 3:06b0680034a7 | 44 | _at->send("ATS302=%d", power); |
svupper | 3:06b0680034a7 | 45 | return _at->recv("OK"); |
svupper | 3:06b0680034a7 | 46 | } |
svupper | 3:06b0680034a7 | 47 | |
svupper | 3:06b0680034a7 | 48 | bool Sigfox::setPowerMode(uint8_t power) { |
svupper | 3:06b0680034a7 | 49 | _at->send("AT$P=%d", power); |
svupper | 3:06b0680034a7 | 50 | return _at->recv("OK"); |
svupper | 3:06b0680034a7 | 51 | } |
svupper | 3:06b0680034a7 | 52 | |
svupper | 3:06b0680034a7 | 53 | bool Sigfox::saveConfig() { |
svupper | 3:06b0680034a7 | 54 | _at->send("AT$WR"); |
svupper | 3:06b0680034a7 | 55 | return _at->recv("OK"); |
svupper | 3:06b0680034a7 | 56 | } |
svupper | 3:06b0680034a7 | 57 | |
svupper | 3:06b0680034a7 | 58 | void Sigfox::wakeup(DigitalInOut sig_rst, float time) { |
svupper | 3:06b0680034a7 | 59 | // Wake up sigfox |
svupper | 3:06b0680034a7 | 60 | sig_rst.output(); |
svupper | 3:06b0680034a7 | 61 | sig_rst = 0; |
svupper | 3:06b0680034a7 | 62 | wait(time); |
svupper | 3:06b0680034a7 | 63 | // Set high impendance the sigfox reset pin |
svupper | 3:06b0680034a7 | 64 | sig_rst.input(); |
svupper | 3:06b0680034a7 | 65 | wait(time); |
svupper | 3:06b0680034a7 | 66 | } |
svupper | 3:06b0680034a7 | 67 | |
svupper | 3:06b0680034a7 | 68 | char *Sigfox::getID() { |
svupper | 3:06b0680034a7 | 69 | char buff[8+2]; |
svupper | 3:06b0680034a7 | 70 | _at->send("AT$I=10"); |
svupper | 3:06b0680034a7 | 71 | _at->read(buff, 8+2); |
svupper | 3:06b0680034a7 | 72 | memcpy(&ID[0],&buff[0],8); |
svupper | 3:06b0680034a7 | 73 | return &ID[0]; |
svupper | 3:06b0680034a7 | 74 | } |
svupper | 3:06b0680034a7 | 75 | |
svupper | 3:06b0680034a7 | 76 | char *Sigfox::getPAC() { |
svupper | 3:06b0680034a7 | 77 | char buff[16+2]; |
svupper | 3:06b0680034a7 | 78 | _at->send("AT$I=11"); |
svupper | 3:06b0680034a7 | 79 | _at->read(buff, 16+2); |
svupper | 3:06b0680034a7 | 80 | memcpy(&PAC[0],&buff[0],16); |
svupper | 3:06b0680034a7 | 81 | return &PAC[0]; |
svupper | 3:06b0680034a7 | 82 | } |
svupper | 3:06b0680034a7 | 83 | |
svupper | 3:06b0680034a7 | 84 | float Sigfox::getTemperature() { |
svupper | 3:06b0680034a7 | 85 | char buff[6]; |
svupper | 3:06b0680034a7 | 86 | _at->send("AT$T?"); |
svupper | 3:06b0680034a7 | 87 | _at->read(buff, 6); |
svupper | 3:06b0680034a7 | 88 | buff[5] = 0; |
svupper | 3:06b0680034a7 | 89 | return ((double)atoi(buff))/10; |
svupper | 3:06b0680034a7 | 90 | } |
svupper | 3:06b0680034a7 | 91 | |
svupper | 3:06b0680034a7 | 92 | sigfoxvoltage_t Sigfox::getVoltages() { |
svupper | 3:06b0680034a7 | 93 | sigfoxvoltage_t volt; |
svupper | 3:06b0680034a7 | 94 | char buff[12]; |
svupper | 3:06b0680034a7 | 95 | _at->send("AT$V?"); |
svupper | 3:06b0680034a7 | 96 | _at->read(buff, 12); |
svupper | 3:06b0680034a7 | 97 | char buff2[5]; |
svupper | 3:06b0680034a7 | 98 | memset(buff2,0,5); |
svupper | 3:06b0680034a7 | 99 | memcpy(buff2, &buff[0], 4); |
svupper | 3:06b0680034a7 | 100 | volt.current = ((double)atoi(buff2))/1000; |
svupper | 3:06b0680034a7 | 101 | memset(buff2,0,5); |
svupper | 3:06b0680034a7 | 102 | memcpy(buff2, &buff[6], 4); |
svupper | 3:06b0680034a7 | 103 | volt.last = ((double)atoi(buff2))/1000; |
svupper | 3:06b0680034a7 | 104 | return volt; |
svupper | 3:06b0680034a7 | 105 | } |