feat: support for HelloRadioSky V16 (#5317)

Co-authored-by: Peter Feerick <pfeerick@users.noreply.github.com>
This commit is contained in:
richardclli
2024-09-02 09:45:59 +10:00
committed by GitHub
co-authored by Peter Feerick
parent 4426f56cb9
commit 17bf9dc813
45 changed files with 1062 additions and 46 deletions
+1
View File
@@ -95,6 +95,7 @@ body:
- FrSky X10 Express / X10S Express (ACCESS)
- FrSky X12
- FrSky X-Lite / S / Pro
- HelloRadioSky V16
- Jumper T12
- Jumper T14
- Jumper T16
+1
View File
@@ -106,6 +106,7 @@ jobs:
- tx12;tx12mk2;boxer
- tx16s
- f16
- v16
- x10;x10express
- x12s
- x7;x7access
+1
View File
@@ -26,6 +26,7 @@ jobs:
- tx12;tx12mk2;boxer
- tx16s
- f16
- v16
- x10;x10express
- x12s
- x7;x7access
+2
View File
@@ -338,6 +338,8 @@ elseif(PCB STREQUAL X10 AND PCBREV STREQUAL TX16S)
set(FLAVOUR tx16s)
elseif(PCB STREQUAL X10 AND PCBREV STREQUAL F16)
set(FLAVOUR f16)
elseif(PCB STREQUAL X10 AND PCBREV STREQUAL V16)
set(FLAVOUR v16)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL T14)
set(FLAVOUR t14)
elseif(PCB STREQUAL X10 AND PCBREV STREQUAL T15)
+9
View File
@@ -336,6 +336,15 @@
<file>images/simulator/Pocket/right.png</file>
<file>images/simulator/Pocket/top.png</file>
<file>images/simulator/Pocket/bottom.png</file>
<file>images/simulator/V16/left.png</file>
<file>images/simulator/V16/left_pagedn.png</file>
<file>images/simulator/V16/left_pageup.png</file>
<file>images/simulator/V16/left_rtn.png</file>
<file>images/simulator/V16/left_sys.png</file>
<file>images/simulator/V16/left_tele.png</file>
<file>images/simulator/V16/right.png</file>
<file>images/simulator/V16/right_ent.png</file>
<file>images/simulator/V16/right_mdl.png</file>
<file>images/wizard/ailerons.png</file>
<file>images/wizard/airbrakes.png</file>
<file>images/wizard/elevons.png</file>
+5
View File
@@ -213,6 +213,7 @@ int Boards::getEEpromSize(Board::Type board)
case BOARD_FLYSKY_EL18:
case BOARD_FLYSKY_PL18:
case BOARD_FATFISH_F16:
case BOARD_HELLORADIOSKY_V16:
return 0;
default:
return 0;
@@ -267,6 +268,7 @@ int Boards::getFlashSize(Type board)
case BOARD_FLYSKY_EL18:
case BOARD_FLYSKY_PL18:
case BOARD_FATFISH_F16:
case BOARD_HELLORADIOSKY_V16:
return FSIZE_HORUS;
case BOARD_UNKNOWN:
return FSIZE_MAX;
@@ -581,6 +583,8 @@ QString Boards::getBoardName(Board::Type board)
return "iFlight Commando 8";
case BOARD_FATFISH_F16:
return "Fatfish F16";
case BOARD_HELLORADIOSKY_V16:
return "HelloRadioSky V16";
default:
return CPN_STR_UNKNOWN_ITEM;
}
@@ -694,6 +698,7 @@ int Boards::getDefaultInternalModules(Board::Type board)
case BOARD_JUMPER_T20V2:
case BOARD_JUMPER_TPROS:
case BOARD_FATFISH_F16:
case BOARD_HELLORADIOSKY_V16:
return (int)MODULE_TYPE_CROSSFIRE;
case BOARD_FLYSKY_NV14:
+7 -1
View File
@@ -87,6 +87,7 @@ namespace Board {
BOARD_RADIOMASTER_POCKET,
BOARD_JUMPER_T20V2,
BOARD_FATFISH_F16,
BOARD_HELLORADIOSKY_V16,
BOARD_TYPE_COUNT,
BOARD_TYPE_MAX = BOARD_TYPE_COUNT - 1
};
@@ -514,9 +515,14 @@ inline bool IS_FATFISH_F16(Board::Type board)
return board == Board::BOARD_FATFISH_F16;
}
inline bool IS_HELLORADIOSKY_V16(Board::Type board)
{
return board == Board::BOARD_HELLORADIOSKY_V16;
}
inline bool IS_FAMILY_T16(Board::Type board)
{
return board == Board::BOARD_JUMPER_T15 || board == Board::BOARD_JUMPER_T16 || board == Board::BOARD_RADIOMASTER_TX16S || board == Board::BOARD_JUMPER_T18 || board == Board::BOARD_FATFISH_F16;
return board == Board::BOARD_JUMPER_T15 || board == Board::BOARD_JUMPER_T16 || board == Board::BOARD_RADIOMASTER_TX16S || board == Board::BOARD_JUMPER_T18 || board == Board::BOARD_FATFISH_F16 || board == Board::BOARD_HELLORADIOSKY_V16;
}
inline bool IS_FAMILY_T12(Board::Type board)
@@ -143,6 +143,8 @@ const char * OpenTxEepromInterface::getName()
return "EdgeTX for iFlight Commando 8";
case BOARD_FATFISH_F16:
return "EdgeTX for Fatfish F16";
case BOARD_HELLORADIOSKY_V16:
return "EdgeTX for HelloRadioSky V16";
default:
return "Board is unknown to EdgeTX";
}
@@ -1390,6 +1392,13 @@ void registerOpenTxFirmwares()
registerOpenTxFirmware(firmware);
addOpenTxRfOptions(firmware, EU + FLEX);
/* HelloRadioSky V16 board */
firmware = new OpenTxFirmware(FIRMWAREID("v16"), Firmware::tr("HelloRadioSky V16"), BOARD_HELLORADIOSKY_V16);
addOpenTxFrskyOptions(firmware);
addOpenTxRfOptions(firmware, FLEX);
firmware->addOptionsGroup({opt_bt, opt_internal_gps});
registerOpenTxFirmware(firmware);
/* iFlight Commando8 board */
firmware = new OpenTxFirmware(FIRMWAREID("commando8"), QCoreApplication::translate("Firmware", "iFlight Commando8"), BOARD_IFLIGHT_COMMANDO8);
addOpenTxCommonOptions(firmware);
Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

+1
View File
@@ -55,6 +55,7 @@ set(${PROJECT_NAME}_SRCS
simulateduiwidgetT8.cpp
simulateduiwidgetTX12.cpp
simulateduiwidgetTX16S.cpp
simulateduiwidgetV16.cpp
simulateduiwidgetX10.cpp
simulateduiwidgetX12.cpp
simulateduiwidgetX7.cpp
@@ -162,6 +162,7 @@ namespace Ui {
class SimulatedUIWidgetNV14;
class SimulatedUIWidgetEL18;
class SimulatedUIWidgetPL18;
class SimulatedUIWidgetV16;
}
class SimulatedUIWidget9X: public SimulatedUIWidget
@@ -540,4 +541,16 @@ class SimulatedUIWidgetPL18: public SimulatedUIWidget
Ui::SimulatedUIWidgetPL18 * ui;
};
class SimulatedUIWidgetV16: public SimulatedUIWidget
{
Q_OBJECT
public:
explicit SimulatedUIWidgetV16(SimulatorInterface * simulator, QWidget * parent = nullptr);
virtual ~SimulatedUIWidgetV16();
private:
Ui::SimulatedUIWidgetV16 * ui;
};
#endif // SIMULATEDUIWIDGET_H
@@ -0,0 +1,69 @@
/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "simulateduiwidget.h"
#include "ui_simulateduiwidgetV16.h"
SimulatedUIWidgetV16::SimulatedUIWidgetV16(SimulatorInterface *simulator, QWidget * parent):
SimulatedUIWidget(simulator, parent),
ui(new Ui::SimulatedUIWidgetV16)
{
RadioUiAction * act;
ui->setupUi(this);
// add actions in order of appearance on the help menu
act = new RadioUiAction(KEY_SYS, QList<int>() << Qt::Key_Left, SIMU_STR_HLP_KEY_LFT, SIMU_STR_HLP_ACT_SYS);
addRadioWidget(ui->left->addArea(QRect(60, 10, 81, 51), "V16/left_sys.png", act));
act = new RadioUiAction(KEY_EXIT, QList<int>() << Qt::Key_Down << Qt::Key_Delete << Qt::Key_Escape << Qt::Key_Backspace,
SIMU_STR_HLP_KEY_DN % "<br>" % SIMU_STR_HLP_KEYS_EXIT, SIMU_STR_HLP_ACT_RTN);
addRadioWidget(ui->left->addArea(QRect(75, 105, 60, 30), "V16/left_rtn.png", act));
act = new RadioUiAction(KEY_PAGEDN, QList<int>() << Qt::Key_PageDown, SIMU_STR_HLP_KEY_PGDN, SIMU_STR_HLP_ACT_PGDN);
addRadioWidget(ui->left->addArea(QRect(75, 160, 60, 30), "V16/left_pagedn.png", act));
act = new RadioUiAction(KEY_PAGEUP, QList<int>() << Qt::Key_PageUp, SIMU_STR_HLP_KEY_PGUP, SIMU_STR_HLP_ACT_PGUP);
addRadioWidget(ui->left->addArea(QRect(75, 220, 60, 30), "V16/left_pageup.png", act));
act = new RadioUiAction(KEY_TELE, QList<int>() << Qt::Key_Right, SIMU_STR_HLP_KEY_RGT, SIMU_STR_HLP_ACT_TELE);
addRadioWidget(ui->left->addArea(QRect(75, 280, 80, 35), "V16/left_tele.png", act));
m_mouseMidClickAction = new RadioUiAction(KEY_ENTER, QList<int>() << Qt::Key_Enter << Qt::Key_Return, SIMU_STR_HLP_KEYS_ACTIVATE, SIMU_STR_HLP_ACT_ROT_DN);
addRadioWidget(ui->right->addArea(QRect(40, 130, 51, 131), "V16/right_ent.png", m_mouseMidClickAction));
act = new RadioUiAction(KEY_MODEL, QList<int>() << Qt::Key_Up, SIMU_STR_HLP_KEY_UP, SIMU_STR_HLP_ACT_MDL);
addRadioWidget(ui->right->addArea(QRect(30, 10, 81, 51), "V16/right_mdl.png", act));
m_scrollUpAction = new RadioUiAction(-1, QList<int>() << Qt::Key_Minus, SIMU_STR_HLP_KEY_MIN % "|" % SIMU_STR_HLP_MOUSE_UP, SIMU_STR_HLP_ACT_ROT_LFT);
m_scrollDnAction = new RadioUiAction(-1, QList<int>() << Qt::Key_Plus << Qt::Key_Equal, SIMU_STR_HLP_KEY_PLS % "|" % SIMU_STR_HLP_MOUSE_DN, SIMU_STR_HLP_ACT_ROT_RGT);
connectScrollActions();
m_backlightColors << QColor(47, 123, 227);
setLcd(ui->lcd);
}
SimulatedUIWidgetV16::~SimulatedUIWidgetV16()
{
delete ui;
}
@@ -0,0 +1,151 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SimulatedUIWidgetV16</class>
<widget class="QWidget" name="SimulatedUIWidgetV16">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>829</width>
<height>320</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>829</width>
<height>320</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>829</width>
<height>355</height>
</size>
</property>
<widget class="ButtonsWidget" name="right" native="true">
<property name="geometry">
<rect>
<x>658</x>
<y>0</y>
<width>167</width>
<height>320</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>167</width>
<height>320</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>167</width>
<height>320</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/V16/right.png)</string>
</property>
</widget>
<widget class="ButtonsWidget" name="left" native="true">
<property name="geometry">
<rect>
<x>1</x>
<y>0</y>
<width>175</width>
<height>320</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>175</width>
<height>320</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>175</width>
<height>320</height>
</size>
</property>
<property name="mouseTracking">
<bool>true</bool>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/V16/left.png);</string>
</property>
</widget>
<widget class="LcdWidget" name="lcd" native="true">
<property name="geometry">
<rect>
<x>177</x>
<y>24</y>
<width>480</width>
<height>272</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>480</width>
<height>272</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>480</width>
<height>272</height>
</size>
</property>
<property name="font">
<font>
<pointsize>5</pointsize>
</font>
</property>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>LcdWidget</class>
<extends>QWidget</extends>
<header>lcdwidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>ButtonsWidget</class>
<extends>QWidget</extends>
<header>buttonswidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../companion.qrc"/>
</resources>
<connections/>
</ui>
@@ -159,6 +159,9 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato
case Board::BOARD_FLYSKY_PL18:
radioUiWidget = new SimulatedUIWidgetPL18(simulator, this);
break;
case Board::BOARD_HELLORADIOSKY_V16:
radioUiWidget = new SimulatedUIWidgetV16(simulator, this);
break;
default:
radioUiWidget = new SimulatedUIWidget9X(simulator, this);
break;
+1
View File
@@ -20,6 +20,7 @@
["FrSky X9 Lite S", "x9lites-"],
["FrSky X-Lite", "xlite-"],
["FrSky X-Lite S", "xlites-"],
["HelloRadioSky V16", "v16-"],
["iFlight Commando 8", "commando8-"],
["Jumper T12", "t12-"],
["Jumper T12 MAX", "t12max-"],
+1 -1
View File
@@ -368,7 +368,7 @@ void audioTask(void * pdata)
setSampleRate(AUDIO_SAMPLE_RATE);
#if defined(PCBX12S) || defined(RADIO_TX16S) || defined(RADIO_F16)
#if defined(PCBX12S) || defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
// The audio amp needs ~2s to start
RTOS_WAIT_MS(1000); // 1s
#endif
@@ -43,7 +43,11 @@ static StaticTimer_t rgbLedTimerBuffer;
void rgbSetLedColor(uint8_t led, uint8_t r, uint8_t g, uint8_t b)
{
#if defined(SIXPOS_SWITCH_INDEX)
ws2812_set_color(led + 6, r, g, b);
#else
ws2812_set_color(led, r, g, b);
#endif
}
void rgbLedColorApply()
+8
View File
@@ -65,6 +65,10 @@
#include "telemetry/crossfire.h"
#endif
#if defined(CSD203_SENSOR)
#include "csd203_sensor.h"
#endif
#if !defined(SIMU)
#include <malloc.h>
#endif
@@ -209,6 +213,10 @@ void timer_10ms()
}
#endif
#if defined(CSD203_SENSOR) && !defined(SIMU)
readCSD203();
#endif
telemetryInterrupt10ms();
// These moved here from evalFlightModeMixes() to improve beep trigger reliability.
+13
View File
@@ -29,6 +29,10 @@ const etx_hal_adc_inputs_t* _hal_adc_inputs = nullptr;
static uint16_t adcValues[MAX_ANALOG_INPUTS] __DMA;
#if defined(CSD203_SENSOR)
extern uint16_t getCSD203BatteryVoltage(void);
#endif
bool adcInit(const etx_hal_adc_driver_t* driver)
{
// If there is an init function, it MUST succeed
@@ -243,6 +247,11 @@ uint16_t getRTCBatteryVoltage()
uint16_t getAnalogValue(uint8_t index)
{
if (index >= MAX_ANALOG_INPUTS) return 0;
#if defined(SIXPOS_SWITCH_INDEX) && !defined(SIMU)
if (index == SIXPOS_SWITCH_INDEX)
return getSixPosAnalogValue(adcValues[index]);
else
#endif
return adcValues[index];
}
@@ -297,6 +306,9 @@ tmr10ms_t jitterResetTime = 0;
uint16_t getBatteryVoltage()
{
#if defined(CSD203_SENSOR) && !defined(SIMU)
return getCSD203BatteryVoltage() / 10;
#else
// using filtered ADC value on purpose
if (adcGetMaxInputs(ADC_INPUT_VBAT) < 1) return 0;
int32_t instant_vbat = anaIn(adcGetInputOffset(ADC_INPUT_VBAT));
@@ -321,6 +333,7 @@ uint16_t getBatteryVoltage()
return (uint16_t)((instant_vbat * (1000 + g_eeGeneral.txVoltageCalibration)) /
BATTERY_DIVIDER);
#endif
#endif
}
static uint32_t apply_low_pass_filter(uint32_t v, uint32_t v_prev,
+5 -1
View File
@@ -3213,7 +3213,11 @@ LROT_BEGIN(etxcst, NULL, 0)
LROT_NUMENTRY( PLAY_BACKGROUND, PLAY_BACKGROUND )
LROT_NUMENTRY( TIMEHOUR, TIMEHOUR )
#if defined(LED_STRIP_GPIO)
LROT_NUMENTRY( LED_STRIP_LENGTH, LED_STRIP_LENGTH )
#if defined(RADIO_V16)
LROT_NUMENTRY( LED_STRIP_LENGTH, LED_STRIP_LENGTH - 6)
#else
LROT_NUMENTRY( LED_STRIP_LENGTH, LED_STRIP_LENGTH )
#endif
#endif
LROT_NUMENTRY( UNIT_RAW, UNIT_RAW )
LROT_NUMENTRY( UNIT_VOLTS, UNIT_VOLTS )
@@ -82,22 +82,23 @@ static void _led_dbg_init() {
#endif
#if defined(STM32_SUPPORT_32BIT_TIMERS)
typedef uint32_t led_timer_value_t;
#else
typedef uint16_t led_timer_value_t;
#endif
uint8_t pulse_inc = 1;
// DMA buffer contains pulses for 2 LED at a time
// (allows for refill at HT and TC)
#if defined(STM32_SUPPORT_32BIT_TIMERS)
static led_timer_value_t _led_dma_buffer[WS2821_DMA_BUFFER_LEN * 2] __DMA;
#else
static led_timer_value_t _led_dma_buffer[WS2821_DMA_BUFFER_LEN] __DMA;
#endif
static uint8_t _led_seq_cnt;
static void _fill_byte(uint8_t c, led_timer_value_t* dma_buffer)
{
for (int i = 0; i < 8; i++) {
dma_buffer[i] = c & 0x80 ? WS2812_ONE : WS2812_ZERO;
dma_buffer[i*pulse_inc] = c & 0x80 ? WS2812_ONE : WS2812_ZERO;
c <<= 1;
}
}
@@ -106,14 +107,14 @@ static void _fill_pulses(const uint8_t* colors, led_timer_value_t* dma_buffer, u
{
for (uint32_t i = 0; i < len; i++) {
_fill_byte(*colors, dma_buffer);
dma_buffer += 8;
dma_buffer += 8 * pulse_inc;
colors++;
}
}
static inline uint32_t _calc_offset(uint8_t tc)
{
return tc * WS2821_DMA_BUFFER_HALF_LEN;
return tc * WS2821_DMA_BUFFER_HALF_LEN * pulse_inc;
}
static void _update_dma_buffer(const stm32_pulse_timer_t* tim, uint8_t tc)
@@ -131,7 +132,7 @@ static void _update_dma_buffer(const stm32_pulse_timer_t* tim, uint8_t tc)
// no need to reset the buffer after 2 cycles
if (_led_seq_cnt < _led_strip_len + 2) {
auto offset = _calc_offset(tc);
auto size = WS2821_DMA_BUFFER_HALF_LEN * sizeof(led_timer_value_t);
auto size = WS2821_DMA_BUFFER_HALF_LEN * sizeof(led_timer_value_t) * pulse_inc;
memset(&_led_dma_buffer[offset], 0, size);
}
_led_seq_cnt++;
@@ -191,7 +192,7 @@ static void _init_timer(const stm32_pulse_timer_t* tim)
_led_set_dma_periph_addr(tim);
LL_DMA_SetMode(tim->DMAx, tim->DMA_Stream, LL_DMA_MODE_CIRCULAR);
LL_DMA_SetDataLength(tim->DMAx, tim->DMA_Stream, WS2821_DMA_BUFFER_LEN);
LL_DMA_SetDataLength(tim->DMAx, tim->DMA_Stream, WS2821_DMA_BUFFER_LEN * pulse_inc);
LL_DMA_SetMemoryAddress(tim->DMAx, tim->DMA_Stream, (uint32_t)_led_dma_buffer);
// we need to use a higher prio to avoid having
@@ -202,6 +203,7 @@ static void _init_timer(const stm32_pulse_timer_t* tim)
void ws2812_init(const stm32_pulse_timer_t* timer, uint8_t strip_len, uint8_t type)
{
WS2812_DBG_INIT;
pulse_inc = IS_TIM_32B_COUNTER_INSTANCE(timer->TIMx) ? 2 : 1;
memset(_led_colors, 0, sizeof(_led_colors));
memset(_led_dma_buffer, 0, sizeof(_led_dma_buffer));
@@ -32,7 +32,7 @@
// Maximum number of supported LEDs
#if !defined(WS2812_MAX_LEDS)
# define WS2812_MAX_LEDS 8
# define WS2812_MAX_LEDS 48
#endif
// Number of LED periods used for trailing reset
+19 -1
View File
@@ -117,11 +117,25 @@ if (PCB STREQUAL X10)
set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module")
option(BLUETOOTH "Support for bluetooth module" OFF)
option(INTERNAL_GPS "Support for internal NMEA GPS" OFF)
set(DEFAULT_THEME "DARKBLUE")
add_definitions(-DMANUFACTURER_FATFISH)
set(INTERNAL_GPS_BAUDRATE "9600" CACHE STRING "Baud rate for internal GPS")
set(FLEXSW "2" CACHE STRING "Max flex inputs usable as switches")
set(VIDEO_SWITCH ON)
elseif (PCBREV STREQUAL V16)
set(FLAVOUR v16)
add_definitions(-DRADIO_V16)
add_definitions(-DRADIO_FAMILY_T16)
set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module")
option(BLUETOOTH "Support for bluetooth module" OFF)
option(INTERNAL_GPS "Support for internal NMEA GPS" OFF)
add_definitions(-DMANUFACTURER_HELLORADIOSKY)
set(INTERNAL_GPS_BAUDRATE "9600" CACHE STRING "Baud rate for internal GPS")
set(FLEXSW "2" CACHE STRING "Max flex inputs usable as switches")
set(AUX2_SERIAL OFF)
set(HAS_CSD203_SENSOR ON)
if (BLUETOOTH)
set(AUX_SERIAL OFF)
endif()
elseif (PCBREV STREQUAL T18)
set(FLAVOUR t18)
add_definitions(-DRADIO_T18)
@@ -331,6 +345,10 @@ if(USB_CHARGER)
target_sources(board PRIVATE ${TARGET_SRC_DIR}/usb_charger_driver.cpp)
endif()
if(HAS_CSD203_SENSOR)
set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} csd203_sensor.cpp)
add_definitions(-DCSD203_SENSOR)
endif()
set(FIRMWARE_SRC
${FIRMWARE_SRC}
targets/common/arm/loadboot.cpp
+70
View File
@@ -22,6 +22,7 @@
#include "stm32_hal.h"
#include "stm32_hal_ll.h"
#include "stm32_gpio.h"
#include "stm32_ws2812.h"
#include "hal/adc_driver.h"
#include "hal/trainer_driver.h"
@@ -34,6 +35,7 @@
#include "boards/generic_stm32/module_ports.h"
#include "boards/generic_stm32/intmodule_heartbeat.h"
#include "boards/generic_stm32/analog_inputs.h"
#include "boards/generic_stm32/rgb_leds.h"
#include "timers_driver.h"
#include "dataconstants.h"
@@ -48,6 +50,23 @@
#include "flysky_gimbal_driver.h"
#endif
#if defined(CSD203_SENSOR)
#include "csd203_sensor.h"
#endif
#if defined(LED_STRIP_GPIO)
// Common LED driver
extern const stm32_pulse_timer_t _led_timer;
void ledStripOff()
{
for (uint8_t i = 0; i < LED_STRIP_LENGTH; i++) {
ws2812_set_color(i, 0, 0, 0);
}
ws2812_update(&_led_timer);
}
#endif
HardwareOptions hardwareOptions;
bool boardBacklightOn = false;
@@ -63,6 +82,44 @@ void boardBLInit()
#if !defined(BOOT)
#include "edgetx.h"
#if defined(SIXPOS_SWITCH_INDEX)
uint8_t lastADCState = 0;
uint8_t sixPosState = 0;
bool dirty = true;
uint16_t getSixPosAnalogValue(uint16_t adcValue)
{
uint8_t currentADCState = 0;
if (adcValue > 3800)
currentADCState = 6;
else if (adcValue > 3100)
currentADCState = 5;
else if (adcValue > 2300)
currentADCState = 4;
else if (adcValue > 1500)
currentADCState = 3;
else if (adcValue > 1000)
currentADCState = 2;
else if (adcValue > 400)
currentADCState = 1;
if (lastADCState != currentADCState) {
lastADCState = currentADCState;
} else if (lastADCState != 0 && lastADCState - 1 != sixPosState) {
sixPosState = lastADCState - 1;
dirty = true;
}
if (dirty) {
for (uint8_t i = 0; i < 6; i++) {
if (i == sixPosState)
ws2812_set_color(i, SIXPOS_LED_RED, SIXPOS_LED_GREEN, SIXPOS_LED_BLUE);
else
ws2812_set_color(i, 0, 0, 0);
}
ws2812_update(&_led_timer);
}
return (4096/5)*(sixPosState);
}
#endif
void boardInit()
{
#if defined(RADIO_FAMILY_T16)
@@ -163,9 +220,22 @@ void boardInit()
timersInit();
#if defined(HARDWARE_TOUCH) && !defined(SIMU)
touchPanelInit();
#endif
#if defined(CSD203_SENSOR)
initCSD203();
#endif
usbInit();
hapticInit();
#if defined(LED_STRIP_GPIO)
ws2812_init(&_led_timer, LED_STRIP_LENGTH, WS2812_GRB);
ledStripOff();
#endif
#if defined(BLUETOOTH)
bluetoothInit(BLUETOOTH_DEFAULT_BAUDRATE, true);
#endif
+7 -3
View File
@@ -145,7 +145,7 @@ enum {
#endif
// POTS and SLIDERS default configuration
#if defined(RADIO_TX16S) || defined(RADIO_F16)
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
#define XPOS_CALIB_DEFAULT {0x3, 0xc, 0x15, 0x1e, 0x26}
#endif
@@ -197,6 +197,10 @@ uint32_t pwrPressedDuration();
void usbChargerInit();
bool usbChargerLed();
#if defined(RADIO_V16)
uint16_t getSixPosAnalogValue(uint16_t adcValue);
#endif
// Led driver
void ledInit();
void ledOff();
@@ -288,7 +292,7 @@ void telemetryPortInvertedInit(uint32_t baudrate);
// Aux serial port driver
#if defined(RADIO_TX16S) || defined(RADIO_F16)
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
#define DEBUG_BAUDRATE 400000
#define LUA_DEFAULT_BAUDRATE 115200
#else
@@ -315,7 +319,7 @@ void bluetoothWriteWakeup();
uint8_t bluetoothIsWriting();
void bluetoothDisable();
#if defined(RADIO_TX16S) || defined(RADIO_F16)
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
#define BATTERY_DIVIDER 1495
#else
#define BATTERY_DIVIDER 1629
+410
View File
@@ -0,0 +1,410 @@
/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "csd203_sensor.h"
#include <stdlib.h>
#include <string.h>
#include "debug.h"
#include "delays_driver.h"
#include "edgetx_types.h"
#include "hal.h"
#include "rtos.h"
#include "stm32_exti_driver.h"
#include "stm32_gpio_driver.h"
#include "stm32_hal.h"
#include "stm32_hal_ll.h"
#include "stm32_i2c_driver.h"
// clang-format off
/* CSD203 Regsistor map */
#define CONFIGURATION 0X00
/*Read Only*/
#define SHUNT_VOLTAGE 0X01
#define BUS_VOLTAGE 0X02
#define POWER 0X03
#define CURRENT 0x04
/*Read Only*/
#define CALIBRATION 0x05
#define MASKENABLE 0x06
#define ALERTLIMIT 0x07
#define ManufacturerID 0xFE //Manufacturer ID Register
#define DieID 0xFF //Die ID Register
#define ManIDCode 0x4153 //CHIP ID
/*Calibration Calculation parameter*/
/* This Parameter Gain*10000K*/
#define CalParam 51200
/* ↓ add your shunt here ↓ */
#define CSD_CONFIG_Rs_1mR 1
#define CSD_CONFIG_Rs_2mR 2
#define CSD_CONFIG_Rs_5mR 5
#define CSD_CONFIG_Rs_10mR 10
#define CSD_CONFIG_Rs_20mR 20
#define CSD_CONFIG_Rs_50mR 50
#define CSD_CONFIG_CurrentLsb1mA 10
#define CSD_CONFIG_CurrentLsb2mA 20
#define CSD_CONFIG_CurrentLsb5mA 50
#define CSD_CONFIG_CurrentLsb10mA 100
#define CSD_CONFIG_CurrentLsb20mA 200
/*Calibration Calculation parameter*/
/* CSD203 Regsistor Config*/
#define CSD_CONFIG_RST 1
#define CSD_CONFIG_UnRST 0
#define CSD_CONFIG_Avg1 0
#define CSD_CONFIG_Avg4 1
#define CSD_CONFIG_Avg16 2
#define CSD_CONFIG_Avg64 3
#define CSD_CONFIG_Avg128 4
#define CSD_CONFIG_Avg256 5
#define CSD_CONFIG_Avg512 6
#define CSD_CONFIG_Avg1024 7
#define CSD_CONFIG_VBUS_CT1_1mS 4
#define CSD_CONFIG_VShunt_CT1_1mS 4
#define CSD_CONFIG_ShuntBus_CON 7
#define CSD_CONFIG_ADDR_A1_GND_A0_GND 64
#define CSD_CONFIG_ADDR_A1_GND_VS_GND 65
#define CSD_CONFIG_ADDR_A1_GND_SDA_GND 66
#define CSD_CONFIG_ADDR_A1_GND_SCL_GND 67
#define CSD_CONFIG_ADDR_A1_VS_A0_GND 68
#define CSD_CONFIG_ADDR_A1_VS_A0_VS 69
#define CSD_CONFIG_ADDR_A1_VS_A0_SDA 70
#define CSD_CONFIG_ADDR_A1_VS_A0_SCL 71
#define CSD_CONFIG_ADDR_A1_SDA_A0_GND 72
#define CSD_CONFIG_ADDR_A1_SDA_A0_VS 73
#define CSD_CONFIG_ADDR_A1_SDA_A0_SDA 74
#define CSD_CONFIG_ADDR_A1_SDA_A0_SCL 75
#define CSD_CONFIG_ADDR_A1_SCL_A0_GND 76
#define CSD_CONFIG_ADDR_A1_SCL_A0_VS 77
#define CSD_CONFIG_ADDR_A1_SCL_A0_SDA 78
#define CSD_CONFIG_ADDR_A1_SCL_A0_SCL 79
/******************/
/*CSD Alert Option*/
/******************/
/*Vshunt Voltage Over Voltage*/
#define CSD_ALERT_VShunt_OVA_ON 1
#define CSD_ALERT_VShunt_OVA_OFF 0
/*Vshunt Voltage Under Voltage*/
#define CSD_ALERT_VShunt_UVA_ON 1
#define CSD_ALERT_VShunt_UVA_OFF 0
/*VBus Voltage Over Voltage*/
#define CSD_ALERT_VBUS_OVA_ON 1
#define CSD_ALERT_VBUS_OVA_OFF 0
/*VBus Voltage Under Voltage*/
#define CSD_ALERT_VBUS_UVA_ON 1
#define CSD_ALERT_VBUS_UVA_OFF 0
/* Power Over Limit */
#define CSD_ALERT_Power_Over_ON 1
#define CSD_ALERT_Power_Over_OFF 0
/* ADC Coversion Ready */
#define CSD_ALERT_CoversionReady_ON 1
#define CSD_ALERT_CoversionReady_OFF 0
#define CSD_ALERT_CNVR_FLAG_ON 1
#define CSD_ALERT_CNVR_FLAG_OFF 0
/* ALERT Function Flag and Alert latch Work Together */
#define CSD_ALERT_ALERT_FLAG_ON 1
#define CSD_ALERT_ALERT_FLAG_OFF 0
#define CSD_ALERT_ALERT_Latch_ON 1
#define CSD_ALERT_ALERT_Latch_OFF 0
/*Power over flow */
#define CSD_ALERT_OVF_ON 1
#define CSD_ALERT_OVF_OFF 0
/*Alert Pin */
#define CSD_ALERT_APOL_ActiveLow 1
#define CSD_ALERT_APOL_ActiveHigh 0
// clang-format on
/*CSD Basic Configuration struct*/
typedef struct {
uint8_t DeviceADDR;
uint8_t RST;
uint8_t Average;
uint8_t VBUS_Conv_Time;
uint8_t VShunt_Conv_Time;
uint8_t Mode;
uint16_t CurrentLSB;
uint16_t Rshunt;
} CSD_CONFIG;
/*CSD Basic Configuration struct*/
/*CSD ALERT Configuration struct*/
typedef struct {
uint8_t VShunt_OVA;
uint8_t VShuntUVA;
uint8_t VBUS_OVA;
uint8_t VBUS_UVA;
uint8_t Power_OVER_Limit;
uint8_t CNVR;
uint8_t ALERT_FLAG;
uint8_t CNVR_FLAG;
uint8_t OVF;
uint8_t APOL;
uint8_t ALERT_Latch;
} CSD_ALERT;
/*CSD ALERT Configuration struct*/
void CSD203_Init(CSD_CONFIG *CSD203_CFG); // Initialise CSD203 config
uint16_t CSD203_ReadVbus(CSD_CONFIG *CSD203_CFG); // Read Vbus Voltage
uint16_t CSD203_ReadRshunt(CSD_CONFIG *CSD203_CFG); // Read Rshunt
uint16_t CSD203_ReadPower(CSD_CONFIG *CSD203_CFG); // Read Power
uint16_t CSD203_ReadCurrent(CSD_CONFIG *CSD203_CFG); // Read Current
void IIC_DUT_W(uint8_t addr, uint8_t reg, uint16_t data);
uint16_t IIC_DUT_R(uint8_t addr, uint8_t reg);
bool CSD203MainInitFlag = false;
bool CSD203InInitFlag = false;
bool CSD203ExtInitFlag = false;
bool IICReadStatusFlag = false;
static uint16_t csd203extvbus = 0;
static CSD_CONFIG CSD203_MainSensorCFG;
static CSD_CONFIG CSD203_InSensorCFG;
static CSD_CONFIG CSD203_ExtSensorCFG;
bool I2C_CSD203_WriteRegister(uint8_t I2C_ADDR, uint8_t reg, uint8_t *buf,
uint8_t len)
{
uint8_t uAddrAndBuf[6];
uAddrAndBuf[0] = (uint8_t)(reg & 0x00FF);
if (len > 0) {
for (int i = 0; i < len; i++) {
uAddrAndBuf[i + 1] = buf[i];
}
}
if (stm32_i2c_master_tx(TOUCH_I2C_BUS, I2C_ADDR, uAddrAndBuf, len + 1, 100) <
0) {
TRACE("I2C B1 ERROR: WriteRegister failed");
return false;
}
return true;
}
bool I2C_CSD203_ReadRegister(uint8_t I2C_ADDR, uint8_t reg, uint8_t *buf,
uint8_t len)
{
uint8_t uRegAddr[2];
// uRegAddr[0] = (uint8_t)((reg & 0xFF00) >> 8);
uRegAddr[0] = (uint8_t)(reg & 0x00FF);
if (stm32_i2c_master_tx(TOUCH_I2C_BUS, I2C_ADDR, uRegAddr, 1, 100) < 0) {
TRACE("I2C B1 ERROR: ReadRegister write reg address failed");
return false;
}
if (stm32_i2c_master_rx(TOUCH_I2C_BUS, I2C_ADDR, buf, len, 100) < 0) {
TRACE("I2C B1 ERROR: ReadRegister read reg address failed");
return false;
}
return true;
}
void IIC_DUT_W(uint8_t addr, uint8_t reg, uint16_t data)
{
uint8_t buf[2];
buf[0] = data >> 8;
buf[1] = data & 0xff;
I2C_CSD203_WriteRegister(addr, reg, buf, 2);
}
uint16_t IIC_DUT_R(uint8_t addr, uint8_t reg)
{
uint8_t buf[2];
I2C_CSD203_ReadRegister(addr, reg, buf, 2);
return buf[0] << 8 | buf[1];
}
void CSD203_Init(CSD_CONFIG *CSD203_CFG)
{
uint16_t Data = 0, ADDR = 0;
Data |= (CSD203_CFG->RST) << 15;
Data |= (CSD203_CFG->Average) << 9;
Data |= (CSD203_CFG->VBUS_Conv_Time) << 5;
Data |= (CSD203_CFG->VShunt_Conv_Time) << 2;
Data |= CSD203_CFG->Mode;
ADDR = (CSD203_CFG->DeviceADDR);
IIC_DUT_W(ADDR, CONFIGURATION, Data);
Data = CalParam / ((CSD203_CFG->CurrentLSB) * (CSD203_CFG->Rshunt));
IIC_DUT_W(ADDR, CALIBRATION, Data);
}
/*Read Vbus*/
uint16_t CSD203_ReadVbus(CSD_CONFIG *CSD203_CFG)
{
uint16_t Data = 0, ADDR = 0;
ADDR = (CSD203_CFG->DeviceADDR);
Data = IIC_DUT_R(ADDR, BUS_VOLTAGE);
return Data;
}
/*Read Rshunt*/
uint16_t CSD203_ReadRshunt(CSD_CONFIG *CSD203_CFG)
{
uint16_t Data = 0, ADDR = 0;
ADDR = (CSD203_CFG->DeviceADDR);
Data = IIC_DUT_R(ADDR, SHUNT_VOLTAGE);
return Data;
}
/*Read Power*/
uint16_t CSD203_ReadPower(CSD_CONFIG *CSD203_CFG)
{
uint16_t Data = 0, ADDR = 0;
ADDR = (CSD203_CFG->DeviceADDR);
Data = IIC_DUT_R(ADDR, POWER);
return Data;
}
uint16_t CSD203_ReadCurrent(CSD_CONFIG *CSD203_CFG)
{
uint16_t Data = 0, ADDR = 0;
ADDR = (CSD203_CFG->DeviceADDR);
Data = IIC_DUT_R(ADDR, CURRENT);
return Data;
}
uint16_t CSD203_ReadCONFIGURATION(CSD_CONFIG *CSD203_CFG)
{
uint16_t Data = 0, ADDR = 0;
ADDR = (CSD203_CFG->DeviceADDR);
Data = IIC_DUT_R(ADDR, CONFIGURATION);
return Data;
}
uint16_t CSD203_ReadManufacturerID(CSD_CONFIG *CSD203_CFG)
{
uint16_t Data = 0, ADDR = 0;
ADDR = (CSD203_CFG->DeviceADDR);
Data = IIC_DUT_R(ADDR, ManufacturerID);
return Data;
}
void initCSD203(void)
{
CSD203MainInitFlag = false;
CSD203InInitFlag = false;
CSD203ExtInitFlag = false;
// TRACE("202 test ..."); //A0=CLK A1=SDA RadioSky
CSD203_MainSensorCFG.RST = CSD_CONFIG_RST;
CSD203_MainSensorCFG.Average = CSD_CONFIG_Avg16;
CSD203_MainSensorCFG.VBUS_Conv_Time = CSD_CONFIG_VBUS_CT1_1mS;
CSD203_MainSensorCFG.VShunt_Conv_Time = CSD_CONFIG_VShunt_CT1_1mS;
CSD203_MainSensorCFG.Rshunt = CSD_CONFIG_Rs_10mR;
CSD203_MainSensorCFG.CurrentLSB = CSD_CONFIG_CurrentLsb1mA;
CSD203_MainSensorCFG.Mode = 7;
CSD203_MainSensorCFG.DeviceADDR = CSD_CONFIG_ADDR_A1_VS_A0_GND; // 100 0100
// CSD203_MainSensorCFG.DeviceADDR=CSD_CONFIG_ADDR_A1_GND_A0_GND;
CSD203_InSensorCFG.RST = CSD_CONFIG_RST;
CSD203_InSensorCFG.Average = CSD_CONFIG_Avg16;
CSD203_InSensorCFG.VBUS_Conv_Time = CSD_CONFIG_VBUS_CT1_1mS;
CSD203_InSensorCFG.VShunt_Conv_Time = CSD_CONFIG_VShunt_CT1_1mS;
CSD203_InSensorCFG.Rshunt = CSD_CONFIG_Rs_10mR;
CSD203_InSensorCFG.CurrentLSB = CSD_CONFIG_CurrentLsb1mA;
CSD203_InSensorCFG.Mode = 7;
CSD203_InSensorCFG.DeviceADDR = CSD_CONFIG_ADDR_A1_VS_A0_VS; // 100 0101
// CSD203_InSensorCFG.DeviceADDR=CSD_CONFIG_ADDR_A1_GND_A0_GND;
CSD203_ExtSensorCFG.RST = CSD_CONFIG_RST;
CSD203_ExtSensorCFG.Average = CSD_CONFIG_Avg16;
CSD203_ExtSensorCFG.VBUS_Conv_Time = CSD_CONFIG_VBUS_CT1_1mS;
CSD203_ExtSensorCFG.VShunt_Conv_Time = CSD_CONFIG_VShunt_CT1_1mS;
CSD203_ExtSensorCFG.Rshunt = CSD_CONFIG_Rs_10mR;
CSD203_ExtSensorCFG.CurrentLSB = CSD_CONFIG_CurrentLsb1mA;
CSD203_ExtSensorCFG.Mode = 7;
CSD203_ExtSensorCFG.DeviceADDR = CSD_CONFIG_ADDR_A1_GND_VS_GND; // 100 0001
// CSD203_ExtSensorCFG.DeviceADDR=CSD_CONFIG_ADDR_A1_GND_A0_GND;
CSD203_Init(&CSD203_MainSensorCFG);
delay_ms(1);
uint16_t cfg = CSD203_ReadManufacturerID(&CSD203_MainSensorCFG);
if (cfg == ManIDCode) {
CSD203_ReadCurrent(&CSD203_MainSensorCFG);
CSD203MainInitFlag = true;
}
delay_ms(5);
CSD203_Init(&CSD203_InSensorCFG);
delay_ms(1);
cfg = CSD203_ReadManufacturerID(&CSD203_InSensorCFG);
if (cfg == ManIDCode) {
CSD203_ReadCurrent(&CSD203_InSensorCFG);
CSD203InInitFlag = true;
}
delay_ms(5);
CSD203_Init(&CSD203_ExtSensorCFG);
delay_ms(1);
cfg = CSD203_ReadManufacturerID(&CSD203_ExtSensorCFG);
if (cfg == ManIDCode) {
CSD203_ReadCurrent(&CSD203_ExtSensorCFG);
CSD203ExtInitFlag = true;
}
}
uint16_t getCSD203BatteryVoltage(void)
{ // 1000=1000mV
return csd203extvbus;
}
void readCSD203(void)
{ // 5ms
static uint16_t GetSenSorStep = 0;
if (IICReadStatusFlag == true) return;
IICReadStatusFlag = true;
if (GetSenSorStep == 0 && CSD203MainInitFlag == true) {
CSD203_ReadCurrent(&CSD203_MainSensorCFG);
CSD203_ReadVbus(&CSD203_MainSensorCFG);
} else if (GetSenSorStep == 1 && CSD203InInitFlag == true) {
CSD203_ReadCurrent(&CSD203_InSensorCFG);
CSD203_ReadVbus(&CSD203_InSensorCFG);
} else if (GetSenSorStep == 2 && CSD203ExtInitFlag == true) {
CSD203_ReadCurrent(&CSD203_ExtSensorCFG);
csd203extvbus = (CSD203_ReadVbus(&CSD203_ExtSensorCFG) * 1.25);
// TRACE("Vbat=%d\r",csd203extvbus);
}
IICReadStatusFlag = false;
if (++GetSenSorStep >= 3) GetSenSorStep = 0;
}
+25
View File
@@ -0,0 +1,25 @@
/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#pragma once
void initCSD203(void);
void readCSD203(void);
+166 -27
View File
@@ -45,7 +45,7 @@
#define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_6 // PI.06
#define KEYS_GPIO_REG_TELE GPIOC
#define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_4 // PC.04
#elif defined(RADIO_TX16S) || defined(RADIO_F16)
#elif defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
#define KEYS_GPIO_REG_ENTER GPIOI
#define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_8 // PI.08
#define KEYS_GPIO_REG_PAGEUP GPIOC
@@ -265,6 +265,14 @@
#endif
#endif
// 6POS SW
#if defined(RADIO_V16)
#define SIXPOS_SWITCH_INDEX 5
#define SIXPOS_LED_RED 255
#define SIXPOS_LED_GREEN 255
#define SIXPOS_LED_BLUE 255
#endif
// Trims
#if defined(RADIO_T15)
#define TRIMS_GPIO_REG_LHL GPIOD
@@ -309,7 +317,7 @@
#define TRIMS_GPIO_REG_LSU GPIOB
#define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_13 // PB.13
#elif defined(PCBX10)
#if defined(RADIO_TX16S) || defined(RADIO_F16)
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
#define TRIMS_GPIO_REG_LHL GPIOA
#define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_6 // PA.06
#define TRIMS_GPIO_REG_LHR GPIOC
@@ -392,6 +400,55 @@
#define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler
#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
#define ADC_VREF_PREC2 600
#elif defined(RADIO_V16)
#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00
#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01
#define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_3 // PA.03
#define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_2 // PA.02
#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PC.00 // ADC123_IN10 -> ADC3_IN10
#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PC.02 // ADC123_IN12 -> ADC3_IN12
#define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_0 // PC.01 // ADC123_IN11 -> ADC3_IN11
#define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_5 // PA.05
#define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_3 // PC.03
#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_7 // PF.07
#define ADC_GPIO_PIN_EXT1 LL_GPIO_PIN_8 // PF.08
#define ADC_GPIO_PIN_EXT2 LL_GPIO_PIN_9 // PF.09
#define ADC_GPIO_PIN_EXT3 ADC_GPIO_PIN_STICK_RH
#define ADC_GPIO_PIN_EXT4 ADC_GPIO_PIN_STICK_RV
#define ADC_GPIOA_PINS_FS (LL_GPIO_PIN_2 | LL_GPIO_PIN_3)
#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_SLIDER1)
#define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_SLIDER2)
#define ADC_GPIOF_PINS (ADC_GPIO_PIN_EXT1 | ADC_GPIO_PIN_EXT2)
#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC123_IN0 -> ADC3_IN0
#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC123_IN1 -> ADC3_IN1
#define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC3_IN2
#define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC3_IN3
#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_12 // ADC123_IN10 -> ADC3_IN10
#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_11 // ADC123_IN12 -> ADC3_IN12
#define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_10 // ADC123_IN11 -> ADC3_IN11
#define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5
#define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_13 // ADC123_IN13 -> ADC1_IN13
#define ADC_CHANNEL_EXT1 LL_ADC_CHANNEL_6 // ADC3_IN6 -> ADC3_IN6
#define ADC_CHANNEL_EXT2 LL_ADC_CHANNEL_7 // ADC3_IN7 -> ADC3_IN7
#define ADC_CHANNEL_EXT3 LL_ADC_CHANNEL_2 // ADC3_IN2: same as RH
#define ADC_CHANNEL_EXT4 LL_ADC_CHANNEL_3 // ADC3_IN3: same as RV
#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18
#define ADC_MAIN ADC3
#define ADC_EXT ADC1
#define ADC_EXT_CHANNELS { ADC_CHANNEL_SLIDER1, ADC_CHANNEL_SLIDER2, ADC_CHANNEL_RTC_BAT }
#define ADC_EXT_DMA DMA2
#define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_0
#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_4
#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream4_IRQn
#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler
#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
#define ADC_DMA DMA2
#define ADC_DMA_CHANNEL LL_DMA_CHANNEL_2
#define ADC_DMA_STREAM LL_DMA_STREAM_0
#define ADC_DMA_STREAM_IRQ DMA2_Stream0_IRQn
#define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler
#define ADC_VREF_PREC2 660
#elif defined(PCBX10)
#if defined(RADIO_T15)
#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_1 // PA.01
@@ -422,7 +479,7 @@
#define ADC_GPIO_PIN_EXT3 ADC_GPIO_PIN_STICK_RH
#define ADC_GPIO_PIN_EXT4 ADC_GPIO_PIN_STICK_RV
#endif
#if !(defined(RADIO_TX16S) || defined(RADIO_F16)) && !defined(RADIO_T15)
#if !(defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_T15) || defined(RADIO_V16))
#define PWM_STICKS
#define PWM_TIMER TIM5
#define PWM_GPIO GPIOA
@@ -470,7 +527,17 @@
#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18
#define ADC_MAIN ADC3
#define ADC_EXT ADC1
#define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BAT }
#if defined(RADIO_V16)
#define ADC_EXT_CHANNELS { ADC_CHANNEL_SLIDER1, ADC_CHANNEL_SLIDER2, ADC_CHANNEL_RTC_BAT }
// Required DMA for more than one channel for EXT_ADC
#define ADC_EXT_DMA DMA2
#define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_0
#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_4
#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream4_IRQn
#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler
#else
#define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BAT }
#endif
#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
#define ADC_DMA DMA2
@@ -480,7 +547,7 @@
#define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler
// VBat divider is /4 on F42x and F43x devices
#if defined(RADIO_TX16S) || defined(RADIO_T15) || defined(RADIO_F16)
#if defined(RADIO_TX16S) || defined(RADIO_T15) || defined(RADIO_F16) || defined(RADIO_V16)
#define ADC_VREF_PREC2 660
#elif defined(RADIO_T16) || defined(RADIO_T18)
#define ADC_VREF_PREC2 600
@@ -497,6 +564,8 @@
#define ADC_DIRECTION {1,-1,1,-1, -1,1,-1, -1,1,1,1, -1,1 }
#elif defined(RADIO_TX16S) || defined(RADIO_F16)
#define ADC_DIRECTION {1,-1,1,-1, 1,1,1, -1,1,1,1, -1,1 }
#elif defined(RADIO_V16)
#define ADC_DIRECTION {1,-1,1,-1, 1,1,1, -1,1,1,1, -1,1 }
#elif defined(PCBX10)
#define ADC_DIRECTION {1,-1,1,-1, -1,1,-1, 1,-1,1,1, 1,-1 }
#elif defined(PCBX12S)
@@ -511,6 +580,9 @@
#define PWR_ON_GPIO GPIO_PIN(GPIOJ, 1) // PJ.01
#define PWR_SWITCH_GPIO GPIO_PIN(GPIOJ, 0) // PJ.00
#define PWR_EXTRA_SWITCH_GPIO GPIO_PIN(GPIOB, 0) // PB.00
#elif defined(RADIO_V16)
#define PWR_ON_GPIO GPIO_PIN(GPIOB, 2) // PB.02
#define PWR_SWITCH_GPIO GPIO_PIN(GPIOJ, 0) // PJ.00
#else
#define PWR_ON_GPIO GPIO_PIN(GPIOJ, 1) // PJ.01
#define PWR_SWITCH_GPIO GPIO_PIN(GPIOJ, 0) // PJ.00
@@ -574,19 +646,34 @@
// Serial Port (DEBUG)
#if defined(AUX_SERIAL)
#define AUX_SERIAL_TX_GPIO GPIO_PIN(GPIOB, 10) // PB.10
#define AUX_SERIAL_RX_GPIO GPIO_PIN(GPIOB, 11) // PB.11
#define AUX_SERIAL_USART USART3
#define AUX_SERIAL_USART_IRQHandler USART3_IRQHandler
#define AUX_SERIAL_USART_IRQn USART3_IRQn
#define AUX_SERIAL_DMA_TX DMA1
#define AUX_SERIAL_DMA_TX_STREAM LL_DMA_STREAM_3
#define AUX_SERIAL_DMA_TX_CHANNEL LL_DMA_CHANNEL_4
#define AUX_SERIAL_DMA_RX DMA1
#define AUX_SERIAL_DMA_RX_STREAM LL_DMA_STREAM_1
#define AUX_SERIAL_DMA_RX_CHANNEL LL_DMA_CHANNEL_4
#if defined(RADIO_TX16S) || defined(RADIO_F16)
#if defined(RADIO_V16)
#define AUX_SERIAL_TX_GPIO GPIO_PIN(GPIOG, 14) // PG.14
#define AUX_SERIAL_RX_GPIO GPIO_PIN(GPIOG, 9) // PG.09
#define AUX_SERIAL_USART USART6
#define AUX_SERIAL_USART_IRQHandler USART6_IRQHandler
#define AUX_SERIAL_USART_IRQn USART6_IRQn
#define AUX_SERIAL_DMA_TX DMA2
#define AUX_SERIAL_DMA_TX_STREAM LL_DMA_STREAM_7
#define AUX_SERIAL_DMA_TX_CHANNEL LL_DMA_CHANNEL_5
#define AUX_SERIAL_DMA_RX DMA2
#define AUX_SERIAL_DMA_RX_STREAM LL_DMA_STREAM_2
#define AUX_SERIAL_DMA_RX_CHANNEL LL_DMA_CHANNEL_5
#define AUX_SERIAL_PWR_GPIO GPIO_PIN(GPIOA, 15) // PA.15
#else
#define AUX_SERIAL_TX_GPIO GPIO_PIN(GPIOB, 10) // PB.10
#define AUX_SERIAL_RX_GPIO GPIO_PIN(GPIOB, 11) // PB.11
#define AUX_SERIAL_USART USART3
#define AUX_SERIAL_USART_IRQHandler USART3_IRQHandler
#define AUX_SERIAL_USART_IRQn USART3_IRQn
#define AUX_SERIAL_DMA_TX DMA1
#define AUX_SERIAL_DMA_TX_STREAM LL_DMA_STREAM_3
#define AUX_SERIAL_DMA_TX_CHANNEL LL_DMA_CHANNEL_4
#define AUX_SERIAL_DMA_RX DMA1
#define AUX_SERIAL_DMA_RX_STREAM LL_DMA_STREAM_1
#define AUX_SERIAL_DMA_RX_CHANNEL LL_DMA_CHANNEL_4
#if defined(RADIO_TX16S) || defined(RADIO_F16)
#define AUX_SERIAL_PWR_GPIO GPIO_PIN(GPIOA, 15) // PA.15
#endif
#endif
#endif
@@ -615,6 +702,24 @@
#endif
// Telemetry
#if defined(RADIO_V16)
#define TELEMETRY_RX_REV_GPIO GPIO_PIN(GPIOH, 7) // PH.07
#define TELEMETRY_TX_REV_GPIO GPIO_PIN(GPIOH, 7) // PH.07
#define TELEMETRY_DIR_GPIO GPIO_PIN(GPIOD, 4) // PD.04
#define TELEMETRY_SET_INPUT 0
#define TELEMETRY_GPIO GPIOD
#define TELEMETRY_TX_GPIO GPIO_PIN(GPIOD, 5) // PD.05
#define TELEMETRY_RX_GPIO GPIO_PIN(GPIOD, 6) // PD.06
#define TELEMETRY_USART USART2
#define TELEMETRY_DMA DMA1
#define TELEMETRY_DMA_Stream_TX LL_DMA_STREAM_6
#define TELEMETRY_DMA_Channel_TX LL_DMA_CHANNEL_4
#define TELEMETRY_DMA_TX_Stream_IRQ DMA1_Stream6_IRQn
#define TELEMETRY_DMA_TX_IRQHandler DMA1_Stream6_IRQHandler
#define TELEMETRY_DMA_TX_FLAG_TC DMA_IT_TCIF6
#define TELEMETRY_USART_IRQHandler USART2_IRQHandler
#define TELEMETRY_USART_IRQn USART2_IRQn
#else
#define TELEMETRY_DIR_GPIO GPIO_PIN(GPIOD, 4) // PD.04
#define TELEMETRY_SET_INPUT 0
#define TELEMETRY_GPIO GPIOD
@@ -648,6 +753,7 @@
#define TELEMETRY_TIMER TIM11
#define TELEMETRY_TIMER_IRQn TIM1_TRG_COM_TIM11_IRQn
#define TELEMETRY_TIMER_IRQHandler TIM1_TRG_COM_TIM11_IRQHandler
#endif
// Software IRQ (Prio 5 -> FreeRTOS compatible)
#define TELEMETRY_RX_FRAME_EXTI_LINE LL_EXTI_LINE_4
@@ -677,7 +783,7 @@
#elif defined(PCBX10)
#define LCD_GPIO_NRST GPIO_PIN(GPIOI, 10) // PI.10
#endif
#if defined(PCBX10) && !defined(RADIO_T18)
#if defined(PCBX10) && !defined(RADIO_T18) && !defined(RADIO_V16)
#define LCD_VERTICAL_INVERT
#endif
#define LTDC_IRQ_PRIO 4
@@ -810,7 +916,7 @@
#endif
#if defined(RADIO_FAMILY_T16)
#if defined(RADIO_TX16S) || defined(RADIO_F16)
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
#define AUDIO_UNMUTE_DELAY 150 // ms
#else
#define AUDIO_UNMUTE_DELAY 120 // ms
@@ -843,7 +949,7 @@
#endif // HARDWARE_TOUCH
// First I2C Bus
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(PCBX12S) || defined(RADIO_T15)
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(PCBX12S) || defined(RADIO_T15) || defined(RADIO_V16)
#define I2C_B1 I2C1
#define I2C_B1_SCL_GPIO GPIO_PIN(GPIOB, 8) // PB.08
#define I2C_B1_SDA_GPIO GPIO_PIN(GPIOB, 9) // PB.09
@@ -864,7 +970,7 @@
#define I2C_B2_SDA_GPIO GPIO_PIN(GPIOB, 11) // PB.11
#define I2C_B2_GPIO_AF LL_GPIO_AF_4 // I2C2
#define I2C_B2_CLK_RATE 400000
#if defined(RADIO_TX16S) || defined(RADIO_F16)
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
#define I2C_B2_PWR_GPIO GPIO_PIN(GPIOA, 15) // PA.15
#endif
#endif
@@ -913,6 +1019,22 @@
// #define FLYSKY_HALL_DMA_Stream_TX LL_DMA_STREAM_4
#endif
#if defined(RADIO_V16)
// LED Strip
#define LED_STRIP_LENGTH 40
#define LED_STRIP_GPIO GPIO_PIN(GPIOA, 10) // PA.10 / TIM1_CH3
#define LED_STRIP_GPIO_AF LL_GPIO_AF_1 // TIM1/2
#define LED_STRIP_TIMER TIM1
#define LED_STRIP_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
#define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH3
#define LED_STRIP_TIMER_DMA DMA2
#define LED_STRIP_TIMER_DMA_CHANNEL LL_DMA_CHANNEL_6
#define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_5
#define LED_STRIP_TIMER_DMA_IRQn DMA2_Stream5_IRQn
#define LED_STRIP_TIMER_DMA_IRQHandler DMA2_Stream5_IRQHandler
#define LED_STRIP_REFRESH_PERIOD 50 //ms
#endif
// Internal PXX1 Module:
// -> let's assume all internal XJT modules used are either X10 or X12S type
#define EXTERNAL_ANTENNA
@@ -932,15 +1054,21 @@
#define INTMODULE_RX_DMA_CHANNEL LL_DMA_CHANNEL_4
#if defined(PCBX12S)
#define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOC, 2) // PC.02
#elif defined(RADIO_V16)
#define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOB, 0) // PB.00
#elif defined(PCBX10)
#define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOI, 9) // PI.09
#endif
#define INTMODULE_BOOTCMD_DEFAULT 0 // RESET
#if defined(RADIO_V16)
#define INTMODULE_BOOTCMD_DEFAULT 1 // RESET
#else
#define INTMODULE_BOOTCMD_DEFAULT 0 // RESET
#endif
// External Module
#define EXTMODULE_PWR_GPIO GPIO_PIN(GPIOB, 3) // PB.03
#define EXTERNAL_MODULE_PWR_OFF() gpio_clear(EXTMODULE_PWR_GPIO)
#if defined(PCBX10) && defined(PCBREV_EXPRESS)
#if (defined(PCBX10) && defined(PCBREV_EXPRESS)) || defined(RADIO_V16)
#define EXTMODULE_TX_GPIO GPIO_PIN(GPIOB, 10) // PB.10 (TIM2_CH3)
#define EXTMODULE_RX_GPIO GPIO_PIN(GPIOB, 11) // PB.11
#define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF1
@@ -964,6 +1092,10 @@
#define EXTMODULE_USART_TX_DMA_STREAM LL_DMA_STREAM_3
#define EXTMODULE_USART_RX_DMA_CHANNEL LL_DMA_CHANNEL_4
#define EXTMODULE_USART_RX_DMA_STREAM LL_DMA_STREAM_1
#if defined(RADIO_V16)
#define EXTMODULE_TX_INVERT_GPIO GPIO_PIN(GPIOI, 2) // PI.02
#define EXTMODULE_RX_INVERT_GPIO GPIO_PIN(GPIOI, 9) // PI.09
#endif
#elif defined(PCBX10) || PCBREV >= 13
#define EXTMODULE_TX_GPIO GPIO_PIN(GPIOA, 10) // PA.10 (TIM1_CH3)
#define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF1
@@ -995,10 +1127,17 @@
// Heartbeat
#define INTMODULE_HEARTBEAT
#define INTMODULE_HEARTBEAT_GPIO GPIO_PIN(GPIOD, 12) // PD.12 / TIM4_CH1
#define INTMODULE_HEARTBEAT_EXTI_PORT LL_SYSCFG_EXTI_PORTH
#define INTMODULE_HEARTBEAT_EXTI_SYS_LINE LL_SYSCFG_EXTI_LINE12
#define INTMODULE_HEARTBEAT_EXTI_LINE LL_EXTI_LINE_12
#if defined(RADIO_V16)
#define INTMODULE_HEARTBEAT_GPIO GPIO_PIN(GPIOB, 11) // PB.11 / TIM2_CH4
#define INTMODULE_HEARTBEAT_EXTI_PORT LL_SYSCFG_EXTI_PORTB
#define INTMODULE_HEARTBEAT_EXTI_SYS_LINE LL_SYSCFG_EXTI_LINE11
#define INTMODULE_HEARTBEAT_EXTI_LINE LL_EXTI_LINE_11
#else
#define INTMODULE_HEARTBEAT_GPIO GPIO_PIN(GPIOD, 12) // PD.12 / TIM4_CH1
#define INTMODULE_HEARTBEAT_EXTI_PORT LL_SYSCFG_EXTI_PORTH
#define INTMODULE_HEARTBEAT_EXTI_SYS_LINE LL_SYSCFG_EXTI_LINE12
#define INTMODULE_HEARTBEAT_EXTI_LINE LL_EXTI_LINE_12
#endif
// INTMODULE_HEARTBEAT_EXTI IRQ
#if !defined(USE_EXTI15_10_IRQ)
#define USE_EXTI15_10_IRQ
+4
View File
@@ -49,4 +49,8 @@
#define USB_NAME "FrSky X10"
#define USB_MANUFACTURER 'F', 'r', 'S', 'k', 'y', ' ', ' ', ' ' /* 8 bytes */
#define USB_PRODUCT 'X', '1', '0', ' ', ' ', ' ', ' ', ' ' /* 8 Bytes */
#elif defined(RADIO_V16)
#define USB_NAME "HelloRadioSky V16"
#define USB_MANUFACTURER 'H', 'R', 'S', 'k', 'y', ' ', ' ', ' ' /* 8 bytes */
#define USB_PRODUCT 'V', '1', '6', ' ', ' ', ' ', ' ', ' ' /* 8 Bytes */
#endif
+5
View File
@@ -194,6 +194,11 @@ def main():
cmake_options["PCBREV"] = "F16"
firmware_options = options_fatfish_f16
maxsize = 2 * 1024 * 1024
elif board_name == "v16":
cmake_options["PCB"] = "X10"
cmake_options["PCBREV"] = "V16"
firmware_options = options_helloradiosky_v16
maxsize = 2 * 1024 * 1024
else:
return INVALID_BOARD
+13
View File
@@ -319,6 +319,19 @@ options_fatfish_f16 = {
"externalaccessmod": ("HARDWARE_EXTERNAL_ACCESS_MOD", "YES", "NO"),
}
options_helloradiosky_v16 = {
"noheli": ("HELI", "NO", "YES"),
"lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"),
"nogvars": ("GVARS", "NO", "YES"),
"faimode": ("FAI", "YES", None),
"faichoice": ("FAI", "CHOICE", None),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
"flexr9m": ("MODULE_PROTOCOL_FLEX", "YES", None),
"bluetooth": ("BLUETOOTH", "YES", "NO"),
"internalgps": ("INTERNAL_GPS", "YES", "NO"),
"externalaccessmod": ("HARDWARE_EXTERNAL_ACCESS_MOD", "YES", "NO"),
}
options_commando8_t8 = {
"noheli": ("HELI", "NO", "YES"),
"lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"),
+1 -1
View File
@@ -2,7 +2,7 @@
LEGACY_NAMES = [
{
"targets": {"x10", "x10express", "t16", "tx16s", "t18", "f16"},
"targets": {"x10", "x10express", "t16", "tx16s", "t18", "f16", "v16"},
"inputs": {
"LH": {
"yaml": "Rud",
+7
View File
@@ -32,6 +32,13 @@ POT_CONFIG = {
"EXT3": {"default": "MULTIPOS"},
"EXT4": {"default": "MULTIPOS"}
},
"v16": {
"P1": {"default": "POT_CENTER"},
"P2": {"default": "MULTIPOS"},
"P3": {"default": "POT_CENTER"},
"SL1": {"default": "SLIDER"},
"SL2": {"default": "SLIDER"}
},
"mt12": {
"P1": {"default": "POT"},
"P2": {"default": "POT"},
+10
View File
@@ -69,6 +69,16 @@ SWITCH_CONFIG = {
"SG": {"default": "3POS"},
"SH": {"default": "TOGGLE"}
},
"v16": {
"SA": {"default": "3POS"},
"SB": {"default": "3POS"},
"SC": {"default": "3POS"},
"SD": {"default": "3POS"},
"SE": {"default": "3POS"},
"SF": {"default": "2POS"},
"SG": {"default": "3POS"},
"SH": {"default": "TOGGLE"}
},
"mt12": {
# left side
"SA": { "default": "3POS", "display": [ 0, 0 ] },
+5
View File
@@ -68,6 +68,11 @@ boards = {
"PCBREV": "F16",
"INTERNAL_MODULE_MULTI": "YES"
},
"V16": {
"PCB": "X10",
"PCBREV": "V16",
"INTERNAL_MODULE_MULTI": "YES"
},
"T12": {
"PCB": "X7",
"PCBREV": "T12",
+3
View File
@@ -116,6 +116,9 @@ get_target_build_options() {
f16)
BUILD_OPTIONS+="-DPCB=X10 -DPCBREV=F16"
;;
v16)
BUILD_OPTIONS+="-DPCB=X10 -DPCBREV=V16"
;;
nv14)
BUILD_OPTIONS+="-DPCB=NV14"
;;
+1 -1
View File
@@ -75,7 +75,7 @@ declare -a simulator_plugins=(x9lite x9lites
xlite xlites
nv14 el18 pl18 pl18ev
x10 x10express x12s
t15 t16 t18 t20 t20v2 tx16s f16)
t15 t16 t18 t20 t20v2 tx16s f16 v16)
for plugin in "${simulator_plugins[@]}"
do