Aktualizace varovani z clang-tidy, prace na RING (zatim neuspesna...)

This commit is contained in:
Pavel Brychta 2023-09-02 12:02:37 +02:00
parent e2c5e5dcd9
commit e6ba94d9e3
2 changed files with 479 additions and 465 deletions

View File

@ -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;

View File

@ -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: "));