Added RAK4631 e-ink display support
This commit is contained in:
parent
f3558b66fc
commit
055083ffba
17
Bluetooth.h
17
Bluetooth.h
@ -13,12 +13,6 @@
|
|||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#if MCU_VARIANT == MCU_ESP32
|
|
||||||
|
|
||||||
|
|
||||||
#elif MCU_VARIANT == MCU_NRF52
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if MCU_VARIANT == MCU_ESP32
|
#if MCU_VARIANT == MCU_ESP32
|
||||||
#if HAS_BLUETOOTH == true
|
#if HAS_BLUETOOTH == true
|
||||||
#include "BluetoothSerial.h"
|
#include "BluetoothSerial.h"
|
||||||
@ -265,6 +259,8 @@ void bt_disable_pairing() {
|
|||||||
|
|
||||||
void bt_pairing_complete(uint16_t conn_handle, uint8_t auth_status) {
|
void bt_pairing_complete(uint16_t conn_handle, uint8_t auth_status) {
|
||||||
if (auth_status == BLE_GAP_SEC_STATUS_SUCCESS) {
|
if (auth_status == BLE_GAP_SEC_STATUS_SUCCESS) {
|
||||||
|
bt_state = BT_STATE_CONNECTED;
|
||||||
|
cable_state = CABLE_STATE_DISCONNECTED;
|
||||||
bt_disable_pairing();
|
bt_disable_pairing();
|
||||||
} else {
|
} else {
|
||||||
bt_ssp_pin = 0;
|
bt_ssp_pin = 0;
|
||||||
@ -285,11 +281,6 @@ bool bt_passkey_callback(uint16_t conn_handle, uint8_t const passkey[6], bool ma
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bt_connect_callback(uint16_t conn_handle) {
|
|
||||||
bt_state = BT_STATE_CONNECTED;
|
|
||||||
cable_state = CABLE_STATE_DISCONNECTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
void bt_disconnect_callback(uint16_t conn_handle, uint8_t reason) {
|
void bt_disconnect_callback(uint16_t conn_handle, uint8_t reason) {
|
||||||
bt_state = BT_STATE_ON;
|
bt_state = BT_STATE_ON;
|
||||||
}
|
}
|
||||||
@ -308,10 +299,9 @@ bool bt_setup_hw() {
|
|||||||
Bluefruit.configPrphBandwidth(BANDWIDTH_MAX);
|
Bluefruit.configPrphBandwidth(BANDWIDTH_MAX);
|
||||||
Bluefruit.autoConnLed(false);
|
Bluefruit.autoConnLed(false);
|
||||||
if (Bluefruit.begin()) {
|
if (Bluefruit.begin()) {
|
||||||
Bluefruit.setTxPower(4); // Check bluefruit.h for supported values
|
Bluefruit.setTxPower(8); // Check bluefruit.h for supported values
|
||||||
Bluefruit.Security.setIOCaps(true, true, false);
|
Bluefruit.Security.setIOCaps(true, true, false);
|
||||||
Bluefruit.Security.setPairPasskeyCallback(bt_passkey_callback);
|
Bluefruit.Security.setPairPasskeyCallback(bt_passkey_callback);
|
||||||
Bluefruit.Periph.setConnectCallback(bt_connect_callback);
|
|
||||||
Bluefruit.Periph.setDisconnectCallback(bt_disconnect_callback);
|
Bluefruit.Periph.setDisconnectCallback(bt_disconnect_callback);
|
||||||
Bluefruit.Security.setPairCompleteCallback(bt_pairing_complete);
|
Bluefruit.Security.setPairCompleteCallback(bt_pairing_complete);
|
||||||
const ble_gap_addr_t gap_addr = Bluefruit.getAddr();
|
const ble_gap_addr_t gap_addr = Bluefruit.getAddr();
|
||||||
@ -348,7 +338,6 @@ void bt_start() {
|
|||||||
|
|
||||||
blebas.begin();
|
blebas.begin();
|
||||||
|
|
||||||
// non-connectable advertising
|
|
||||||
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
|
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
|
||||||
Bluefruit.Advertising.addTxPower();
|
Bluefruit.Advertising.addTxPower();
|
||||||
|
|
||||||
|
24
Boards.h
24
Boards.h
@ -43,6 +43,10 @@
|
|||||||
#define BOARD_GENERIC_NRF52 0x50
|
#define BOARD_GENERIC_NRF52 0x50
|
||||||
#define BOARD_RAK4631 0x51
|
#define BOARD_RAK4631 0x51
|
||||||
|
|
||||||
|
#define OLED 0x01
|
||||||
|
#define EINK_BW 0x02
|
||||||
|
#define EINK_3C 0x03
|
||||||
|
|
||||||
#if defined(__AVR_ATmega1284P__)
|
#if defined(__AVR_ATmega1284P__)
|
||||||
#define PLATFORM PLATFORM_AVR
|
#define PLATFORM PLATFORM_AVR
|
||||||
#define MCU_VARIANT MCU_1284P
|
#define MCU_VARIANT MCU_1284P
|
||||||
@ -147,6 +151,7 @@
|
|||||||
|
|
||||||
#elif BOARD_MODEL == BOARD_TBEAM
|
#elif BOARD_MODEL == BOARD_TBEAM
|
||||||
#define HAS_DISPLAY true
|
#define HAS_DISPLAY true
|
||||||
|
#define DISPLAY OLED
|
||||||
#define HAS_PMU true
|
#define HAS_PMU true
|
||||||
#define HAS_BLUETOOTH true
|
#define HAS_BLUETOOTH true
|
||||||
#define HAS_BLE true
|
#define HAS_BLE true
|
||||||
@ -184,6 +189,7 @@
|
|||||||
|
|
||||||
#elif BOARD_MODEL == BOARD_LORA32_V1_0
|
#elif BOARD_MODEL == BOARD_LORA32_V1_0
|
||||||
#define HAS_DISPLAY true
|
#define HAS_DISPLAY true
|
||||||
|
#define DISPLAY OLED
|
||||||
#define HAS_BLUETOOTH true
|
#define HAS_BLUETOOTH true
|
||||||
#define HAS_BLE true
|
#define HAS_BLE true
|
||||||
#define HAS_CONSOLE true
|
#define HAS_CONSOLE true
|
||||||
@ -201,6 +207,7 @@
|
|||||||
|
|
||||||
#elif BOARD_MODEL == BOARD_LORA32_V2_0
|
#elif BOARD_MODEL == BOARD_LORA32_V2_0
|
||||||
#define HAS_DISPLAY true
|
#define HAS_DISPLAY true
|
||||||
|
#define DISPLAY OLED
|
||||||
#define HAS_BLUETOOTH true
|
#define HAS_BLUETOOTH true
|
||||||
#define HAS_BLE true
|
#define HAS_BLE true
|
||||||
#define HAS_CONSOLE true
|
#define HAS_CONSOLE true
|
||||||
@ -218,6 +225,7 @@
|
|||||||
|
|
||||||
#elif BOARD_MODEL == BOARD_LORA32_V2_1
|
#elif BOARD_MODEL == BOARD_LORA32_V2_1
|
||||||
#define HAS_DISPLAY true
|
#define HAS_DISPLAY true
|
||||||
|
#define DISPLAY OLED
|
||||||
#define HAS_BLUETOOTH true
|
#define HAS_BLUETOOTH true
|
||||||
#define HAS_BLE true
|
#define HAS_BLE true
|
||||||
#define HAS_PMU true
|
#define HAS_PMU true
|
||||||
@ -239,6 +247,7 @@
|
|||||||
|
|
||||||
#elif BOARD_MODEL == BOARD_HELTEC32_V2
|
#elif BOARD_MODEL == BOARD_HELTEC32_V2
|
||||||
#define HAS_DISPLAY true
|
#define HAS_DISPLAY true
|
||||||
|
#define DISPLAY OLED
|
||||||
#define HAS_BLUETOOTH true
|
#define HAS_BLUETOOTH true
|
||||||
#define HAS_CONSOLE true
|
#define HAS_CONSOLE true
|
||||||
#define HAS_EEPROM true
|
#define HAS_EEPROM true
|
||||||
@ -292,6 +301,7 @@
|
|||||||
|
|
||||||
#elif BOARD_MODEL == BOARD_RNODE_NG_20
|
#elif BOARD_MODEL == BOARD_RNODE_NG_20
|
||||||
#define HAS_DISPLAY true
|
#define HAS_DISPLAY true
|
||||||
|
#define DISPLAY OLED
|
||||||
#define HAS_BLUETOOTH true
|
#define HAS_BLUETOOTH true
|
||||||
#define HAS_NP true
|
#define HAS_NP true
|
||||||
#define HAS_CONSOLE true
|
#define HAS_CONSOLE true
|
||||||
@ -312,6 +322,7 @@
|
|||||||
|
|
||||||
#elif BOARD_MODEL == BOARD_RNODE_NG_21
|
#elif BOARD_MODEL == BOARD_RNODE_NG_21
|
||||||
#define HAS_DISPLAY true
|
#define HAS_DISPLAY true
|
||||||
|
#define DISPLAY OLED
|
||||||
#define HAS_BLUETOOTH true
|
#define HAS_BLUETOOTH true
|
||||||
#define HAS_CONSOLE true
|
#define HAS_CONSOLE true
|
||||||
#define HAS_PMU true
|
#define HAS_PMU true
|
||||||
@ -346,6 +357,7 @@
|
|||||||
#define HAS_TCXO true
|
#define HAS_TCXO true
|
||||||
|
|
||||||
#define HAS_DISPLAY true
|
#define HAS_DISPLAY true
|
||||||
|
#define DISPLAY OLED
|
||||||
#define HAS_CONSOLE false
|
#define HAS_CONSOLE false
|
||||||
#define HAS_BLUETOOTH false
|
#define HAS_BLUETOOTH false
|
||||||
#define HAS_BLE true
|
#define HAS_BLE true
|
||||||
@ -397,11 +409,12 @@
|
|||||||
#elif MCU_VARIANT == MCU_NRF52
|
#elif MCU_VARIANT == MCU_NRF52
|
||||||
#if BOARD_MODEL == BOARD_RAK4631
|
#if BOARD_MODEL == BOARD_RAK4631
|
||||||
#define HAS_EEPROM false
|
#define HAS_EEPROM false
|
||||||
#define HAS_DISPLAY false
|
#define HAS_DISPLAY true
|
||||||
|
#define DISPLAY EINK_3C
|
||||||
#define HAS_BLUETOOTH false
|
#define HAS_BLUETOOTH false
|
||||||
#define HAS_BLE true
|
#define HAS_BLE true
|
||||||
#define HAS_CONSOLE false
|
#define HAS_CONSOLE false
|
||||||
#define HAS_PMU false
|
#define HAS_PMU true
|
||||||
#define HAS_NP false
|
#define HAS_NP false
|
||||||
#define HAS_SD false
|
#define HAS_SD false
|
||||||
#define HAS_TCXO true
|
#define HAS_TCXO true
|
||||||
@ -425,6 +438,13 @@
|
|||||||
const int pin_miso = 45;
|
const int pin_miso = 45;
|
||||||
const int pin_busy = 46;
|
const int pin_busy = 46;
|
||||||
const int pin_dio = 47;
|
const int pin_dio = 47;
|
||||||
|
|
||||||
|
const int pin_disp_cs = SS;
|
||||||
|
const int pin_disp_dc = WB_IO1;
|
||||||
|
const int pin_disp_reset = -1;
|
||||||
|
const int pin_disp_busy = WB_IO4;
|
||||||
|
const int pin_disp_en = WB_IO2;
|
||||||
|
|
||||||
const int pin_led_rx = LED_BLUE;
|
const int pin_led_rx = LED_BLUE;
|
||||||
const int pin_led_tx = LED_GREEN;
|
const int pin_led_tx = LED_GREEN;
|
||||||
const int pin_tcxo_enable = -1;
|
const int pin_tcxo_enable = -1;
|
||||||
|
1676
Graphics.h
1676
Graphics.h
File diff suppressed because it is too large
Load Diff
95
Power.h
95
Power.h
@ -44,6 +44,26 @@
|
|||||||
int bat_charged_samples = 0;
|
int bat_charged_samples = 0;
|
||||||
bool bat_voltage_dropping = false;
|
bool bat_voltage_dropping = false;
|
||||||
float bat_delay_v = 0;
|
float bat_delay_v = 0;
|
||||||
|
#elif BOARD_MODEL == BOARD_RAK4631
|
||||||
|
#include "nrfx_power.h"
|
||||||
|
#define BAT_C_SAMPLES 7
|
||||||
|
#define BAT_D_SAMPLES 2
|
||||||
|
#define BAT_V_MIN 2.75
|
||||||
|
#define BAT_V_MAX 4.2
|
||||||
|
#define BAT_V_FLOAT 4.22
|
||||||
|
#define BAT_SAMPLES 5
|
||||||
|
#define VBAT_MV_PER_LSB (0.73242188F) // 3.0V ADC range and 12 - bit ADC resolution = 3000mV / 4096
|
||||||
|
#define VBAT_DIVIDER_COMP (1.73) // Compensation factor for the VBAT divider
|
||||||
|
#define VBAT_MV_PER_LSB_FIN (VBAT_DIVIDER_COMP * VBAT_MV_PER_LSB)
|
||||||
|
#define PIN_VBAT WB_A0
|
||||||
|
float bat_p_samples[BAT_SAMPLES];
|
||||||
|
float bat_v_samples[BAT_SAMPLES];
|
||||||
|
uint8_t bat_samples_count = 0;
|
||||||
|
int bat_discharging_samples = 0;
|
||||||
|
int bat_charging_samples = 0;
|
||||||
|
int bat_charged_samples = 0;
|
||||||
|
bool bat_voltage_dropping = false;
|
||||||
|
float bat_delay_v = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint32_t last_pmu_update = 0;
|
uint32_t last_pmu_update = 0;
|
||||||
@ -193,6 +213,66 @@ void measure_battery() {
|
|||||||
else {
|
else {
|
||||||
battery_ready = false;
|
battery_ready = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif BOARD_MODEL == BOARD_RAK4631
|
||||||
|
battery_installed = true;
|
||||||
|
battery_indeterminate = false;
|
||||||
|
|
||||||
|
bat_v_samples[bat_samples_count%BAT_SAMPLES] = (float)(analogRead(PIN_VBAT)) * VBAT_MV_PER_LSB_FIN;
|
||||||
|
|
||||||
|
if (bat_v_samples[bat_samples_count%BAT_SAMPLES] < 3300) {
|
||||||
|
bat_p_samples[bat_samples_count%BAT_SAMPLES] = 0;
|
||||||
|
}
|
||||||
|
else if (bat_v_samples[bat_samples_count%BAT_SAMPLES] < 3600)
|
||||||
|
{
|
||||||
|
bat_v_samples[bat_samples_count%BAT_SAMPLES] -= 3300;
|
||||||
|
bat_p_samples[bat_samples_count%BAT_SAMPLES] = bat_v_samples[bat_samples_count%BAT_SAMPLES] / 30;
|
||||||
|
} else {
|
||||||
|
bat_v_samples[bat_samples_count%BAT_SAMPLES] -= 3600;
|
||||||
|
}
|
||||||
|
bat_p_samples[bat_samples_count%BAT_SAMPLES] = 10 + (bat_v_samples[bat_samples_count%BAT_SAMPLES] * 0.15F);
|
||||||
|
|
||||||
|
bat_samples_count++;
|
||||||
|
if (!battery_ready && bat_samples_count >= BAT_SAMPLES) {
|
||||||
|
battery_ready = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
battery_percent = 0;
|
||||||
|
for (uint8_t bi = 0; bi < BAT_SAMPLES; bi++) {
|
||||||
|
battery_percent += bat_p_samples[bi];
|
||||||
|
}
|
||||||
|
battery_percent = battery_percent/BAT_SAMPLES;
|
||||||
|
|
||||||
|
battery_voltage = 0;
|
||||||
|
for (uint8_t bi = 0; bi < BAT_SAMPLES; bi++) {
|
||||||
|
battery_voltage += bat_v_samples[bi];
|
||||||
|
}
|
||||||
|
battery_voltage = battery_voltage/BAT_SAMPLES;
|
||||||
|
|
||||||
|
if (bat_delay_v == 0) bat_delay_v = battery_voltage;
|
||||||
|
if (battery_percent > 100.0) battery_percent = 100.0;
|
||||||
|
if (battery_percent < 0.0) battery_percent = 0.0;
|
||||||
|
|
||||||
|
if (bat_samples_count%BAT_SAMPLES == 0) {
|
||||||
|
if (battery_voltage < bat_delay_v && battery_voltage < BAT_V_FLOAT) {
|
||||||
|
bat_voltage_dropping = true;
|
||||||
|
} else {
|
||||||
|
bat_voltage_dropping = false;
|
||||||
|
}
|
||||||
|
bat_samples_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
nrfx_power_usb_state_t usbstate = nrfx_power_usbstatus_get();
|
||||||
|
if (usbstate == NRFX_POWER_USB_STATE_CONNECTED || usbstate == NRFX_POWER_USB_STATE_READY) {
|
||||||
|
// charging
|
||||||
|
battery_state = BATTERY_STATE_CHARGING;
|
||||||
|
} else {
|
||||||
|
battery_state = BATTERY_STATE_DISCHARGING;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (battery_percent >= 98) {
|
||||||
|
battery_state = BATTERY_STATE_CHARGED;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (battery_ready) {
|
if (battery_ready) {
|
||||||
@ -340,6 +420,21 @@ bool init_pmu() {
|
|||||||
// Set the time of pressing the button to turn off
|
// Set the time of pressing the button to turn off
|
||||||
PMU->setPowerKeyPressOffTime(XPOWERS_POWEROFF_4S);
|
PMU->setPowerKeyPressOffTime(XPOWERS_POWEROFF_4S);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
#elif BOARD_MODEL == BOARD_RAK4631
|
||||||
|
// board doesn't have PMU but we can measure batt voltage
|
||||||
|
|
||||||
|
// prep ADC for reading battery level
|
||||||
|
analogReference(AR_INTERNAL_3_0);
|
||||||
|
|
||||||
|
// Set the resolution to 12-bit (0..4095)
|
||||||
|
analogReadResolution(12);
|
||||||
|
|
||||||
|
// Let the ADC settle
|
||||||
|
delay(1);
|
||||||
|
|
||||||
|
// Get a single ADC sample and throw it away
|
||||||
|
float raw = analogRead(PIN_VBAT);
|
||||||
return true;
|
return true;
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
|
@ -166,6 +166,11 @@ void setup() {
|
|||||||
eeprom_update(eeprom_addr(ADDR_CONF_DSET), CONF_OK_BYTE);
|
eeprom_update(eeprom_addr(ADDR_CONF_DSET), CONF_OK_BYTE);
|
||||||
eeprom_update(eeprom_addr(ADDR_CONF_DINT), 0xFF);
|
eeprom_update(eeprom_addr(ADDR_CONF_DINT), 0xFF);
|
||||||
}
|
}
|
||||||
|
#if DISPLAY == EINK_BW || DISPLAY == EINK_3C
|
||||||
|
// Poll and process incoming serial commands whilst e-ink display is
|
||||||
|
// refreshing to make device still seem responsive
|
||||||
|
display_add_callback(process_serial);
|
||||||
|
#endif
|
||||||
disp_ready = display_init();
|
disp_ready = display_init();
|
||||||
update_display();
|
update_display();
|
||||||
#endif
|
#endif
|
||||||
@ -1310,6 +1315,11 @@ void loop() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void process_serial() {
|
||||||
|
buffer_serial();
|
||||||
|
if (!fifo_isempty(&serialFIFO)) serial_poll();
|
||||||
|
}
|
||||||
|
|
||||||
void sleep_now() {
|
void sleep_now() {
|
||||||
#if HAS_SLEEP == true
|
#if HAS_SLEEP == true
|
||||||
#if BOARD_MODEL == BOARD_RNODE_NG_22
|
#if BOARD_MODEL == BOARD_RNODE_NG_22
|
||||||
|
Loading…
Reference in New Issue
Block a user