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
7 changes: 7 additions & 0 deletions mLRS/Common/hal/esp/esp-device_conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -312,3 +312,10 @@
#define DEVICE_HAS_SX128x
#define FREQUENCY_BAND_2P4_GHZ
#endif

#ifdef TX_ELRS_SENDUWING_INTERNAL_2400_ESP32
#define DEVICE_NAME "SW Int 2.4G"
#define DEVICE_IS_TRANSMITTER
#define DEVICE_HAS_SX128x
#define FREQUENCY_BAND_2P4_GHZ
#endif
3 changes: 3 additions & 0 deletions mLRS/Common/hal/esp/esp-hal.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,3 +170,6 @@
#include "tx-hal-flysky-int-pa01-2400-esp32s3.h"
#endif

#ifdef TX_ELRS_SENDUWING_INTERNAL_2400_ESP32
#include "tx-hal-senduwing-int-2400-esp32.h"
#endif
173 changes: 173 additions & 0 deletions mLRS/Common/hal/esp/tx-hal-senduwing-int-2400-esp32.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
//*******************************************************
// Copyright (c) MLRS project
// GPL3
// https://www.gnu.org/licenses/gpl-3.0.de.html
//*******************************************************
// hal
//*******************************************************

/*
Flashing ESP8285 backpack WiFi bridge:
- Board: Generic ESP8266 Module, define LED_IO 16
- First flash can be via web browser/ELRS WiFi
- Need ELRS version of esptool from https://github.com/ExpressLRS/Backpack
- Power up radio, plug in USB, select VCP
- On Linux, run something like "Backpack/python/external/esptool/esptool.py --passthrough --port /dev/ttyACM0 --baud 115200 --before etx --after hard_reset write_flash 0x0000 ~/Arduino/build/mlrs-wireless-bridge-esp8266.ino.bin

Flashing ESP32 module:
- Need ELRS python folder from https://github.com/ExpressLRS/ExpressLRS
- Power up radio, plug in USB, select VCP
- On Linux, run something like "python ExpressLRS/src/python/ETXinitPassthrough.py"
- Use Visual Studio Code or esptool (or maybe web flasher?) to flash via ACM serial port.

Set the Internal RF to CRSF 400k baud in SYS->HARDWARE on EdgeTx radio
*/

//-------------------------------------------------------
// ESP32, SenduWing Tx, Internal SX1280 2400, for H17
//-------------------------------------------------------

#define DEVICE_HAS_JRPIN5
#define DEVICE_HAS_SINGLE_LED
#define DEVICE_HAS_NO_SERIAL
#define DEVICE_HAS_NO_COM
#define DEVICE_HAS_ESP_WIFI_BRIDGE_ESP8266
#define DEVICE_HAS_ESP_WIFI_BRIDGE_CONFIGURE
#define DEVICE_HAS_ESP_WIFI_BRIDGE_W_PASSTHRU_VIA_JRPIN5
#define DEVICE_HAS_NO_DEBUG


//-- UARTS
// UARTB = serial port
// UARTC (or USB) = com (CLI) port
// UARTD = serial2 port or wireless bridge port
// UART = JR bay pin5, full duplex CRSF serial connection to radio - code still calls it JR bay pin5
// UARTE = in port, SBus or whatever
// UARTF or SWUART = debug port

#define UARTD_USE_SERIAL // serial2 or wireless bridge
#define UARTD_BAUD TX_SERIAL_BAUDRATE
#define UARTD_USE_TX_IO IO_P22
#define UARTD_USE_RX_IO IO_P21
#define UARTD_TXBUFSIZE TX_SERIAL_TXBUFSIZE
#define UARTD_RXBUFSIZE TX_SERIAL_RXBUFSIZE

#define UART_USE_SERIAL1 // full duplex CRSF/MBridge (JR pin5)
#define UART_BAUD 400000
#define UART_USE_TX_IO IO_P1
#define UART_USE_RX_IO IO_P3
#define UART_TXBUFSIZE 0 // TX_SERIAL_TXBUFSIZE
#define UART_RXBUFSIZE 0 // TX_SERIAL_RXBUFSIZE // 512

#define JR_PIN5_FULL_DUPLEX // internal module

#define UARTF_USE_SERIAL2 // debug
#define UARTF_BAUD 115200
#define UARTF_USE_TX_IO -1 // Or choose another unused pin/test pad
#define UARTF_USE_RX_IO -1
#define UARTF_TXBUFSIZE 512


//-- SX1: SX12xx & SPI

#define SPI_CS_IO IO_P25
#define SPI_MISO IO_P14
#define SPI_MOSI IO_P27
#define SPI_SCK IO_P26
#define SPI_FREQUENCY 18000000L
#define SX_RESET IO_P4
#define SX_DIO IO_P13
#define SX_BUSY IO_P15
#define SX_TX_EN IO_P32
#define SX_RX_EN IO_P33

IRQHANDLER(void SX_DIO_EXTI_IRQHandler(void);)

void sx_init_gpio(void)
{
gpio_init(SX_RESET, IO_MODE_OUTPUT_PP_HIGH);
gpio_init(SX_DIO, IO_MODE_INPUT_ANALOG);
gpio_init(SX_BUSY, IO_MODE_INPUT_PU);
gpio_init(SX_TX_EN, IO_MODE_OUTPUT_PP_LOW);
gpio_init(SX_RX_EN, IO_MODE_OUTPUT_PP_LOW);
}

IRAM_ATTR bool sx_busy_read(void) { return (gpio_read_activehigh(SX_BUSY)) ? true : false; }

IRAM_ATTR void sx_amp_transmit(void)
{
gpio_low(SX_RX_EN);
gpio_high(SX_TX_EN);
}

IRAM_ATTR void sx_amp_receive(void)
{
gpio_low(SX_TX_EN);
gpio_high(SX_RX_EN);
}

void sx_dio_enable_exti_isr(void) { attachInterrupt(SX_DIO, SX_DIO_EXTI_IRQHandler, RISING); }
void sx_dio_init_exti_isroff(void) { detachInterrupt(SX_DIO); }
IRAM_ATTR void sx_dio_exti_isr_clearflag(void) {}


//-- Button

void button_init(void) {}
IRAM_ATTR bool button_pressed(void) { return false; }


//-- LEDs

//#define LED_RED -1

void leds_init(void)
{
//gpio_init(LED_RED, IO_MODE_OUTPUT_PP_HIGH);
}

IRAM_ATTR void led_red_off(void) { }
IRAM_ATTR void led_red_on(void) { }
IRAM_ATTR void led_red_toggle(void) { }


//-- ESP32 Wifi Bridge

#define ESP_RESET IO_P20 // backpack_en
#define ESP_GPIO0 IO_P19 // backpack_boot inverted?
#define ESP_BOOTPIN IO_P0 // will always be IO_P0

uint8_t esp_bootpin()
{
return gpio_read_activelow(ESP_BOOTPIN);
}

void esp_init(void)
{
// no need to configure ESP_BOOTPIN which will always be IO_P0 and is pull-up by default
gpio_init(ESP_GPIO0, IO_MODE_OUTPUT_PP_LOW); // high -> esp will start in bootloader mode
gpio_init(ESP_RESET, IO_MODE_OUTPUT_PP_LOW); // low -> esp is in reset
}

IRAM_ATTR void esp_reset_high(void) { gpio_high(ESP_RESET); }
IRAM_ATTR void esp_reset_low(void) { gpio_low(ESP_RESET); }

IRAM_ATTR void esp_gpio0_high(void) { gpio_low(ESP_GPIO0); }
IRAM_ATTR void esp_gpio0_low(void) { gpio_high(ESP_GPIO0); }


//-- POWER
// Need to confirm all of this!

#define POWER_GAIN_DBM 26 // gain of a PA stage if present
#define POWER_SX1280_MAX SX1280_POWER_0_DBM // maximum allowed sx power
#define POWER_USE_DEFAULT_RFPOWER_CALC

#define RFPOWER_DEFAULT 0 // index into rfpower_list array

const rfpower_t rfpower_list[] = {
{ .dbm = POWER_10_DBM, .mW = 10 },
{ .dbm = POWER_17_DBM, .mW = 50 },
{ .dbm = POWER_20_DBM, .mW = 100 },
{ .dbm = POWER_24_DBM, .mW = 250 },
};
11 changes: 11 additions & 0 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -563,3 +563,14 @@ build_flags =
-D TX_ELRS_FLYSKY_INTERNAL_PA01_2400_ESP32S3
extra_scripts = tools/vscode/build_env_etx.py


[env:tx-senduwing-internal-2400] ; H17
extends = env_common_tx_esp32
board = esp32dev
build_src_filter =
${env_common_tx_esp32.build_src_filter}
+<modules/sx12xx-lib/src/sx128x.cpp>
build_flags =
${env_common_tx_esp32.build_flags}
-D TX_ELRS_SENDUWING_INTERNAL_2400_ESP32
extra_scripts = tools/vscode/build_env_etx.py