Watchy/src/Watchy.h

102 lines
2.7 KiB
C
Raw Permalink Normal View History

2021-12-30 23:16:03 -05:00
#ifndef WATCHY_H
#define WATCHY_H
#include <Arduino.h>
2022-05-06 23:58:07 -04:00
#include <WiFiManager.h>
2021-12-30 23:16:03 -05:00
#include <HTTPClient.h>
2022-01-03 21:41:36 -05:00
#include <NTPClient.h>
#include <WiFiUdp.h>
2022-05-06 23:58:07 -04:00
#include <Arduino_JSON.h>
#include <GxEPD2_BW.h>
2021-12-30 23:16:03 -05:00
#include <Wire.h>
2022-05-06 23:58:07 -04:00
#include <Fonts/FreeMonoBold9pt7b.h>
#include "DSEG7_Classic_Bold_53.h"
#include "Display.h"
2022-05-06 23:58:07 -04:00
#include "WatchyRTC.h"
#include "BLE.h"
#include "bma.h"
#include "config.h"
2024-04-03 15:10:09 -04:00
#include "esp_chip_info.h"
2021-12-30 23:16:03 -05:00
2022-04-28 21:17:00 -04:00
typedef struct weatherData {
int8_t temperature;
int16_t weatherConditionCode;
bool isMetric;
String weatherDescription;
bool external;
tmElements_t sunrise;
tmElements_t sunset;
2022-04-28 21:17:00 -04:00
} weatherData;
2021-12-30 23:16:03 -05:00
2022-04-28 21:17:00 -04:00
typedef struct watchySettings {
// Weather Settings
String cityID;
String lat;
String lon;
2022-04-28 21:17:00 -04:00
String weatherAPIKey;
String weatherURL;
String weatherUnit;
String weatherLang;
int8_t weatherUpdateInterval;
// NTP Settings
String ntpServer;
int gmtOffset;
//
bool vibrateOClock;
2022-04-28 21:17:00 -04:00
} watchySettings;
2021-12-30 23:16:03 -05:00
class Watchy {
2022-04-28 21:17:00 -04:00
public:
static WatchyRTC RTC;
static GxEPD2_BW<WatchyDisplay, WatchyDisplay::HEIGHT> display;
2022-04-28 21:17:00 -04:00
tmElements_t currentTime;
watchySettings settings;
public:
explicit Watchy(const watchySettings &s) : settings(s) {} // constructor
void init(String datetime = "");
void deepSleep();
float getBatteryVoltage();
2024-04-03 15:10:09 -04:00
uint8_t getBoardRevision();
2022-04-28 21:17:00 -04:00
void vibMotor(uint8_t intervalMs = 100, uint8_t length = 20);
2021-12-30 23:16:03 -05:00
2022-12-30 11:14:13 -05:00
virtual void handleButtonPress();
2022-04-28 21:17:00 -04:00
void showMenu(byte menuIndex, bool partialRefresh);
void showFastMenu(byte menuIndex);
void showAbout();
void showBuzz();
void showAccelerometer();
void showUpdateFW();
void showSyncNTP();
bool syncNTP();
bool syncNTP(long gmt);
bool syncNTP(long gmt, String ntpServer);
2022-04-28 21:17:00 -04:00
void setTime();
void setupWifi();
bool connectWiFi();
weatherData getWeatherData();
void updateFWBegin();
2021-12-30 23:16:03 -05:00
2022-04-28 21:17:00 -04:00
void showWatchFace(bool partialRefresh);
virtual void drawWatchFace(); // override this method for different watch
// faces
2021-12-30 23:16:03 -05:00
2022-04-28 21:17:00 -04:00
private:
void _bmaConfig();
static void _configModeCallback(WiFiManager *myWiFiManager);
static uint16_t _readRegister(uint8_t address, uint8_t reg, uint8_t *data,
uint16_t len);
static uint16_t _writeRegister(uint8_t address, uint8_t reg, uint8_t *data,
uint16_t len);
weatherData _getWeatherData(String cityID, String lat, String lon, String units, String lang,
String url, String apiKey, uint8_t updateInterval);
2021-12-30 23:16:03 -05:00
};
extern RTC_DATA_ATTR int guiState;
extern RTC_DATA_ATTR int menuIndex;
extern RTC_DATA_ATTR BMA423 sensor;
extern RTC_DATA_ATTR bool WIFI_CONFIGURED;
extern RTC_DATA_ATTR bool BLE_CONFIGURED;
#endif