mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-15 07:12:34 +00:00
Compare commits
6 Commits
renovate/n
...
beta
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
42e56ae926 | ||
|
|
d2539956a9 | ||
|
|
cb6e8be034 | ||
|
|
bcd3e9f650 | ||
|
|
1b2b1b785f | ||
|
|
1e93126888 |
53
boards/ThinkNode-M3.json
Normal file
53
boards/ThinkNode-M3.json
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "nrf52840_s140_v6.ld"
|
||||||
|
},
|
||||||
|
"core": "nRF5",
|
||||||
|
"cpu": "cortex-m4",
|
||||||
|
"extra_flags": "-DNRF52840_XXAA",
|
||||||
|
"f_cpu": "64000000L",
|
||||||
|
"hwids": [
|
||||||
|
["0x239A", "0x4405"],
|
||||||
|
["0x239A", "0x0029"],
|
||||||
|
["0x239A", "0x002A"]
|
||||||
|
],
|
||||||
|
"usb_product": "elecrow_eink",
|
||||||
|
"mcu": "nrf52840",
|
||||||
|
"variant": "ELECROW-ThinkNode-M3",
|
||||||
|
"variants_dir": "variants",
|
||||||
|
"bsp": {
|
||||||
|
"name": "adafruit"
|
||||||
|
},
|
||||||
|
"softdevice": {
|
||||||
|
"sd_flags": "-DS140",
|
||||||
|
"sd_name": "s140",
|
||||||
|
"sd_version": "6.1.1",
|
||||||
|
"sd_fwid": "0x00B6"
|
||||||
|
},
|
||||||
|
"bootloader": {
|
||||||
|
"settings_addr": "0xFF000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"connectivity": ["bluetooth"],
|
||||||
|
"debug": {
|
||||||
|
"jlink_device": "nRF52840_xxAA",
|
||||||
|
"onboard_tools": ["jlink"],
|
||||||
|
"svd_path": "nrf52840.svd",
|
||||||
|
"openocd_target": "nrf52840-mdk-rs"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "elecrow nrf",
|
||||||
|
"upload": {
|
||||||
|
"maximum_ram_size": 248832,
|
||||||
|
"maximum_size": 815104,
|
||||||
|
"speed": 115200,
|
||||||
|
"protocol": "nrfutil",
|
||||||
|
"protocols": ["jlink", "nrfjprog", "nrfutil", "stlink"],
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"wait_for_upload_port": true
|
||||||
|
},
|
||||||
|
"url": "",
|
||||||
|
"vendor": "ELECROW"
|
||||||
|
}
|
||||||
53
boards/ThinkNode-M6.json
Normal file
53
boards/ThinkNode-M6.json
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "nrf52840_s140_v6.ld"
|
||||||
|
},
|
||||||
|
"core": "nRF5",
|
||||||
|
"cpu": "cortex-m4",
|
||||||
|
"extra_flags": "-DARDUINO_NRF52840_ELECROW_M6 -DNRF52840_XXAA",
|
||||||
|
"f_cpu": "64000000L",
|
||||||
|
"hwids": [
|
||||||
|
["0x239A", "0x4405"],
|
||||||
|
["0x239A", "0x0029"],
|
||||||
|
["0x239A", "0x002A"]
|
||||||
|
],
|
||||||
|
"usb_product": "elecrow_thinknode_m6",
|
||||||
|
"mcu": "nrf52840",
|
||||||
|
"variant": "ELECROW-ThinkNode-M6",
|
||||||
|
"variants_dir": "variants",
|
||||||
|
"bsp": {
|
||||||
|
"name": "adafruit"
|
||||||
|
},
|
||||||
|
"softdevice": {
|
||||||
|
"sd_flags": "-DS140",
|
||||||
|
"sd_name": "s140",
|
||||||
|
"sd_version": "6.1.1",
|
||||||
|
"sd_fwid": "0x00B6"
|
||||||
|
},
|
||||||
|
"bootloader": {
|
||||||
|
"settings_addr": "0xFF000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"connectivity": ["bluetooth"],
|
||||||
|
"debug": {
|
||||||
|
"jlink_device": "nRF52840_xxAA",
|
||||||
|
"onboard_tools": ["jlink"],
|
||||||
|
"svd_path": "nrf52840.svd",
|
||||||
|
"openocd_target": "nrf52840-mdk-rs"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "ELECROW ThinkNode M6",
|
||||||
|
"upload": {
|
||||||
|
"maximum_ram_size": 248832,
|
||||||
|
"maximum_size": 815104,
|
||||||
|
"speed": 115200,
|
||||||
|
"protocol": "nrfutil",
|
||||||
|
"protocols": ["jlink", "nrfjprog", "nrfutil", "stlink"],
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"wait_for_upload_port": true
|
||||||
|
},
|
||||||
|
"url": "https://www.elecrow.com/thinknode-m6-outdoor-solar-power-for-lora-powered-by-nrf52840-supports-gps.html",
|
||||||
|
"vendor": "ELECROW"
|
||||||
|
}
|
||||||
56
boards/muzi-base.json
Normal file
56
boards/muzi-base.json
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "nrf52840_s140_v6.ld"
|
||||||
|
},
|
||||||
|
"core": "nRF5",
|
||||||
|
"cpu": "cortex-m4",
|
||||||
|
"extra_flags": "-DARDUINO_NRF52840_MUZI_BASE -DNRF52840_XXAA",
|
||||||
|
"f_cpu": "64000000L",
|
||||||
|
"hwids": [["0x239A", "0xcafe"]],
|
||||||
|
"mcu": "nrf52840",
|
||||||
|
"variant": "muzi-base",
|
||||||
|
"variants_dir": "variants",
|
||||||
|
"bsp": {
|
||||||
|
"name": "adafruit"
|
||||||
|
},
|
||||||
|
"softdevice": {
|
||||||
|
"sd_flags": "-DS140",
|
||||||
|
"sd_name": "s140",
|
||||||
|
"sd_version": "6.1.1",
|
||||||
|
"sd_fwid": "0x00B6"
|
||||||
|
},
|
||||||
|
"bootloader": {
|
||||||
|
"settings_addr": "0xFF000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"connectivity": ["bluetooth"],
|
||||||
|
"debug": {
|
||||||
|
"jlink_device": "nRF52840_xxAA",
|
||||||
|
"onboard_tools": ["jlink"],
|
||||||
|
"svd_path": "nrf52840.svd",
|
||||||
|
"openocd_target": "nrf52840-mdk-rs"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "Muzi Base",
|
||||||
|
"url": "https://muzi.works/",
|
||||||
|
"vendor": "MuziWorks",
|
||||||
|
"upload": {
|
||||||
|
"maximum_ram_size": 248832,
|
||||||
|
"maximum_size": 815104,
|
||||||
|
"speed": 115200,
|
||||||
|
"protocol": "nrfutil",
|
||||||
|
"protocols": [
|
||||||
|
"jlink",
|
||||||
|
"nrfjprog",
|
||||||
|
"nrfutil",
|
||||||
|
"blackmagic",
|
||||||
|
"cmsis-dap",
|
||||||
|
"mbed",
|
||||||
|
"stlink"
|
||||||
|
],
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"wait_for_upload_port": true
|
||||||
|
}
|
||||||
|
}
|
||||||
Submodule protobufs updated: 7654db2e2d...52fa252f1e
@@ -278,6 +278,11 @@ class AnalogBatteryLevel : public HasBatteryLevel
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if defined(BATTERY_CHARGING_INV)
|
||||||
|
// bit of trickery to show 99% up until the charge finishes
|
||||||
|
if (!digitalRead(BATTERY_CHARGING_INV) && battery_SOC > 99)
|
||||||
|
battery_SOC = 99;
|
||||||
|
#endif
|
||||||
return clamp((int)(battery_SOC), 0, 100);
|
return clamp((int)(battery_SOC), 0, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -455,6 +460,8 @@ class AnalogBatteryLevel : public HasBatteryLevel
|
|||||||
}
|
}
|
||||||
// if it's not HIGH - check the battery
|
// if it's not HIGH - check the battery
|
||||||
#endif
|
#endif
|
||||||
|
#elif defined(MUZI_BASE)
|
||||||
|
return NRF_POWER->USBREGSTATUS & POWER_USBREGSTATUS_VBUSDETECT_Msk;
|
||||||
#endif
|
#endif
|
||||||
return getBattVoltage() > chargingVolt;
|
return getBattVoltage() > chargingVolt;
|
||||||
}
|
}
|
||||||
@@ -470,6 +477,8 @@ class AnalogBatteryLevel : public HasBatteryLevel
|
|||||||
#endif
|
#endif
|
||||||
#ifdef EXT_CHRG_DETECT
|
#ifdef EXT_CHRG_DETECT
|
||||||
return digitalRead(EXT_CHRG_DETECT) == ext_chrg_detect_value;
|
return digitalRead(EXT_CHRG_DETECT) == ext_chrg_detect_value;
|
||||||
|
#elif defined(BATTERY_CHARGING_INV)
|
||||||
|
return !digitalRead(BATTERY_CHARGING_INV);
|
||||||
#else
|
#else
|
||||||
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && !defined(DISABLE_INA_CHARGING_DETECTION)
|
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && !defined(DISABLE_INA_CHARGING_DETECTION)
|
||||||
if (hasINA()) {
|
if (hasINA()) {
|
||||||
@@ -702,7 +711,16 @@ bool Power::setup()
|
|||||||
},
|
},
|
||||||
CHANGE);
|
CHANGE);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BATTERY_CHARGING_INV
|
||||||
|
attachInterrupt(
|
||||||
|
BATTERY_CHARGING_INV,
|
||||||
|
[]() {
|
||||||
|
power->setIntervalFromNow(0);
|
||||||
|
runASAP = true;
|
||||||
|
BaseType_t higherWake = 0;
|
||||||
|
},
|
||||||
|
CHANGE);
|
||||||
|
#endif
|
||||||
enabled = found;
|
enabled = found;
|
||||||
low_voltage_counter = 0;
|
low_voltage_counter = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -395,6 +395,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define HAS_RGB_LED
|
#define HAS_RGB_LED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef LED_STATE_OFF
|
||||||
|
#define LED_STATE_OFF 0
|
||||||
|
#endif
|
||||||
|
#ifndef LED_STATE_ON
|
||||||
|
#define LED_STATE_ON 1
|
||||||
|
#endif
|
||||||
|
|
||||||
// default mapping of pins
|
// default mapping of pins
|
||||||
#if defined(PIN_BUTTON2) && !defined(CANCEL_BUTTON_PIN)
|
#if defined(PIN_BUTTON2) && !defined(CANCEL_BUTTON_PIN)
|
||||||
#define ALT_BUTTON_PIN PIN_BUTTON2
|
#define ALT_BUTTON_PIN PIN_BUTTON2
|
||||||
|
|||||||
@@ -532,6 +532,11 @@ void ScanI2CTwoWire::scanPort(I2CPort port, uint8_t *address, uint8_t asize)
|
|||||||
case ICM20948_ADDR: // same as BMX160_ADDR
|
case ICM20948_ADDR: // same as BMX160_ADDR
|
||||||
case ICM20948_ADDR_ALT: // same as MPU6050_ADDR
|
case ICM20948_ADDR_ALT: // same as MPU6050_ADDR
|
||||||
registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0x00), 1);
|
registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0x00), 1);
|
||||||
|
#ifdef HAS_ICM20948
|
||||||
|
type = ICM20948;
|
||||||
|
logFoundDevice("ICM20948", (uint8_t)addr.address);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
if (registerValue == 0xEA) {
|
if (registerValue == 0xEA) {
|
||||||
type = ICM20948;
|
type = ICM20948;
|
||||||
logFoundDevice("ICM20948", (uint8_t)addr.address);
|
logFoundDevice("ICM20948", (uint8_t)addr.address);
|
||||||
|
|||||||
@@ -112,7 +112,11 @@ RTCSetResult readFromRTC()
|
|||||||
#elif defined(RX8130CE_RTC)
|
#elif defined(RX8130CE_RTC)
|
||||||
if (rtc_found.address == RX8130CE_RTC) {
|
if (rtc_found.address == RX8130CE_RTC) {
|
||||||
uint32_t now = millis();
|
uint32_t now = millis();
|
||||||
|
#ifdef MUZI_BASE
|
||||||
|
ArtronShop_RX8130CE rtc(&Wire1);
|
||||||
|
#else
|
||||||
ArtronShop_RX8130CE rtc(&Wire);
|
ArtronShop_RX8130CE rtc(&Wire);
|
||||||
|
#endif
|
||||||
tm t;
|
tm t;
|
||||||
if (rtc.getTime(&t)) {
|
if (rtc.getTime(&t)) {
|
||||||
tv.tv_sec = gm_mktime(&t);
|
tv.tv_sec = gm_mktime(&t);
|
||||||
@@ -245,7 +249,11 @@ RTCSetResult perhapsSetRTC(RTCQuality q, const struct timeval *tv, bool forceUpd
|
|||||||
}
|
}
|
||||||
#elif defined(RX8130CE_RTC)
|
#elif defined(RX8130CE_RTC)
|
||||||
if (rtc_found.address == RX8130CE_RTC) {
|
if (rtc_found.address == RX8130CE_RTC) {
|
||||||
|
#ifdef MUZI_BASE
|
||||||
|
ArtronShop_RX8130CE rtc(&Wire1);
|
||||||
|
#else
|
||||||
ArtronShop_RX8130CE rtc(&Wire);
|
ArtronShop_RX8130CE rtc(&Wire);
|
||||||
|
#endif
|
||||||
tm *t = gmtime(&tv->tv_sec);
|
tm *t = gmtime(&tv->tv_sec);
|
||||||
if (rtc.setTime(*t)) {
|
if (rtc.setTime(*t)) {
|
||||||
LOG_DEBUG("RX8130CE setDateTime %02d-%02d-%02d %02d:%02d:%02d (%ld)", t->tm_year + 1900, t->tm_mon + 1,
|
LOG_DEBUG("RX8130CE setDateTime %02d-%02d-%02d %02d:%02d:%02d (%ld)", t->tm_year + 1900, t->tm_mon + 1,
|
||||||
|
|||||||
@@ -435,6 +435,14 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver)
|
|||||||
PMU->enablePowerOutput(XPOWERS_ALDO2);
|
PMU->enablePowerOutput(XPOWERS_ALDO2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(MUZI_BASE)
|
||||||
|
dispdev->init();
|
||||||
|
dispdev->setBrightness(brightness);
|
||||||
|
dispdev->flipScreenVertically();
|
||||||
|
dispdev->resetDisplay();
|
||||||
|
digitalWrite(SCREEN_12V_ENABLE, HIGH);
|
||||||
|
delay(100);
|
||||||
|
#endif
|
||||||
#if !ARCH_PORTDUINO
|
#if !ARCH_PORTDUINO
|
||||||
dispdev->displayOn();
|
dispdev->displayOn();
|
||||||
#endif
|
#endif
|
||||||
@@ -484,6 +492,10 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
dispdev->displayOff();
|
dispdev->displayOff();
|
||||||
|
|
||||||
|
#ifdef SCREEN_12V_ENABLE
|
||||||
|
digitalWrite(SCREEN_12V_ENABLE, LOW);
|
||||||
|
#endif
|
||||||
#ifdef USE_ST7789
|
#ifdef USE_ST7789
|
||||||
SPI1.end();
|
SPI1.end();
|
||||||
#if defined(ARCH_ESP32)
|
#if defined(ARCH_ESP32)
|
||||||
@@ -534,7 +546,7 @@ void Screen::setup()
|
|||||||
static_cast<AutoOLEDWire *>(dispdev)->setDetected(model);
|
static_cast<AutoOLEDWire *>(dispdev)->setDetected(model);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_SH1107_128_64
|
#if defined(USE_SH1107_128_64) || defined(USE_SH1107)
|
||||||
static_cast<SH1106Wire *>(dispdev)->setSubtype(7);
|
static_cast<SH1106Wire *>(dispdev)->setSubtype(7);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -542,6 +554,9 @@ void Screen::setup()
|
|||||||
// Apply custom RGB color (e.g. Heltec T114/T190)
|
// Apply custom RGB color (e.g. Heltec T114/T190)
|
||||||
static_cast<ST7789Spi *>(dispdev)->setRGB(TFT_MESH);
|
static_cast<ST7789Spi *>(dispdev)->setRGB(TFT_MESH);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(MUZI_BASE)
|
||||||
|
dispdev->delayPoweron = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
// === Initialize display and UI system ===
|
// === Initialize display and UI system ===
|
||||||
ui->init();
|
ui->init();
|
||||||
|
|||||||
@@ -249,6 +249,8 @@ class Screen : public concurrency::OSThread
|
|||||||
|
|
||||||
bool isOverlayBannerShowing();
|
bool isOverlayBannerShowing();
|
||||||
|
|
||||||
|
bool isScreenOn() { return screenOn; }
|
||||||
|
|
||||||
// Stores the last 4 of our hardware ID, to make finding the device for pairing easier
|
// Stores the last 4 of our hardware ID, to make finding the device for pairing easier
|
||||||
// FIXME: Needs refactoring and getMacAddr needs to be moved to a utility class
|
// FIXME: Needs refactoring and getMacAddr needs to be moved to a utility class
|
||||||
char ourId[5];
|
char ourId[5];
|
||||||
|
|||||||
@@ -728,6 +728,9 @@ void NodeDB::installDefaultConfig(bool preserveKey = false)
|
|||||||
config.display.screen_on_secs = 30;
|
config.display.screen_on_secs = 30;
|
||||||
config.display.wake_on_tap_or_motion = true;
|
config.display.wake_on_tap_or_motion = true;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef COMPASS_ORIENTATION
|
||||||
|
config.display.compass_orientation = COMPASS_ORIENTATION;
|
||||||
|
#endif
|
||||||
#if defined(ARCH_ESP32) && !MESHTASTIC_EXCLUDE_WIFI
|
#if defined(ARCH_ESP32) && !MESHTASTIC_EXCLUDE_WIFI
|
||||||
if (WiFiOTA::isUpdated()) {
|
if (WiFiOTA::isUpdated()) {
|
||||||
WiFiOTA::recoverConfig(&config.network);
|
WiFiOTA::recoverConfig(&config.network);
|
||||||
|
|||||||
@@ -288,6 +288,12 @@ typedef enum _meshtastic_HardwareModel {
|
|||||||
meshtastic_HardwareModel_WISMESH_TAP_V2 = 116,
|
meshtastic_HardwareModel_WISMESH_TAP_V2 = 116,
|
||||||
/* RAK3401 */
|
/* RAK3401 */
|
||||||
meshtastic_HardwareModel_RAK3401 = 117,
|
meshtastic_HardwareModel_RAK3401 = 117,
|
||||||
|
/* RAK6421 Hat+ */
|
||||||
|
meshtastic_HardwareModel_RAK6421 = 118,
|
||||||
|
/* Elecrow ThinkNode M4 */
|
||||||
|
meshtastic_HardwareModel_THINKNODE_M4 = 119,
|
||||||
|
/* Elecrow ThinkNode M6 */
|
||||||
|
meshtastic_HardwareModel_THINKNODE_M6 = 120,
|
||||||
/* ------------------------------------------------------------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
|
Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
|
||||||
------------------------------------------------------------------------------------------------------------------------------------------ */
|
------------------------------------------------------------------------------------------------------------------------------------------ */
|
||||||
@@ -825,7 +831,11 @@ typedef struct _meshtastic_MeshPacket {
|
|||||||
Note: Our crypto implementation uses this field as well.
|
Note: Our crypto implementation uses this field as well.
|
||||||
See [crypto](/docs/overview/encryption) for details. */
|
See [crypto](/docs/overview/encryption) for details. */
|
||||||
uint32_t from;
|
uint32_t from;
|
||||||
/* The (immediate) destination for this packet */
|
/* The (immediate) destination for this packet
|
||||||
|
If the value is 4,294,967,295 (maximum value of an unsigned 32bit integer), this indicates that the packet was
|
||||||
|
not destined for a specific node, but for a channel as indicated by the value of `channel` below.
|
||||||
|
If the value is another, this indicates that the packet was destined for a specific
|
||||||
|
node (i.e. a kind of "Direct Message" to this node) and not broadcast on a channel. */
|
||||||
uint32_t to;
|
uint32_t to;
|
||||||
/* (Usually) If set, this indicates the index in the secondary_channels table that this packet was sent/received on.
|
/* (Usually) If set, this indicates the index in the secondary_channels table that this packet was sent/received on.
|
||||||
If unset, packet was on the primary channel.
|
If unset, packet was on the primary channel.
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
#include "input/TrackballInterruptImpl1.h"
|
#include "input/TrackballInterruptImpl1.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "modules/StatusLEDModule.h"
|
||||||
|
|
||||||
#if !MESHTASTIC_EXCLUDE_I2C
|
#if !MESHTASTIC_EXCLUDE_I2C
|
||||||
#include "input/cardKbI2cImpl.h"
|
#include "input/cardKbI2cImpl.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -119,6 +121,10 @@ void setupModules()
|
|||||||
buzzerFeedbackThread = new BuzzerFeedbackThread();
|
buzzerFeedbackThread = new BuzzerFeedbackThread();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(LED_CHARGE) || defined(LED_PAIRING)
|
||||||
|
statusLEDModule = new StatusLEDModule();
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !MESHTASTIC_EXCLUDE_ADMIN
|
#if !MESHTASTIC_EXCLUDE_ADMIN
|
||||||
adminModule = new AdminModule();
|
adminModule = new AdminModule();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -64,7 +64,8 @@ SerialModule *serialModule;
|
|||||||
SerialModuleRadio *serialModuleRadio;
|
SerialModuleRadio *serialModuleRadio;
|
||||||
|
|
||||||
#if defined(TTGO_T_ECHO) || defined(CANARYONE) || defined(MESHLINK) || defined(ELECROW_ThinkNode_M1) || \
|
#if defined(TTGO_T_ECHO) || defined(CANARYONE) || defined(MESHLINK) || defined(ELECROW_ThinkNode_M1) || \
|
||||||
defined(ELECROW_ThinkNode_M5) || defined(HELTEC_MESH_SOLAR) || defined(T_ECHO_LITE)
|
defined(ELECROW_ThinkNode_M5) || defined(HELTEC_MESH_SOLAR) || defined(T_ECHO_LITE) || defined(ELECROW_ThinkNode_M3) || \
|
||||||
|
defined(MUZI_BASE)
|
||||||
SerialModule::SerialModule() : StreamAPI(&Serial), concurrency::OSThread("Serial")
|
SerialModule::SerialModule() : StreamAPI(&Serial), concurrency::OSThread("Serial")
|
||||||
{
|
{
|
||||||
api_type = TYPE_SERIAL;
|
api_type = TYPE_SERIAL;
|
||||||
@@ -204,7 +205,7 @@ int32_t SerialModule::runOnce()
|
|||||||
Serial.setTimeout(moduleConfig.serial.timeout > 0 ? moduleConfig.serial.timeout : TIMEOUT);
|
Serial.setTimeout(moduleConfig.serial.timeout > 0 ? moduleConfig.serial.timeout : TIMEOUT);
|
||||||
}
|
}
|
||||||
#elif !defined(TTGO_T_ECHO) && !defined(T_ECHO_LITE) && !defined(CANARYONE) && !defined(MESHLINK) && \
|
#elif !defined(TTGO_T_ECHO) && !defined(T_ECHO_LITE) && !defined(CANARYONE) && !defined(MESHLINK) && \
|
||||||
!defined(ELECROW_ThinkNode_M1) && !defined(ELECROW_ThinkNode_M5)
|
!defined(ELECROW_ThinkNode_M1) && !defined(ELECROW_ThinkNode_M3) && !defined(ELECROW_ThinkNode_M5) && !defined(MUZI_BASE)
|
||||||
if (moduleConfig.serial.rxd && moduleConfig.serial.txd) {
|
if (moduleConfig.serial.rxd && moduleConfig.serial.txd) {
|
||||||
#ifdef ARCH_RP2040
|
#ifdef ARCH_RP2040
|
||||||
Serial2.setFIFOSize(RX_BUFFER);
|
Serial2.setFIFOSize(RX_BUFFER);
|
||||||
@@ -261,7 +262,7 @@ int32_t SerialModule::runOnce()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(TTGO_T_ECHO) && !defined(T_ECHO_LITE) && !defined(CANARYONE) && !defined(MESHLINK) && \
|
#if !defined(TTGO_T_ECHO) && !defined(T_ECHO_LITE) && !defined(CANARYONE) && !defined(MESHLINK) && \
|
||||||
!defined(ELECROW_ThinkNode_M1) && !defined(ELECROW_ThinkNode_M5)
|
!defined(ELECROW_ThinkNode_M1) && !defined(ELECROW_ThinkNode_M3) && !defined(ELECROW_ThinkNode_M5) && !defined(MUZI_BASE)
|
||||||
else if ((moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_WS85)) {
|
else if ((moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_WS85)) {
|
||||||
processWXSerial();
|
processWXSerial();
|
||||||
|
|
||||||
@@ -536,7 +537,8 @@ ParsedLine parseLine(const char *line)
|
|||||||
void SerialModule::processWXSerial()
|
void SerialModule::processWXSerial()
|
||||||
{
|
{
|
||||||
#if !defined(TTGO_T_ECHO) && !defined(T_ECHO_LITE) && !defined(CANARYONE) && !defined(CONFIG_IDF_TARGET_ESP32C6) && \
|
#if !defined(TTGO_T_ECHO) && !defined(T_ECHO_LITE) && !defined(CANARYONE) && !defined(CONFIG_IDF_TARGET_ESP32C6) && \
|
||||||
!defined(MESHLINK) && !defined(ELECROW_ThinkNode_M1) && !defined(ELECROW_ThinkNode_M5) && !defined(ARCH_STM32WL)
|
!defined(MESHLINK) && !defined(ELECROW_ThinkNode_M1) && !defined(ELECROW_ThinkNode_M3) && !defined(ELECROW_ThinkNode_M5) && \
|
||||||
|
!defined(ARCH_STM32WL) && !defined(MUZI_BASE)
|
||||||
static unsigned int lastAveraged = 0;
|
static unsigned int lastAveraged = 0;
|
||||||
static unsigned int averageIntervalMillis = 300000; // 5 minutes hard coded.
|
static unsigned int averageIntervalMillis = 300000; // 5 minutes hard coded.
|
||||||
static double dir_sum_sin = 0;
|
static double dir_sum_sin = 0;
|
||||||
|
|||||||
94
src/modules/StatusLEDModule.cpp
Normal file
94
src/modules/StatusLEDModule.cpp
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
#include "StatusLEDModule.h"
|
||||||
|
#include "MeshService.h"
|
||||||
|
#include "configuration.h"
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
StatusLEDModule manages the device's status LEDs, updating their states based on power and Bluetooth status.
|
||||||
|
It reflects charging, charged, discharging, and Bluetooth connection states using the appropriate LEDs.
|
||||||
|
*/
|
||||||
|
StatusLEDModule *statusLEDModule;
|
||||||
|
|
||||||
|
StatusLEDModule::StatusLEDModule() : concurrency::OSThread("StatusLEDModule")
|
||||||
|
{
|
||||||
|
bluetoothStatusObserver.observe(&bluetoothStatus->onNewStatus);
|
||||||
|
powerStatusObserver.observe(&powerStatus->onNewStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
int StatusLEDModule::handleStatusUpdate(const meshtastic::Status *arg)
|
||||||
|
{
|
||||||
|
switch (arg->getStatusType()) {
|
||||||
|
case STATUS_TYPE_POWER: {
|
||||||
|
meshtastic::PowerStatus *powerStatus = (meshtastic::PowerStatus *)arg;
|
||||||
|
if (powerStatus->getHasUSB()) {
|
||||||
|
power_state = charging;
|
||||||
|
if (powerStatus->getBatteryChargePercent() >= 100) {
|
||||||
|
power_state = charged;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
power_state = discharging;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case STATUS_TYPE_BLUETOOTH: {
|
||||||
|
meshtastic::BluetoothStatus *bluetoothStatus = (meshtastic::BluetoothStatus *)arg;
|
||||||
|
switch (bluetoothStatus->getConnectionState()) {
|
||||||
|
case meshtastic::BluetoothStatus::ConnectionState::DISCONNECTED: {
|
||||||
|
ble_state = unpaired;
|
||||||
|
PAIRING_LED_starttime = millis();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case meshtastic::BluetoothStatus::ConnectionState::PAIRING: {
|
||||||
|
ble_state = pairing;
|
||||||
|
PAIRING_LED_starttime = millis();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case meshtastic::BluetoothStatus::ConnectionState::CONNECTED: {
|
||||||
|
ble_state = connected;
|
||||||
|
PAIRING_LED_starttime = millis();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
int32_t StatusLEDModule::runOnce()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (power_state == charging) {
|
||||||
|
CHARGE_LED_state = !CHARGE_LED_state;
|
||||||
|
} else if (power_state == charged) {
|
||||||
|
CHARGE_LED_state = LED_STATE_ON;
|
||||||
|
} else {
|
||||||
|
CHARGE_LED_state = LED_STATE_OFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.bluetooth.enabled || PAIRING_LED_starttime + 30 * 1000 < millis()) {
|
||||||
|
PAIRING_LED_state = LED_STATE_OFF;
|
||||||
|
} else if (ble_state == unpaired) {
|
||||||
|
if (slowTrack) {
|
||||||
|
PAIRING_LED_state = !PAIRING_LED_state;
|
||||||
|
slowTrack = false;
|
||||||
|
} else {
|
||||||
|
slowTrack = true;
|
||||||
|
}
|
||||||
|
} else if (ble_state == pairing) {
|
||||||
|
PAIRING_LED_state = !PAIRING_LED_state;
|
||||||
|
} else {
|
||||||
|
PAIRING_LED_state = LED_STATE_ON;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef LED_CHARGE
|
||||||
|
digitalWrite(LED_CHARGE, CHARGE_LED_state);
|
||||||
|
#endif
|
||||||
|
// digitalWrite(green_LED_PIN, LED_STATE_OFF);
|
||||||
|
#ifdef LED_PAIRING
|
||||||
|
digitalWrite(LED_PAIRING, PAIRING_LED_state);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return (my_interval);
|
||||||
|
}
|
||||||
44
src/modules/StatusLEDModule.h
Normal file
44
src/modules/StatusLEDModule.h
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "BluetoothStatus.h"
|
||||||
|
#include "MeshModule.h"
|
||||||
|
#include "PowerStatus.h"
|
||||||
|
#include "concurrency/OSThread.h"
|
||||||
|
#include "configuration.h"
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
class StatusLEDModule : private concurrency::OSThread
|
||||||
|
{
|
||||||
|
bool slowTrack = false;
|
||||||
|
|
||||||
|
public:
|
||||||
|
StatusLEDModule();
|
||||||
|
|
||||||
|
int handleStatusUpdate(const meshtastic::Status *);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
unsigned int my_interval = 1000; // interval in millisconds
|
||||||
|
virtual int32_t runOnce() override;
|
||||||
|
|
||||||
|
CallbackObserver<StatusLEDModule, const meshtastic::Status *> bluetoothStatusObserver =
|
||||||
|
CallbackObserver<StatusLEDModule, const meshtastic::Status *>(this, &StatusLEDModule::handleStatusUpdate);
|
||||||
|
CallbackObserver<StatusLEDModule, const meshtastic::Status *> powerStatusObserver =
|
||||||
|
CallbackObserver<StatusLEDModule, const meshtastic::Status *>(this, &StatusLEDModule::handleStatusUpdate);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool CHARGE_LED_state = LED_STATE_OFF;
|
||||||
|
bool PAIRING_LED_state = LED_STATE_OFF;
|
||||||
|
|
||||||
|
uint32_t PAIRING_LED_starttime = 0;
|
||||||
|
|
||||||
|
enum PowerState { discharging, charging, charged };
|
||||||
|
|
||||||
|
PowerState power_state = discharging;
|
||||||
|
|
||||||
|
enum BLEState { unpaired, pairing, connected };
|
||||||
|
|
||||||
|
BLEState ble_state = unpaired;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern StatusLEDModule *statusLEDModule;
|
||||||
@@ -35,7 +35,7 @@ bool AHT10Sensor::getMetrics(meshtastic_Telemetry *measurement)
|
|||||||
// prefer other sensors like bmp280, bmp3xx
|
// prefer other sensors like bmp280, bmp3xx
|
||||||
if (!measurement->variant.environment_metrics.has_temperature) {
|
if (!measurement->variant.environment_metrics.has_temperature) {
|
||||||
measurement->variant.environment_metrics.has_temperature = true;
|
measurement->variant.environment_metrics.has_temperature = true;
|
||||||
measurement->variant.environment_metrics.temperature = temp.temperature;
|
measurement->variant.environment_metrics.temperature = temp.temperature + AHT10_TEMP_OFFSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!measurement->variant.environment_metrics.has_relative_humidity) {
|
if (!measurement->variant.environment_metrics.has_relative_humidity) {
|
||||||
|
|||||||
@@ -6,6 +6,10 @@
|
|||||||
|
|
||||||
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<Adafruit_AHTX0.h>)
|
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<Adafruit_AHTX0.h>)
|
||||||
|
|
||||||
|
#ifndef AHT10_TEMP_OFFSET
|
||||||
|
#define AHT10_TEMP_OFFSET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
#include <Adafruit_AHTX0.h>
|
#include <Adafruit_AHTX0.h>
|
||||||
|
|||||||
@@ -47,6 +47,21 @@ int32_t ICM20948Sensor::runOnce()
|
|||||||
int32_t ICM20948Sensor::runOnce()
|
int32_t ICM20948Sensor::runOnce()
|
||||||
{
|
{
|
||||||
#if !defined(MESHTASTIC_EXCLUDE_SCREEN) && HAS_SCREEN
|
#if !defined(MESHTASTIC_EXCLUDE_SCREEN) && HAS_SCREEN
|
||||||
|
#if defined(MUZI_BASE) // temporarily gated to single device due to feature freeze
|
||||||
|
if (screen && !screen->isScreenOn() && !config.display.wake_on_tap_or_motion && !config.device.double_tap_as_button_press) {
|
||||||
|
if (!isAsleep) {
|
||||||
|
LOG_DEBUG("sleeping IMU");
|
||||||
|
sensor->sleep(true);
|
||||||
|
isAsleep = true;
|
||||||
|
}
|
||||||
|
return MOTION_SENSOR_CHECK_INTERVAL_MS;
|
||||||
|
}
|
||||||
|
if (isAsleep) {
|
||||||
|
sensor->sleep(false);
|
||||||
|
isAsleep = false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
float magX = 0, magY = 0, magZ = 0;
|
float magX = 0, magY = 0, magZ = 0;
|
||||||
if (sensor->dataReady()) {
|
if (sensor->dataReady()) {
|
||||||
sensor->getAGMT();
|
sensor->getAGMT();
|
||||||
@@ -156,8 +171,20 @@ int32_t ICM20948Sensor::runOnce()
|
|||||||
void ICM20948Sensor::calibrate(uint16_t forSeconds)
|
void ICM20948Sensor::calibrate(uint16_t forSeconds)
|
||||||
{
|
{
|
||||||
#if !defined(MESHTASTIC_EXCLUDE_SCREEN) && HAS_SCREEN
|
#if !defined(MESHTASTIC_EXCLUDE_SCREEN) && HAS_SCREEN
|
||||||
LOG_DEBUG("BMX160 calibration started for %is", forSeconds);
|
LOG_DEBUG("Old calibration data: highestX = %f, lowestX = %f, highestY = %f, lowestY = %f, highestZ = %f, lowestZ = %f",
|
||||||
highestX = 0, lowestX = 0, highestY = 0, lowestY = 0, highestZ = 0, lowestZ = 0;
|
highestX, lowestX, highestY, lowestY, highestZ, lowestZ);
|
||||||
|
LOG_DEBUG("Compass calibration started for %is", forSeconds);
|
||||||
|
if (sensor->dataReady()) {
|
||||||
|
sensor->getAGMT();
|
||||||
|
highestX = sensor->agmt.mag.axes.x;
|
||||||
|
lowestX = sensor->agmt.mag.axes.x;
|
||||||
|
highestY = sensor->agmt.mag.axes.y;
|
||||||
|
lowestY = sensor->agmt.mag.axes.y;
|
||||||
|
highestZ = sensor->agmt.mag.axes.z;
|
||||||
|
lowestZ = sensor->agmt.mag.axes.z;
|
||||||
|
} else {
|
||||||
|
highestX = 0, lowestX = 0, highestY = 0, lowestY = 0, highestZ = 0, lowestZ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
doCalibration = true;
|
doCalibration = true;
|
||||||
uint16_t calibrateFor = forSeconds * 1000; // calibrate for seconds provided
|
uint16_t calibrateFor = forSeconds * 1000; // calibrate for seconds provided
|
||||||
|
|||||||
@@ -82,7 +82,13 @@ class ICM20948Sensor : public MotionSensor
|
|||||||
private:
|
private:
|
||||||
ICM20948Singleton *sensor = nullptr;
|
ICM20948Singleton *sensor = nullptr;
|
||||||
bool showingScreen = false;
|
bool showingScreen = false;
|
||||||
|
#ifdef MUZI_BASE
|
||||||
|
bool isAsleep = false;
|
||||||
|
float highestX = 449.000000, lowestX = -140.000000, highestY = 422.000000, lowestY = -232.000000, highestZ = 749.000000,
|
||||||
|
lowestZ = 98.000000;
|
||||||
|
#else
|
||||||
float highestX = 0, lowestX = 0, highestY = 0, lowestY = 0, highestZ = 0, lowestZ = 0;
|
float highestX = 0, lowestX = 0, highestY = 0, lowestY = 0, highestZ = 0, lowestZ = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit ICM20948Sensor(ScanI2C::FoundDevice foundDevice);
|
explicit ICM20948Sensor(ScanI2C::FoundDevice foundDevice);
|
||||||
|
|||||||
@@ -68,6 +68,10 @@
|
|||||||
#define HW_VENDOR meshtastic_HardwareModel_T_ECHO_LITE
|
#define HW_VENDOR meshtastic_HardwareModel_T_ECHO_LITE
|
||||||
#elif defined(ELECROW_ThinkNode_M1)
|
#elif defined(ELECROW_ThinkNode_M1)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_THINKNODE_M1
|
#define HW_VENDOR meshtastic_HardwareModel_THINKNODE_M1
|
||||||
|
#elif defined(ELECROW_ThinkNode_M3)
|
||||||
|
#define HW_VENDOR meshtastic_HardwareModel_THINKNODE_M3
|
||||||
|
#elif defined(ELECROW_ThinkNode_M6)
|
||||||
|
#define HW_VENDOR meshtastic_HardwareModel_THINKNODE_M6
|
||||||
#elif defined(NANO_G2_ULTRA)
|
#elif defined(NANO_G2_ULTRA)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_NANO_G2_ULTRA
|
#define HW_VENDOR meshtastic_HardwareModel_NANO_G2_ULTRA
|
||||||
#elif defined(CANARYONE)
|
#elif defined(CANARYONE)
|
||||||
@@ -104,6 +108,8 @@
|
|||||||
#define HW_VENDOR meshtastic_HardwareModel_SEEED_WIO_TRACKER_L1
|
#define HW_VENDOR meshtastic_HardwareModel_SEEED_WIO_TRACKER_L1
|
||||||
#elif defined(HELTEC_MESH_SOLAR)
|
#elif defined(HELTEC_MESH_SOLAR)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_HELTEC_MESH_SOLAR
|
#define HW_VENDOR meshtastic_HardwareModel_HELTEC_MESH_SOLAR
|
||||||
|
#elif defined(MUZI_BASE)
|
||||||
|
#define HW_VENDOR meshtastic_HardwareModel_RESERVED_FRIED_CHICKEN
|
||||||
#else
|
#else
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_NRF52_UNKNOWN
|
#define HW_VENDOR meshtastic_HardwareModel_NRF52_UNKNOWN
|
||||||
#endif
|
#endif
|
||||||
@@ -128,7 +134,9 @@
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PIN_LED1
|
||||||
#define LED_PIN PIN_LED1 // LED1 on nrf52840-DK
|
#define LED_PIN PIN_LED1 // LED1 on nrf52840-DK
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PIN_BUTTON1
|
#ifdef PIN_BUTTON1
|
||||||
#define BUTTON_PIN PIN_BUTTON1
|
#define BUTTON_PIN PIN_BUTTON1
|
||||||
|
|||||||
@@ -19,6 +19,11 @@
|
|||||||
#include "BQ25713.h"
|
#include "BQ25713.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Weak empty variant initialization function.
|
||||||
|
// May be redefined by variant files.
|
||||||
|
void variant_shutdown() __attribute__((weak));
|
||||||
|
void variant_shutdown() {}
|
||||||
|
|
||||||
static inline void debugger_break(void)
|
static inline void debugger_break(void)
|
||||||
{
|
{
|
||||||
__asm volatile("bkpt #0x01\n\t"
|
__asm volatile("bkpt #0x01\n\t"
|
||||||
@@ -352,6 +357,7 @@ void cpuDeepSleep(uint32_t msecToWake)
|
|||||||
NRF_GPIO->DIRCLR = (1 << pin);
|
NRF_GPIO->DIRCLR = (1 << pin);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
variant_shutdown();
|
||||||
|
|
||||||
// Sleepy trackers or sensors can low power "sleep"
|
// Sleepy trackers or sensors can low power "sleep"
|
||||||
// Don't enter this if we're sleeping portMAX_DELAY, since that's a shutdown event
|
// Don't enter this if we're sleeping portMAX_DELAY, since that's a shutdown event
|
||||||
|
|||||||
@@ -34,8 +34,6 @@
|
|||||||
#define OCV_ARRAY 4200, 3876, 3826, 3763, 3713, 3660, 3573, 3485, 3422, 3359, 3300
|
#define OCV_ARRAY 4200, 3876, 3826, 3763, 3713, 3660, 3573, 3485, 3422, 3359, 3300
|
||||||
#elif defined(SEEED_SOLAR_NODE)
|
#elif defined(SEEED_SOLAR_NODE)
|
||||||
#define OCV_ARRAY 4200, 3986, 3922, 3812, 3734, 3645, 3527, 3420, 3281, 3087, 2786
|
#define OCV_ARRAY 4200, 3986, 3922, 3812, 3734, 3645, 3527, 3420, 3281, 3087, 2786
|
||||||
#elif defined(R1_NEO)
|
|
||||||
#define OCV_ARRAY 4330, 4292, 4254, 4216, 4178, 4140, 4102, 4064, 4026, 3988, 3950
|
|
||||||
#else // LiIon
|
#else // LiIon
|
||||||
#define OCV_ARRAY 4190, 4050, 3990, 3890, 3800, 3720, 3630, 3530, 3420, 3300, 3100
|
#define OCV_ARRAY 4190, 4050, 3990, 3890, 3800, 3720, 3630, 3530, 3420, 3300, 3100
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
17
variants/nrf52840/ELECROW-ThinkNode-M3/platformio.ini
Normal file
17
variants/nrf52840/ELECROW-ThinkNode-M3/platformio.ini
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[env:thinknode_m3]
|
||||||
|
extends = nrf52840_base
|
||||||
|
board = ThinkNode-M3
|
||||||
|
board_check = true
|
||||||
|
debug_tool = jlink
|
||||||
|
build_flags =
|
||||||
|
${nrf52840_base.build_flags}
|
||||||
|
-Ivariants/nrf52840/ELECROW-ThinkNode-M3
|
||||||
|
-DELECROW_ThinkNode_M3
|
||||||
|
-DGPS_POWER_TOGGLE
|
||||||
|
-D CONFIG_NFCT_PINS_AS_GPIOS=1
|
||||||
|
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard"
|
||||||
|
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/ELECROW-ThinkNode-M3>
|
||||||
|
lib_deps =
|
||||||
|
${nrf52840_base.lib_deps}
|
||||||
|
khoih-prog/nRF52_PWM@^1.0.1
|
||||||
|
lewisxhe/PCF8563_Library@^1.0.1
|
||||||
15
variants/nrf52840/ELECROW-ThinkNode-M3/rfswitch.h
Normal file
15
variants/nrf52840/ELECROW-ThinkNode-M3/rfswitch.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#include "RadioLib.h"
|
||||||
|
#include "nrf.h"
|
||||||
|
|
||||||
|
// set RF switch configuration for ELECROW ThinkNode M3
|
||||||
|
// ELECROW ThinkNode M3 uses DIO5 and DIO6 for RF switching
|
||||||
|
|
||||||
|
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC};
|
||||||
|
|
||||||
|
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
||||||
|
// mode DIO5 DIO6
|
||||||
|
{LR11x0::MODE_STBY, {LOW, LOW}}, {LR11x0::MODE_RX, {HIGH, LOW}},
|
||||||
|
{LR11x0::MODE_TX, {HIGH, HIGH}}, {LR11x0::MODE_TX_HP, {LOW, HIGH}},
|
||||||
|
{LR11x0::MODE_TX_HF, {LOW, LOW}}, {LR11x0::MODE_GNSS, {LOW, LOW}},
|
||||||
|
{LR11x0::MODE_WIFI, {LOW, LOW}}, END_OF_MODE_TABLE,
|
||||||
|
};
|
||||||
93
variants/nrf52840/ELECROW-ThinkNode-M3/variant.cpp
Normal file
93
variants/nrf52840/ELECROW-ThinkNode-M3/variant.cpp
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
|
||||||
|
Copyright (c) 2016 Sandeep Mistry All right reserved.
|
||||||
|
Copyright (c) 2018, Adafruit Industries (adafruit.com)
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
See the GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "variant.h"
|
||||||
|
#include "meshUtils.h"
|
||||||
|
#include "nrf.h"
|
||||||
|
#include "wiring_constants.h"
|
||||||
|
#include "wiring_digital.h"
|
||||||
|
|
||||||
|
const uint32_t g_ADigitalPinMap[] = {
|
||||||
|
// P0
|
||||||
|
0, 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,
|
||||||
|
|
||||||
|
// P1
|
||||||
|
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47};
|
||||||
|
|
||||||
|
void initVariant()
|
||||||
|
{
|
||||||
|
pinMode(KEY_POWER, OUTPUT);
|
||||||
|
digitalWrite(KEY_POWER, HIGH);
|
||||||
|
pinMode(RGB_POWER, OUTPUT);
|
||||||
|
digitalWrite(RGB_POWER, HIGH);
|
||||||
|
pinMode(green_LED_PIN, OUTPUT);
|
||||||
|
digitalWrite(green_LED_PIN, LED_STATE_OFF);
|
||||||
|
pinMode(LED_BLUE, OUTPUT);
|
||||||
|
pinMode(PIN_POWER_USB, INPUT);
|
||||||
|
pinMode(PIN_POWER_DONE, INPUT);
|
||||||
|
pinMode(PIN_POWER_CHRG, INPUT);
|
||||||
|
pinMode(BUTTON_PIN, INPUT_PULLUP);
|
||||||
|
pinMode(EEPROM_POWER, OUTPUT);
|
||||||
|
digitalWrite(EEPROM_POWER, HIGH);
|
||||||
|
pinMode(PIN_EN1, OUTPUT);
|
||||||
|
digitalWrite(PIN_EN1, HIGH);
|
||||||
|
pinMode(PIN_EN2, OUTPUT);
|
||||||
|
digitalWrite(PIN_EN2, HIGH);
|
||||||
|
pinMode(ACC_POWER, OUTPUT);
|
||||||
|
digitalWrite(ACC_POWER, LOW);
|
||||||
|
pinMode(DHT_POWER, OUTPUT);
|
||||||
|
digitalWrite(DHT_POWER, HIGH);
|
||||||
|
pinMode(Battery_POWER, OUTPUT);
|
||||||
|
digitalWrite(Battery_POWER, HIGH);
|
||||||
|
pinMode(GPS_POWER, OUTPUT);
|
||||||
|
digitalWrite(GPS_POWER, HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
// called from main-nrf52.cpp during the cpuDeepSleep() function
|
||||||
|
void variant_shutdown()
|
||||||
|
{
|
||||||
|
digitalWrite(EEPROM_POWER, LOW);
|
||||||
|
digitalWrite(KEY_POWER, LOW);
|
||||||
|
|
||||||
|
for (int pin = 0; pin < 48; pin++) {
|
||||||
|
if (pin == PIN_POWER_USB || pin == BUTTON_PIN || pin == PIN_EN1 || pin == PIN_EN2 || pin == DHT_POWER ||
|
||||||
|
pin == ACC_POWER || pin == Battery_POWER || pin == GPS_POWER || pin == LR1110_SPI_MISO_PIN ||
|
||||||
|
pin == LR1110_SPI_MOSI_PIN || pin == LR1110_SPI_SCK_PIN || pin == LR1110_SPI_NSS_PIN || pin == LR1110_BUSY_PIN ||
|
||||||
|
pin == LR1110_NRESET_PIN || pin == LR1110_IRQ_PIN || pin == GPS_TX_PIN || pin == GPS_RX_PIN || pin == green_LED_PIN ||
|
||||||
|
pin == red_LED_PIN || pin == LED_BLUE) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
pinMode(pin, OUTPUT);
|
||||||
|
digitalWrite(pin, LOW);
|
||||||
|
if (pin >= 32) {
|
||||||
|
NRF_P1->DIRCLR = (1 << (pin - 32));
|
||||||
|
} else {
|
||||||
|
NRF_GPIO->DIRCLR = (1 << pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nrf_gpio_cfg_input(BUTTON_PIN, NRF_GPIO_PIN_PULLUP); // Configure the pin to be woken up as an input
|
||||||
|
nrf_gpio_pin_sense_t sense1 = NRF_GPIO_PIN_SENSE_LOW;
|
||||||
|
nrf_gpio_cfg_sense_set(BUTTON_PIN, sense1);
|
||||||
|
|
||||||
|
nrf_gpio_cfg_input(PIN_POWER_USB, NRF_GPIO_PIN_PULLDOWN); // Configure the pin to be woken up as an input
|
||||||
|
nrf_gpio_pin_sense_t sense2 = NRF_GPIO_PIN_SENSE_HIGH;
|
||||||
|
nrf_gpio_cfg_sense_set(PIN_POWER_USB, sense2);
|
||||||
|
}
|
||||||
122
variants/nrf52840/ELECROW-ThinkNode-M3/variant.h
Normal file
122
variants/nrf52840/ELECROW-ThinkNode-M3/variant.h
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
|
||||||
|
Copyright (c) 2016 Sandeep Mistry All right reserved.
|
||||||
|
Copyright (c) 2018, Adafruit Industries (adafruit.com)
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
See the GNU Lesser General Public License for more details.
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _VARIANT_ELECROW_EINK_V1_0_
|
||||||
|
#define _VARIANT_ELECROW_EINK_V1_0_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#include "WVariant.h"
|
||||||
|
|
||||||
|
#define VARIANT_MCK (64000000ul)
|
||||||
|
#define USE_LFXO // Board uses 32khz crystal for LF
|
||||||
|
|
||||||
|
#define ELECROW_ThinkNode_M3 1
|
||||||
|
// Number of pins defined in PinDescription array
|
||||||
|
#define PINS_COUNT (48)
|
||||||
|
#define NUM_DIGITAL_PINS (48)
|
||||||
|
#define NUM_ANALOG_INPUTS (1)
|
||||||
|
#define NUM_ANALOG_OUTPUTS (0)
|
||||||
|
|
||||||
|
// Power Pin
|
||||||
|
#define NRF_APM
|
||||||
|
#define GPS_POWER 14
|
||||||
|
#define PIN_POWER_USB 31
|
||||||
|
#define EXT_PWR_DETECT PIN_POWER_USB
|
||||||
|
#define PIN_POWER_DONE 24
|
||||||
|
#define PIN_POWER_CHRG 32
|
||||||
|
#define KEY_POWER 16
|
||||||
|
#define ACC_POWER 2
|
||||||
|
#define DHT_POWER 3
|
||||||
|
#define Battery_POWER 17
|
||||||
|
#define RGB_POWER 29
|
||||||
|
#define EEPROM_POWER 7
|
||||||
|
|
||||||
|
// LED
|
||||||
|
#define red_LED_PIN 33
|
||||||
|
#define LED_POWER red_LED_PIN
|
||||||
|
#define LED_CHARGE LED_POWER // Signals the Status LED Module to handle this LED
|
||||||
|
#define green_LED_PIN 35
|
||||||
|
#define LED_BLUE 37
|
||||||
|
#define LED_PAIRING LED_BLUE // Signals the Status LED Module to handle this LED
|
||||||
|
|
||||||
|
#define LED_BUILTIN -1
|
||||||
|
#define LED_STATE_ON LOW
|
||||||
|
#define LED_STATE_OFF HIGH
|
||||||
|
|
||||||
|
// BUZZER
|
||||||
|
#define PIN_BUZZER 23
|
||||||
|
#define PIN_EN1 36
|
||||||
|
#define PIN_EN2 34
|
||||||
|
/*Wire Interfaces*/
|
||||||
|
#define WIRE_INTERFACES_COUNT 1
|
||||||
|
#define PIN_WIRE_SDA 26
|
||||||
|
#define PIN_WIRE_SCL 27
|
||||||
|
|
||||||
|
// Temperature correction for sensor
|
||||||
|
#define AHT10_TEMP_OFFSET -5.0
|
||||||
|
|
||||||
|
/*GPS pins*/
|
||||||
|
#define HAS_GPS 1
|
||||||
|
#define GPS_BAUDRATE 9600
|
||||||
|
#define PIN_GPS_RESET 25
|
||||||
|
#define PIN_GPS_STANDBY 21
|
||||||
|
#define GPS_TX_PIN 20
|
||||||
|
#define GPS_RX_PIN 22
|
||||||
|
#define GPS_THREAD_INTERVAL 50
|
||||||
|
#define PIN_SERIAL1_RX GPS_TX_PIN
|
||||||
|
#define PIN_SERIAL1_TX GPS_RX_PIN
|
||||||
|
// Button
|
||||||
|
#define BUTTON_PIN 12
|
||||||
|
#define BUTTON_PIN_ALT (0 + 12)
|
||||||
|
// Battery
|
||||||
|
#define BATTERY_PIN 5
|
||||||
|
#define BATTERY_SENSE_RESOLUTION_BITS 12
|
||||||
|
#define BATTERY_SENSE_RESOLUTION 4096.0
|
||||||
|
#undef AREF_VOLTAGE
|
||||||
|
#define AREF_VOLTAGE 2.4
|
||||||
|
#define VBAT_AR_INTERNAL AR_INTERNAL_2_4
|
||||||
|
#define ADC_MULTIPLIER (1.75)
|
||||||
|
/*SPI Interfaces*/
|
||||||
|
#define SPI_INTERFACES_COUNT 1
|
||||||
|
#define PIN_SPI_MISO (32 + 15) // P1.15 47
|
||||||
|
#define PIN_SPI_MOSI (32 + 14) // P1.14 46
|
||||||
|
#define PIN_SPI_SCK (32 + 13) // P1.13 45
|
||||||
|
#define PIN_SPI_NSS (32 + 12) // P1.12 44
|
||||||
|
/*LORA Interfaces*/
|
||||||
|
#define USE_LR1110
|
||||||
|
#define LR1110_IRQ_PIN 40
|
||||||
|
#define LR1110_NRESET_PIN 42
|
||||||
|
#define LR1110_BUSY_PIN 43
|
||||||
|
#define LR1110_SPI_NSS_PIN 44
|
||||||
|
#define LR1110_SPI_SCK_PIN 45
|
||||||
|
#define LR1110_SPI_MOSI_PIN 46
|
||||||
|
#define LR1110_SPI_MISO_PIN 47
|
||||||
|
#define LR11X0_DIO3_TCXO_VOLTAGE 3.3
|
||||||
|
#define LR11X0_DIO_AS_RF_SWITCH
|
||||||
|
|
||||||
|
// PCF8563 RTC Module
|
||||||
|
#define PCF8563_RTC 0x51
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
15
variants/nrf52840/ELECROW-ThinkNode-M6/platformio.ini
Normal file
15
variants/nrf52840/ELECROW-ThinkNode-M6/platformio.ini
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
; ThinkNode M6 - Outdoor Solar Power nrf52840/sx1262 device
|
||||||
|
[env:thinknode_m6]
|
||||||
|
extends = nrf52840_base
|
||||||
|
board = ThinkNode-M6
|
||||||
|
board_check = true
|
||||||
|
debug_tool = jlink
|
||||||
|
|
||||||
|
build_flags = ${nrf52840_base.build_flags}
|
||||||
|
-Ivariants/nrf52840/ELECROW-ThinkNode-M6
|
||||||
|
-DELECROW_ThinkNode_M6
|
||||||
|
|
||||||
|
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/ELECROW-ThinkNode-M6>
|
||||||
|
lib_deps =
|
||||||
|
${nrf52840_base.lib_deps}
|
||||||
|
lewisxhe/PCF8563_Library@^1.0.1
|
||||||
43
variants/nrf52840/ELECROW-ThinkNode-M6/variant.cpp
Normal file
43
variants/nrf52840/ELECROW-ThinkNode-M6/variant.cpp
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
|
||||||
|
Copyright (c) 2016 Sandeep Mistry All right reserved.
|
||||||
|
Copyright (c) 2018, Adafruit Industries (adafruit.com)
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
See the GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "variant.h"
|
||||||
|
#include "nrf.h"
|
||||||
|
#include "wiring_constants.h"
|
||||||
|
#include "wiring_digital.h"
|
||||||
|
|
||||||
|
const uint32_t g_ADigitalPinMap[] = {
|
||||||
|
// P0 - pins 0 and 1 are hardwired for xtal and should never be enabled
|
||||||
|
0xff, 0xff, 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,
|
||||||
|
|
||||||
|
// P1
|
||||||
|
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47};
|
||||||
|
|
||||||
|
void initVariant()
|
||||||
|
{
|
||||||
|
pinMode(LED_CHARGE, OUTPUT);
|
||||||
|
ledOff(LED_CHARGE);
|
||||||
|
|
||||||
|
pinMode(LED_PAIRING, OUTPUT);
|
||||||
|
ledOff(LED_PAIRING);
|
||||||
|
|
||||||
|
pinMode(VDD_FLASH_EN, OUTPUT);
|
||||||
|
digitalWrite(VDD_FLASH_EN, HIGH);
|
||||||
|
}
|
||||||
144
variants/nrf52840/ELECROW-ThinkNode-M6/variant.h
Normal file
144
variants/nrf52840/ELECROW-ThinkNode-M6/variant.h
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2014-2015 Arduino LLC. All right reserved.
|
||||||
|
Copyright (c) 2016 Sandeep Mistry All right reserved.
|
||||||
|
Copyright (c) 2018, Adafruit Industries (adafruit.com)
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
See the GNU Lesser General Public License for more details.
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _VARIANT_ELECROW_THINKNODE_M6_
|
||||||
|
#define _VARIANT_ELECROW_THINKNODE_M6_
|
||||||
|
|
||||||
|
/** Master clock frequency */
|
||||||
|
#define VARIANT_MCK (64000000ul)
|
||||||
|
|
||||||
|
#define USE_LFXO
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
* Headers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "WVariant.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#define PINS_COUNT (48)
|
||||||
|
#define NUM_DIGITAL_PINS (48)
|
||||||
|
#define NUM_ANALOG_INPUTS (1)
|
||||||
|
#define NUM_ANALOG_OUTPUTS (0)
|
||||||
|
|
||||||
|
// LEDs
|
||||||
|
#define LED_BUILTIN -1
|
||||||
|
#define LED_BLUE -1
|
||||||
|
#define LED_CHARGE (12)
|
||||||
|
#define LED_PAIRING (7)
|
||||||
|
|
||||||
|
#define LED_STATE_ON 1
|
||||||
|
|
||||||
|
// USB power detection
|
||||||
|
#define EXT_PWR_DETECT (13)
|
||||||
|
|
||||||
|
// Button
|
||||||
|
#define PIN_BUTTON1 (17)
|
||||||
|
|
||||||
|
// Battery ADC
|
||||||
|
#define PIN_A0 (28)
|
||||||
|
#define BATTERY_PIN PIN_A0
|
||||||
|
#define ADC_CTRL (11)
|
||||||
|
#define ADC_CTRL_ENABLED 1
|
||||||
|
|
||||||
|
static const uint8_t A0 = PIN_A0;
|
||||||
|
|
||||||
|
#define ADC_RESOLUTION 14
|
||||||
|
#define BATTERY_SENSE_SAMPLES 30
|
||||||
|
|
||||||
|
#define PIN_NFC1 (9)
|
||||||
|
#define PIN_NFC2 (10)
|
||||||
|
|
||||||
|
// I2C
|
||||||
|
#define WIRE_INTERFACES_COUNT 1
|
||||||
|
#define PIN_WIRE_SDA (32 + 9)
|
||||||
|
#define PIN_WIRE_SCL (8)
|
||||||
|
|
||||||
|
// Peripheral power enable
|
||||||
|
#define PIN_POWER_EN (27)
|
||||||
|
|
||||||
|
// Solar charger status
|
||||||
|
#define EXT_CHRG_DETECT (15)
|
||||||
|
#define EXT_CHRG_DETECT_VALUE LOW
|
||||||
|
|
||||||
|
// QSPI Flash
|
||||||
|
#define PIN_QSPI_SCK (32 + 3)
|
||||||
|
#define PIN_QSPI_CS (23)
|
||||||
|
#define PIN_QSPI_IO0 (32 + 1)
|
||||||
|
#define PIN_QSPI_IO1 (32 + 2)
|
||||||
|
#define PIN_QSPI_IO2 (32 + 4)
|
||||||
|
#define PIN_QSPI_IO3 (32 + 5)
|
||||||
|
|
||||||
|
#define EXTERNAL_FLASH_DEVICES MX25R1635F
|
||||||
|
#define EXTERNAL_FLASH_USE_QSPI
|
||||||
|
#define VDD_FLASH_EN (21)
|
||||||
|
|
||||||
|
// LoRa SX1262
|
||||||
|
#define USE_SX1262
|
||||||
|
#define SX126X_CS (32 + 12)
|
||||||
|
#define SX126X_DIO1 (32 + 6)
|
||||||
|
#define SX126X_BUSY (32 + 11)
|
||||||
|
#define SX126X_RESET (32 + 10)
|
||||||
|
#define SX126X_DIO2_AS_RF_SWITCH
|
||||||
|
#define SX126X_DIO3_TCXO_VOLTAGE 3.3
|
||||||
|
|
||||||
|
// GPS L76K
|
||||||
|
#define GPS_L76K
|
||||||
|
#define GPS_BAUDRATE 9600
|
||||||
|
#define PIN_GPS_EN (6)
|
||||||
|
#define PIN_GPS_REINIT (29)
|
||||||
|
#define PIN_GPS_STANDBY (30)
|
||||||
|
#define PIN_GPS_PPS (31)
|
||||||
|
#define GPS_TX_PIN (3)
|
||||||
|
#define GPS_RX_PIN (2)
|
||||||
|
#define GPS_THREAD_INTERVAL 50
|
||||||
|
|
||||||
|
#define PIN_SERIAL1_RX GPS_TX_PIN
|
||||||
|
#define PIN_SERIAL1_TX GPS_RX_PIN
|
||||||
|
|
||||||
|
// Secondary UART
|
||||||
|
#define PIN_SERIAL2_RX (22)
|
||||||
|
#define PIN_SERIAL2_TX (24)
|
||||||
|
|
||||||
|
// PCF8563 RTC Module
|
||||||
|
#define PCF8563_RTC 0x51
|
||||||
|
|
||||||
|
// SPI
|
||||||
|
#define SPI_INTERFACES_COUNT 1
|
||||||
|
#define PIN_SPI_MISO (32 + 15)
|
||||||
|
#define PIN_SPI_MOSI (32 + 14)
|
||||||
|
#define PIN_SPI_SCK (32 + 13)
|
||||||
|
|
||||||
|
// Battery
|
||||||
|
#define BATTERY_SENSE_RESOLUTION_BITS 12
|
||||||
|
#define BATTERY_SENSE_RESOLUTION 4096.0
|
||||||
|
#undef AREF_VOLTAGE
|
||||||
|
#define AREF_VOLTAGE 3.0
|
||||||
|
#define VBAT_AR_INTERNAL AR_INTERNAL_3_0
|
||||||
|
#define ADC_MULTIPLIER (1.75F)
|
||||||
|
|
||||||
|
#define HAS_SOLAR
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
15
variants/nrf52840/muzi_base/platformio.ini
Normal file
15
variants/nrf52840/muzi_base/platformio.ini
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[env:muzi-base]
|
||||||
|
extends = nrf52840_base
|
||||||
|
board = muzi-base
|
||||||
|
build_flags = ${nrf52840_base.build_flags}
|
||||||
|
-I variants/nrf52840/muzi_base
|
||||||
|
-D MUZI_BASE
|
||||||
|
-D CONFIG_NFCT_PINS_AS_GPIOS=1
|
||||||
|
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard"
|
||||||
|
|
||||||
|
build_src_filter = ${nrf52840_base.build_src_filter} +<../variants/nrf52840/muzi_base>
|
||||||
|
lib_deps =
|
||||||
|
${nrf52840_base.lib_deps}
|
||||||
|
artronshop/ArtronShop_RX8130CE@1.0.0
|
||||||
|
|
||||||
|
|
||||||
11
variants/nrf52840/muzi_base/rfswitch.h
Normal file
11
variants/nrf52840/muzi_base/rfswitch.h
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#include "RadioLib.h"
|
||||||
|
|
||||||
|
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC};
|
||||||
|
|
||||||
|
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
||||||
|
// mode DIO5 DIO6
|
||||||
|
{LR11x0::MODE_STBY, {LOW, LOW}}, {LR11x0::MODE_RX, {HIGH, LOW}},
|
||||||
|
{LR11x0::MODE_TX, {LOW, HIGH}}, {LR11x0::MODE_TX_HP, {LOW, HIGH}},
|
||||||
|
{LR11x0::MODE_TX_HF, {LOW, LOW}}, {LR11x0::MODE_GNSS, {LOW, LOW}},
|
||||||
|
{LR11x0::MODE_WIFI, {LOW, LOW}}, END_OF_MODE_TABLE,
|
||||||
|
};
|
||||||
83
variants/nrf52840/muzi_base/variant.cpp
Normal file
83
variants/nrf52840/muzi_base/variant.cpp
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
#include "variant.h"
|
||||||
|
#include "nrf.h"
|
||||||
|
#include "wiring_constants.h"
|
||||||
|
#include "wiring_digital.h"
|
||||||
|
|
||||||
|
const uint32_t g_ADigitalPinMap[] = {
|
||||||
|
// P0
|
||||||
|
0,
|
||||||
|
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,
|
||||||
|
|
||||||
|
// P1
|
||||||
|
32,
|
||||||
|
33,
|
||||||
|
34,
|
||||||
|
35,
|
||||||
|
36,
|
||||||
|
37,
|
||||||
|
38,
|
||||||
|
39,
|
||||||
|
40,
|
||||||
|
41,
|
||||||
|
42,
|
||||||
|
43,
|
||||||
|
44,
|
||||||
|
45,
|
||||||
|
46,
|
||||||
|
47,
|
||||||
|
};
|
||||||
|
|
||||||
|
void initVariant()
|
||||||
|
{
|
||||||
|
// Initialize the digital pins as inputs or outputs
|
||||||
|
pinMode(PIN_LED1, OUTPUT);
|
||||||
|
digitalWrite(PIN_LED1, HIGH);
|
||||||
|
|
||||||
|
pinMode(PIN_LED2, OUTPUT);
|
||||||
|
digitalWrite(PIN_LED2, HIGH);
|
||||||
|
|
||||||
|
// Initialize LoRa pins
|
||||||
|
pinMode(SX126X_RESET, OUTPUT);
|
||||||
|
digitalWrite(SX126X_RESET, HIGH);
|
||||||
|
|
||||||
|
pinMode(SX126X_CS, OUTPUT);
|
||||||
|
digitalWrite(SX126X_CS, HIGH);
|
||||||
|
|
||||||
|
pinMode(GPS_EN_GPIO, OUTPUT);
|
||||||
|
digitalWrite(GPS_EN_GPIO, HIGH); // GPS on initially
|
||||||
|
|
||||||
|
pinMode(SCREEN_12V_ENABLE, OUTPUT);
|
||||||
|
digitalWrite(SCREEN_12V_ENABLE, LOW); //
|
||||||
|
|
||||||
|
pinMode(BATTERY_CHARGING_INV, INPUT);
|
||||||
|
}
|
||||||
192
variants/nrf52840/muzi_base/variant.h
Normal file
192
variants/nrf52840/muzi_base/variant.h
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef _VARIANT_MUZI_BASE_
|
||||||
|
#define _VARIANT_MUZI_BASE_
|
||||||
|
|
||||||
|
/** Master clock frequency */
|
||||||
|
#define VARIANT_MCK (64000000ul)
|
||||||
|
|
||||||
|
#define USE_LFXO // Board uses 32khz crystal for LF
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
* Headers
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "WVariant.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
// Number of pins defined in PinDescription array
|
||||||
|
#define PINS_COUNT (48)
|
||||||
|
#define NUM_DIGITAL_PINS (48)
|
||||||
|
#define NUM_ANALOG_INPUTS (6)
|
||||||
|
#define NUM_ANALOG_OUTPUTS (0)
|
||||||
|
|
||||||
|
// Define I2C Peripherals
|
||||||
|
#define WIRE_INTERFACES_COUNT 2
|
||||||
|
|
||||||
|
// this is the OLED bus
|
||||||
|
#define PIN_WIRE_SDA (0 + 24) // P0.24
|
||||||
|
#define PIN_WIRE_SCL (0 + 25) // P0.25
|
||||||
|
|
||||||
|
// IMU bus
|
||||||
|
#define PIN_WIRE1_SDA (0 + 04) // P0.04
|
||||||
|
#define PIN_WIRE1_SCL (0 + 06) // P0.06
|
||||||
|
|
||||||
|
#define COMPASS_ORIENTATION meshtastic_Config_DisplayConfig_CompassOrientation_DEGREES_270
|
||||||
|
#define HAS_ICM20948 // forces the i2c address to be seen as this sensor
|
||||||
|
|
||||||
|
#define HAS_RTC 1
|
||||||
|
#define RX8130CE_RTC 0x32
|
||||||
|
|
||||||
|
// LEDs
|
||||||
|
#define PIN_LED1 (32 + 3) // P1.03, Green
|
||||||
|
#define PIN_LED2 (32 + 4) // P1.04, Blue
|
||||||
|
|
||||||
|
#define LED_BUILTIN -1 // PIN_LED1
|
||||||
|
#define LED_BLUE PIN_LED2
|
||||||
|
#define LED_STATE_ON 0 // State when LED is lit
|
||||||
|
|
||||||
|
// Buttons
|
||||||
|
#define HAS_TRACKBALL 1
|
||||||
|
#define TB_UP (0 + 21)
|
||||||
|
#define TB_DOWN (0 + 17)
|
||||||
|
#define TB_LEFT (32 + 05)
|
||||||
|
#define TB_RIGHT (0 + 16)
|
||||||
|
#define TB_PRESS (0 + 10)
|
||||||
|
#define TB_DIRECTION FALLING
|
||||||
|
|
||||||
|
#define CANCEL_BUTTON_PIN (0 + 15) // P0.15
|
||||||
|
#define CANCEL_BUTTON_ACTIVE_LOW true
|
||||||
|
#define CANCEL_BUTTON_ACTIVE_PULLUP false
|
||||||
|
|
||||||
|
// Switch
|
||||||
|
#define SWITCH_MODE1 (32 + 9) // P1.09, Top Position
|
||||||
|
#define SWITCH_MODE2 (0 + 12) // P0.12, Middle Position
|
||||||
|
#define PIN_GPS_SWITCH SWITCH_MODE2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SPI Interfaces
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SPI_INTERFACES_COUNT 1
|
||||||
|
|
||||||
|
// For LORA, spi 0
|
||||||
|
#define PIN_SPI_MISO (32 + 15) // P1.15
|
||||||
|
#define PIN_SPI_MOSI (32 + 14) // P1.14
|
||||||
|
#define PIN_SPI_SCK (32 + 13) // P1.13
|
||||||
|
|
||||||
|
#define LORA_SCK PIN_SPI_SCK
|
||||||
|
#define LORA_MISO PIN_SPI_MISO
|
||||||
|
#define LORA_MOSI PIN_SPI_MOSI
|
||||||
|
#define LORA_CS (32 + 12) // P1.12
|
||||||
|
|
||||||
|
#define USE_SX1262
|
||||||
|
#define SX126X_CS LORA_CS
|
||||||
|
#define SX126X_DIO1 (32 + 6) // P1.06
|
||||||
|
#define SX126X_BUSY (32 + 11) // P1.11
|
||||||
|
#define SX126X_RESET (32 + 10) // P1.10
|
||||||
|
#define SX126X_DIO2_AS_RF_SWITCH
|
||||||
|
#define SX126X_DIO3_TCXO_VOLTAGE 3.3
|
||||||
|
|
||||||
|
#define USE_LR1121
|
||||||
|
#define LR1121_IRQ_PIN (32 + 8) // P1.08
|
||||||
|
#define LR1121_NRESET_PIN (32 + 10) // P1.10
|
||||||
|
#define LR1121_BUSY_PIN (32 + 11) // P1.11
|
||||||
|
#define LR1121_SPI_NSS_PIN LORA_CS
|
||||||
|
#define LR1121_SPI_SCK_PIN LORA_SCK
|
||||||
|
#define LR1121_SPI_MOSI_PIN LORA_MOSI
|
||||||
|
#define LR1121_SPI_MISO_PIN LORA_MISO
|
||||||
|
#define LR11X0_DIO3_TCXO_VOLTAGE 3.0
|
||||||
|
#define LR11X0_DIO_AS_RF_SWITCH
|
||||||
|
|
||||||
|
// GPS
|
||||||
|
#define GPS_RX_PIN (0 + 19) // P0.19
|
||||||
|
#define GPS_TX_PIN (0 + 20) // P0.20
|
||||||
|
#define GPS_EN_GPIO (32 + 1) // P1.01
|
||||||
|
|
||||||
|
#define PIN_SERIAL1_RX GPS_TX_PIN
|
||||||
|
#define PIN_SERIAL1_TX GPS_RX_PIN
|
||||||
|
|
||||||
|
#define PIN_BUZZER (0 + 22) // P0.22
|
||||||
|
|
||||||
|
// Battery monitoring
|
||||||
|
#define BATTERY_PIN (0 + 31) // P0.31
|
||||||
|
|
||||||
|
// #define CHARGER_FAULT (0 + 27) // P0.27
|
||||||
|
#define BATTERY_CHARGING_INV (32 + 02) // P1.02
|
||||||
|
#define BATTERY_SENSE_RESOLUTION_BITS 12
|
||||||
|
#define BATTERY_SENSE_RESOLUTION 4096.0
|
||||||
|
#define ADC_MULTIPLIER 1.537
|
||||||
|
|
||||||
|
#define OCV_ARRAY 4050, 4010, 3990, 3930, 3870, 3820, 3740, 3630, 3550, 3450, 3100
|
||||||
|
|
||||||
|
// Display - I2C display
|
||||||
|
#define HAS_SCREEN 1
|
||||||
|
#define SCREEN_12V_ENABLE (0 + 23) // P0.23
|
||||||
|
#define USE_SH1107
|
||||||
|
|
||||||
|
#define USERPREFS_OEM_TEXT "muzi_works_logo"
|
||||||
|
#define USERPREFS_OEM_FONT_SIZE 0
|
||||||
|
#define USERPREFS_OEM_IMAGE_WIDTH 88 // 11 bytes wide
|
||||||
|
#define USERPREFS_OEM_IMAGE_HEIGHT 47 // 517 bytes total
|
||||||
|
#define USERPREFS_OEM_IMAGE_DATA \
|
||||||
|
{ \
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, \
|
||||||
|
0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||||
|
0xF7, 0x0F, 0xFF, 0x00, 0xF0, 0xFF, 0x0F, 0xC0, 0xFF, 0x07, 0x78, 0xFF, 0x9F, 0xFF, 0x01, 0xF0, 0xFF, 0x0F, 0xC0, \
|
||||||
|
0xFF, 0x03, 0x78, 0x3F, 0xFE, 0xF3, 0x01, 0xF0, 0xFF, 0x0F, 0x00, 0xE0, 0x03, 0x78, 0x1F, 0xFC, 0xC0, 0x03, 0xF0, \
|
||||||
|
0xFF, 0x0F, 0x00, 0xE0, 0x01, 0x78, 0x0F, 0xF8, 0x80, 0x03, 0xF0, 0xFF, 0x0F, 0x00, 0xF0, 0x00, 0x78, 0x0F, 0x78, \
|
||||||
|
0x80, 0x03, 0xF0, 0xFF, 0x0F, 0x00, 0x70, 0x00, 0x78, 0x07, 0x70, 0x80, 0x03, 0xF0, 0xFF, 0x0F, 0x00, 0x78, 0x00, \
|
||||||
|
0x78, 0x07, 0x70, 0x80, 0x03, 0xF0, 0xFF, 0x0F, 0x00, 0x3C, 0x00, 0x78, 0x07, 0x70, 0x80, 0x03, 0xF0, 0xFF, 0x0F, \
|
||||||
|
0x00, 0x1C, 0x00, 0x78, 0x07, 0x70, 0x80, 0x03, 0xF0, 0xFF, 0x0F, 0x00, 0x1E, 0x00, 0x78, 0x07, 0x70, 0x80, 0x03, \
|
||||||
|
0xE0, 0xFF, 0x0F, 0x00, 0x0F, 0x00, 0x78, 0x07, 0x70, 0x80, 0x03, 0xE0, 0xFF, 0x07, 0x80, 0x07, 0x00, 0x78, 0x07, \
|
||||||
|
0x70, 0x80, 0x03, 0xC0, 0xFF, 0x07, 0x80, 0x07, 0x00, 0x78, 0x07, 0x70, 0x80, 0x03, 0xC0, 0xFF, 0x03, 0xC0, 0xFF, \
|
||||||
|
0x07, 0x78, 0x07, 0x70, 0x80, 0x03, 0x00, 0xFF, 0x01, 0xE0, 0xFF, 0x07, 0x78, 0x07, 0x70, 0x80, 0x03, 0x00, 0x7C, \
|
||||||
|
0x00, 0xF0, 0xFF, 0x07, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
|
||||||
|
0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
|
||||||
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xE3, 0xE7, 0xC7, 0x1F, 0xF8, 0x0F, 0xF0, 0xE7, 0xE3, 0x07, 0x7C, 0xC7, 0xE7, \
|
||||||
|
0xC3, 0x0F, 0xE0, 0x07, 0xE0, 0xC7, 0xE1, 0x03, 0x70, 0xC7, 0xC3, 0xE3, 0x87, 0xC1, 0x07, 0xC0, 0xC7, 0xF8, 0xE3, \
|
||||||
|
0x71, 0xC7, 0xC3, 0xE3, 0xE3, 0xC7, 0xC7, 0xC7, 0x47, 0xF8, 0xF3, 0x7F, 0x8F, 0xC3, 0xF1, 0xE3, 0x8F, 0xC7, 0x8F, \
|
||||||
|
0x27, 0xFC, 0xE3, 0x7F, 0x8F, 0x81, 0xF1, 0xF1, 0x8F, 0xC7, 0xCF, 0x07, 0xFE, 0x03, 0x7E, 0x8F, 0x99, 0xF1, 0xF1, \
|
||||||
|
0x8F, 0x07, 0xC0, 0x07, 0xFF, 0x07, 0x78, 0x9F, 0x99, 0xF9, 0xF1, 0x8F, 0x07, 0xE0, 0x07, 0xFE, 0x3F, 0x70, 0x1F, \
|
||||||
|
0x18, 0xF8, 0xF3, 0x8F, 0x07, 0xF0, 0x27, 0xFC, 0xFF, 0x71, 0x3F, 0x18, 0xF8, 0xE3, 0xC7, 0xC7, 0xF1, 0x47, 0xF8, \
|
||||||
|
0xF3, 0x63, 0x3F, 0x3C, 0xFC, 0xC3, 0xC3, 0xC7, 0xE3, 0xC7, 0xF0, 0xE1, 0x71, 0x3F, 0x3C, 0xFC, 0x07, 0xE0, 0xC7, \
|
||||||
|
0xC7, 0xC7, 0xE1, 0x03, 0x70, 0x7F, 0x7E, 0xFE, 0x0F, 0xF0, 0xC7, 0x87, 0xC7, 0xC3, 0x07, 0x78, 0xFF, 0xFF, 0xFF, \
|
||||||
|
0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, \
|
||||||
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
|
||||||
|
0xFF, 0xFF, 0x7F \
|
||||||
|
}
|
||||||
|
|
||||||
|
// QSPI Pins
|
||||||
|
#define PIN_QSPI_SCK (0 + 3)
|
||||||
|
#define PIN_QSPI_CS (0 + 26)
|
||||||
|
#define PIN_QSPI_IO0 (0 + 30)
|
||||||
|
#define PIN_QSPI_IO1 (0 + 29)
|
||||||
|
#define PIN_QSPI_IO2 (0 + 28)
|
||||||
|
#define PIN_QSPI_IO3 (0 + 2)
|
||||||
|
|
||||||
|
// On-board QSPI Flash
|
||||||
|
#define EXTERNAL_FLASH_DEVICES W25Q32JVSS
|
||||||
|
#define EXTERNAL_FLASH_USE_QSPI
|
||||||
|
|
||||||
|
// NFC is disabled via CONFIG_NFCT_PINS_AS_GPIOS=1 build flag
|
||||||
|
// This configures P0.09 and P0.10 as regular GPIO pins instead of NFC pins
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
* Arduino objects - C++ only
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // _VARIANT_MUZI_BASE_
|
||||||
@@ -132,7 +132,8 @@ static const uint8_t SCK = PIN_SPI_SCK;
|
|||||||
#undef AREF_VOLTAGE
|
#undef AREF_VOLTAGE
|
||||||
#define AREF_VOLTAGE 3.0
|
#define AREF_VOLTAGE 3.0
|
||||||
#define VBAT_AR_INTERNAL AR_INTERNAL_3_0
|
#define VBAT_AR_INTERNAL AR_INTERNAL_3_0
|
||||||
#define ADC_MULTIPLIER 1.73
|
#define ADC_MULTIPLIER 1.667
|
||||||
|
#define OCV_ARRAY 4200, 4020, 4000, 3940, 3870, 3820, 3750, 3630, 3550, 3450, 3100
|
||||||
|
|
||||||
#define HAS_RTC 1
|
#define HAS_RTC 1
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user