Firmware for an ad-hoc mesh network of Internet-of-Things devices based on LoRa (Long Range radio) that can be deployed quickly and cheaply.
Duck.h
Go to the documentation of this file.
1 #ifndef DUCK_H
2 #define DUCK_H
3 
4 #include <Arduino.h>
5 #include <WString.h>
6 
7 #include "../DuckError.h"
8 #include "DuckLora.h"
9 #include "DuckNet.h"
10 #include "DuckTypes.h"
11 #include "cdpcfg.h"
12 
13 
14 class Duck {
15 
16 public:
21  Duck() {}
27  Duck(String id);
28 
29  ~Duck() {}
30 
36  void setupSerial(int baudRate = 115200);
37 
48  void setupRadio(float band = CDPCFG_RF_LORA_FREQ, int ss = CDPCFG_PIN_LORA_CS,
49  int rst = CDPCFG_PIN_LORA_RST, int di0 = CDPCFG_PIN_LORA_DIO0,
50  int di1 = CDPCFG_PIN_LORA_DIO1,
51  int txPower = CDPCFG_RF_LORA_TXPOW);
52 
59  void setupWifi(const char* ap = "🆘 DUCK EMERGENCY PORTAL");
60 
66  int setupDns();
67 
80  void setupWebServer(bool createCaptivePortal = false, String html = "");
81 
88  void setupInternet(String ssid, String password);
89 
94  void setupOTA();
95 
112  int sendPayloadStandard(String msg = "", String topic = "",
113  String senderId = "", String messageId = "",
114  String path = "");
115 
128  bool ssidAvailable(String ssid) { return duckNet->ssidAvailable(ssid); }
129 
135  String getSsid() { return duckNet->getSsid(); }
141  String getPassword() { return duckNet->getPassword(); }
142 
143 
144 protected:
145  String deviceId;
148 
154  int startReceive();
155 
161  int startTransmit();
162 
168  virtual void run() = 0;
169 
176  virtual void setupWithDefaults(String ssid, String password) {
178  setupSerial();
179  }
180 
181  virtual int getType() = 0;
182 
183  virtual int reconnectWifi(String ssid, String password) { return 0; }
184 
185  static volatile bool receivedFlag;
187  static void setReceiveFlag(bool value) { receivedFlag = value; }
188  static bool getReceiveFlag() { return receivedFlag; }
189 
190  static void onPacketReceived();
191 
192  static bool imAlive(void*);
193  static bool reboot(void*);
194 
199  void processPortalRequest();
200 
205  void handleOtaUpdate();
206 };
207 
208 #endif
Duck::duckNet
DuckNet * duckNet
Definition: Duck.h:147
DuckNet::getPassword
String getPassword()
Get the WiFi password ssid.
Duck::setupSerial
void setupSerial(int baudRate=115200)
Setup serial connection.
Definition: Duck.cpp:11
Duck::duckLora
DuckLora * duckLora
Definition: Duck.h:146
DuckNet::setDeviceId
void setDeviceId(String deviceId)
Set the Duck's device id.
Duck::setupInternet
void setupInternet(String ssid, String password)
Setup internet access.
Definition: Duck.cpp:78
Duck::getReceiveFlag
static bool getReceiveFlag()
Definition: Duck.h:188
DuckLora
Internal LoRa chip abstraction.
Definition: DuckLora.h:58
Duck::run
virtual void run()=0
Implement the duck's specific behavior.
Duck::reboot
static bool reboot(void *)
Definition: Duck.cpp:147
Duck::onPacketReceived
static void onPacketReceived()
Definition: Duck.cpp:19
Duck::sendPayloadStandard
int sendPayloadStandard(String msg="", String topic="", String senderId="", String messageId="", String path="")
Send a duck LoRa message.
Definition: Duck.cpp:136
Duck::deviceId
String deviceId
Definition: Duck.h:145
Duck::~Duck
~Duck()
Definition: Duck.h:29
Duck::receivedFlag
static volatile bool receivedFlag
Definition: Duck.h:185
CDPCFG_PIN_LORA_RST
#define CDPCFG_PIN_LORA_RST
Definition: cdpcfg.h:288
CDPCFG_PIN_LORA_DIO1
#define CDPCFG_PIN_LORA_DIO1
Definition: cdpcfg.h:297
DuckNet::getSsid
String getSsid()
Get the WiFi network ssid.
Duck::setReceiveFlag
static void setReceiveFlag(bool value)
Definition: Duck.h:187
Duck::getType
virtual int getType()=0
DuckLora::getInstance
static DuckLora * getInstance()
Get a singletom instance of the DuckLora class,.
Duck::startReceive
int startReceive()
Tell the duck radio to start receiving packets from the mesh network.
Definition: Duck.cpp:163
DuckNet::ssidAvailable
bool ssidAvailable(String val="")
Checks if the given ssid is available.
DuckLora.h
This file is internal to CDP and provides the library access to onboard LoRa module functions as well...
Duck::processPortalRequest
void processPortalRequest()
Handle request from emergency portal.
Definition: Duck.cpp:131
CDPCFG_PIN_LORA_CS
#define CDPCFG_PIN_LORA_CS
Definition: cdpcfg.h:286
Duck::getPassword
String getPassword()
Get the wifi access point password.
Definition: Duck.h:141
DuckNet::isWifiConnected
bool isWifiConnected()
Provide Wifi connection status.
Definition: DuckNet.h:154
CDPCFG_PIN_LORA_DIO0
#define CDPCFG_PIN_LORA_DIO0
Definition: cdpcfg.h:287
DuckNet.h
This file is internal to CDP and provides the library access to networking functions.
DuckNet
Internal network abstraction.
Definition: DuckNet.h:51
Duck::ssidAvailable
bool ssidAvailable(String ssid)
Check if the give access point is available.
Definition: Duck.h:128
Duck::isWifiConnected
bool isWifiConnected()
Check wifi connection status.
Definition: Duck.h:121
Duck::Duck
Duck()
Construct a new Duck object.
Definition: Duck.h:21
Duck::reconnectWifi
virtual int reconnectWifi(String ssid, String password)
Definition: Duck.h:183
Duck::setupWifi
void setupWifi(const char *ap="🆘 DUCK EMERGENCY PORTAL")
Setup WiFi access point.
Definition: Duck.cpp:70
Duck::setupDns
int setupDns()
Setup DNS.
Definition: Duck.cpp:74
Duck::startTransmit
int startTransmit()
Tell the duck radio to start receiving packets from the mesh network.
Definition: Duck.cpp:172
Duck::setupWithDefaults
virtual void setupWithDefaults(String ssid, String password)
Setup a duck with default settings.
Definition: Duck.h:176
Duck::getSsid
String getSsid()
Get the access point ssid.
Definition: Duck.h:135
Duck::handleOtaUpdate
void handleOtaUpdate()
Handle over the air firmware update.
Definition: Duck.cpp:123
Duck::toggleReceiveFlag
static void toggleReceiveFlag()
Definition: Duck.h:186
CDPCFG_RF_LORA_TXPOW
#define CDPCFG_RF_LORA_TXPOW
Transmit Power.
Definition: cdpcfg.h:330
Duck::imAlive
static bool imAlive(void *)
Definition: Duck.cpp:156
Duck::setupWebServer
void setupWebServer(bool createCaptivePortal=false, String html="")
Setup web server.
Definition: Duck.cpp:65
DuckNet::getInstance
static DuckNet * getInstance()
Get a singletom instance of the DuckNet class.
Duck::setupOTA
void setupOTA()
Definition: Duck.cpp:85
CDPCFG_RF_LORA_FREQ
#define CDPCFG_RF_LORA_FREQ
Frequency Range. Set for US Region 915.0Mhz.
Definition: cdpcfg.h:324
Duck
Definition: Duck.h:14
Duck::setupRadio
void setupRadio(float band=CDPCFG_RF_LORA_FREQ, int ss=CDPCFG_PIN_LORA_CS, int rst=CDPCFG_PIN_LORA_RST, int di0=CDPCFG_PIN_LORA_DIO0, int di1=CDPCFG_PIN_LORA_DIO1, int txPower=CDPCFG_RF_LORA_TXPOW)
Setup the radio component.
Definition: Duck.cpp:28
cdpcfg.h
CDP central compile-time configuration file.
DuckTypes.h