blob: 2495c1eddd9a3526c6071974ffcf372c8660f728 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#include <Arduino.h>
#include "badge/config.h"
#include "badge/ble.h"
#include "badge/display.h"
#include "badge/gpio.h"
#include "badge/log.h"
#if defined(BADGE_SSID_NAME) && defined(BADGE_SSID_PASS)
#include <WiFi.h>
#define BADGE_USE_WIFI 1
#else
#define BADGE_USE_WIFI 0
#endif
#define PRESS_TIME_DRAW 1000
#define PRESS_TIME_BLE_ADV 3000
#define SLEEP_TIME 10000
void setup()
{
Serial.begin(115200);
Serial.println("Yes, it works!");
LOG_F("XTAL freq is %u\n", getXtalFrequencyMhz());
LOG_F("CPU freq is %u\n", getCpuFrequencyMhz());
setCpuFrequencyMhz(80);
LOG_F("CPU freq is now %u\n", getCpuFrequencyMhz());
de::uvok::badge::ble_init();
de::uvok::badge::display_init();
#if BADGE_USE_WIFI
WiFi.begin(BADGE_SSID_NAME, BADGE_SSID_PASS);
while (WiFi.status() != WL_CONNECTED)
delay(500);
Serial.printf("> My IP is %s\n", WiFi.localIP().toString());
#endif
// doesn't work as expected?
// gpio_wakeup_enable(GPIO_NUM_0, GPIO_INTR_LOW_LEVEL);
// esp_sleep_enable_gpio_wakeup();
// esp_light_sleep_start();
de::uvok::badge::gpio_init();
}
void loop()
{
static uint32_t lastActivity;
auto gpio_result = de::uvok::badge::gpio_poll();
if (gpio_result.has_data)
{
LOG_F("Pin %d for %u ms\n", gpio_result.pin_number, gpio_result.duration_ms);
uint8_t newNum = UINT8_MAX;
switch (gpio_result.pin_number)
{
case NEXT_KEY:
de::uvok::badge::display_next();
break;
case PRV_KEY:
de::uvok::badge::display_prev();
break;
case OK_KEY:
newNum = de::uvok::badge::display_refresh();
break;
case HOME_KEY:
if (gpio_result.duration_ms > 1000)
{
de::uvok::badge::ble_advertise();
}
break;
}
if (newNum != UINT8_MAX)
{
de::uvok::badge::ble_set_image(newNum);
}
lastActivity = millis();
}
{
de::uvok::badge::ble_poll_result_t pollres = de::uvok::badge::ble_poll();
if (pollres.has_data)
{
de::uvok::badge::display_direct(pollres.new_template);
lastActivity = millis();
}
}
if (millis() - lastActivity > SLEEP_TIME && !de::uvok::badge::ble_is_advertising())
{
// RTC watchdog might reset ??? - not sure when/how this happens...
// (Happened with CPU@240MHz, not at 80 MHz yet?)
// RTCWDT_RTC_RST
esp_sleep_enable_timer_wakeup(10 * 1000);
esp_light_sleep_start();
}
}
|