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
59 changes: 59 additions & 0 deletions boards/muziworks-duo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
{
"build": {
"arduino": {
"ldscript": "nrf52840_s140_v6.ld"
},
"core": "nRF5",
"cpu": "cortex-m4",
"extra_flags": "-DARDUINO_MUZIWORKS_DUO -DNRF52840_XXAA",
"f_cpu": "64000000L",
"hwids": [
["0x239A", "0x8029"],
["0x239A", "0x0029"],
["0x239A", "0x002A"],
["0x239A", "0x802A"]
],
"usb_product": "MuziWorks-Duo-BOOT",
"mcu": "nrf52840",
"variant": "muziworks_duo",
"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",
"svd_path": "nrf52840.svd",
"openocd_target": "nrf52.cfg"
},
"frameworks": ["arduino"],
"name": "MuziWorks Base Duo",
"upload": {
"maximum_ram_size": 235520,
"maximum_size": 811008,
"speed": 115200,
"protocol": "nrfutil",
"protocols": [
"jlink",
"nrfjprog",
"nrfutil",
"stlink",
"cmsis-dap",
"blackmagic"
],
"use_1200bps_touch": true,
"require_upload_port": true,
"wait_for_upload_port": true
},
"url": "https://www.muziworks.com",
"vendor": "MuziWorks"
}
35 changes: 35 additions & 0 deletions src/helpers/radiolib/CustomLR1121.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#pragma once

#include <RadioLib.h>
#include "MeshCore.h"

class CustomLR1121 : public LR1121 {
bool _rx_boosted = false;

public:
CustomLR1121(Module *mod) : LR1121(mod) { }

size_t getPacketLength(bool update) override {
size_t len = LR1121::getPacketLength(update);
if (len == 0 && getIrqStatus() & RADIOLIB_LR11X0_IRQ_HEADER_ERR) {
MESH_DEBUG_PRINTLN("LR1121: got header err, calling standby()");
standby();
}
return len;
}

float getFreqMHz() const { return freqMHz; }

int16_t setRxBoostedGainMode(bool en) {
_rx_boosted = en;
return LR1121::setRxBoostedGainMode(en);
}

bool getRxBoostedGainMode() const { return _rx_boosted; }

bool isReceiving() {
uint16_t irq = getIrqStatus();
bool detected = ((irq & RADIOLIB_LR11X0_IRQ_SYNC_WORD_HEADER_VALID) || (irq & RADIOLIB_LR11X0_IRQ_PREAMBLE_DETECTED));
return detected;
}
};
34 changes: 34 additions & 0 deletions src/helpers/radiolib/CustomLR1121Wrapper.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#pragma once

#include "CustomLR1121.h"
#include "RadioLibWrappers.h"
#include "LR11x0Reset.h"

class CustomLR1121Wrapper : public RadioLibWrapper {
public:
CustomLR1121Wrapper(CustomLR1121& radio, mesh::MainBoard& board) : RadioLibWrapper(radio, board) { }
void doResetAGC() override { lr11x0ResetAGC((LR11x0 *)_radio, ((CustomLR1121 *)_radio)->getFreqMHz()); }
bool isReceivingPacket() override {
return ((CustomLR1121 *)_radio)->isReceiving();
}
float getCurrentRSSI() override {
float rssi = -110;
((CustomLR1121 *)_radio)->getRssiInst(&rssi);
return rssi;
}

void onSendFinished() override {
RadioLibWrapper::onSendFinished();
_radio->setPreambleLength(16); // overcomes weird issues with small and big pkts
}

float getLastRSSI() const override { return ((CustomLR1121 *)_radio)->getRSSI(); }
float getLastSNR() const override { return ((CustomLR1121 *)_radio)->getSNR(); }

void setRxBoostedGainMode(bool en) override {
((CustomLR1121 *)_radio)->setRxBoostedGainMode(en);
}
bool getRxBoostedGainMode() const override {
return ((CustomLR1121 *)_radio)->getRxBoostedGainMode();
}
};
28 changes: 28 additions & 0 deletions variants/muziworks_duo/MuziWorksDuoBoard.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#ifdef MUZIWORKS_DUO

#include "MuziWorksDuoBoard.h"

#include <Arduino.h>
#include <Wire.h>

void MuziWorksDuoBoard::begin() {
NRF52BoardDCDC::begin();

pinMode(PIN_VBAT_READ, INPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);

// LEDs off (active LOW)
digitalWrite(LED_GREEN, !LED_STATE_ON);
digitalWrite(LED_BLUE, LED_STATE_ON);

#if defined(PIN_WIRE_SDA) && defined(PIN_WIRE_SCL)
Wire.setPins(PIN_WIRE_SDA, PIN_WIRE_SCL);
#endif

Wire.begin();

delay(10);
}

#endif
42 changes: 42 additions & 0 deletions variants/muziworks_duo/MuziWorksDuoBoard.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#pragma once

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

#ifdef MUZIWORKS_DUO

#define PIN_VBAT_READ BATTERY_PIN
#define BATTERY_SAMPLES 8

class MuziWorksDuoBoard : public NRF52BoardDCDC {
public:
MuziWorksDuoBoard() : NRF52Board("MuziWorksDuo_OTA") {}
void begin();

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_MULTIPLIER * raw);
}

const char* getManufacturerName() const override {
return "MuziWorks Duo";
}

#if defined(LED_GREEN)
void onBeforeTransmit() override {
digitalWrite(LED_GREEN, LED_STATE_ON);
}
void onAfterTransmit() override {
digitalWrite(LED_GREEN, !LED_STATE_ON);
}
#endif
};

#endif
113 changes: 113 additions & 0 deletions variants/muziworks_duo/platformio.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
; ----------------- MuziWorks Base Duo (nRF52840 + LR1121) ---------------------
[muziworks_duo]
extends = nrf52_base
board = muziworks-duo
board_build.ldscript = boards/nrf52840_s140_v6.ld
build_flags = ${nrf52_base.build_flags}
${sensor_base.build_flags}
-I src/helpers/nrf52
-I lib/nrf52/s140_nrf52_6.1.1_API/include
-I lib/nrf52/s140_nrf52_6.1.1_API/include/nrf52
-I variants/muziworks_duo
-D NRF52_PLATFORM
-D MUZIWORKS_DUO
-D ENV_INCLUDE_GPS=0
-D CONFIG_NFCT_PINS_AS_GPIOS=1
-D RADIO_CLASS=CustomLR1121
-D WRAPPER_CLASS=CustomLR1121Wrapper
-D LORA_TX_POWER=22
-D MAX_LORA_TX_POWER=22
-D RX_BOOSTED_GAIN=true
-D RF_SWITCH_TABLE
-D P_LORA_DIO_1=40
-D P_LORA_RESET=42
-D P_LORA_BUSY=43
-D P_LORA_NSS=44
-D P_LORA_SCLK=45
-D P_LORA_MOSI=46
-D P_LORA_MISO=47
-D LR11X0_DIO_AS_RF_SWITCH=true
-D LR11X0_DIO3_TCXO_VOLTAGE=3.0
build_src_filter = ${nrf52_base.build_src_filter}
+<helpers/*.cpp>
+<helpers/sensors>
+<../variants/muziworks_duo>
debug_tool = jlink
upload_protocol = nrfutil
lib_deps = ${nrf52_base.lib_deps}
${sensor_base.lib_deps}

[env:muziworks_duo_repeater]
extends = muziworks_duo
build_flags =
${muziworks_duo.build_flags}
-D ADVERT_NAME='"MuziDuo Repeater"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D MAX_NEIGHBOURS=50
build_src_filter = ${muziworks_duo.build_src_filter}
+<../examples/simple_repeater/*.cpp>

[env:muziworks_duo_room_server]
extends = muziworks_duo
build_flags =
${muziworks_duo.build_flags}
-D ADVERT_NAME='"MuziDuo Room"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D ROOM_PASSWORD='"hello"'
build_src_filter = ${muziworks_duo.build_src_filter}
+<../examples/simple_room_server/*.cpp>

[env:muziworks_duo_companion_radio_usb]
extends = muziworks_duo
board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld
board_upload.maximum_size = 708608
build_flags =
${muziworks_duo.build_flags}
-D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=40
-D OFFLINE_QUEUE_SIZE=256
build_src_filter = ${muziworks_duo.build_src_filter}
+<helpers/nrf52/*.cpp>
+<../examples/companion_radio/*.cpp>
lib_deps =
${muziworks_duo.lib_deps}
densaugeo/base64 @ ~1.4.0

[env:muziworks_duo_terminal_chat]
extends = muziworks_duo
build_flags =
${muziworks_duo.build_flags}
-D ADVERT_NAME='"MuziDuo Chat"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D ROOM_PASSWORD='"hello"'
-D MAX_CONTACTS=100
-D MAX_GROUP_CHANNELS=8
build_src_filter = ${muziworks_duo.build_src_filter}
+<../examples/simple_secure_chat/main.cpp>
lib_deps =
${muziworks_duo.lib_deps}
densaugeo/base64 @ ~1.4.0

[env:muziworks_duo_companion_radio_ble]
extends = muziworks_duo
board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld
board_upload.maximum_size = 708608
build_flags =
${muziworks_duo.build_flags}
-D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=40
-D BLE_PIN_CODE=123456
-D QSPIFLASH=1
-D OFFLINE_QUEUE_SIZE=256
build_src_filter = ${muziworks_duo.build_src_filter}
+<helpers/nrf52/SerialBLEInterface.cpp>
+<../examples/companion_radio/*.cpp>
lib_deps =
${muziworks_duo.lib_deps}
densaugeo/base64 @ ~1.4.0
Loading