mirror of
https://github.com/meshtastic/firmware.git
synced 2026-01-02 08:00:38 +00:00
Compare commits
25 Commits
v2.2.2.f35
...
v2.2.3.282
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
282cc0b16a | ||
|
|
4ab67f3668 | ||
|
|
312028b161 | ||
|
|
ecd48db69c | ||
|
|
03dc36ea12 | ||
|
|
c2ae38405e | ||
|
|
2a1d8c40b4 | ||
|
|
e2441c425a | ||
|
|
00ffe73ebd | ||
|
|
3355019de3 | ||
|
|
5bb207d88b | ||
|
|
5453e4d123 | ||
|
|
7f1b58a222 | ||
|
|
39357b2686 | ||
|
|
d6b629ae04 | ||
|
|
7b1aeb60cd | ||
|
|
5c7c1cd253 | ||
|
|
8cfe130df3 | ||
|
|
feef86942d | ||
|
|
5f3a8b4924 | ||
|
|
0fcaaf39b0 | ||
|
|
a55eac5c20 | ||
|
|
b47c9c165a | ||
|
|
ecceb10910 | ||
|
|
6fc76103a0 |
Submodule protobufs updated: d3dd7cfbe3...468ff2e245
@@ -22,6 +22,8 @@
|
|||||||
#define CFG_NUMLOCK_INT (1 << 3)
|
#define CFG_NUMLOCK_INT (1 << 3)
|
||||||
#define CFG_KEY_INT (1 << 4)
|
#define CFG_KEY_INT (1 << 4)
|
||||||
#define CFG_PANIC_INT (1 << 5)
|
#define CFG_PANIC_INT (1 << 5)
|
||||||
|
#define CFG_REPORT_MODS (1 << 6)
|
||||||
|
#define CFG_USE_MODS (1 << 7)
|
||||||
|
|
||||||
#define INT_OVERFLOW (1 << 0)
|
#define INT_OVERFLOW (1 << 0)
|
||||||
#define INT_CAPSLOCK (1 << 1)
|
#define INT_CAPSLOCK (1 << 1)
|
||||||
@@ -33,7 +35,7 @@
|
|||||||
#define KEY_NUMLOCK (1 << 6)
|
#define KEY_NUMLOCK (1 << 6)
|
||||||
#define KEY_COUNT_MASK (0x1F)
|
#define KEY_COUNT_MASK (0x1F)
|
||||||
|
|
||||||
BBQ10Keyboard::BBQ10Keyboard() : m_wire(nullptr), m_addr(NULL), writeCallback(nullptr), readCallback(nullptr) {}
|
BBQ10Keyboard::BBQ10Keyboard() : m_wire(nullptr), m_addr(0), readCallback(nullptr), writeCallback(nullptr) {}
|
||||||
|
|
||||||
void BBQ10Keyboard::begin(uint8_t addr, TwoWire *wire)
|
void BBQ10Keyboard::begin(uint8_t addr, TwoWire *wire)
|
||||||
{
|
{
|
||||||
@@ -66,6 +68,8 @@ void BBQ10Keyboard::reset()
|
|||||||
writeCallback(m_addr, _REG_RST, &data, 0);
|
writeCallback(m_addr, _REG_RST, &data, 0);
|
||||||
}
|
}
|
||||||
delay(100);
|
delay(100);
|
||||||
|
writeRegister(_REG_CFG, readRegister8(_REG_CFG) | CFG_REPORT_MODS);
|
||||||
|
delay(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BBQ10Keyboard::attachInterrupt(uint8_t pin, void (*func)(void)) const
|
void BBQ10Keyboard::attachInterrupt(uint8_t pin, void (*func)(void)) const
|
||||||
|
|||||||
@@ -3,6 +3,11 @@
|
|||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
|
|
||||||
|
#define KEY_MOD_ALT (0x1A)
|
||||||
|
#define KEY_MOD_SHL (0x1B)
|
||||||
|
#define KEY_MOD_SHR (0x1C)
|
||||||
|
#define KEY_MOD_SYM (0x1D)
|
||||||
|
|
||||||
class BBQ10Keyboard
|
class BBQ10Keyboard
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -71,30 +71,74 @@ int32_t KbI2cBase::runOnce()
|
|||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_NONE;
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_NONE;
|
||||||
e.source = this->_originName;
|
e.source = this->_originName;
|
||||||
switch (key.key) {
|
switch (key.key) {
|
||||||
case 0x1b: // ESC
|
case 'p': // TAB
|
||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_CANCEL;
|
case 't': // TAB as well
|
||||||
|
if (is_sym) {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = 0x09; // TAB Scancode
|
||||||
|
is_sym = false; // reset sym state after second keypress
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = key.key;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'q': // ESC
|
||||||
|
if (is_sym) {
|
||||||
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_CANCEL;
|
||||||
|
e.kbchar = 0x1b;
|
||||||
|
is_sym = false; // reset sym state after second keypress
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = key.key;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 0x08: // Back
|
case 0x08: // Back
|
||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_BACK;
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_BACK;
|
||||||
e.kbchar = key.key;
|
e.kbchar = key.key;
|
||||||
break;
|
break;
|
||||||
case 0x12: // sym shift+2
|
case 'e': // sym e
|
||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP;
|
if (is_sym) {
|
||||||
e.kbchar = 0xb5;
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP;
|
||||||
|
e.kbchar = 0xb5;
|
||||||
|
is_sym = false; // reset sym state after second keypress
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = key.key;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 0x18: // sym shift+8
|
case 'x': // sym x
|
||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN;
|
if (is_sym) {
|
||||||
e.kbchar = 0xb6;
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN;
|
||||||
|
e.kbchar = 0xb6;
|
||||||
|
is_sym = false; // reset sym state after second keypress
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = key.key;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 0x14: // Left (sym shift+4)
|
case 's': // sym s
|
||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT;
|
if (is_sym) {
|
||||||
e.kbchar = 0x00; // tweak for destSelect
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT;
|
||||||
|
e.kbchar = 0x00; // tweak for destSelect
|
||||||
|
is_sym = false; // reset sym state after second keypress
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = key.key;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 0x16: // Right (sym shift+6)
|
case 'f': // sym f
|
||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT;
|
if (is_sym) {
|
||||||
e.kbchar = 0x00; // tweak for destSelect
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT;
|
||||||
|
e.kbchar = 0x00; // tweak for destSelect
|
||||||
|
is_sym = false; // reset sym state after second keypress
|
||||||
|
} else {
|
||||||
|
e.inputEvent = ANYKEY;
|
||||||
|
e.kbchar = key.key;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x13: // Code scanner says the SYM key is 0x13
|
||||||
|
is_sym = !is_sym;
|
||||||
break;
|
break;
|
||||||
case 0x0d: // Enter
|
|
||||||
case 0x0a: // apparently Enter on Q10 is a line feed instead of carriage return
|
case 0x0a: // apparently Enter on Q10 is a line feed instead of carriage return
|
||||||
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT;
|
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT;
|
||||||
break;
|
break;
|
||||||
@@ -104,6 +148,7 @@ int32_t KbI2cBase::runOnce()
|
|||||||
default: // all other keys
|
default: // all other keys
|
||||||
e.inputEvent = ANYKEY;
|
e.inputEvent = ANYKEY;
|
||||||
e.kbchar = key.key;
|
e.kbchar = key.key;
|
||||||
|
is_sym = false; // reset sym state after second keypress
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,4 +19,5 @@ class KbI2cBase : public Observable<const InputEvent *>, public concurrency::OST
|
|||||||
TwoWire *i2cBus = 0;
|
TwoWire *i2cBus = 0;
|
||||||
|
|
||||||
BBQ10Keyboard Q10keyboard;
|
BBQ10Keyboard Q10keyboard;
|
||||||
|
bool is_sym = false;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -327,15 +327,15 @@ int MeshService::onGPSChanged(const meshtastic::GPSStatus *newStatus)
|
|||||||
// load data from GPS object, will add timestamp + battery further down
|
// load data from GPS object, will add timestamp + battery further down
|
||||||
pos = gps->p;
|
pos = gps->p;
|
||||||
} else {
|
} else {
|
||||||
// The GPS has lost lock, if we are fixed position we should just keep using
|
// The GPS has lost lock
|
||||||
// the old position
|
|
||||||
#ifdef GPS_EXTRAVERBOSE
|
#ifdef GPS_EXTRAVERBOSE
|
||||||
LOG_DEBUG("onGPSchanged() - lost validLocation\n");
|
LOG_DEBUG("onGPSchanged() - lost validLocation\n");
|
||||||
#endif
|
#endif
|
||||||
if (config.position.fixed_position) {
|
}
|
||||||
LOG_WARN("Using fixed position\n");
|
// Used fixed position if configured regalrdless of GPS lock
|
||||||
pos = ConvertToPosition(node->position);
|
if (config.position.fixed_position) {
|
||||||
}
|
LOG_WARN("Using fixed position\n");
|
||||||
|
pos = ConvertToPosition(node->position);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finally add a fresh timestamp and battery level reading
|
// Finally add a fresh timestamp and battery level reading
|
||||||
|
|||||||
@@ -111,6 +111,8 @@ typedef enum _meshtastic_HardwareModel {
|
|||||||
meshtastic_HardwareModel_T_WATCH_S3 = 51,
|
meshtastic_HardwareModel_T_WATCH_S3 = 51,
|
||||||
/* Bobricius Picomputer with ESP32-S3 CPU, Keyboard and IPS display */
|
/* Bobricius Picomputer with ESP32-S3 CPU, Keyboard and IPS display */
|
||||||
meshtastic_HardwareModel_PICOMPUTER_S3 = 52,
|
meshtastic_HardwareModel_PICOMPUTER_S3 = 52,
|
||||||
|
/* Heltec HT-CT62 with ESP32-C3 CPU and SX1262 LoRa */
|
||||||
|
meshtastic_HardwareModel_HELTEC_HT62 = 53,
|
||||||
/* ------------------------------------------------------------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
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.
|
||||||
------------------------------------------------------------------------------------------------------------------------------------------ */
|
------------------------------------------------------------------------------------------------------------------------------------------ */
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
|
|||||||
(event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT)) ||
|
(event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT)) ||
|
||||||
(event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT))) {
|
(event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT))) {
|
||||||
// LOG_DEBUG("Canned message event (%x)\n", event->kbchar);
|
// LOG_DEBUG("Canned message event (%x)\n", event->kbchar);
|
||||||
// tweak for left/right events generated via trackball/touch with empty kbchar
|
// tweak for left/right events generated via trackball/touch with empty kbchar
|
||||||
if (!event->kbchar) {
|
if (!event->kbchar) {
|
||||||
if (event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT)) {
|
if (event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT)) {
|
||||||
this->payload = 0xb4;
|
this->payload = 0xb4;
|
||||||
@@ -195,6 +195,7 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
|
|||||||
this->runState = CANNED_MESSAGE_RUN_STATE_FREETEXT;
|
this->runState = CANNED_MESSAGE_RUN_STATE_FREETEXT;
|
||||||
}
|
}
|
||||||
// pass the pressed key
|
// pass the pressed key
|
||||||
|
// LOG_DEBUG("Canned message ANYKEY (%x)\n", event->kbchar);
|
||||||
this->payload = event->kbchar;
|
this->payload = event->kbchar;
|
||||||
this->lastTouchMillis = millis();
|
this->lastTouchMillis = millis();
|
||||||
validEvent = true;
|
validEvent = true;
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ NOTE: For debugging only
|
|||||||
*/
|
*/
|
||||||
void NeighborInfoModule::printNeighborInfo(const char *header, const meshtastic_NeighborInfo *np)
|
void NeighborInfoModule::printNeighborInfo(const char *header, const meshtastic_NeighborInfo *np)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("%s NEIGHBORINFO PACKET from Node %d to Node %d (last sent by %d)\n", header, np->node_id, nodeDB.getNodeNum(),
|
LOG_DEBUG("%s NEIGHBORINFO PACKET from Node 0x%x to Node 0x%x (last sent by 0x%x)\n", header, np->node_id,
|
||||||
np->last_sent_by_id);
|
nodeDB.getNodeNum(), np->last_sent_by_id);
|
||||||
LOG_DEBUG("----------------\n");
|
LOG_DEBUG("----------------\n");
|
||||||
LOG_DEBUG("Packet contains %d neighbors\n", np->neighbors_count);
|
LOG_DEBUG("Packet contains %d neighbors\n", np->neighbors_count);
|
||||||
for (int i = 0; i < np->neighbors_count; i++) {
|
for (int i = 0; i < np->neighbors_count; i++) {
|
||||||
LOG_DEBUG("Neighbor %d: node_id=%d, snr=%.2f\n", i, np->neighbors[i].node_id, np->neighbors[i].snr);
|
LOG_DEBUG("Neighbor %d: node_id=0x%x, snr=%.2f\n", i, np->neighbors[i].node_id, np->neighbors[i].snr);
|
||||||
}
|
}
|
||||||
LOG_DEBUG("----------------\n");
|
LOG_DEBUG("----------------\n");
|
||||||
}
|
}
|
||||||
@@ -31,12 +31,12 @@ NOTE: for debugging only
|
|||||||
void NeighborInfoModule::printNodeDBNodes(const char *header)
|
void NeighborInfoModule::printNodeDBNodes(const char *header)
|
||||||
{
|
{
|
||||||
int num_nodes = nodeDB.getNumMeshNodes();
|
int num_nodes = nodeDB.getNumMeshNodes();
|
||||||
LOG_DEBUG("%s NODEDB SELECTION from Node %d:\n", header, nodeDB.getNodeNum());
|
LOG_DEBUG("%s NODEDB SELECTION from Node 0x%x:\n", header, nodeDB.getNodeNum());
|
||||||
LOG_DEBUG("----------------\n");
|
LOG_DEBUG("----------------\n");
|
||||||
LOG_DEBUG("DB contains %d nodes\n", num_nodes);
|
LOG_DEBUG("DB contains %d nodes\n", num_nodes);
|
||||||
for (int i = 0; i < num_nodes; i++) {
|
for (int i = 0; i < num_nodes; i++) {
|
||||||
const meshtastic_NodeInfoLite *dbEntry = nodeDB.getMeshNodeByIndex(i);
|
const meshtastic_NodeInfoLite *dbEntry = nodeDB.getMeshNodeByIndex(i);
|
||||||
LOG_DEBUG(" Node %d: node_id=%d, snr=%.2f\n", i, dbEntry->num, dbEntry->snr);
|
LOG_DEBUG(" Node %d: node_id=0x%x, snr=%.2f\n", i, dbEntry->num, dbEntry->snr);
|
||||||
}
|
}
|
||||||
LOG_DEBUG("----------------\n");
|
LOG_DEBUG("----------------\n");
|
||||||
}
|
}
|
||||||
@@ -48,12 +48,12 @@ NOTE: for debugging only
|
|||||||
void NeighborInfoModule::printNodeDBNeighbors(const char *header)
|
void NeighborInfoModule::printNodeDBNeighbors(const char *header)
|
||||||
{
|
{
|
||||||
int num_neighbors = getNumNeighbors();
|
int num_neighbors = getNumNeighbors();
|
||||||
LOG_DEBUG("%s NODEDB SELECTION from Node %d:\n", header, nodeDB.getNodeNum());
|
LOG_DEBUG("%s NODEDB SELECTION from Node 0x%x:\n", header, nodeDB.getNodeNum());
|
||||||
LOG_DEBUG("----------------\n");
|
LOG_DEBUG("----------------\n");
|
||||||
LOG_DEBUG("DB contains %d neighbors\n", num_neighbors);
|
LOG_DEBUG("DB contains %d neighbors\n", num_neighbors);
|
||||||
for (int i = 0; i < num_neighbors; i++) {
|
for (int i = 0; i < num_neighbors; i++) {
|
||||||
const meshtastic_Neighbor *dbEntry = getNeighborByIndex(i);
|
const meshtastic_Neighbor *dbEntry = getNeighborByIndex(i);
|
||||||
LOG_DEBUG(" Node %d: node_id=%d, snr=%.2f\n", i, dbEntry->node_id, dbEntry->snr);
|
LOG_DEBUG(" Node %d: node_id=0x%x, snr=%.2f\n", i, dbEntry->node_id, dbEntry->snr);
|
||||||
}
|
}
|
||||||
LOG_DEBUG("----------------\n");
|
LOG_DEBUG("----------------\n");
|
||||||
}
|
}
|
||||||
@@ -66,7 +66,7 @@ NOTE: For debugging only
|
|||||||
void NeighborInfoModule::printNodeDBSelection(const char *header, const meshtastic_NeighborInfo *np)
|
void NeighborInfoModule::printNodeDBSelection(const char *header, const meshtastic_NeighborInfo *np)
|
||||||
{
|
{
|
||||||
int num_neighbors = getNumNeighbors();
|
int num_neighbors = getNumNeighbors();
|
||||||
LOG_DEBUG("%s NODEDB SELECTION from Node %d:\n", header, nodeDB.getNodeNum());
|
LOG_DEBUG("%s NODEDB SELECTION from Node 0x%x:\n", header, nodeDB.getNodeNum());
|
||||||
LOG_DEBUG("----------------\n");
|
LOG_DEBUG("----------------\n");
|
||||||
LOG_DEBUG("Selected %d neighbors of %d DB neighbors\n", np->neighbors_count, num_neighbors);
|
LOG_DEBUG("Selected %d neighbors of %d DB neighbors\n", np->neighbors_count, num_neighbors);
|
||||||
for (int i = 0; i < num_neighbors; i++) {
|
for (int i = 0; i < num_neighbors; i++) {
|
||||||
@@ -78,9 +78,9 @@ void NeighborInfoModule::printNodeDBSelection(const char *header, const meshtast
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!chosen) {
|
if (!chosen) {
|
||||||
LOG_DEBUG(" Node %d: neighbor=%d, snr=%.2f\n", i, dbEntry->node_id, dbEntry->snr);
|
LOG_DEBUG(" Node %d: neighbor=0x%x, snr=%.2f\n", i, dbEntry->node_id, dbEntry->snr);
|
||||||
} else {
|
} else {
|
||||||
LOG_DEBUG("---> Node %d: neighbor=%d, snr=%.2f\n", i, dbEntry->node_id, dbEntry->snr);
|
LOG_DEBUG("---> Node %d: neighbor=0x%x, snr=%.2f\n", i, dbEntry->node_id, dbEntry->snr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG_DEBUG("----------------\n");
|
LOG_DEBUG("----------------\n");
|
||||||
@@ -255,7 +255,7 @@ void NeighborInfoModule::updateNeighbors(const meshtastic_MeshPacket &mp, const
|
|||||||
}
|
}
|
||||||
|
|
||||||
meshtastic_Neighbor *NeighborInfoModule::getOrCreateNeighbor(NodeNum originalSender, NodeNum n,
|
meshtastic_Neighbor *NeighborInfoModule::getOrCreateNeighbor(NodeNum originalSender, NodeNum n,
|
||||||
uint32_t node_broadcast_interval_secs, int snr)
|
uint32_t node_broadcast_interval_secs, float snr)
|
||||||
{
|
{
|
||||||
// our node and the phone are the same node (not neighbors)
|
// our node and the phone are the same node (not neighbors)
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class NeighborInfoModule : public ProtobufModule<meshtastic_NeighborInfo>, priva
|
|||||||
meshtastic_NeighborInfo *allocateNeighborInfoPacket();
|
meshtastic_NeighborInfo *allocateNeighborInfoPacket();
|
||||||
|
|
||||||
// Find a neighbor in our DB, create an empty neighbor if missing
|
// Find a neighbor in our DB, create an empty neighbor if missing
|
||||||
meshtastic_Neighbor *getOrCreateNeighbor(NodeNum originalSender, NodeNum n, uint32_t node_broadcast_interval_secs, int snr);
|
meshtastic_Neighbor *getOrCreateNeighbor(NodeNum originalSender, NodeNum n, uint32_t node_broadcast_interval_secs, float snr);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Send info on our node's neighbors into the mesh
|
* Send info on our node's neighbors into the mesh
|
||||||
|
|||||||
@@ -119,6 +119,8 @@
|
|||||||
#define HW_VENDOR meshtastic_HardwareModel_BETAFPV_900_NANO_TX
|
#define HW_VENDOR meshtastic_HardwareModel_BETAFPV_900_NANO_TX
|
||||||
#elif defined(PICOMPUTER_S3)
|
#elif defined(PICOMPUTER_S3)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_PICOMPUTER_S3
|
#define HW_VENDOR meshtastic_HardwareModel_PICOMPUTER_S3
|
||||||
|
#elif defined(HELTEC_HT62)
|
||||||
|
#define HW_VENDOR meshtastic_HardwareModel_HELTEC_HT62
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
32
variants/heltec_esp32c3/pins_arduino.h
Normal file
32
variants/heltec_esp32c3/pins_arduino.h
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#ifndef Pins_Arduino_h
|
||||||
|
#define Pins_Arduino_h
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define EXTERNAL_NUM_INTERRUPTS 22
|
||||||
|
#define NUM_DIGITAL_PINS 22
|
||||||
|
#define NUM_ANALOG_INPUTS 6
|
||||||
|
|
||||||
|
#define analogInputToDigitalPin(p) (((p) < NUM_ANALOG_INPUTS) ? (esp32_adc2gpio[(p)]) : -1)
|
||||||
|
#define digitalPinToInterrupt(p) (((p) < NUM_DIGITAL_PINS) ? (p) : -1)
|
||||||
|
#define digitalPinHasPWM(p) (p < EXTERNAL_NUM_INTERRUPTS)
|
||||||
|
|
||||||
|
static const uint8_t TX = 21;
|
||||||
|
static const uint8_t RX = 20;
|
||||||
|
|
||||||
|
static const uint8_t SDA = 1;
|
||||||
|
static const uint8_t SCL = 0;
|
||||||
|
|
||||||
|
static const uint8_t SS = 8;
|
||||||
|
static const uint8_t MOSI = 7;
|
||||||
|
static const uint8_t MISO = 6;
|
||||||
|
static const uint8_t SCK = 10;
|
||||||
|
|
||||||
|
static const uint8_t A0 = 0;
|
||||||
|
static const uint8_t A1 = 1;
|
||||||
|
static const uint8_t A2 = 2;
|
||||||
|
static const uint8_t A3 = 3;
|
||||||
|
static const uint8_t A4 = 4;
|
||||||
|
static const uint8_t A5 = 5;
|
||||||
|
|
||||||
|
#endif /* Pins_Arduino_h */
|
||||||
12
variants/heltec_esp32c3/platformio.ini
Normal file
12
variants/heltec_esp32c3/platformio.ini
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[env:heltec-ht62-esp32c3-sx1262]
|
||||||
|
extends = esp32c3_base
|
||||||
|
board = esp32-c3-devkitm-1
|
||||||
|
board_level = extra
|
||||||
|
build_flags =
|
||||||
|
${esp32_base.build_flags}
|
||||||
|
-D HELTEC_HT62
|
||||||
|
-I variants/heltec_esp32c3
|
||||||
|
monitor_speed = 115200
|
||||||
|
upload_protocol = esptool
|
||||||
|
upload_port = /dev/ttyUSB0
|
||||||
|
upload_speed = 921600
|
||||||
36
variants/heltec_esp32c3/variant.h
Normal file
36
variants/heltec_esp32c3/variant.h
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#define I2C_SDA 1
|
||||||
|
#define I2C_SCL 0
|
||||||
|
|
||||||
|
#define BUTTON_PIN 9
|
||||||
|
#define BUTTON_NEED_PULLUP
|
||||||
|
|
||||||
|
// LED flashes brighter
|
||||||
|
// https://resource.heltec.cn/download/HT-CT62/HT-CT62_Reference_Design.pdf
|
||||||
|
#define LED_PIN 18 // LED
|
||||||
|
#define LED_INVERTED 1
|
||||||
|
|
||||||
|
#define HAS_SCREEN 0
|
||||||
|
#define HAS_GPS 0
|
||||||
|
#undef GPS_RX_PIN
|
||||||
|
#undef GPS_TX_PIN
|
||||||
|
|
||||||
|
#undef RF95_SCK
|
||||||
|
#undef RF95_MISO
|
||||||
|
#undef RF95_MOSI
|
||||||
|
#undef RF95_NSS
|
||||||
|
|
||||||
|
#define USE_SX1262
|
||||||
|
#define RF95_SCK 10
|
||||||
|
#define RF95_MISO 6
|
||||||
|
#define RF95_MOSI 7
|
||||||
|
#define RF95_NSS 8
|
||||||
|
#define LORA_DIO0 RADIOLIB_NC
|
||||||
|
#define LORA_RESET 5
|
||||||
|
#define LORA_DIO1 3
|
||||||
|
#define LORA_DIO2 RADIOLIB_NC
|
||||||
|
#define LORA_BUSY 4
|
||||||
|
#define SX126X_CS RF95_NSS
|
||||||
|
#define SX126X_DIO1 LORA_DIO1
|
||||||
|
#define SX126X_BUSY LORA_BUSY
|
||||||
|
#define SX126X_RESET LORA_RESET
|
||||||
|
#define SX126X_E22
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
[VERSION]
|
[VERSION]
|
||||||
major = 2
|
major = 2
|
||||||
minor = 2
|
minor = 2
|
||||||
build = 2
|
build = 3
|
||||||
|
|||||||
Reference in New Issue
Block a user