mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-19 03:22:07 +00:00
Merge branch 'master' into tft-gui-work
This commit is contained in:
commit
128ec63ca9
@ -356,7 +356,7 @@ class LGFX : public lgfx::LGFX_Device
|
|||||||
_panel_instance = new lgfx::Panel_ILI9341;
|
_panel_instance = new lgfx::Panel_ILI9341;
|
||||||
auto buscfg = _bus_instance.config();
|
auto buscfg = _bus_instance.config();
|
||||||
buscfg.spi_mode = 0;
|
buscfg.spi_mode = 0;
|
||||||
_bus_instance.spi_device(DisplaySPI);
|
buscfg.spi_host = settingsMap[displayspidev];
|
||||||
|
|
||||||
buscfg.pin_dc = settingsMap[displayDC]; // Set SPI DC pin number (-1 = disable)
|
buscfg.pin_dc = settingsMap[displayDC]; // Set SPI DC pin number (-1 = disable)
|
||||||
|
|
||||||
@ -397,6 +397,8 @@ class LGFX : public lgfx::LGFX_Device
|
|||||||
touch_cfg.offset_rotation = 1;
|
touch_cfg.offset_rotation = 1;
|
||||||
if (settingsMap[touchscreenI2CAddr] != -1) {
|
if (settingsMap[touchscreenI2CAddr] != -1) {
|
||||||
touch_cfg.i2c_addr = settingsMap[touchscreenI2CAddr];
|
touch_cfg.i2c_addr = settingsMap[touchscreenI2CAddr];
|
||||||
|
} else {
|
||||||
|
touch_cfg.spi_host = settingsMap[touchscreenspidev];
|
||||||
}
|
}
|
||||||
|
|
||||||
_touch_instance->config(touch_cfg);
|
_touch_instance->config(touch_cfg);
|
||||||
|
@ -802,7 +802,7 @@ void setup()
|
|||||||
if (settingsMap[use_sx1262]) {
|
if (settingsMap[use_sx1262]) {
|
||||||
if (!rIf) {
|
if (!rIf) {
|
||||||
LOG_DEBUG("Attempting to activate sx1262 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
LOG_DEBUG("Attempting to activate sx1262 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
||||||
LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(*LoraSPI, spiSettings);
|
LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(SPI, spiSettings);
|
||||||
rIf = new SX1262Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
rIf = new SX1262Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
||||||
settingsMap[busy]);
|
settingsMap[busy]);
|
||||||
if (!rIf->init()) {
|
if (!rIf->init()) {
|
||||||
@ -816,7 +816,7 @@ void setup()
|
|||||||
} else if (settingsMap[use_rf95]) {
|
} else if (settingsMap[use_rf95]) {
|
||||||
if (!rIf) {
|
if (!rIf) {
|
||||||
LOG_DEBUG("Attempting to activate rf95 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
LOG_DEBUG("Attempting to activate rf95 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
||||||
LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(*LoraSPI, spiSettings);
|
LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(SPI, spiSettings);
|
||||||
rIf = new RF95Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
rIf = new RF95Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
||||||
settingsMap[busy]);
|
settingsMap[busy]);
|
||||||
if (!rIf->init()) {
|
if (!rIf->init()) {
|
||||||
@ -831,7 +831,7 @@ void setup()
|
|||||||
} else if (settingsMap[use_sx1280]) {
|
} else if (settingsMap[use_sx1280]) {
|
||||||
if (!rIf) {
|
if (!rIf) {
|
||||||
LOG_DEBUG("Attempting to activate sx1280 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
LOG_DEBUG("Attempting to activate sx1280 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
||||||
LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(*LoraSPI, spiSettings);
|
LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(SPI, spiSettings);
|
||||||
rIf = new SX1280Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
rIf = new SX1280Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
||||||
settingsMap[busy]);
|
settingsMap[busy]);
|
||||||
if (!rIf->init()) {
|
if (!rIf->init()) {
|
||||||
@ -846,7 +846,7 @@ void setup()
|
|||||||
} else if (settingsMap[use_sx1268]) {
|
} else if (settingsMap[use_sx1268]) {
|
||||||
if (!rIf) {
|
if (!rIf) {
|
||||||
LOG_DEBUG("Attempting to activate sx1268 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
LOG_DEBUG("Attempting to activate sx1268 radio on SPI port %s\n", settingsStrings[spidev].c_str());
|
||||||
LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(*LoraSPI, spiSettings);
|
LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(SPI, spiSettings);
|
||||||
rIf = new SX1268Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
rIf = new SX1268Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
|
||||||
settingsMap[busy]);
|
settingsMap[busy]);
|
||||||
if (!rIf->init()) {
|
if (!rIf->init()) {
|
||||||
|
@ -193,10 +193,7 @@ void MeshService::handleToRadio(meshtastic_MeshPacket &p)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (p.from != 0) { // We don't let phones assign nodenums to their sent messages
|
if (p.from != 0) { // We don't let phones assign nodenums to their sent messages
|
||||||
LOG_WARN("phone tried to pick a nodenum, we don't allow that.\n");
|
|
||||||
p.from = 0;
|
p.from = 0;
|
||||||
} else {
|
|
||||||
// p.from = nodeDB->getNodeNum();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p.id == 0)
|
if (p.id == 0)
|
||||||
|
@ -87,6 +87,23 @@ bool PositionModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mes
|
|||||||
return false; // Let others look at this message also if they want
|
return false; // Let others look at this message also if they want
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PositionModule::alterReceivedProtobuf(meshtastic_MeshPacket &mp, meshtastic_Position *p)
|
||||||
|
{
|
||||||
|
// Phone position packets need to be truncated to the channel precision
|
||||||
|
if (nodeDB->getNodeNum() == getFrom(&mp) && (precision < 32 && precision > 0)) {
|
||||||
|
LOG_DEBUG("Truncating phone position to channel precision %i\n", precision);
|
||||||
|
p->latitude_i = p->latitude_i & (UINT32_MAX << (32 - precision));
|
||||||
|
p->longitude_i = p->longitude_i & (UINT32_MAX << (32 - precision));
|
||||||
|
|
||||||
|
// We want the imprecise position to be the middle of the possible location, not
|
||||||
|
p->latitude_i += (1 << (31 - precision));
|
||||||
|
p->longitude_i += (1 << (31 - precision));
|
||||||
|
|
||||||
|
mp.decoded.payload.size =
|
||||||
|
pb_encode_to_bytes(mp.decoded.payload.bytes, sizeof(mp.decoded.payload.bytes), &meshtastic_Position_msg, p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PositionModule::trySetRtc(meshtastic_Position p, bool isLocal)
|
void PositionModule::trySetRtc(meshtastic_Position p, bool isLocal)
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
@ -42,6 +42,8 @@ class PositionModule : public ProtobufModule<meshtastic_Position>, private concu
|
|||||||
*/
|
*/
|
||||||
virtual bool handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshtastic_Position *p) override;
|
virtual bool handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshtastic_Position *p) override;
|
||||||
|
|
||||||
|
virtual void alterReceivedProtobuf(meshtastic_MeshPacket &mp, meshtastic_Position *p) override;
|
||||||
|
|
||||||
/** Messages can be received that have the want_response bit set. If set, this callback will be invoked
|
/** Messages can be received that have the want_response bit set. If set, this callback will be invoked
|
||||||
* so that subclasses can (optionally) send a response back to the original sender. */
|
* so that subclasses can (optionally) send a response back to the original sender. */
|
||||||
virtual meshtastic_MeshPacket *allocReply() override;
|
virtual meshtastic_MeshPacket *allocReply() override;
|
||||||
|
@ -15,8 +15,6 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
HardwareSPI *DisplaySPI;
|
|
||||||
HardwareSPI *LoraSPI;
|
|
||||||
std::map<configNames, int> settingsMap;
|
std::map<configNames, int> settingsMap;
|
||||||
std::map<configNames, std::string> settingsStrings;
|
std::map<configNames, std::string> settingsStrings;
|
||||||
char *configPath = nullptr;
|
char *configPath = nullptr;
|
||||||
@ -76,7 +74,21 @@ void portduinoCustomInit()
|
|||||||
void portduinoSetup()
|
void portduinoSetup()
|
||||||
{
|
{
|
||||||
printf("Setting up Meshtastic on Portduino...\n");
|
printf("Setting up Meshtastic on Portduino...\n");
|
||||||
gpioInit();
|
int max_GPIO = 0;
|
||||||
|
int GPIO_lines[] = {cs,
|
||||||
|
irq,
|
||||||
|
busy,
|
||||||
|
reset,
|
||||||
|
txen,
|
||||||
|
rxen,
|
||||||
|
displayDC,
|
||||||
|
displayCS,
|
||||||
|
displayBacklight,
|
||||||
|
displayBacklightPWMChannel,
|
||||||
|
displayReset,
|
||||||
|
touchscreenCS,
|
||||||
|
touchscreenIRQ,
|
||||||
|
user};
|
||||||
|
|
||||||
std::string gpioChipName = "gpiochip";
|
std::string gpioChipName = "gpiochip";
|
||||||
settingsStrings[i2cdev] = "";
|
settingsStrings[i2cdev] = "";
|
||||||
@ -159,6 +171,15 @@ void portduinoSetup()
|
|||||||
gpioChipName += std::to_string(settingsMap[gpiochip]);
|
gpioChipName += std::to_string(settingsMap[gpiochip]);
|
||||||
|
|
||||||
settingsStrings[spidev] = "/dev/" + yamlConfig["Lora"]["spidev"].as<std::string>("spidev0.0");
|
settingsStrings[spidev] = "/dev/" + yamlConfig["Lora"]["spidev"].as<std::string>("spidev0.0");
|
||||||
|
if (settingsStrings[spidev].length() == 14) {
|
||||||
|
int x = settingsStrings[spidev].at(11) - '0';
|
||||||
|
int y = settingsStrings[spidev].at(13) - '0';
|
||||||
|
if (x >= 0 && x < 10 && y >= 0 && y < 10) {
|
||||||
|
settingsMap[spidev] = x + y << 4;
|
||||||
|
settingsMap[displayspidev] = settingsMap[spidev];
|
||||||
|
settingsMap[touchscreenspidev] = settingsMap[spidev];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (yamlConfig["GPIO"]) {
|
if (yamlConfig["GPIO"]) {
|
||||||
settingsMap[user] = yamlConfig["GPIO"]["User"].as<int>(RADIOLIB_NC);
|
settingsMap[user] = yamlConfig["GPIO"]["User"].as<int>(RADIOLIB_NC);
|
||||||
@ -208,6 +229,14 @@ void portduinoSetup()
|
|||||||
settingsMap[displayBusFrequency] = yamlConfig["Display"]["BusFrequency"].as<int>(40000000);
|
settingsMap[displayBusFrequency] = yamlConfig["Display"]["BusFrequency"].as<int>(40000000);
|
||||||
if (yamlConfig["Display"]["spidev"]) {
|
if (yamlConfig["Display"]["spidev"]) {
|
||||||
settingsStrings[displayspidev] = "/dev/" + yamlConfig["Display"]["spidev"].as<std::string>("spidev0.1");
|
settingsStrings[displayspidev] = "/dev/" + yamlConfig["Display"]["spidev"].as<std::string>("spidev0.1");
|
||||||
|
if (settingsStrings[displayspidev].length() == 14) {
|
||||||
|
int x = settingsStrings[displayspidev].at(11) - '0';
|
||||||
|
int y = settingsStrings[displayspidev].at(13) - '0';
|
||||||
|
if (x >= 0 && x < 10 && y >= 0 && y < 10) {
|
||||||
|
settingsMap[displayspidev] = x + y << 4;
|
||||||
|
settingsMap[touchscreenspidev] = settingsMap[displayspidev];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
settingsMap[touchscreenModule] = no_touchscreen;
|
settingsMap[touchscreenModule] = no_touchscreen;
|
||||||
@ -227,6 +256,13 @@ void portduinoSetup()
|
|||||||
settingsMap[touchscreenI2CAddr] = yamlConfig["Touchscreen"]["I2CAddr"].as<int>(-1);
|
settingsMap[touchscreenI2CAddr] = yamlConfig["Touchscreen"]["I2CAddr"].as<int>(-1);
|
||||||
if (yamlConfig["Touchscreen"]["spidev"]) {
|
if (yamlConfig["Touchscreen"]["spidev"]) {
|
||||||
settingsStrings[touchscreenspidev] = "/dev/" + yamlConfig["Touchscreen"]["spidev"].as<std::string>("");
|
settingsStrings[touchscreenspidev] = "/dev/" + yamlConfig["Touchscreen"]["spidev"].as<std::string>("");
|
||||||
|
if (settingsStrings[touchscreenspidev].length() == 14) {
|
||||||
|
int x = settingsStrings[touchscreenspidev].at(11) - '0';
|
||||||
|
int y = settingsStrings[touchscreenspidev].at(13) - '0';
|
||||||
|
if (x >= 0 && x < 10 && y >= 0 && y < 10) {
|
||||||
|
settingsMap[touchscreenspidev] = x + y << 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (yamlConfig["Input"]) {
|
if (yamlConfig["Input"]) {
|
||||||
@ -245,6 +281,13 @@ void portduinoSetup()
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i : GPIO_lines) {
|
||||||
|
if (i > max_GPIO)
|
||||||
|
max_GPIO = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
gpioInit(max_GPIO + 1); // Done here so we can inform Portduino how many GPIOs we need.
|
||||||
|
|
||||||
// Need to bind all the configured GPIO pins so they're not simulated
|
// Need to bind all the configured GPIO pins so they're not simulated
|
||||||
if (settingsMap.count(cs) > 0 && settingsMap[cs] != RADIOLIB_NC) {
|
if (settingsMap.count(cs) > 0 && settingsMap[cs] != RADIOLIB_NC) {
|
||||||
if (initGPIOPin(settingsMap[cs], gpioChipName) != ERRNO_OK) {
|
if (initGPIOPin(settingsMap[cs], gpioChipName) != ERRNO_OK) {
|
||||||
@ -298,27 +341,9 @@ void portduinoSetup()
|
|||||||
if (settingsMap[touchscreenIRQ] > 0)
|
if (settingsMap[touchscreenIRQ] > 0)
|
||||||
initGPIOPin(settingsMap[touchscreenIRQ], gpioChipName);
|
initGPIOPin(settingsMap[touchscreenIRQ], gpioChipName);
|
||||||
}
|
}
|
||||||
|
if (settingsStrings[spidev] != "") {
|
||||||
// if we specify a touchscreen dev, that is SPI.
|
|
||||||
// else if we specify a screen dev, that is SPI
|
|
||||||
// else if we specify a LoRa dev, that is SPI.
|
|
||||||
if (settingsStrings[touchscreenspidev] != "") {
|
|
||||||
SPI.begin(settingsStrings[touchscreenspidev].c_str());
|
|
||||||
DisplaySPI = new HardwareSPI;
|
|
||||||
DisplaySPI->begin(settingsStrings[displayspidev].c_str());
|
|
||||||
LoraSPI = new HardwareSPI;
|
|
||||||
LoraSPI->begin(settingsStrings[spidev].c_str());
|
|
||||||
} else if (settingsStrings[displayspidev] != "") {
|
|
||||||
SPI.begin(settingsStrings[displayspidev].c_str());
|
|
||||||
DisplaySPI = &SPI;
|
|
||||||
LoraSPI = new HardwareSPI;
|
|
||||||
LoraSPI->begin(settingsStrings[spidev].c_str());
|
|
||||||
} else {
|
|
||||||
SPI.begin(settingsStrings[spidev].c_str());
|
SPI.begin(settingsStrings[spidev].c_str());
|
||||||
LoraSPI = &SPI;
|
|
||||||
DisplaySPI = &SPI;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,6 +56,4 @@ enum { level_error, level_warn, level_info, level_debug };
|
|||||||
|
|
||||||
extern std::map<configNames, int> settingsMap;
|
extern std::map<configNames, int> settingsMap;
|
||||||
extern std::map<configNames, std::string> settingsStrings;
|
extern std::map<configNames, std::string> settingsStrings;
|
||||||
int initGPIOPin(int pinNum, std::string gpioChipname);
|
int initGPIOPin(int pinNum, std::string gpioChipname);
|
||||||
extern HardwareSPI *DisplaySPI;
|
|
||||||
extern HardwareSPI *LoraSPI;
|
|
Loading…
Reference in New Issue
Block a user