Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions variants/faketec_minix/PromicroBoard.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#include <Arduino.h>
#include <Wire.h>

#include "PromicroBoard.h"
#include "target.h"

void PromicroBoard::begin() {
NRF52Board::begin();
btn_prev_state = HIGH;

pinMode(PIN_VBAT_READ, INPUT);

#ifdef UI_HAS_JOYSTICK
pinMode(PIN_BACK_BTN, INPUT_PULLUP);
pinMode(JOYSTICK_LEFT, INPUT_PULLUP);
pinMode(JOYSTICK_RIGHT, INPUT_PULLUP);
pinMode(PIN_USER_BTN, INPUT_PULLUP);
joystick_left.begin();
joystick_right.begin();
user_btn.begin();
back_btn.begin();
#else if defined (BUTTON_PIN)
pinMode(BUTTON_PIN, INPUT_PULLUP);
#endif

#if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL)
Wire.setPins(PIN_BOARD_SDA, PIN_BOARD_SCL);
#endif

Wire.begin();

pinMode(SX126X_POWER_EN, OUTPUT);
digitalWrite(SX126X_POWER_EN, HIGH);
delay(10); // give sx1262 some time to power up
}
79 changes: 79 additions & 0 deletions variants/faketec_minix/PromicroBoard.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#pragma once

#include <MeshCore.h>
#include <Arduino.h>
#include <helpers/NRF52Board.h>

#define P_LORA_NSS 13 //P1.13 45
#define P_LORA_DIO_1 11 //P0.10 10
#define P_LORA_RESET 10 //P0.09 9
#define P_LORA_BUSY 16 //P0.29 29
#define P_LORA_MISO 15 //P0.02 2
#define P_LORA_SCLK 12 //P1.11 43
#define P_LORA_MOSI 14 //P1.15 47
#define SX126X_POWER_EN 22 //P0.13 13
#define SX126X_RXEN 2 //P0.17
#define SX126X_TXEN RADIOLIB_NC
#define SX126X_DIO2_AS_RF_SWITCH true
#define SX126X_DIO3_TCXO_VOLTAGE (1.8f)

#define PIN_VBAT_READ 17
#define ADC_MULTIPLIER (1.815f) // dependent on voltage divider resistors. TODO: more accurate battery tracking

class PromicroBoard : public NRF52BoardDCDC {
protected:
uint8_t btn_prev_state;
float adc_mult = ADC_MULTIPLIER;

public:
PromicroBoard() : NRF52Board("ProMicro_OTA") {}
void begin();

#define BATTERY_SAMPLES 8

uint16_t getBattMilliVolts() override {
analogReadResolution(12);

uint32_t raw = 0;
for (int i = 0; i < BATTERY_SAMPLES; i++) {
raw += analogRead(PIN_VBAT_READ);
}
raw = raw / BATTERY_SAMPLES;
return (adc_mult * raw);
}

bool setAdcMultiplier(float multiplier) override {
if (multiplier == 0.0f) {
adc_mult = ADC_MULTIPLIER;}
else {
adc_mult = multiplier;
}
return true;
}
float getAdcMultiplier() const override {
if (adc_mult == 0.0f) {
return ADC_MULTIPLIER;
} else {
return adc_mult;
}
}

const char* getManufacturerName() const override {
return "ProMicro DIY";
}

int buttonStateChanged() {
#ifdef BUTTON_PIN
uint8_t v = digitalRead(BUTTON_PIN);
if (v != btn_prev_state) {
btn_prev_state = v;
return (v == LOW) ? 1 : -1;
}
#endif
return 0;
}

void powerOff() override {
sd_power_system_off();
}
};
166 changes: 166 additions & 0 deletions variants/faketec_minix/platformio.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
[FaketecMiniX]
extends = nrf52_base
board = promicro_nrf52840
build_flags = ${nrf52_base.build_flags}
-I variants/faketec_minix
-D PROMICRO
-D USE_SX1262
-D RADIO_CLASS=CustomSX1262
-D WRAPPER_CLASS=CustomSX1262Wrapper
-D LORA_TX_POWER=22
-D SX126X_CURRENT_LIMIT=140
-D SX126X_RX_BOOSTED_GAIN=1
-D PIN_OLED_RESET=-1
-D ENV_INCLUDE_GPS=1
build_src_filter = ${nrf52_base.build_src_filter}
+<helpers/sensors>
+<../variants/faketec_minix>
lib_deps= ${nrf52_base.lib_deps}
adafruit/Adafruit SSD1306 @ ^2.5.13
stevemarple/MicroNMEA @ ^2.0.6
end2endzone/NonBlockingRTTTL@^1.3.0

[env:FaketecMiniX_repeater]
extends = FaketecMiniX
build_src_filter = ${FaketecMiniX.build_src_filter}
+<../examples/simple_repeater>
+<helpers/ui/SSD1306Display.cpp>
+<helpers/ui/MomentaryButton.cpp>
build_flags =
${FaketecMiniX.build_flags}
-D ADVERT_NAME='"Faketec-MiniX Repeater"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D MAX_NEIGHBOURS=50
-D DISPLAY_CLASS=SSD1306Display
; -D MESH_PACKET_LOGGING=1
; -D MESH_DEBUG=1
lib_deps = ${FaketecMiniX.lib_deps}
adafruit/RTClib @ ^2.1.3

[env:FaketecMiniX_repeater_bridge_rs232_serial1]
extends = FaketecMiniX
build_src_filter = ${FaketecMiniX.build_src_filter}
+<../examples/simple_repeater>
+<helpers/ui/SSD1306Display.cpp>
+<helpers/ui/MomentaryButton.cpp>
+<helpers/bridges/RS232Bridge.cpp>
build_flags =
${FaketecMiniX.build_flags}
-D ADVERT_NAME='"Faketec-MiniX RS232 Bridge"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D MAX_NEIGHBOURS=50
-D DISPLAY_CLASS=SSD1306Display
-D WITH_RS232_BRIDGE=Serial1
-D WITH_RS232_BRIDGE_RX=PIN_SERIAL1_RX
-D WITH_RS232_BRIDGE_TX=PIN_SERIAL1_TX
-UENV_INCLUDE_GPS
; -D BRIDGE_DEBUG=1
; -D MESH_PACKET_LOGGING=1
; -D MESH_DEBUG=1
lib_deps = ${FaketecMiniX.lib_deps}
adafruit/RTClib @ ^2.1.3

[env:FaketecMiniX_room_server]
extends = FaketecMiniX
build_src_filter = ${FaketecMiniX.build_src_filter}
+<../examples/simple_room_server>
+<helpers/ui/SSD1306Display.cpp>
+<helpers/ui/MomentaryButton.cpp>
build_flags = ${FaketecMiniX.build_flags}
-D ADVERT_NAME='"Faketec-MiniX Room"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D ROOM_PASSWORD='"hello"'
-D DISPLAY_CLASS=SSD1306Display
; -D MESH_PACKET_LOGGING=1
; -D MESH_DEBUG=1
lib_deps = ${FaketecMiniX.lib_deps}
adafruit/RTClib @ ^2.1.3

[env:FaketecMiniX_terminal_chat]
extends = FaketecMiniX
build_flags = ${FaketecMiniX.build_flags}
-D MAX_CONTACTS=100
-D MAX_GROUP_CHANNELS=1
; -D MESH_PACKET_LOGGING=1
; -D MESH_DEBUG=1
build_src_filter = ${FaketecMiniX.build_src_filter}
+<../examples/simple_secure_chat/main.cpp>
lib_deps = ${FaketecMiniX.lib_deps}
densaugeo/base64 @ ~1.4.0
adafruit/RTClib @ ^2.1.3

[env:FaketecMiniX_companion_radio_usb]
extends = FaketecMiniX
board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld
board_upload.maximum_size = 712704
build_flags = ${FaketecMiniX.build_flags}
-I examples/companion_radio/ui-new
-D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=40
-D DISPLAY_CLASS=SSD1306Display
-D PIN_BUZZER=0
-D PIN_VIBRATION=1
; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1
; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1
build_src_filter = ${FaketecMiniX.build_src_filter}
+<helpers/ui/SSD1306Display.cpp>
+<helpers/ui/MomentaryButton.cpp>
+<helpers/ui/buzzer.cpp>
+<helpers/ui/GenericVibration.cpp>
+<../examples/companion_radio/*.cpp>
+<../examples/companion_radio/ui-new/*.cpp>
lib_deps = ${FaketecMiniX.lib_deps}
adafruit/RTClib @ ^2.1.3
densaugeo/base64 @ ~1.4.0

[env:FaketecMiniX_companion_radio_ble]
extends = FaketecMiniX
board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld
board_upload.maximum_size = 712704
build_flags = ${FaketecMiniX.build_flags}
-I examples/companion_radio/ui-new
-D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=40
-D BLE_PIN_CODE=123456
-D BLE_DEBUG_LOGGING=1
-D OFFLINE_QUEUE_SIZE=256
-D DISPLAY_CLASS=SSD1306Display
-D PIN_BUZZER=0
-D PIN_VIBRATION=1
; -D MESH_PACKET_LOGGING=1
-D MESH_DEBUG=1
build_src_filter = ${FaketecMiniX.build_src_filter}
+<helpers/nrf52/SerialBLEInterface.cpp>
+<helpers/ui/SSD1306Display.cpp>
+<helpers/ui/MomentaryButton.cpp>
+<helpers/ui/buzzer.cpp>
+<helpers/ui/GenericVibration.cpp>
+<../examples/companion_radio/*.cpp>
+<../examples/companion_radio/ui-new/*.cpp>
lib_deps = ${FaketecMiniX.lib_deps}
adafruit/RTClib @ ^2.1.3
densaugeo/base64 @ ~1.4.0

[env:FaketecMiniX_sensor]
extends = FaketecMiniX
build_flags =
${FaketecMiniX.build_flags}
-D ADVERT_NAME='"Faketec-MiniX Sensor"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D DISPLAY_CLASS=SSD1306Display
; -D MESH_PACKET_LOGGING=1
; -D MESH_DEBUG=1
build_src_filter = ${FaketecMiniX.build_src_filter}
+<helpers/ui/SSD1306Display.cpp>
+<helpers/ui/MomentaryButton.cpp>
+<../examples/simple_sensor>
lib_deps =
${FaketecMiniX.lib_deps}
59 changes: 59 additions & 0 deletions variants/faketec_minix/target.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#include <Arduino.h>
#include "target.h"
#include <helpers/ArduinoHelpers.h>

PromicroBoard board;

RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI);

WRAPPER_CLASS radio_driver(radio, board);

VolatileRTCClock fallback_clock;
AutoDiscoverRTCClock rtc_clock(fallback_clock);
#if ENV_INCLUDE_GPS
#include <helpers/sensors/MicroNMEALocationProvider.h>
MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1, &rtc_clock);
EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea);
#else
EnvironmentSensorManager sensors;
#endif

#ifdef DISPLAY_CLASS
DISPLAY_CLASS display;
#ifdef UI_HAS_JOYSTICK
MomentaryButton user_btn(PIN_USER_BTN, 1000, true, true);
MomentaryButton joystick_left(JOYSTICK_LEFT, 1000, true, true);
MomentaryButton joystick_right(JOYSTICK_RIGHT, 1000, true, true);
MomentaryButton back_btn(PIN_BACK_BTN, 1000, true, true, true);
#else
MomentaryButton user_btn(PIN_USER_BTN, 1000, true, true);
#endif
#endif

bool radio_init() {
rtc_clock.begin(Wire);

return radio.std_init(&SPI);
}

uint32_t radio_get_rng_seed() {
return radio.random(0x7FFFFFFF);
}

void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) {
radio.setFrequency(freq);
radio.setSpreadingFactor(sf);
radio.setBandwidth(bw);
radio.setCodingRate(cr);
}

void radio_set_tx_power(int8_t dbm) {
radio.setOutputPower(dbm);
}

mesh::LocalIdentity radio_new_identity() {
RadioNoiseListener rng(radio);
return mesh::LocalIdentity(&rng); // create new random identity
}


38 changes: 38 additions & 0 deletions variants/faketec_minix/target.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#pragma once

#define RADIOLIB_STATIC_ONLY 1
#include <RadioLib.h>
#include <helpers/radiolib/RadioLibWrappers.h>
#include <PromicroBoard.h>
#include <helpers/radiolib/CustomSX1262Wrapper.h>
#include <helpers/AutoDiscoverRTCClock.h>
#ifdef DISPLAY_CLASS
#include <helpers/ui/SSD1306Display.h>
#include <helpers/ui/MomentaryButton.h>
#endif

#include <helpers/sensors/EnvironmentSensorManager.h>

extern PromicroBoard board;
extern WRAPPER_CLASS radio_driver;
extern AutoDiscoverRTCClock rtc_clock;
extern EnvironmentSensorManager sensors;

#ifdef DISPLAY_CLASS
extern DISPLAY_CLASS display;
#ifdef UI_HAS_JOYSTICK
extern MomentaryButton user_btn;
extern MomentaryButton joystick_left;
extern MomentaryButton joystick_right;
extern MomentaryButton back_btn;
#else
extern MomentaryButton user_btn;
#endif
#endif

bool radio_init();
uint32_t radio_get_rng_seed();
void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr);
void radio_set_tx_power(int8_t dbm);
mesh::LocalIdentity radio_new_identity();

Loading