Aktualizace varovani z clang-tidy, prace na RING (zatim neuspesna...)
This commit is contained in:
parent
e2c5e5dcd9
commit
e6ba94d9e3
41
src/DTE.h
41
src/DTE.h
@ -9,11 +9,9 @@
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
class DTE
|
||||
{
|
||||
class DTE {
|
||||
public:
|
||||
enum CommandResult
|
||||
{
|
||||
enum CommandResult {
|
||||
EXPECT_BUSY,
|
||||
EXPECT_TIMEOUT,
|
||||
EXPECT_DELAY,
|
||||
@ -34,15 +32,15 @@ private:
|
||||
|
||||
public:
|
||||
DTE(Stream & stream, unsigned int size)
|
||||
: stream(stream)
|
||||
, bufferSize(size)
|
||||
, result(EXPECT_RESULT) {
|
||||
: stream(stream), bufferSize(size), result(EXPECT_RESULT)
|
||||
{
|
||||
buffer.reserve(size);
|
||||
}
|
||||
|
||||
~DTE() {};
|
||||
~DTE() = default;
|
||||
|
||||
void SendCommand(const char* command, unsigned long timeout, const char* response1, const char* response2 = 0, const char* response3 = 0) {
|
||||
void SendCommand(const char * command, unsigned long timeout, const char * response1, const char * response2 = 0, const char * response3 = 0)
|
||||
{
|
||||
match = 0;
|
||||
result = EXPECT_BUSY;
|
||||
response[0] = response1;
|
||||
@ -56,7 +54,8 @@ public:
|
||||
proccess();
|
||||
}
|
||||
|
||||
void SendCommand(const __FlashStringHelper* command, unsigned long timeout, const char* response1, const char* response2 = 0, const char* response3 = 0) {
|
||||
void SendCommand(const __FlashStringHelper * command, unsigned long timeout, const char * response1, const char * response2 = 0, const char * response3 = 0)
|
||||
{
|
||||
|
||||
match = 0;
|
||||
result = EXPECT_BUSY;
|
||||
@ -73,40 +72,46 @@ public:
|
||||
proccess();
|
||||
}
|
||||
|
||||
void Delay(unsigned long delay) {
|
||||
void Delay(unsigned long delay)
|
||||
{
|
||||
timeout = delay;
|
||||
result = EXPECT_DELAY;
|
||||
tick = millis();
|
||||
proccess();
|
||||
}
|
||||
|
||||
bool getIsBusy(void) {
|
||||
bool getIsBusy()
|
||||
{
|
||||
proccess();
|
||||
return (result == EXPECT_BUSY) || (result == EXPECT_DELAY);
|
||||
}
|
||||
|
||||
CommandResult getResult(void) {
|
||||
CommandResult getResult()
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
unsigned int getMatch(void) {
|
||||
unsigned int getMatch() const
|
||||
{
|
||||
return match;
|
||||
}
|
||||
|
||||
String& getBuffer(void) {
|
||||
String & getBuffer()
|
||||
{
|
||||
return buffer;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
void flush(void) {
|
||||
void flush()
|
||||
{
|
||||
// clear rx buffer
|
||||
while (stream.available()) {
|
||||
stream.read();
|
||||
}
|
||||
}
|
||||
|
||||
void proccess(void) {
|
||||
void proccess()
|
||||
{
|
||||
if (result == EXPECT_DELAY) {
|
||||
if (millis() - tick >= timeout)
|
||||
result = EXPECT_RESULT;
|
||||
|
@ -7,8 +7,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "DTE.h"
|
||||
#include <Arduino.h>
|
||||
|
||||
// Defaults
|
||||
#define THREADEDGSM_DEF_DTE_BUF_SIZ 512
|
||||
@ -40,12 +40,10 @@
|
||||
#define DEBUG_PRINTLN(x)
|
||||
#endif
|
||||
|
||||
class ThreadedGSM
|
||||
{
|
||||
class ThreadedGSM {
|
||||
// variables
|
||||
public:
|
||||
struct NetworkTime
|
||||
{
|
||||
struct NetworkTime {
|
||||
int year;
|
||||
int month;
|
||||
int day;
|
||||
@ -62,28 +60,24 @@ public:
|
||||
READ_TYPE_ALL = 4
|
||||
};
|
||||
|
||||
enum IntervalSourceE
|
||||
{
|
||||
enum IntervalSourceE {
|
||||
INTERVAL_CLOCK,
|
||||
INTERVAL_INBOX,
|
||||
INTERVAL_SIGNAL,
|
||||
INTERVAL_BATTERY
|
||||
};
|
||||
|
||||
struct SignalLevel
|
||||
{
|
||||
struct SignalLevel {
|
||||
int Dbm;
|
||||
int Value;
|
||||
};
|
||||
|
||||
struct BatteryInfo
|
||||
{
|
||||
struct BatteryInfo {
|
||||
int Percent;
|
||||
int Voltage;
|
||||
};
|
||||
|
||||
struct SMSInfo
|
||||
{
|
||||
struct SMSInfo {
|
||||
String Number;
|
||||
String Text;
|
||||
};
|
||||
@ -95,8 +89,7 @@ public:
|
||||
typedef void (*ThreadedGSMCallbackBool)(ThreadedGSM &, bool);
|
||||
typedef void (*ThreadedGSMCallback)(ThreadedGSM &);
|
||||
typedef void (*ThreadedGSMCallbackRing)(ThreadedGSM &, String &);
|
||||
struct conf
|
||||
{
|
||||
struct conf {
|
||||
ThreadedGSMCallbackSignal signal;
|
||||
ThreadedGSMCallbackClock clock;
|
||||
ThreadedGSMCallbackIncomingSMS incoming;
|
||||
@ -106,10 +99,10 @@ public:
|
||||
ThreadedGSMCallbackBattery battery;
|
||||
ThreadedGSMCallbackRing ring;
|
||||
};
|
||||
|
||||
protected:
|
||||
private:
|
||||
enum StatesStartup
|
||||
{
|
||||
enum StatesStartup {
|
||||
STARTUP_POWER_OFF,
|
||||
STARTUP_POWER_OFF_DELAY,
|
||||
STARTUP_POWER_ON,
|
||||
@ -121,26 +114,22 @@ private:
|
||||
STARTUP_CHK_CENG
|
||||
};
|
||||
|
||||
enum StatesClock
|
||||
{
|
||||
enum StatesClock {
|
||||
CLOCK_REQ,
|
||||
CLOCK_VERIFY
|
||||
};
|
||||
|
||||
enum StatesSignal
|
||||
{
|
||||
enum StatesSignal {
|
||||
SIGNAL_REQ,
|
||||
SIGNAL_VERIFY
|
||||
};
|
||||
|
||||
enum StatesBattry
|
||||
{
|
||||
enum StatesBattry {
|
||||
BATTERY_REQ,
|
||||
BATTERY_VERIFY
|
||||
};
|
||||
|
||||
enum StatesInbox
|
||||
{
|
||||
enum StatesInbox {
|
||||
READ_REQ,
|
||||
READ_CHK_CMGF,
|
||||
READ_CHK_CPMS,
|
||||
@ -151,16 +140,14 @@ private:
|
||||
READ_CHK_CMGD
|
||||
};
|
||||
|
||||
enum StatesOutbox
|
||||
{
|
||||
enum StatesOutbox {
|
||||
SEND_REQ,
|
||||
SEND_CHK_CMGF,
|
||||
SEND_CHK_RDY,
|
||||
SEND_CHK_OK
|
||||
};
|
||||
|
||||
enum StatesCheckRing
|
||||
{
|
||||
enum StatesCheckRing {
|
||||
RING_WAIT,
|
||||
RING_CHK,
|
||||
};
|
||||
@ -185,8 +172,7 @@ private:
|
||||
// conf configuration = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};
|
||||
conf configuration{0};
|
||||
|
||||
enum ReqTypes
|
||||
{
|
||||
enum ReqTypes {
|
||||
REQ_CLOCK = 1,
|
||||
REQ_SIG = 2,
|
||||
REQ_INBOX = 4,
|
||||
@ -201,41 +187,44 @@ private:
|
||||
// functions
|
||||
public:
|
||||
ThreadedGSM(Stream & stream)
|
||||
: stream(stream)
|
||||
, dte(stream, THREADEDGSM_DTE_BUFFER_SIZE)
|
||||
, ringState(RING_WAIT)
|
||||
: stream(stream), dte(stream, THREADEDGSM_DTE_BUFFER_SIZE), ringState(RING_WAIT)
|
||||
{
|
||||
for (int i = 0; i < THREADEDGSM_INTERVAL_COUNT; i++)
|
||||
Intervals[i] = 0;
|
||||
for (unsigned long & Interval : Intervals)
|
||||
Interval = 0;
|
||||
|
||||
job = state = requests = 0;
|
||||
// SMSo.Text.reserve(150);
|
||||
// SMSi.Text.reserve(150);
|
||||
}
|
||||
|
||||
~ThreadedGSM() {};
|
||||
~ThreadedGSM() = default;
|
||||
|
||||
void nextJob(void) {
|
||||
void nextJob()
|
||||
{
|
||||
job = 0;
|
||||
}
|
||||
|
||||
void setHandlers(conf config) {
|
||||
void setHandlers(conf config)
|
||||
{
|
||||
|
||||
this->configuration = config;
|
||||
}
|
||||
|
||||
void setInterval(IntervalSourceE source, unsigned long interval) {
|
||||
void setInterval(IntervalSourceE source, unsigned long interval)
|
||||
{
|
||||
Intervals[source] = interval;
|
||||
tickSync[source] = millis();
|
||||
}
|
||||
|
||||
// Initialization
|
||||
void begin(void) {
|
||||
void begin()
|
||||
{
|
||||
requests = (REQ_STARTUP);
|
||||
}
|
||||
|
||||
// Call this function for executing thread
|
||||
void loop(void) {
|
||||
void loop()
|
||||
{
|
||||
if (dte.getIsBusy())
|
||||
return;
|
||||
|
||||
@ -300,17 +289,20 @@ public:
|
||||
Outbox();
|
||||
else if (job == REQ_BATTERY)
|
||||
Battery();
|
||||
else CheckRing();
|
||||
else
|
||||
CheckRing();
|
||||
}
|
||||
|
||||
// Requests
|
||||
void sendSMS(String& Number, String& Text) {
|
||||
void sendSMS(String & Number, String & Text)
|
||||
{
|
||||
requests |= (REQ_OUTBOX);
|
||||
SMSo.Number = Number;
|
||||
SMSo.Text = Text;
|
||||
}
|
||||
|
||||
void sendSMS(String& Number, char *Text) {
|
||||
void sendSMS(String & Number, const char * Text)
|
||||
{
|
||||
String t = Text;
|
||||
|
||||
sendSMS(Number, t);
|
||||
@ -318,13 +310,13 @@ public:
|
||||
|
||||
protected:
|
||||
private:
|
||||
|
||||
// States
|
||||
void Startup(void) {
|
||||
void Startup()
|
||||
{
|
||||
int lastState = state;
|
||||
switch (state) {
|
||||
case STARTUP_POWER_OFF:
|
||||
if (this->configuration.power != NULL)
|
||||
if (this->configuration.power != nullptr)
|
||||
this->configuration.power(*this, false);
|
||||
tick = millis();
|
||||
state = STARTUP_POWER_OFF_DELAY;
|
||||
@ -336,7 +328,7 @@ private:
|
||||
break;
|
||||
|
||||
case STARTUP_POWER_ON:
|
||||
if (this->configuration.power != NULL)
|
||||
if (this->configuration.power != nullptr)
|
||||
this->configuration.power(*this, true);
|
||||
// begin delay
|
||||
tick = millis();
|
||||
@ -396,7 +388,7 @@ private:
|
||||
clearReq(REQ_STARTUP);
|
||||
for (int i = 0; i < THREADEDGSM_INTERVAL_COUNT; i++)
|
||||
tickSync[i] = millis();
|
||||
if (this->configuration.ready != NULL)
|
||||
if (this->configuration.ready != nullptr)
|
||||
this->configuration.ready(*this);
|
||||
} else
|
||||
state = STARTUP_POWER_OFF;
|
||||
@ -409,7 +401,8 @@ private:
|
||||
}
|
||||
|
||||
// Threads
|
||||
void Clock(void) {
|
||||
void Clock(void)
|
||||
{
|
||||
String clockTime;
|
||||
int lastState = state;
|
||||
switch (state) {
|
||||
@ -434,14 +427,15 @@ private:
|
||||
}
|
||||
|
||||
if (endindex >= 0) {
|
||||
NetworkTime ClockTime;
|
||||
NetworkTime ClockTime{};
|
||||
|
||||
ClockTime.year = 2000 + clockTime.substring(0, 2).toInt();
|
||||
ClockTime.month = clockTime.substring(3, 5).toInt();
|
||||
ClockTime.day = clockTime.substring(6, 8).toInt();
|
||||
ClockTime.hour = clockTime.substring(9, 11).toInt();
|
||||
ClockTime.minute = clockTime.substring(12, 14).toInt();
|
||||
ClockTime.second = clockTime.substring(15, 17).toInt();
|
||||
if (this->configuration.clock != NULL)
|
||||
if (this->configuration.clock != nullptr)
|
||||
this->configuration.clock(*this, ClockTime);
|
||||
}
|
||||
}
|
||||
@ -454,7 +448,8 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
void Signal(void) {
|
||||
void Signal()
|
||||
{
|
||||
int lastState = state;
|
||||
switch (state) {
|
||||
case SIGNAL_REQ:
|
||||
@ -467,11 +462,11 @@ private:
|
||||
if (index >= 0) {
|
||||
// parse signal
|
||||
index += 6;
|
||||
SignalLevel GsmSignal;
|
||||
SignalLevel GsmSignal{};
|
||||
GsmSignal.Value = dte.getBuffer().substring(index, index + 2).toInt();
|
||||
GsmSignal.Dbm = dte.getBuffer().substring(index + 3, index + 5).toInt();
|
||||
if (GsmSignal.Value != 0) {
|
||||
if (this->configuration.signal != NULL)
|
||||
if (this->configuration.signal != nullptr)
|
||||
this->configuration.signal(*this, GsmSignal);
|
||||
}
|
||||
}
|
||||
@ -484,7 +479,8 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
void Battery(void) {
|
||||
void Battery()
|
||||
{
|
||||
int lastState = state;
|
||||
switch (state) {
|
||||
case BATTERY_REQ:
|
||||
@ -495,7 +491,7 @@ private:
|
||||
case BATTERY_VERIFY:
|
||||
int index = dte.getBuffer().indexOf(F("+CBC:"));
|
||||
if (index >= 0) {
|
||||
BatteryInfo BattInfo;
|
||||
BatteryInfo BattInfo{};
|
||||
// parse battery level
|
||||
String buffer = dte.getBuffer().substring(index);
|
||||
String buffer2 = buffer.substring(buffer.indexOf(F(",")) + 1);
|
||||
@ -503,7 +499,7 @@ private:
|
||||
BattInfo.Percent = buffer2.substring(0, buffer2.indexOf(F(","))).toInt(); // converts the result to interger
|
||||
buffer2 = buffer.substring(buffer.indexOf(F(",")) + 1);
|
||||
BattInfo.Voltage = buffer2.substring(0, buffer2.indexOf(F("\r"))).toInt(); // converts the result to interger
|
||||
if (this->configuration.battery != NULL)
|
||||
if (this->configuration.battery != nullptr)
|
||||
this->configuration.battery(*this, BattInfo);
|
||||
}
|
||||
clearReq(REQ_BATTERY);
|
||||
@ -515,12 +511,14 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
void clearReq(int req) {
|
||||
void clearReq(int req)
|
||||
{
|
||||
requests &= ~(req);
|
||||
nextJob();
|
||||
}
|
||||
|
||||
void Inbox(void) {
|
||||
void Inbox()
|
||||
{
|
||||
String CMD;
|
||||
int lastState = state;
|
||||
switch (state) {
|
||||
@ -535,8 +533,8 @@ private:
|
||||
if (dte.getResult() == DTE::EXPECT_RESULT) {
|
||||
dte.SendCommand(F("AT+CPMS=\"SM\"\r"), THREADEDGSM_AT_TIMEOUT, "OK\r"); // SIM Message storage
|
||||
state = READ_CHK_CPMS;
|
||||
}
|
||||
else clearReq(REQ_INBOX);
|
||||
} else
|
||||
clearReq(REQ_INBOX);
|
||||
break;
|
||||
|
||||
case READ_CHK_CPMS:
|
||||
@ -546,8 +544,8 @@ private:
|
||||
CMD += "\r";
|
||||
dte.SendCommand(CMD.c_str(), THREADEDGSM_AT_TIMEOUT, ",");
|
||||
state = READ_CHK_CMGL;
|
||||
}
|
||||
else clearReq(REQ_INBOX);
|
||||
} else
|
||||
clearReq(REQ_INBOX);
|
||||
break;
|
||||
|
||||
case READ_CHK_CMGL:
|
||||
@ -614,7 +612,7 @@ private:
|
||||
case READ_CHK_CMGD:
|
||||
// if( (dte.getResult() == DTE::EXPECT_RESULT) && (SMS.InboxMsgContents != ""))
|
||||
if (dte.getResult() == DTE::EXPECT_RESULT) {
|
||||
if (this->configuration.incoming != NULL)
|
||||
if (this->configuration.incoming != nullptr)
|
||||
this->configuration.incoming(*this, SMSi);
|
||||
}
|
||||
clearReq(REQ_INBOX);
|
||||
@ -626,7 +624,8 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
void Outbox(void) {
|
||||
void Outbox()
|
||||
{
|
||||
String CMD;
|
||||
|
||||
// CMD.reserve(200);
|
||||
@ -644,8 +643,8 @@ private:
|
||||
CMD += "\"\r";
|
||||
dte.SendCommand(CMD.c_str(), 15000, "> ");
|
||||
state = SEND_CHK_RDY;
|
||||
}
|
||||
else clearReq(REQ_OUTBOX);
|
||||
} else
|
||||
clearReq(REQ_OUTBOX);
|
||||
break;
|
||||
|
||||
case SEND_CHK_RDY:
|
||||
@ -654,12 +653,13 @@ private:
|
||||
CMD += (char) 26;
|
||||
dte.SendCommand(CMD.c_str(), 10000, "OK\r");
|
||||
state = SEND_CHK_OK;
|
||||
} else clearReq(REQ_OUTBOX);
|
||||
} else
|
||||
clearReq(REQ_OUTBOX);
|
||||
break;
|
||||
|
||||
case SEND_CHK_OK:
|
||||
if (dte.getResult() == DTE::EXPECT_RESULT) {
|
||||
if (this->configuration.outgoing != NULL)
|
||||
if (this->configuration.outgoing != nullptr)
|
||||
this->configuration.outgoing(*this);
|
||||
}
|
||||
clearReq(REQ_OUTBOX);
|
||||
@ -671,7 +671,8 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
void CheckRing(void) {
|
||||
void CheckRing()
|
||||
{
|
||||
int lastState = ringState;
|
||||
switch (ringState) {
|
||||
case RING_WAIT:
|
||||
@ -680,6 +681,14 @@ private:
|
||||
ringState = RING_CHK;
|
||||
}
|
||||
break;
|
||||
|
||||
case RING_CHK:
|
||||
if (this->configuration.ring != nullptr) {
|
||||
String s = "Ring";
|
||||
this->configuration.ring(*this, s);
|
||||
}
|
||||
ringState = RING_WAIT;
|
||||
break;
|
||||
}
|
||||
if (ringState != lastState) {
|
||||
DEBUG_PRINT(F("RING_STATE: "));
|
||||
|
Loading…
Reference in New Issue
Block a user