From 313b196925454f79053c7f9a85febf512968fa73 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Mon, 28 Jul 2025 07:29:03 +0200 Subject: [PATCH 01/49] Logging HW definitions generator # Conflicts: # tools/generate-hw-defs.sh --- cmake/Macros.cmake | 4 -- radio/src/CMakeLists.txt | 4 +- radio/util/hw_defs/hal_json.py | 63 +++++++++---------- radio/util/hw_defs/logging_dict.py | 98 ++++++++++++++++++++++++++++++ tools/generate-hw-defs.sh | 2 +- 5 files changed, 132 insertions(+), 39 deletions(-) create mode 100644 radio/util/hw_defs/logging_dict.py diff --git a/cmake/Macros.cmake b/cmake/Macros.cmake index d6a929e8337..86735061426 100644 --- a/cmake/Macros.cmake +++ b/cmake/Macros.cmake @@ -104,10 +104,6 @@ function(AddHardwareDefTarget output) DEPENDS ${HW_DEF_SRC} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py ) - add_custom_command(OUTPUT ${output}.h - COMMAND ${GEN_HW_DEFS} > ${output}.h - DEPENDS ${HW_DEF_SRC} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py - ) endfunction() function(AddHWGenTarget input template output) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index e3988c7ba92..9e3fe87f874 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -104,7 +104,7 @@ set(HW_DESC_JSON ${FLAVOUR}.json) AddHardwareDefTarget(${HW_DESC_JSON}) # enable generating JSON definition separately for debugging -add_custom_target(hardware_defs DEPENDS ${HW_DESC_JSON} ${HW_DESC_JSON}.h) +add_custom_target(hardware_defs DEPENDS ${HW_DESC_JSON}) include(hal/CMakeLists.txt) @@ -719,5 +719,3 @@ if(CPU_FAMILY STREQUAL STM32) endif() PrintTargetReport("firmware") - -AddHardwareDefTarget(hardware_defs ${RADIO_DIRECTORY}/src/targets/hw_defs/${FLAVOUR}.json) diff --git a/radio/util/hw_defs/hal_json.py b/radio/util/hw_defs/hal_json.py index b803ba4f8f1..2f5fbe86379 100644 --- a/radio/util/hw_defs/hal_json.py +++ b/radio/util/hw_defs/hal_json.py @@ -1,4 +1,3 @@ - import re import sys import json @@ -6,39 +5,42 @@ from hal_switches import Switch, parse_switches from hal_adc import ADCInput, SPI_ADCInput, ADC, ADCInputParser from hal_keys import Key, Trim, parse_trims, parse_keys +from logging_dict import LoggingDict import legacy_names + # # Return a file handle or STDIN # def open_file(filename): - - if filename and not filename == '-': + if filename and not filename == "-": return open(filename) else: return sys.stdin + # # Read lines of defines into a dictionary # def parse_hw_defs(filename): - hw_defs = {} with open_file(filename) as file: for line in file.readlines(): - m = re.match(r'#define ([^\s]*)\s*(.*)', line.rstrip()) - name = m.group(1) - value = m.group(2) - if value.isnumeric(): - value = int(value) - elif not value: - value = None - hw_defs[name] = value + m = re.match(r"#define ([^\s]*)\s*(.*)", line.rstrip()) + if m: + name = m.group(1) + value = m.group(2) + if value.isnumeric(): + value = int(value) + elif not value: + value = None + hw_defs[name] = value return hw_defs + def prune_dict(d): # ret = {} # for k, v in d.items(): @@ -47,36 +49,36 @@ def prune_dict(d): # return ret return d -class DictEncoder(json.JSONEncoder): - def default(self, obj): - if isinstance(obj, Switch): - return prune_dict(obj.__dict__) - if isinstance(obj, ADCInput): - return prune_dict(obj.__dict__) - if isinstance(obj, SPI_ADCInput): - return prune_dict(obj.__dict__) - if isinstance(obj, ADC): - return prune_dict(obj.__dict__) - if isinstance(obj, Trim): - return prune_dict(obj.__dict__) - if isinstance(obj, Key): - return prune_dict(obj.__dict__) +class DictEncoder(json.JSONEncoder): + def default(self, o): + if isinstance(o, Switch): + return prune_dict(o.__dict__) + if isinstance(o, ADCInput): + return prune_dict(o.__dict__) + if isinstance(o, SPI_ADCInput): + return prune_dict(o.__dict__) + if isinstance(o, ADC): + return prune_dict(o.__dict__) + if isinstance(o, Trim): + return prune_dict(o.__dict__) + if isinstance(o, Key): + return prune_dict(o.__dict__) # Let the base class default method raise the TypeError - return json.JSONEncoder.default(self, obj) + return json.JSONEncoder.default(self, o) + # # Parse HAL defines into JSON # def parse_defines(filename, target): - - hw_defs = parse_hw_defs(filename) + hw_defs = LoggingDict(parse_hw_defs(filename)) out_defs = {} # parse ADC first, we might have switches using ADC legacy_inputs = legacy_names.inputs_by_target(target) - adc_parser = ADCInputParser(target,hw_defs,legacy_inputs) + adc_parser = ADCInputParser(target, hw_defs, legacy_inputs) adc_inputs = adc_parser.parse_inputs() out_defs["adc_inputs"] = adc_inputs @@ -90,4 +92,3 @@ def parse_defines(filename, target): out_defs["trims"] = trims print(json.dumps(out_defs, cls=DictEncoder, indent=2)) - diff --git a/radio/util/hw_defs/logging_dict.py b/radio/util/hw_defs/logging_dict.py new file mode 100644 index 00000000000..f3b0bf75aaa --- /dev/null +++ b/radio/util/hw_defs/logging_dict.py @@ -0,0 +1,98 @@ +import sys +from typing import Any, Dict, Iterator, KeysView, Optional, ValuesView, ItemsView + + +class LoggingDict: + """A dictionary wrapper that logs all lookups to stderr.""" + + def __init__(self, data: Optional[Dict[Any, Any]] = None): + self._data = data if data is not None else {} + + def __getitem__(self, key: Any) -> Any: + """Log the lookup and return the value.""" + print(f"{str(key)}", file=sys.stderr) + return self._data[key] + + def __setitem__(self, key: Any, value: Any) -> None: + """Set an item in the dictionary.""" + self._data[key] = value + + def __delitem__(self, key: Any) -> None: + """Delete an item from the dictionary.""" + del self._data[key] + + def __contains__(self, key: Any) -> bool: + """Check if key exists (this is also a lookup, so log it).""" + print(f"{str(key)}", file=sys.stderr) + return key in self._data + + def __len__(self) -> int: + """Return the length of the dictionary.""" + return len(self._data) + + def __iter__(self) -> Iterator: + """Return an iterator over the keys.""" + return iter(self._data) + + def __repr__(self) -> str: + """Return a string representation.""" + return f"LoggingDict({self._data})" + + def get(self, key: Any, default: Any = None) -> Any: + """Get a value with optional default (logs the lookup).""" + print(f"{str(key)}", file=sys.stderr) + return self._data.get(key, default) + + def keys(self) -> KeysView: + """Return dictionary keys.""" + return self._data.keys() + + def values(self) -> ValuesView: + """Return dictionary values.""" + return self._data.values() + + def items(self) -> ItemsView: + """Return dictionary items.""" + return self._data.items() + + def update(self, other: Dict[Any, Any]) -> None: + """Update the dictionary with another dictionary.""" + self._data.update(other) + + def clear(self) -> None: + """Clear all items from the dictionary.""" + self._data.clear() + + def pop(self, key: Any, default: Any = None) -> Any: + """Remove and return a value (logs the lookup).""" + print(f"{str(key)}", file=sys.stderr) + if default is None: + return self._data.pop(key) + return self._data.pop(key, default) + + def setdefault(self, key: Any, default: Any = None) -> Any: + """Get a value or set/return default (logs the lookup).""" + print(f"{str(key)}", file=sys.stderr) + return self._data.setdefault(key, default) + + +# Example usage +if __name__ == "__main__": + # Create a logging dictionary + d = LoggingDict({"a": 1, "b": 2, "c": 3}) + + # These operations will be logged to stderr + print("Value of 'a':", d["a"]) + print("Value of 'b':", d.get("b")) + print("Does 'c' exist?", "c" in d) + print("Does 'd' exist?", "d" in d) + + # Add new items + d["d"] = 4 + d["e"] = 5 + + # More logged lookups + print("Value of 'd':", d["d"]) + print("Popped 'e':", d.pop("e")) + + print("Final dictionary:", d) diff --git a/tools/generate-hw-defs.sh b/tools/generate-hw-defs.sh index 9fc027acfbf..1e895735603 100755 --- a/tools/generate-hw-defs.sh +++ b/tools/generate-hw-defs.sh @@ -9,7 +9,7 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" : "${SRCDIR:=$(dirname "$(pwd)/$0")/..}" -: ${FLAVOR:="nv14;el18;pl18;pl18ev;nb4p;st16;t12;t12max;t15;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;tpros;bumblebee;t20;t20v2;t14;lr3pro;mt12;gx12;tx12;tx12mk2;boxer;tx16s;x10;x10express;x12s;x7;x7access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites;f16;v14;v12;tx15"} +: ${FLAVOR:="nv14;el18;pl18;pl18ev;pl18u;nb4p;st16;t12;t12max;t15;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;tpros;bumblebee;t20;t20v2;t14;lr3pro;mt12;gx12;tx12;tx12mk2;boxer;tx16s;x10;x10express;x12s;x7;x7access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites;f16;v16;v14;v12;pa01;tx15"} : ${COMMON_OPTIONS:="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_RULE_MESSAGES=OFF -Wno-dev -DCMAKE_MESSAGE_LOG_LEVEL=WARNING"} # wipe build directory clean From 713a214ce2624d41233c2a26a12ab96f859cbd6d Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Mon, 28 Jul 2025 13:15:28 +0200 Subject: [PATCH 02/49] Defines and JSON hardware definitions --- hw_defs.sorted | 441 ++++++++++++++++++ radio/src/boards/hw_defs/boxer.json | 309 +++++++++++++ radio/src/boards/hw_defs/bumblebee.json | 378 ++++++++++++++++ radio/src/boards/hw_defs/commando8.json | 258 +++++++++++ radio/src/boards/hw_defs/el18.json | 323 +++++++++++++ radio/src/boards/hw_defs/f16.json | 417 +++++++++++++++++ radio/src/boards/hw_defs/gx12.json | 419 +++++++++++++++++ radio/src/boards/hw_defs/lr3pro.json | 238 ++++++++++ radio/src/boards/hw_defs/mt12.json | 287 ++++++++++++ radio/src/boards/hw_defs/nb4p.json | 150 +++++++ radio/src/boards/hw_defs/nv14.json | 323 +++++++++++++ radio/src/boards/hw_defs/pa01.json | 286 ++++++++++++ radio/src/boards/hw_defs/pl18.json | 294 ++++++++++++ radio/src/boards/hw_defs/pl18ev.json | 338 ++++++++++++++ radio/src/boards/hw_defs/pl18u.json | 309 +++++++++++++ radio/src/boards/hw_defs/pocket.json | 272 +++++++++++ radio/src/boards/hw_defs/st16.json | 386 ++++++++++++++++ radio/src/boards/hw_defs/t12.json | 314 +++++++++++++ radio/src/boards/hw_defs/t12max.json | 272 +++++++++++ radio/src/boards/hw_defs/t14.json | 272 +++++++++++ radio/src/boards/hw_defs/t15.json | 352 +++++++++++++++ radio/src/boards/hw_defs/t16.json | 431 ++++++++++++++++++ radio/src/boards/hw_defs/t18.json | 433 ++++++++++++++++++ radio/src/boards/hw_defs/t20.json | 511 +++++++++++++++++++++ radio/src/boards/hw_defs/t20v2.json | 511 +++++++++++++++++++++ radio/src/boards/hw_defs/t8.json | 254 +++++++++++ radio/src/boards/hw_defs/tlite.json | 238 ++++++++++ radio/src/boards/hw_defs/tpro.json | 344 ++++++++++++++ radio/src/boards/hw_defs/tpros.json | 272 +++++++++++ radio/src/boards/hw_defs/tprov2.json | 372 +++++++++++++++ radio/src/boards/hw_defs/tx12.json | 324 +++++++++++++ radio/src/boards/hw_defs/tx12mk2.json | 301 +++++++++++++ radio/src/boards/hw_defs/tx15.json | 322 +++++++++++++ radio/src/boards/hw_defs/tx16s.json | 439 ++++++++++++++++++ radio/src/boards/hw_defs/v12.json | 335 ++++++++++++++ radio/src/boards/hw_defs/v14.json | 335 ++++++++++++++ radio/src/boards/hw_defs/v16.json | 437 ++++++++++++++++++ radio/src/boards/hw_defs/x10.json | 437 ++++++++++++++++++ radio/src/boards/hw_defs/x10express.json | 437 ++++++++++++++++++ radio/src/boards/hw_defs/x12s.json | 430 ++++++++++++++++++ radio/src/boards/hw_defs/x7.json | 304 +++++++++++++ radio/src/boards/hw_defs/x7access.json | 290 ++++++++++++ radio/src/boards/hw_defs/x9d+.json | 357 +++++++++++++++ radio/src/boards/hw_defs/x9d+2019.json | 345 ++++++++++++++ radio/src/boards/hw_defs/x9d.json | 346 ++++++++++++++ radio/src/boards/hw_defs/x9e.json | 549 +++++++++++++++++++++++ radio/src/boards/hw_defs/x9lite.json | 249 ++++++++++ radio/src/boards/hw_defs/x9lites.json | 277 ++++++++++++ radio/src/boards/hw_defs/xlite.json | 255 +++++++++++ radio/src/boards/hw_defs/xlites.json | 283 ++++++++++++ radio/src/boards/hw_defs/zorro.json | 325 ++++++++++++++ 51 files changed, 17381 insertions(+) create mode 100644 hw_defs.sorted create mode 100644 radio/src/boards/hw_defs/boxer.json create mode 100644 radio/src/boards/hw_defs/bumblebee.json create mode 100644 radio/src/boards/hw_defs/commando8.json create mode 100644 radio/src/boards/hw_defs/el18.json create mode 100644 radio/src/boards/hw_defs/f16.json create mode 100644 radio/src/boards/hw_defs/gx12.json create mode 100644 radio/src/boards/hw_defs/lr3pro.json create mode 100644 radio/src/boards/hw_defs/mt12.json create mode 100644 radio/src/boards/hw_defs/nb4p.json create mode 100644 radio/src/boards/hw_defs/nv14.json create mode 100644 radio/src/boards/hw_defs/pa01.json create mode 100644 radio/src/boards/hw_defs/pl18.json create mode 100644 radio/src/boards/hw_defs/pl18ev.json create mode 100644 radio/src/boards/hw_defs/pl18u.json create mode 100644 radio/src/boards/hw_defs/pocket.json create mode 100644 radio/src/boards/hw_defs/st16.json create mode 100644 radio/src/boards/hw_defs/t12.json create mode 100644 radio/src/boards/hw_defs/t12max.json create mode 100644 radio/src/boards/hw_defs/t14.json create mode 100644 radio/src/boards/hw_defs/t15.json create mode 100644 radio/src/boards/hw_defs/t16.json create mode 100644 radio/src/boards/hw_defs/t18.json create mode 100644 radio/src/boards/hw_defs/t20.json create mode 100644 radio/src/boards/hw_defs/t20v2.json create mode 100644 radio/src/boards/hw_defs/t8.json create mode 100644 radio/src/boards/hw_defs/tlite.json create mode 100644 radio/src/boards/hw_defs/tpro.json create mode 100644 radio/src/boards/hw_defs/tpros.json create mode 100644 radio/src/boards/hw_defs/tprov2.json create mode 100644 radio/src/boards/hw_defs/tx12.json create mode 100644 radio/src/boards/hw_defs/tx12mk2.json create mode 100644 radio/src/boards/hw_defs/tx15.json create mode 100644 radio/src/boards/hw_defs/tx16s.json create mode 100644 radio/src/boards/hw_defs/v12.json create mode 100644 radio/src/boards/hw_defs/v14.json create mode 100644 radio/src/boards/hw_defs/v16.json create mode 100644 radio/src/boards/hw_defs/x10.json create mode 100644 radio/src/boards/hw_defs/x10express.json create mode 100644 radio/src/boards/hw_defs/x12s.json create mode 100644 radio/src/boards/hw_defs/x7.json create mode 100644 radio/src/boards/hw_defs/x7access.json create mode 100644 radio/src/boards/hw_defs/x9d+.json create mode 100644 radio/src/boards/hw_defs/x9d+2019.json create mode 100644 radio/src/boards/hw_defs/x9d.json create mode 100644 radio/src/boards/hw_defs/x9e.json create mode 100644 radio/src/boards/hw_defs/x9lite.json create mode 100644 radio/src/boards/hw_defs/x9lites.json create mode 100644 radio/src/boards/hw_defs/xlite.json create mode 100644 radio/src/boards/hw_defs/xlites.json create mode 100644 radio/src/boards/hw_defs/zorro.json diff --git a/hw_defs.sorted b/hw_defs.sorted new file mode 100644 index 00000000000..b3b91763812 --- /dev/null +++ b/hw_defs.sorted @@ -0,0 +1,441 @@ +ADC_CHANNEL_BATT +ADC_CHANNEL_EXT1 +ADC_CHANNEL_EXT2 +ADC_CHANNEL_EXT3 +ADC_CHANNEL_EXT4 +ADC_CHANNEL_MOUSE1 +ADC_CHANNEL_MOUSE2 +ADC_CHANNEL_POT1 +ADC_CHANNEL_POT2 +ADC_CHANNEL_POT3 +ADC_CHANNEL_POT4 +ADC_CHANNEL_RAW1 +ADC_CHANNEL_RAW2 +ADC_CHANNEL_RAW3 +ADC_CHANNEL_RAW4 +ADC_CHANNEL_RTC_BAT +ADC_CHANNEL_SLIDER1 +ADC_CHANNEL_SLIDER2 +ADC_CHANNEL_SLIDER3 +ADC_CHANNEL_SLIDER4 +ADC_CHANNEL_STICK_LH +ADC_CHANNEL_STICK_LV +ADC_CHANNEL_STICK_RH +ADC_CHANNEL_STICK_RV +ADC_CHANNEL_STICK_ST +ADC_CHANNEL_STICK_TH +ADC_CHANNEL_SWA +ADC_CHANNEL_SWB +ADC_CHANNEL_SWC +ADC_CHANNEL_SWD +ADC_CHANNEL_SWE +ADC_CHANNEL_SWF +ADC_CHANNEL_SWG +ADC_CHANNEL_SWH +ADC_DIRECTION +ADC_DMA +ADC_DMA_CHANNEL +ADC_DMA_STREAM +ADC_DMA_STREAM_IRQ +ADC_DMA_STREAM_IRQHandler +ADC_EXT +ADC_EXT_CHANNELS +ADC_EXT_DMA +ADC_EXT_DMA_CHANNEL +ADC_EXT_DMA_STREAM +ADC_EXT_DMA_STREAM_IRQ +ADC_EXT_DMA_STREAM_IRQHandler +ADC_EXT_SAMPTIME +ADC_GPIO_PIN_BATT +ADC_GPIO_PIN_EXT1 +ADC_GPIO_PIN_EXT2 +ADC_GPIO_PIN_EXT3 +ADC_GPIO_PIN_EXT4 +ADC_GPIO_PIN_MOUSE1 +ADC_GPIO_PIN_MOUSE2 +ADC_GPIO_PIN_POT1 +ADC_GPIO_PIN_POT2 +ADC_GPIO_PIN_POT3 +ADC_GPIO_PIN_POT4 +ADC_GPIO_PIN_RAW1 +ADC_GPIO_PIN_RAW2 +ADC_GPIO_PIN_RAW3 +ADC_GPIO_PIN_RAW4 +ADC_GPIO_PIN_SLIDER1 +ADC_GPIO_PIN_SLIDER2 +ADC_GPIO_PIN_SLIDER3 +ADC_GPIO_PIN_SLIDER4 +ADC_GPIO_PIN_STICK_LH +ADC_GPIO_PIN_STICK_LV +ADC_GPIO_PIN_STICK_RH +ADC_GPIO_PIN_STICK_RV +ADC_GPIO_PIN_STICK_ST +ADC_GPIO_PIN_STICK_TH +ADC_GPIO_PIN_SWA +ADC_GPIO_PIN_SWB +ADC_GPIO_PIN_SWC +ADC_GPIO_PIN_SWD +ADC_GPIO_PIN_SWE +ADC_GPIO_PIN_SWF +ADC_GPIO_PIN_SWG +ADC_GPIO_PIN_SWH +ADC_GPIO_PIN_SWI +ADC_GPIO_PIN_SWJ +ADC_GPIO_PIN_SWK +ADC_GPIO_PIN_SWL +ADC_GPIO_PIN_SWM +ADC_GPIO_PIN_SWN +ADC_GPIO_PIN_SWO +ADC_GPIO_PIN_SWP +ADC_GPIO_PIN_SWQ +ADC_GPIO_PIN_SWR +ADC_GPIO_PIN_SWS +ADC_GPIO_PIN_SWT +ADC_GPIO_PIN_SWU +ADC_GPIO_PIN_SWV +ADC_GPIO_PIN_SWW +ADC_GPIO_PIN_SWX +ADC_GPIO_PIN_SWY +ADC_GPIO_PIN_SWZ +ADC_GPIOA_PINS +ADC_GPIOB_PINS +ADC_GPIOC_PINS +ADC_GPIOD_PINS +ADC_GPIOE_PINS +ADC_GPIOF_PINS +ADC_GPIOG_PINS +ADC_GPIOH_PINS +ADC_GPIOI_PINS +ADC_GPIOJ_PINS +ADC_GPIOK_PINS +ADC_GPIOL_PINS +ADC_GPIOM_PINS +ADC_GPION_PINS +ADC_GPIOO_PINS +ADC_GPIOP_PINS +ADC_GPIOQ_PINS +ADC_GPIOR_PINS +ADC_GPIOS_PINS +ADC_GPIOT_PINS +ADC_GPIOU_PINS +ADC_GPIOV_PINS +ADC_GPIOW_PINS +ADC_GPIOX_PINS +ADC_GPIOY_PINS +ADC_GPIOZ_PINS +ADC_MAIN +ADC_SAMPTIME +ADC_SPI +ADC_SPI_BATT +ADC_SPI_EXT1 +ADC_SPI_EXT2 +ADC_SPI_EXT3 +ADC_SPI_EXT4 +ADC_SPI_GPIO_PIN_CS +ADC_SPI_GPIO_PIN_MISO +ADC_SPI_GPIO_PIN_MOSI +ADC_SPI_GPIO_PIN_SCK +ADC_SPI_MOUSE1 +ADC_SPI_MOUSE2 +ADC_SPI_POT1 +ADC_SPI_POT2 +ADC_SPI_POT3 +ADC_SPI_POT4 +ADC_SPI_RAW1 +ADC_SPI_RAW2 +ADC_SPI_RAW3 +ADC_SPI_RAW4 +ADC_SPI_RTC_BAT +ADC_SPI_SLIDER1 +ADC_SPI_SLIDER2 +ADC_SPI_SLIDER3 +ADC_SPI_SLIDER4 +ADC_SPI_STICK_LH +ADC_SPI_STICK_LV +ADC_SPI_STICK_RH +ADC_SPI_STICK_RV +ADC_SPI_STICK_ST +ADC_SPI_STICK_TH +ADC_SPI_SWA +ADC_SPI_SWB +ADC_SPI_SWC +ADC_SPI_SWD +ADC_SPI_SWE +ADC_SPI_SWF +ADC_SPI_SWG +ADC_SPI_SWH +ADC_SPI_SWI +ADC_SPI_SWJ +ADC_SPI_SWK +ADC_SPI_SWL +ADC_SPI_SWM +ADC_SPI_SWN +ADC_SPI_SWO +ADC_SPI_SWP +ADC_SPI_SWQ +ADC_SPI_SWR +ADC_SPI_SWS +ADC_SPI_SWT +ADC_SPI_SWU +ADC_SPI_SWV +ADC_SPI_SWW +ADC_SPI_SWX +ADC_SPI_SWY +ADC_SPI_SWZ +FUNCTION_SWITCH_1 +FUNCTION_SWITCH_2 +FUNCTION_SWITCH_3 +FUNCTION_SWITCH_4 +FUNCTION_SWITCH_5 +FUNCTION_SWITCH_6 +KEYS_GPIO_ACTIVE_HIGH +KEYS_GPIO_PIN_DOWN +KEYS_GPIO_PIN_ENTER +KEYS_GPIO_PIN_EXIT +KEYS_GPIO_PIN_LEFT +KEYS_GPIO_PIN_MDL +KEYS_GPIO_PIN_MENU +KEYS_GPIO_PIN_MINUS +KEYS_GPIO_PIN_PAGEDN +KEYS_GPIO_PIN_PAGEUP +KEYS_GPIO_PIN_PLUS +KEYS_GPIO_PIN_RIGHT +KEYS_GPIO_PIN_SHIFT +KEYS_GPIO_PIN_SYS +KEYS_GPIO_PIN_TELE +KEYS_GPIO_PIN_UP +KEYS_GPIO_REG_DOWN +KEYS_GPIO_REG_ENTER +KEYS_GPIO_REG_EXIT +KEYS_GPIO_REG_LEFT +KEYS_GPIO_REG_MDL +KEYS_GPIO_REG_MENU +KEYS_GPIO_REG_MINUS +KEYS_GPIO_REG_PAGEDN +KEYS_GPIO_REG_PAGEUP +KEYS_GPIO_REG_PLUS +KEYS_GPIO_REG_RIGHT +KEYS_GPIO_REG_SHIFT +KEYS_GPIO_REG_SYS +KEYS_GPIO_REG_TELE +KEYS_GPIO_REG_UP +STICK_PWM_CHANNEL_LH +STICK_PWM_CHANNEL_LV +STICK_PWM_CHANNEL_RH +STICK_PWM_CHANNEL_RV +SWITCHES_A_CFS_IDX +SWITCHES_A_INVERTED +SWITCHES_B_CFS_IDX +SWITCHES_B_INVERTED +SWITCHES_C_CFS_IDX +SWITCHES_C_INVERTED +SWITCHES_D_CFS_IDX +SWITCHES_D_INVERTED +SWITCHES_E_CFS_IDX +SWITCHES_E_INVERTED +SWITCHES_F_CFS_IDX +SWITCHES_F_INVERTED +SWITCHES_G_CFS_IDX +SWITCHES_G_INVERTED +SWITCHES_GPIO_PIN_A +SWITCHES_GPIO_PIN_A_H +SWITCHES_GPIO_PIN_A_L +SWITCHES_GPIO_PIN_B +SWITCHES_GPIO_PIN_B_H +SWITCHES_GPIO_PIN_B_L +SWITCHES_GPIO_PIN_C +SWITCHES_GPIO_PIN_C_H +SWITCHES_GPIO_PIN_C_L +SWITCHES_GPIO_PIN_D +SWITCHES_GPIO_PIN_D_H +SWITCHES_GPIO_PIN_D_L +SWITCHES_GPIO_PIN_E +SWITCHES_GPIO_PIN_E_H +SWITCHES_GPIO_PIN_E_L +SWITCHES_GPIO_PIN_F +SWITCHES_GPIO_PIN_F_H +SWITCHES_GPIO_PIN_F_L +SWITCHES_GPIO_PIN_G +SWITCHES_GPIO_PIN_G_H +SWITCHES_GPIO_PIN_G_L +SWITCHES_GPIO_PIN_H +SWITCHES_GPIO_PIN_I +SWITCHES_GPIO_PIN_I_H +SWITCHES_GPIO_PIN_I_L +SWITCHES_GPIO_PIN_J +SWITCHES_GPIO_PIN_J_H +SWITCHES_GPIO_PIN_J_L +SWITCHES_GPIO_PIN_K +SWITCHES_GPIO_PIN_K_H +SWITCHES_GPIO_PIN_K_L +SWITCHES_GPIO_PIN_L +SWITCHES_GPIO_PIN_L_H +SWITCHES_GPIO_PIN_L_L +SWITCHES_GPIO_PIN_M +SWITCHES_GPIO_PIN_M_H +SWITCHES_GPIO_PIN_M_L +SWITCHES_GPIO_PIN_N +SWITCHES_GPIO_PIN_N_H +SWITCHES_GPIO_PIN_N_L +SWITCHES_GPIO_PIN_O +SWITCHES_GPIO_PIN_O_H +SWITCHES_GPIO_PIN_O_L +SWITCHES_GPIO_PIN_P +SWITCHES_GPIO_PIN_P_H +SWITCHES_GPIO_PIN_P_L +SWITCHES_GPIO_PIN_Q_H +SWITCHES_GPIO_PIN_Q_L +SWITCHES_GPIO_PIN_R_H +SWITCHES_GPIO_PIN_R_L +SWITCHES_GPIO_REG_A +SWITCHES_GPIO_REG_A_H +SWITCHES_GPIO_REG_A_L +SWITCHES_GPIO_REG_B +SWITCHES_GPIO_REG_B_H +SWITCHES_GPIO_REG_B_L +SWITCHES_GPIO_REG_C +SWITCHES_GPIO_REG_C_H +SWITCHES_GPIO_REG_C_L +SWITCHES_GPIO_REG_D +SWITCHES_GPIO_REG_D_H +SWITCHES_GPIO_REG_D_L +SWITCHES_GPIO_REG_E +SWITCHES_GPIO_REG_E_H +SWITCHES_GPIO_REG_E_L +SWITCHES_GPIO_REG_F +SWITCHES_GPIO_REG_F_H +SWITCHES_GPIO_REG_F_L +SWITCHES_GPIO_REG_G +SWITCHES_GPIO_REG_G_H +SWITCHES_GPIO_REG_G_L +SWITCHES_GPIO_REG_H +SWITCHES_GPIO_REG_H_H +SWITCHES_GPIO_REG_I +SWITCHES_GPIO_REG_I_H +SWITCHES_GPIO_REG_I_L +SWITCHES_GPIO_REG_J +SWITCHES_GPIO_REG_J_H +SWITCHES_GPIO_REG_J_L +SWITCHES_GPIO_REG_K +SWITCHES_GPIO_REG_K_H +SWITCHES_GPIO_REG_K_L +SWITCHES_GPIO_REG_L +SWITCHES_GPIO_REG_L_H +SWITCHES_GPIO_REG_L_L +SWITCHES_GPIO_REG_M +SWITCHES_GPIO_REG_M_H +SWITCHES_GPIO_REG_M_L +SWITCHES_GPIO_REG_N +SWITCHES_GPIO_REG_N_H +SWITCHES_GPIO_REG_N_L +SWITCHES_GPIO_REG_O +SWITCHES_GPIO_REG_O_H +SWITCHES_GPIO_REG_O_L +SWITCHES_GPIO_REG_P +SWITCHES_GPIO_REG_P_H +SWITCHES_GPIO_REG_P_L +SWITCHES_GPIO_REG_Q +SWITCHES_GPIO_REG_Q_H +SWITCHES_GPIO_REG_Q_L +SWITCHES_GPIO_REG_R +SWITCHES_GPIO_REG_R_H +SWITCHES_GPIO_REG_R_L +SWITCHES_GPIO_REG_S +SWITCHES_GPIO_REG_S_H +SWITCHES_GPIO_REG_T +SWITCHES_GPIO_REG_T_H +SWITCHES_GPIO_REG_U +SWITCHES_GPIO_REG_U_H +SWITCHES_GPIO_REG_V +SWITCHES_GPIO_REG_V_H +SWITCHES_GPIO_REG_W +SWITCHES_GPIO_REG_W_H +SWITCHES_GPIO_REG_X +SWITCHES_GPIO_REG_X_H +SWITCHES_GPIO_REG_Y +SWITCHES_GPIO_REG_Y_H +SWITCHES_GPIO_REG_Z +SWITCHES_GPIO_REG_Z_H +SWITCHES_H_CFS_IDX +SWITCHES_H_INVERTED +SWITCHES_I_CFS_IDX +SWITCHES_I_INVERTED +SWITCHES_J_CFS_IDX +SWITCHES_J_INVERTED +SWITCHES_K_CFS_IDX +SWITCHES_K_INVERTED +SWITCHES_L_CFS_IDX +SWITCHES_L_INVERTED +SWITCHES_M_CFS_IDX +SWITCHES_M_INVERTED +SWITCHES_N_CFS_IDX +SWITCHES_N_INVERTED +SWITCHES_O_CFS_IDX +SWITCHES_O_INVERTED +SWITCHES_P_CFS_IDX +SWITCHES_P_INVERTED +SWITCHES_Q_CFS_IDX +SWITCHES_Q_INVERTED +SWITCHES_R_CFS_IDX +SWITCHES_R_INVERTED +TRIMS_GPIO_ACTIVE_HIGH +TRIMS_GPIO_PIN_LHL +TRIMS_GPIO_PIN_LHR +TRIMS_GPIO_PIN_LSD +TRIMS_GPIO_PIN_LSU +TRIMS_GPIO_PIN_LVD +TRIMS_GPIO_PIN_LVU +TRIMS_GPIO_PIN_RHL +TRIMS_GPIO_PIN_RHR +TRIMS_GPIO_PIN_RSD +TRIMS_GPIO_PIN_RSU +TRIMS_GPIO_PIN_RVD +TRIMS_GPIO_PIN_RVU +TRIMS_GPIO_PIN_T1L +TRIMS_GPIO_PIN_T1R +TRIMS_GPIO_PIN_T2L +TRIMS_GPIO_PIN_T2R +TRIMS_GPIO_PIN_T3L +TRIMS_GPIO_PIN_T3R +TRIMS_GPIO_PIN_T4L +TRIMS_GPIO_PIN_T4R +TRIMS_GPIO_PIN_T5L +TRIMS_GPIO_PIN_T5R +TRIMS_GPIO_PIN_T7L +TRIMS_GPIO_PIN_T7R +TRIMS_GPIO_PIN_T8D +TRIMS_GPIO_PIN_T8U +TRIMS_GPIO_REG_LHL +TRIMS_GPIO_REG_LHR +TRIMS_GPIO_REG_LSD +TRIMS_GPIO_REG_LSU +TRIMS_GPIO_REG_LVD +TRIMS_GPIO_REG_LVU +TRIMS_GPIO_REG_RHL +TRIMS_GPIO_REG_RHR +TRIMS_GPIO_REG_RSD +TRIMS_GPIO_REG_RSU +TRIMS_GPIO_REG_RVD +TRIMS_GPIO_REG_RVU +TRIMS_GPIO_REG_T1L +TRIMS_GPIO_REG_T1R +TRIMS_GPIO_REG_T2L +TRIMS_GPIO_REG_T2R +TRIMS_GPIO_REG_T3L +TRIMS_GPIO_REG_T3R +TRIMS_GPIO_REG_T4L +TRIMS_GPIO_REG_T4R +TRIMS_GPIO_REG_T5L +TRIMS_GPIO_REG_T5R +TRIMS_GPIO_REG_T6D +TRIMS_GPIO_REG_T6U +TRIMS_GPIO_REG_T7L +TRIMS_GPIO_REG_T7R +TRIMS_GPIO_REG_T8D +TRIMS_GPIO_REG_T8U +TRIMS_VIRTUAL_LH +TRIMS_VIRTUAL_LV +TRIMS_VIRTUAL_RH +TRIMS_VIRTUAL_RV +TRIMS_VIRTUAL_ST +TRIMS_VIRTUAL_TH diff --git a/radio/src/boards/hw_defs/boxer.json b/radio/src/boards/hw_defs/boxer.json new file mode 100644 index 00000000000..85e8913938f --- /dev/null +++ b/radio/src/boards/hw_defs/boxer.json @@ -0,0 +1,309 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5", + "label": "6P", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_1", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/bumblebee.json b/radio/src/boards/hw_defs/bumblebee.json new file mode 100644 index 00000000000..a6f8915e3bb --- /dev/null +++ b/radio/src/boards/hw_defs/bumblebee.json @@ -0,0 +1,378 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_9", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_15", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "inc": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/commando8.json b/radio/src/boards/hw_defs/commando8.json new file mode 100644 index 00000000000..0f73209ce20 --- /dev/null +++ b/radio/src/boards/hw_defs/commando8.json @@ -0,0 +1,258 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "pwm_channel": 1, + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "pwm_channel": 0 + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "pwm_channel": 2, + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "pwm_channel": 3 + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOC", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "BCK" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "Left" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "Right" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_PLUS", + "name": "PLUS", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true, + "key": "KEY_MINUS", + "name": "MINUS", + "label": "Down" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_1", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/el18.json b/radio/src/boards/hw_defs/el18.json new file mode 100644 index 00000000000..28ef98fedf6 --- /dev/null +++ b/radio/src/boards/hw_defs/el18.json @@ -0,0 +1,323 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_4" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWA", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6" + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true + }, + { + "name": "SWG", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true + }, + { + "name": "SWH", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWA", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWG", + "is_cfs": false + }, + { + "name": "SH", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWH", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_11", + "active_low": false, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": false, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_2", + "active_low": false + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": false + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": false + }, + "inc": { + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_7", + "active_low": false + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_0", + "active_low": false + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_15", + "active_low": false + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": false + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "active_low": false + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/f16.json b/radio/src/boards/hw_defs/f16.json new file mode 100644 index 00000000000..436b0aaabbf --- /dev/null +++ b/radio/src/boards/hw_defs/f16.json @@ -0,0 +1,417 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/gx12.json b/radio/src/boards/hw_defs/gx12.json new file mode 100644 index 00000000000..0dec260a49c --- /dev/null +++ b/radio/src/boards/hw_defs/gx12.json @@ -0,0 +1,419 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "P1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true, + "label": "P2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "S1", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5", + "inverted": true, + "label": "S2", + "short_label": "S2", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_14", + "is_cfs": true, + "cfs_idx": 7 + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": null, + "pin_high": "PCA95XX_PIN_10", + "gpio_low": null, + "pin_low": "PCA95XX_PIN_11", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": null, + "pin_high": "PCA95XX_PIN_5", + "gpio_low": null, + "pin_low": "PCA95XX_PIN_4", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_1", + "is_cfs": true, + "cfs_idx": 6 + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": null, + "pin_high": "PCA95XX_PIN_12", + "gpio_low": null, + "pin_low": "PCA95XX_PIN_13", + "is_cfs": false + }, + { + "name": "SF", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": null, + "pin_high": "PCA95XX_PIN_3", + "gpio_low": null, + "pin_low": "PCA95XX_PIN_2", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 2 + ], + "gpio": null, + "pin": "PCA95XX_PIN_15", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": null, + "pin": "PCA95XX_PIN_0", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_0", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_1", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_2", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_3", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_4", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_5", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/lr3pro.json b/radio/src/boards/hw_defs/lr3pro.json new file mode 100644 index 00000000000..a663f8fde14 --- /dev/null +++ b/radio/src/boards/hw_defs/lr3pro.json @@ -0,0 +1,238 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_UP", + "name": "UP", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_DOWN", + "name": "DOWN", + "label": "Down" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_LEFT", + "name": "LEFT", + "label": "Left" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_RIGHT", + "name": "RIGHT", + "label": "Right" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/mt12.json b/radio/src/boards/hw_defs/mt12.json new file mode 100644 index 00000000000..b92e81cdad2 --- /dev/null +++ b/radio/src/boards/hw_defs/mt12.json @@ -0,0 +1,287 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "ST", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "TH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5", + "label": "S3", + "short_label": "3", + "default": "NONE" + }, + { + "name": "P4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S4", + "short_label": "4", + "default": "NONE" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/nb4p.json b/radio/src/boards/hw_defs/nb4p.json new file mode 100644 index 00000000000..d0013682de2 --- /dev/null +++ b/radio/src/boards/hw_defs/nb4p.json @@ -0,0 +1,150 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "ST", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "TH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "VR1L", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7", + "label": "VR1R", + "short_label": "2", + "default": "POT" + }, + { + "name": "RAW1", + "type": "RAW", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11" + }, + { + "name": "RAW2", + "type": "RAW", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RAW3", + "type": "RAW", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6" + }, + { + "name": "RAW4", + "type": "RAW", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "is_cfs": false + } + ], + "keys": [ + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + } + ], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + } + ] +} diff --git a/radio/src/boards/hw_defs/nv14.json b/radio/src/boards/hw_defs/nv14.json new file mode 100644 index 00000000000..3c90e3504a1 --- /dev/null +++ b/radio/src/boards/hw_defs/nv14.json @@ -0,0 +1,323 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_4" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWA", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6" + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true + }, + { + "name": "SWG", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true + }, + { + "name": "SWH", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWA", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWG", + "is_cfs": false + }, + { + "name": "SH", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWH", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_11", + "active_low": false, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": false, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_2", + "active_low": false + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": false + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": false + }, + "inc": { + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_7", + "active_low": false + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_0", + "active_low": false + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_15", + "active_low": false + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": false + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "active_low": false + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/pa01.json b/radio/src/boards/hw_defs/pa01.json new file mode 100644 index 00000000000..70b1814c1e2 --- /dev/null +++ b/radio/src/boards/hw_defs/pa01.json @@ -0,0 +1,286 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC1", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_64CYCLES_5" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC3", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_64CYCLES_5" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_15", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_19", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "AW9523B_PIN_0", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "AW9523B_PIN_1", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "AW9523B_PIN_2", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "AW9523B_PIN_3", + "is_cfs": true, + "cfs_idx": 3 + } + ], + "keys": [ + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + } + ] +} diff --git a/radio/src/boards/hw_defs/pl18.json b/radio/src/boards/hw_defs/pl18.json new file mode 100644 index 00000000000..53ff09750e3 --- /dev/null +++ b/radio/src/boards/hw_defs/pl18.json @@ -0,0 +1,294 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "S3", + "short_label": "3", + "default": "POT" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7", + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWG", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9" + }, + { + "name": "SWH", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_9", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWG", + "is_cfs": false + }, + { + "name": "SH", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWH", + "is_cfs": false + } + ], + "keys": [], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + }, + { + "name": "T5" + }, + { + "name": "T6" + }, + { + "name": "T7" + }, + { + "name": "T8" + } + ] +} diff --git a/radio/src/boards/hw_defs/pl18ev.json b/radio/src/boards/hw_defs/pl18ev.json new file mode 100644 index 00000000000..d90b9a2256f --- /dev/null +++ b/radio/src/boards/hw_defs/pl18ev.json @@ -0,0 +1,338 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "S3", + "short_label": "3", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7", + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5", + "label": "EXT1", + "short_label": "E1", + "default": "POT_CENTER" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "label": "EXT2", + "short_label": "E2", + "default": "POT_CENTER" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "label": "EXT3", + "short_label": "E3", + "default": "MULTIPOS" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4", + "default": "MULTIPOS" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWG", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9" + }, + { + "name": "SWH", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_9", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWG", + "is_cfs": false + }, + { + "name": "SH", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWH", + "is_cfs": false + } + ], + "keys": [], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + }, + { + "name": "T5" + }, + { + "name": "T6" + }, + { + "name": "T7" + }, + { + "name": "T8" + } + ] +} diff --git a/radio/src/boards/hw_defs/pl18u.json b/radio/src/boards/hw_defs/pl18u.json new file mode 100644 index 00000000000..9b1361e754d --- /dev/null +++ b/radio/src/boards/hw_defs/pl18u.json @@ -0,0 +1,309 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "S3", + "short_label": "3", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWG", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "inverted": true + }, + { + "name": "SWH", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_6", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_14", + "gpio_low": "GPIOH", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWG", + "is_cfs": false + }, + { + "name": "SH", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWH", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + } + ], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + }, + { + "name": "T5" + }, + { + "name": "T6" + } + ] +} diff --git a/radio/src/boards/hw_defs/pocket.json b/radio/src/boards/hw_defs/pocket.json new file mode 100644 index 00000000000..2bf00537e9e --- /dev/null +++ b/radio/src/boards/hw_defs/pocket.json @@ -0,0 +1,272 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/st16.json b/radio/src/boards/hw_defs/st16.json new file mode 100644 index 00000000000..cb4a50b3d70 --- /dev/null +++ b/radio/src/boards/hw_defs/st16.json @@ -0,0 +1,386 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC1", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_8CYCLES_5" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC3", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_64CYCLES_5" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_16" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_17" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_3", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_5", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_9", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWA", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_7" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWA", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_6", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_0", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_1", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_2", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_3", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_4", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_5", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_14", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "MENU" + } + ], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + } + ] +} diff --git a/radio/src/boards/hw_defs/t12.json b/radio/src/boards/hw_defs/t12.json new file mode 100644 index 00000000000..48785f16ccc --- /dev/null +++ b/radio/src/boards/hw_defs/t12.json @@ -0,0 +1,314 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_UP", + "name": "UP", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_DOWN", + "name": "DOWN", + "label": "Down" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_LEFT", + "name": "LEFT", + "label": "Left" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_RIGHT", + "name": "RIGHT", + "label": "Right" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t12max.json b/radio/src/boards/hw_defs/t12max.json new file mode 100644 index 00000000000..6ed45144ca8 --- /dev/null +++ b/radio/src/boards/hw_defs/t12max.json @@ -0,0 +1,272 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t14.json b/radio/src/boards/hw_defs/t14.json new file mode 100644 index 00000000000..2a90708bc2e --- /dev/null +++ b/radio/src/boards/hw_defs/t14.json @@ -0,0 +1,272 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t15.json b/radio/src/boards/hw_defs/t15.json new file mode 100644 index 00000000000..b39162d033f --- /dev/null +++ b/radio/src/boards/hw_defs/t15.json @@ -0,0 +1,352 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOH", + "pin_low": "LL_GPIO_PIN_9", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOH", + "pin_low": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOI", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOH", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_7", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t16.json b/radio/src/boards/hw_defs/t16.json new file mode 100644 index 00000000000..2de99252f11 --- /dev/null +++ b/radio/src/boards/hw_defs/t16.json @@ -0,0 +1,431 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t18.json b/radio/src/boards/hw_defs/t18.json new file mode 100644 index 00000000000..5b78ca04313 --- /dev/null +++ b/radio/src/boards/hw_defs/t18.json @@ -0,0 +1,433 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t20.json b/radio/src/boards/hw_defs/t20.json new file mode 100644 index 00000000000..e66c3520131 --- /dev/null +++ b/radio/src/boards/hw_defs/t20.json @@ -0,0 +1,511 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "inverted": true, + "label": "S3", + "short_label": "3", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S4", + "short_label": "4", + "default": "SLIDER" + }, + { + "name": "SL3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "inverted": true, + "label": "SL", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_9", + "inverted": true, + "label": "SR", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": true, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": true, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 4 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 4 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_15", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "inc": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T7", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + }, + { + "name": "T8", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t20v2.json b/radio/src/boards/hw_defs/t20v2.json new file mode 100644 index 00000000000..11e029d52a8 --- /dev/null +++ b/radio/src/boards/hw_defs/t20v2.json @@ -0,0 +1,511 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "inverted": true, + "label": "S3", + "short_label": "3", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S4", + "short_label": "4", + "default": "SLIDER" + }, + { + "name": "SL3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "inverted": true, + "label": "SL", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_9", + "inverted": true, + "label": "SR", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": true, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": true, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 4 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 4 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_15", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "inc": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T7", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + }, + { + "name": "T8", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t8.json b/radio/src/boards/hw_defs/t8.json new file mode 100644 index 00000000000..ae0b91c12cf --- /dev/null +++ b/radio/src/boards/hw_defs/t8.json @@ -0,0 +1,254 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "ENT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_PLUS", + "name": "PLUS", + "label": "(+)" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_MINUS", + "name": "MINUS", + "label": "(-)" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tlite.json b/radio/src/boards/hw_defs/tlite.json new file mode 100644 index 00000000000..0b89aff882c --- /dev/null +++ b/radio/src/boards/hw_defs/tlite.json @@ -0,0 +1,238 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "ENT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_UP", + "name": "UP", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_DOWN", + "name": "DOWN", + "label": "Down" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_LEFT", + "name": "LEFT", + "label": "Left/SYS" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_RIGHT", + "name": "RIGHT", + "label": "Right/MDL" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tpro.json b/radio/src/boards/hw_defs/tpro.json new file mode 100644 index 00000000000..142e356107c --- /dev/null +++ b/radio/src/boards/hw_defs/tpro.json @@ -0,0 +1,344 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_8", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 2 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_9", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_6", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_5", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_4", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tpros.json b/radio/src/boards/hw_defs/tpros.json new file mode 100644 index 00000000000..3c9e33b3d08 --- /dev/null +++ b/radio/src/boards/hw_defs/tpros.json @@ -0,0 +1,272 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tprov2.json b/radio/src/boards/hw_defs/tprov2.json new file mode 100644 index 00000000000..e372676d807 --- /dev/null +++ b/radio/src/boards/hw_defs/tprov2.json @@ -0,0 +1,372 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_8", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_9", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_6", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_5", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_4", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tx12.json b/radio/src/boards/hw_defs/tx12.json new file mode 100644 index 00000000000..3b3c291f97d --- /dev/null +++ b/radio/src/boards/hw_defs/tx12.json @@ -0,0 +1,324 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SF", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tx12mk2.json b/radio/src/boards/hw_defs/tx12mk2.json new file mode 100644 index 00000000000..431f7aed673 --- /dev/null +++ b/radio/src/boards/hw_defs/tx12mk2.json @@ -0,0 +1,301 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_14", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SF", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tx15.json b/radio/src/boards/hw_defs/tx15.json new file mode 100644 index 00000000000..188db6026e4 --- /dev/null +++ b/radio/src/boards/hw_defs/tx15.json @@ -0,0 +1,322 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC1", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_8CYCLES_5" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC3", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_64CYCLES_5" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_4" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_5", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "EXT", + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": null, + "pin_high": "PCA95XX_P15", + "gpio_low": null, + "pin_low": "PCA95XX_P14", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": null, + "pin_high": "PCA95XX_P13", + "gpio_low": null, + "pin_low": "PCA95XX_P12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": null, + "pin_high": "PCA95XX_P11", + "gpio_low": null, + "pin_low": "PCA95XX_P10", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": null, + "pin_high": "PCA95XX_P7", + "gpio_low": null, + "pin_low": "PCA95XX_P6", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P16", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": null, + "pin": "PCA95XX_P4", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P0", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P1", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P2", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P3", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P4", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P5", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + } + ] +} diff --git a/radio/src/boards/hw_defs/tx16s.json b/radio/src/boards/hw_defs/tx16s.json new file mode 100644 index 00000000000..fe7ae2dd6c1 --- /dev/null +++ b/radio/src/boards/hw_defs/tx16s.json @@ -0,0 +1,439 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/v12.json b/radio/src/boards/hw_defs/v12.json new file mode 100644 index 00000000000..91e1e6db72a --- /dev/null +++ b/radio/src/boards/hw_defs/v12.json @@ -0,0 +1,335 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S3", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "adc_input": "SWF", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_1", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/v14.json b/radio/src/boards/hw_defs/v14.json new file mode 100644 index 00000000000..1b5bfcc5f78 --- /dev/null +++ b/radio/src/boards/hw_defs/v14.json @@ -0,0 +1,335 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S3", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "adc_input": "SWF", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_1", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/v16.json b/radio/src/boards/hw_defs/v16.json new file mode 100644 index 00000000000..0d1c2463549 --- /dev/null +++ b/radio/src/boards/hw_defs/v16.json @@ -0,0 +1,437 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x10.json b/radio/src/boards/hw_defs/x10.json new file mode 100644 index 00000000000..223cf6ff68f --- /dev/null +++ b/radio/src/boards/hw_defs/x10.json @@ -0,0 +1,437 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "pwm_channel": 0 + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "pwm_channel": 1, + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "pwm_channel": 3 + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "pwm_channel": 2, + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true, + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PgUp/Dn" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x10express.json b/radio/src/boards/hw_defs/x10express.json new file mode 100644 index 00000000000..223cf6ff68f --- /dev/null +++ b/radio/src/boards/hw_defs/x10express.json @@ -0,0 +1,437 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "pwm_channel": 0 + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "pwm_channel": 1, + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "pwm_channel": 3 + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "pwm_channel": 2, + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true, + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PgUp/Dn" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x12s.json b/radio/src/boards/hw_defs/x12s.json new file mode 100644 index 00000000000..ae2d60d0604 --- /dev/null +++ b/radio/src/boards/hw_defs/x12s.json @@ -0,0 +1,430 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "SPI", + "adc": "SPI4", + "gpio_pin_miso": "GPIO_PIN(GPIOE, 5)", + "gpio_pin_mosi": "GPIO_PIN(GPIOE, 6)", + "gpio_pin_sck": "GPIO_PIN(GPIOE, 2)", + "gpio_pin_cs": "GPIO_PIN(GPIOE, 4)" + }, + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "SPI", + "channel": 0 + }, + { + "name": "LV", + "type": "STICK", + "adc": "SPI", + "channel": 1, + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "SPI", + "channel": 2 + }, + { + "name": "RH", + "type": "STICK", + "adc": "SPI", + "channel": 3, + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "SPI", + "channel": 4, + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "SPI", + "channel": 5, + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "SPI", + "channel": 6, + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "SPI", + "channel": 7, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "SPI", + "channel": 8, + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "SL3", + "type": "FLEX", + "adc": "SPI", + "channel": 11, + "inverted": true, + "label": "L1", + "short_label": "1", + "default": "SLIDER" + }, + { + "name": "SL4", + "type": "FLEX", + "adc": "SPI", + "channel": 10, + "inverted": true, + "label": "L2", + "short_label": "2", + "default": "SLIDER" + }, + { + "name": "JSx", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": 6, + "label": "JSx", + "short_label": "X", + "default": "AXIS_X" + }, + { + "name": "JSy", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": 7, + "label": "JSy", + "short_label": "Y", + "default": "AXIS_Y" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "SPI", + "channel": 9 + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": true, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PgUp" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PgDn" + }, + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "inc": { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x7.json b/radio/src/boards/hw_defs/x7.json new file mode 100644 index 00000000000..417a3589db2 --- /dev/null +++ b/radio/src/boards/hw_defs/x7.json @@ -0,0 +1,304 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x7access.json b/radio/src/boards/hw_defs/x7access.json new file mode 100644 index 00000000000..99b36e90789 --- /dev/null +++ b/radio/src/boards/hw_defs/x7access.json @@ -0,0 +1,290 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_10", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9d+.json b/radio/src/boards/hw_defs/x9d+.json new file mode 100644 index 00000000000..20ec26d2163 --- /dev/null +++ b/radio/src/boards/hw_defs/x9d+.json @@ -0,0 +1,357 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "inverted": true, + "label": "S3", + "short_label": "3" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "ENT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_PLUS", + "name": "PLUS", + "label": "(+)" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MINUS", + "name": "MINUS", + "label": "(-)" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9d+2019.json b/radio/src/boards/hw_defs/x9d+2019.json new file mode 100644 index 00000000000..812cd273d8e --- /dev/null +++ b/radio/src/boards/hw_defs/x9d+2019.json @@ -0,0 +1,345 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 4 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "ENT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9d.json b/radio/src/boards/hw_defs/x9d.json new file mode 100644 index 00000000000..b1d23760d2b --- /dev/null +++ b/radio/src/boards/hw_defs/x9d.json @@ -0,0 +1,346 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "ENT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_PLUS", + "name": "PLUS", + "label": "(+)" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MINUS", + "name": "MINUS", + "label": "(-)" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9e.json b/radio/src/boards/hw_defs/x9e.json new file mode 100644 index 00000000000..3f68e33684e --- /dev/null +++ b/radio/src/boards/hw_defs/x9e.json @@ -0,0 +1,549 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "F1", + "short_label": "F1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "F2", + "short_label": "F2", + "default": "POT_CENTER" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "inverted": true, + "label": "F3", + "short_label": "F3", + "default": "NONE" + }, + { + "name": "P4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "F4", + "short_label": "F4", + "default": "NONE" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "S1", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "S2", + "short_label": "S2", + "default": "SLIDER" + }, + { + "name": "SL3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_10", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_10", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOF", + "pin_low": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOF", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SI", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 4 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 4 + ], + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SK", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 5 + ], + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SL", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 5 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SM", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 6 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SN", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 6 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SO", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 7 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_10", + "is_cfs": false + }, + { + "name": "SP", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 7 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOF", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SQ", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 8 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOF", + "pin_low": "LL_GPIO_PIN_6", + "is_cfs": false + }, + { + "name": "SR", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 8 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_0", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9lite.json b/radio/src/boards/hw_defs/x9lite.json new file mode 100644 index 00000000000..9fb6ee1e07f --- /dev/null +++ b/radio/src/boards/hw_defs/x9lite.json @@ -0,0 +1,249 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9lites.json b/radio/src/boards/hw_defs/x9lites.json new file mode 100644 index 00000000000..390d0139b42 --- /dev/null +++ b/radio/src/boards/hw_defs/x9lites.json @@ -0,0 +1,277 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/xlite.json b/radio/src/boards/hw_defs/xlite.json new file mode 100644 index 00000000000..45d29c16739 --- /dev/null +++ b/radio/src/boards/hw_defs/xlite.json @@ -0,0 +1,255 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "pwm_channel": 0 + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "pwm_channel": 1, + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "pwm_channel": 3, + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "pwm_channel": 2 + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_6", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_UP", + "name": "UP", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true, + "key": "KEY_DOWN", + "name": "DOWN", + "label": "Down" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_LEFT", + "name": "LEFT", + "label": "Left" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_RIGHT", + "name": "RIGHT", + "label": "Right" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_SHIFT", + "name": "SHIFT", + "label": "Shift" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3" + }, + { + "name": "T4" + } + ] +} diff --git a/radio/src/boards/hw_defs/xlites.json b/radio/src/boards/hw_defs/xlites.json new file mode 100644 index 00000000000..6807a68df40 --- /dev/null +++ b/radio/src/boards/hw_defs/xlites.json @@ -0,0 +1,283 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "pwm_channel": 0 + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "pwm_channel": 1, + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "pwm_channel": 3, + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "pwm_channel": 2 + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_6", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_UP", + "name": "UP", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true, + "key": "KEY_DOWN", + "name": "DOWN", + "label": "Down" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_LEFT", + "name": "LEFT", + "label": "Left" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_RIGHT", + "name": "RIGHT", + "label": "Right" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_SHIFT", + "name": "SHIFT", + "label": "Shift" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3" + }, + { + "name": "T4" + } + ] +} diff --git a/radio/src/boards/hw_defs/zorro.json b/radio/src/boards/hw_defs/zorro.json new file mode 100644 index 00000000000..5351f6aae22 --- /dev/null +++ b/radio/src/boards/hw_defs/zorro.json @@ -0,0 +1,325 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} From 0b1a59eb7ae21701c5d78a13d46ece2c06090ea1 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sat, 12 Jul 2025 17:16:13 +0200 Subject: [PATCH 03/49] Add define remover and usage checker --- define_remover.py | 143 +++++++++++++++++++++++++++++ define_usage_checker.py | 196 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 339 insertions(+) create mode 100644 define_remover.py create mode 100644 define_usage_checker.py diff --git a/define_remover.py b/define_remover.py new file mode 100644 index 00000000000..1ffd0c4fe09 --- /dev/null +++ b/define_remover.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python3 +""" +Program to remove #define statements from C/C++ files based on a list of names. +""" + +import re +import argparse +import sys +from pathlib import Path + +def load_names_to_remove(names_file): + """Load the list of names to remove from the specified file.""" + try: + with open(names_file, 'r', encoding='utf-8') as f: + names = [line.strip() for line in f if line.strip()] + return set(names) # Use set for faster lookup + except FileNotFoundError: + print(f"Error: Names file '{names_file}' not found.") + sys.exit(1) + except Exception as e: + print(f"Error reading names file: {e}") + sys.exit(1) + +def remove_defines_from_file(file_path, names_to_remove, dry_run=False): + """Remove #define statements from a file based on the names list.""" + try: + with open(file_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + except Exception as e: + print(f"Error reading file '{file_path}': {e}") + return False + + modified_lines = [] + removed_count = 0 + i = 0 + + # Pattern to match #define statements + # Matches: #define NAME or #define NAME value + define_pattern = re.compile(r'^\s*#define\s+(\w+)') + + while i < len(lines): + line = lines[i] + line_num = i + 1 + + match = define_pattern.match(line) + if match: + define_name = match.group(1) + if define_name in names_to_remove: + # Found a #define to remove, collect all continuation lines + lines_to_remove = [] + current_line = line + current_line_num = line_num + + # Keep collecting lines while they end with backslash + while current_line.rstrip().endswith('\\'): + lines_to_remove.append((current_line_num, current_line)) + i += 1 + if i < len(lines): + current_line = lines[i] + current_line_num = i + 1 + else: + break + + # Add the final line (without backslash or last line of file) + lines_to_remove.append((current_line_num, current_line)) + + # Print what we're removing + if not dry_run: + print(f"Removing multi-line #define from {file_path}:") + for ln, l in lines_to_remove: + print(f" Line {ln}: {l.rstrip()}") + else: + print(f"Would remove multi-line #define from {file_path}:") + for ln, l in lines_to_remove: + print(f" Line {ln}: {l.rstrip()}") + + removed_count += 1 + i += 1 # Move to next line after the #define block + continue + + # Line is not a #define to remove, keep it + modified_lines.append(line) + i += 1 + + # Write back to file if not dry run and changes were made + if not dry_run and removed_count > 0: + try: + with open(file_path, 'w', encoding='utf-8') as f: + f.writelines(modified_lines) + print(f"Successfully processed '{file_path}' - removed {removed_count} #define(s)") + except Exception as e: + print(f"Error writing file '{file_path}': {e}") + return False + elif dry_run and removed_count > 0: + print(f"Would process '{file_path}' - {removed_count} #define(s) to remove") + elif removed_count == 0: + print(f"No matching #define statements found in '{file_path}'") + + return True + +def main(): + parser = argparse.ArgumentParser( + description="Remove #define statements from C/C++ files based on a list of names" + ) + parser.add_argument( + "names_file", + help="File containing names to remove (one name per line)" + ) + parser.add_argument( + "source_files", + nargs="+", + help="Source files to process" + ) + parser.add_argument( + "--dry-run", + action="store_true", + help="Show what would be removed without actually modifying files" + ) + + args = parser.parse_args() + + # Load names to remove + names_to_remove = load_names_to_remove(args.names_file) + print(f"Loaded {len(names_to_remove)} names to remove") + + if args.dry_run: + print("DRY RUN MODE - No files will be modified") + + # Process each source file + success_count = 0 + for source_file in args.source_files: + file_path = Path(source_file) + if not file_path.exists(): + print(f"Warning: File '{source_file}' not found, skipping") + continue + + if remove_defines_from_file(file_path, names_to_remove, args.dry_run): + success_count += 1 + + print(f"\nProcessed {success_count} out of {len(args.source_files)} files successfully") + +if __name__ == "__main__": + main() diff --git a/define_usage_checker.py b/define_usage_checker.py new file mode 100644 index 00000000000..002cb76e573 --- /dev/null +++ b/define_usage_checker.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python3 +""" +Program to check if #define names are used anywhere in C++ code files. +Use this to verify that defines are safe to remove. +""" + +import re +import argparse +import sys +from pathlib import Path +from collections import defaultdict + +def load_names_to_check(names_file): + """Load the list of names to check from the specified file.""" + try: + with open(names_file, 'r', encoding='utf-8') as f: + names = [line.strip() for line in f if line.strip()] + return names + except FileNotFoundError: + print(f"Error: Names file '{names_file}' not found.") + sys.exit(1) + except Exception as e: + print(f"Error reading names file: {e}") + sys.exit(1) + +def check_usage_in_file(file_path, names_to_check, exclude_defines=True): + """Check if any of the names are used in the given file.""" + try: + with open(file_path, 'r', encoding='utf-8', errors='ignore') as f: + content = f.read() + except Exception as e: + print(f"Error reading file '{file_path}': {e}") + return {} + + lines = content.splitlines() + usage_found = defaultdict(list) + + # Pattern to match #define statements (to potentially exclude them) + define_pattern = re.compile(r'^\s*#define\s+(\w+)') + + # Pre-compile regex patterns for better performance + name_patterns = {name: re.compile(r'\b' + re.escape(name) + r'\b') for name in names_to_check} + + for line_num, line in enumerate(lines, 1): + # Skip #define lines if exclude_defines is True + if exclude_defines and define_pattern.match(line): + continue + + # Skip comments (basic comment detection) + # Remove single-line comments + if '//' in line: + line = line.split('//')[0] + + # Skip lines that are mostly comments (basic /* */ detection) + if line.strip().startswith('/*') or line.strip().startswith('*'): + continue + + # Check each name using pre-compiled patterns + for name, pattern in name_patterns.items(): + if pattern.search(line): + usage_found[name].append({ + 'line_num': line_num, + 'line': line.strip(), + 'file': str(file_path) + }) + + return usage_found + +def find_cpp_files(directories, extensions=None): + """Find all C++ files in the given directories.""" + if extensions is None: + extensions = {'.cpp', '.cxx', '.cc', '.c', '.hpp', '.hxx', '.h', '.hh'} + + cpp_files = [] + for directory in directories: + dir_path = Path(directory) + if dir_path.is_file(): + if dir_path.suffix.lower() in extensions: + cpp_files.append(dir_path) + elif dir_path.is_dir(): + for ext in extensions: + cpp_files.extend(dir_path.rglob(f'*{ext}')) + else: + print(f"Warning: '{directory}' is not a valid file or directory") + + return cpp_files + +def main(): + parser = argparse.ArgumentParser( + description="Check if #define names are used anywhere in C++ code" + ) + parser.add_argument( + "names_file", + help="File containing names to check (one name per line)" + ) + parser.add_argument( + "paths", + nargs="+", + help="Files or directories to search (directories are searched recursively)" + ) + parser.add_argument( + "--include-defines", + action="store_true", + help="Include #define statements in the search (default: exclude them)" + ) + parser.add_argument( + "--extensions", + default=".cpp,.cxx,.cc,.c,.hpp,.hxx,.h,.hh", + help="Comma-separated list of file extensions to search (default: .cpp,.cxx,.cc,.c,.hpp,.hxx,.h,.hh)" + ) + parser.add_argument( + "--summary-only", + action="store_true", + help="Show only summary of used/unused names" + ) + + args = parser.parse_args() + + # Parse extensions + extensions = {ext.strip() for ext in args.extensions.split(',') if ext.strip()} + + # Load names to check + names_to_check = load_names_to_check(args.names_file) + print(f"Checking usage of {len(names_to_check)} names") + + # Find C++ files + cpp_files = find_cpp_files(args.paths, extensions) + print(f"Found {len(cpp_files)} C++ files to search") + + if not cpp_files: + print("No C++ files found to search!") + sys.exit(1) + + # Check usage in all files + all_usage = defaultdict(list) + files_processed = 0 + + for cpp_file in cpp_files: + usage = check_usage_in_file(cpp_file, names_to_check, exclude_defines=not args.include_defines) + files_processed += 1 + + for name, occurrences in usage.items(): + all_usage[name].extend(occurrences) + + # Progress indicator for large codebases + if files_processed % 100 == 0: + print(f"Processed {files_processed} files...") + + # Analyze results + used_names = set() + unused_names = set() + + for name in names_to_check: + if name in all_usage: + used_names.add(name) + else: + unused_names.add(name) + + # Display results + print(f"\n{'='*60}") + print("USAGE ANALYSIS RESULTS") + print(f"{'='*60}") + + if used_names: + print(f"\n❌ USED NAMES ({len(used_names)}) - DO NOT REMOVE:") + for name in sorted(used_names): + print(f" • {name}") + if not args.summary_only: + print(f" Used in {len(set(occ['file'] for occ in all_usage[name]))} file(s):") + for occurrence in all_usage[name][:5]: # Show first 5 occurrences + print(f" {occurrence['file']}:{occurrence['line_num']}: {occurrence['line']}") + if len(all_usage[name]) > 5: + print(f" ... and {len(all_usage[name]) - 5} more occurrences") + print() + + if unused_names: + print(f"\n✅ UNUSED NAMES ({len(unused_names)}) - SAFE TO REMOVE:") + for name in sorted(unused_names): + print(f" • {name}") + + # Summary + print(f"\n{'='*60}") + print("SUMMARY:") + print(f" Total names checked: {len(names_to_check)}") + print(f" Names in use: {len(used_names)}") + print(f" Names unused: {len(unused_names)}") + print(f" Files searched: {files_processed}") + + if used_names: + print(f"\n⚠️ WARNING: {len(used_names)} names are still in use!") + print(" Review the usage before removing these #define statements.") + else: + print(f"\n✅ All {len(names_to_check)} names appear to be unused and safe to remove.") + +if __name__ == "__main__": + main() From e80acbb5d290a9957c06c66af72abdb3b061f04a Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Mon, 28 Jul 2025 14:07:05 +0200 Subject: [PATCH 04/49] Remove hardware definitions present in JSON --- radio/src/targets/horus/hal.h | 380 +------ radio/src/targets/nv14/hal.h | 96 +- radio/src/targets/pa01/hal.h | 106 +- radio/src/targets/pl18/hal.h | 320 +----- radio/src/targets/st16/hal.h | 140 +-- radio/src/targets/stm32h7s78-dk/hal.h | 20 - radio/src/targets/taranis/hal.h | 1346 +------------------------ radio/src/targets/tx15/hal.h | 125 +-- 8 files changed, 42 insertions(+), 2491 deletions(-) diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 0679f50bb0c..1dec91bc635 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -31,61 +31,9 @@ // Keys #if defined(PCBX12S) - #define KEYS_GPIO_REG_PAGEUP GPIOC - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_13 // PC.13 - #define KEYS_GPIO_REG_PAGEDN GPIOI - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_8 // PI.08 - #define KEYS_GPIO_REG_SYS GPIOI - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_7 // PI.07 - #define KEYS_GPIO_REG_ENTER GPIOC - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_1 // PC.01 - #define KEYS_GPIO_REG_MDL GPIOG - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_13 // PG.13 - #define KEYS_GPIO_REG_EXIT GPIOI - #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) || 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 - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_13 // PC.13 - #define KEYS_GPIO_REG_PAGEDN GPIOI - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_11 // PI.11 - #define KEYS_GPIO_REG_MDL GPIOI - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_6 // PI.06 - #define KEYS_GPIO_REG_EXIT GPIOI - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_4 // PI.04 - #define KEYS_GPIO_REG_SYS GPIOI - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_7 // PI.07 - #define KEYS_GPIO_REG_TELE GPIOI - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_5 // PI.05 #elif defined(RADIO_T15) - #define KEYS_GPIO_REG_ENTER GPIOI - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_8 // PI.08 - #define KEYS_GPIO_REG_PAGEDN GPIOI - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_11 // PI.11 - #define KEYS_GPIO_REG_MDL GPIOI - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_6 // PI.06 - #define KEYS_GPIO_REG_EXIT GPIOI - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_5 // PI.05 - #define KEYS_GPIO_REG_SYS GPIOI - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_7 // PI.07 - #define KEYS_GPIO_REG_TELE GPIOI - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_4 // PI.04 #elif defined(PCBX10) - #define KEYS_GPIO_REG_ENTER GPIOI - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_8 // PI.08 - #define KEYS_GPIO_REG_PAGEDN GPIOI - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_11 // PI.11 - #define KEYS_GPIO_REG_MDL GPIOI - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_4 // PI.04 - #define KEYS_GPIO_REG_EXIT GPIOI - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_6 // PI.06 - #define KEYS_GPIO_REG_SYS GPIOI - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_7 // PI.07 - #define KEYS_GPIO_REG_TELE GPIOI - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_5 // PI.05 #endif // Rotary Encoder @@ -114,160 +62,74 @@ #if defined(RADIO_T15) #define STORAGE_SWITCH_A #define HARDWARE_SWITCH_A - #define SWITCHES_GPIO_REG_A_H GPIOG - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_3 // PG.03 - #define SWITCHES_GPIO_REG_A_L GPIOD - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_11 // PD.11 - #define SWITCHES_A_INVERTED #define STORAGE_SWITCH_B #define HARDWARE_SWITCH_B - #define SWITCHES_GPIO_REG_B_H GPIOB - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_12 // PB.12 - #define SWITCHES_GPIO_REG_B_L GPIOH - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_9 // PH.09 #define STORAGE_SWITCH_C #define HARDWARE_SWITCH_C - #define SWITCHES_GPIO_REG_C_H GPIOG - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_2 // PG.02 - #define SWITCHES_GPIO_REG_C_L GPIOH - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_14 // PH.14 - #define SWITCHES_C_INVERTED #define STORAGE_SWITCH_D #define HARDWARE_SWITCH_D - #define SWITCHES_GPIO_REG_D_H GPIOI - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_15 // PI.15 - #define SWITCHES_GPIO_REG_D_L GPIOH - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_15 // PH.15 #define STORAGE_SWITCH_E #define HARDWARE_SWITCH_E - #define SWITCHES_GPIO_REG_E GPIOB - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_15 // PB.15 #define STORAGE_SWITCH_F #define HARDWARE_SWITCH_F - #define SWITCHES_GPIO_REG_F GPIOH - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_12 // PH.12 //SW1 - #define FUNCTION_SWITCH_1 SG #define STORAGE_SWITCH_G #define HARDWARE_SWITCH_G - #define SWITCHES_GPIO_REG_G GPIOB - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_14 // PB.14 - #define SWITCHES_G_CFS_IDX 0 //SW2 - #define FUNCTION_SWITCH_2 SH #define STORAGE_SWITCH_H #define HARDWARE_SWITCH_H - #define SWITCHES_GPIO_REG_H GPIOD - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_13 // PD.13 - #define SWITCHES_H_CFS_IDX 1 //SW3 - #define FUNCTION_SWITCH_3 SI #define STORAGE_SWITCH_I #define HARDWARE_SWITCH_I - #define SWITCHES_GPIO_REG_I GPIOJ - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_7 // PJ.07 - #define SWITCHES_I_CFS_IDX 2 //SW4 - #define FUNCTION_SWITCH_4 SJ #define STORAGE_SWITCH_J #define HARDWARE_SWITCH_J - #define SWITCHES_GPIO_REG_J GPIOG - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_13 // PG.13 - #define SWITCHES_J_CFS_IDX 3 //SW5 - #define FUNCTION_SWITCH_5 SK #define STORAGE_SWITCH_K #define HARDWARE_SWITCH_K - #define SWITCHES_GPIO_REG_K GPIOJ - #define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_8 // PJ.08 - #define SWITCHES_K_CFS_IDX 4 //SW6 - #define FUNCTION_SWITCH_6 SL #define STORAGE_SWITCH_L #define HARDWARE_SWITCH_L - #define SWITCHES_GPIO_REG_L GPIOB - #define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_13 // PB.13 - #define SWITCHES_L_CFS_IDX 5 #else #define STORAGE_SWITCH_A #define HARDWARE_SWITCH_A - #define SWITCHES_GPIO_REG_A_H GPIOH - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_9 // PH.09 - #define SWITCHES_GPIO_REG_A_L GPIOI - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_15 // PI.15 #define STORAGE_SWITCH_B #define HARDWARE_SWITCH_B - #define SWITCHES_GPIO_REG_B_H GPIOH - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_12 // PH.12 - #define SWITCHES_GPIO_REG_B_L GPIOB - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_12 // PB.12 #define STORAGE_SWITCH_C #define HARDWARE_SWITCH_C - #define SWITCHES_GPIO_REG_C_H GPIOD - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_11 // PD.11 - #define SWITCHES_GPIO_REG_C_L GPIOB - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_15 // PB.15 #define STORAGE_SWITCH_D #define HARDWARE_SWITCH_D - #define SWITCHES_GPIO_REG_D_H GPIOJ - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_7 // PJ.07 - #define SWITCHES_GPIO_REG_D_L GPIOG - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_2 // PG.02 #define STORAGE_SWITCH_E #define HARDWARE_SWITCH_E - #define SWITCHES_GPIO_REG_E_H GPIOH - #define SWITCHES_GPIO_PIN_E_H LL_GPIO_PIN_4 // PH.04 - #define SWITCHES_GPIO_REG_E_L GPIOE - #define SWITCHES_GPIO_PIN_E_L LL_GPIO_PIN_3 // PE.03 #define STORAGE_SWITCH_F #define HARDWARE_SWITCH_F - #define SWITCHES_GPIO_REG_F GPIOH - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_3 // PH.03 #define STORAGE_SWITCH_G #define HARDWARE_SWITCH_G - #define SWITCHES_GPIO_REG_G_H GPIOG - #define SWITCHES_GPIO_PIN_G_H LL_GPIO_PIN_6 // PG.06 - #define SWITCHES_GPIO_REG_G_L GPIOG - #define SWITCHES_GPIO_PIN_G_L LL_GPIO_PIN_3 // PG.03 #define STORAGE_SWITCH_H #define HARDWARE_SWITCH_H - #define SWITCHES_GPIO_REG_H GPIOG - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_7 // PG.07 #if defined(PCBX12S) - #define SWITCHES_F_INVERTED #elif defined(PCBX10) - #define SWITCHES_B_INVERTED - #define SWITCHES_D_INVERTED - #define SWITCHES_E_INVERTED #endif #if defined(PCBX10) && !defined(RADIO_F16) // Gimbal switch left #define STORAGE_SWITCH_I #define HARDWARE_SWITCH_I - #define SWITCHES_GPIO_REG_I GPIOH - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_14 // PH.14 // Gimbal switch right #define STORAGE_SWITCH_J #define HARDWARE_SWITCH_J - #define SWITCHES_GPIO_REG_J GPIOH - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_15 // PH.15 #elif defined(PCBX12S) // Gimbal switch left #define STORAGE_SWITCH_I #define HARDWARE_SWITCH_I - #define SWITCHES_GPIO_REG_I GPIOB - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_1 // PB.01 // Gimbal switch right #define STORAGE_SWITCH_J #define HARDWARE_SWITCH_J - #define SWITCHES_GPIO_REG_J GPIOB - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_0 // PB.00 #endif #endif @@ -281,228 +143,41 @@ // Trims #if defined(RADIO_T15) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PD.03 - #define TRIMS_GPIO_REG_LHR GPIOD - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_7 // PD.07 - #define TRIMS_GPIO_REG_LVU GPIOJ - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_12 // PJ.12 - #define TRIMS_GPIO_REG_LVD GPIOJ - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_13 // PJ.13 - #define TRIMS_GPIO_REG_RVD GPIOG - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_12 // PG.12 - #define TRIMS_GPIO_REG_RHL GPIOA - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_6 // PA.06 - #define TRIMS_GPIO_REG_RVU GPIOJ - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_14 // PJ.14 - #define TRIMS_GPIO_REG_RHR GPIOC - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_4 // PC.04 #elif defined(PCBX12S) - #define TRIMS_GPIO_REG_RHL GPIOC - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_0 // PC.00 - #define TRIMS_GPIO_REG_RHR GPIOI - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_4 // PI.04 - #define TRIMS_GPIO_REG_RVD GPIOG - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_12 // PG.12 - #define TRIMS_GPIO_REG_RVU GPIOJ - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_14 // PJ.14 - #define TRIMS_GPIO_REG_LVD GPIOJ - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_13 // PJ.13 - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PD.03 - #define TRIMS_GPIO_REG_LVU GPIOJ - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_12 // PJ.12 - #define TRIMS_GPIO_REG_LHR GPIOD - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_7 // PD.07 - #define TRIMS_GPIO_REG_RSD GPIOJ - #define TRIMS_GPIO_PIN_RSD LL_GPIO_PIN_8 // PJ.08 - #define TRIMS_GPIO_REG_RSU GPIOD - #define TRIMS_GPIO_PIN_RSU LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_LSD GPIOB - #define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_14 // PB.14 - #define TRIMS_GPIO_REG_LSU GPIOB - #define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_13 // PB.13 #elif defined(PCBX10) // Left/Right Horizontal trims (LHL/LHR) #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 - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_4 // PC.04 #else - #define TRIMS_GPIO_REG_LHL GPIOB - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_8 // PB.08 - #define TRIMS_GPIO_REG_LHR GPIOB - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_9 // PB.09 #endif // Vertical trims - common across all PCBX10 variants - #define TRIMS_GPIO_REG_LVD GPIOG - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_12 // PG.12 - #define TRIMS_GPIO_REG_LVU GPIOJ - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_14 // PJ.14 - #define TRIMS_GPIO_REG_RVD GPIOJ - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_13 // PJ.13 - #define TRIMS_GPIO_REG_RVU GPIOJ - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_12 // PJ.12 // Right Horizontal trims - common across all PCBX10 variants - #define TRIMS_GPIO_REG_RHL GPIOD - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_3 // PD.03 - #define TRIMS_GPIO_REG_RHR GPIOD - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_7 // PD.07 // T5/T6 trim assignments #if defined(RADIO_V16) // T5/T6 trims are in exchanged positions to other handsets - #define TRIMS_GPIO_REG_LSU GPIOB - #define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_14 // PB.14 - #define TRIMS_GPIO_REG_LSD GPIOB - #define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_13 // PB.13 - #define TRIMS_GPIO_REG_RSU GPIOD - #define TRIMS_GPIO_PIN_RSU LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_RSD GPIOJ - #define TRIMS_GPIO_PIN_RSD LL_GPIO_PIN_8 // PJ.08 #elif defined(RADIO_FAMILY_T16) - #define TRIMS_GPIO_REG_LSU GPIOD - #define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_LSD GPIOJ - #define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_8 // PJ.08 - #define TRIMS_GPIO_REG_RSU GPIOB - #define TRIMS_GPIO_PIN_RSU LL_GPIO_PIN_14 // PB.14 - #define TRIMS_GPIO_REG_RSD GPIOB - #define TRIMS_GPIO_PIN_RSD LL_GPIO_PIN_13 // PB.13 #else // Other PCBX10 variants - #define TRIMS_GPIO_REG_LSU GPIOJ - #define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_8 // PJ.08 - #define TRIMS_GPIO_REG_LSD GPIOD - #define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_RSU GPIOB - #define TRIMS_GPIO_PIN_RSU LL_GPIO_PIN_14 // PB.14 - #define TRIMS_GPIO_REG_RSD GPIOB - #define TRIMS_GPIO_PIN_RSD LL_GPIO_PIN_13 // PB.13 #endif #endif // ADC #if defined(PCBX12S) - #define ADC_SPI SPI4 - #define ADC_SPI_GPIO_PIN_SCK GPIO_PIN(GPIOE, 2) // PE.02 - #define ADC_SPI_GPIO_PIN_CS GPIO_PIN(GPIOE, 4) // PE.04 - #define ADC_SPI_GPIO_PIN_MOSI GPIO_PIN(GPIOE, 6) // PE.06 - #define ADC_SPI_GPIO_PIN_MISO GPIO_PIN(GPIOE, 5) // PE.05 - - #define ADC_SPI_STICK_LH 0 - #define ADC_SPI_STICK_LV 1 - #define ADC_SPI_STICK_RV 2 - #define ADC_SPI_STICK_RH 3 - #define ADC_SPI_POT1 4 - #define ADC_SPI_POT2 5 - #define ADC_SPI_POT3 6 - #define ADC_SPI_SLIDER1 7 - #define ADC_SPI_SLIDER2 8 - #define ADC_SPI_BATT 9 - #define ADC_SPI_SLIDER3 11 - #define ADC_SPI_SLIDER4 10 - - #define ADC_MAIN ADC3 - #define ADC_GPIO_PIN_MOUSE1 LL_GPIO_PIN_8 // PF.08 ADC3_IN6 J5 MOUSE_X - #define ADC_GPIO_PIN_MOUSE2 LL_GPIO_PIN_9 // PF.09 ADC3_IN7 J6 MOUSE_Y + + #define ADC_GPIO_MOUSE GPIOF - #define ADC_CHANNEL_MOUSE1 6 - #define ADC_CHANNEL_MOUSE2 7 - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_MOUSE1 | ADC_GPIO_PIN_MOUSE2) - #define ADC_EXT ADC1 - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES - #define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN16 - #define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BATT } - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_2 // TODO: use for SPI1_RX instead? - #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_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES #define ADC_VREF_PREC2 300 #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 330 #elif defined(PCBX10) #if defined(RADIO_T15) - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PC.02 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_0 // PC.00 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_12 // ADC3_IN12 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_10 // ADC3_IN10 #else - #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_0 // PC.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PC.01 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_10 // ADC3_IN10 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_11 // ADC3_IN11 #endif - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_7 // PF.07 #if !defined(RADIO_T15) - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_2 // PC.02 // - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_6 // PF.06 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_3 // PC.03 // - #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 #endif #if defined(RADIO_X10) || defined(RADIO_X10E) #define PWM_STICKS @@ -513,64 +188,20 @@ #define PWM_IRQHandler TIM5_IRQHandler #define PWM_IRQn TIM5_IRQn #define PWM_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_RV) - #define STICK_PWM_CHANNEL_LH 0 - #define STICK_PWM_CHANNEL_LV 1 - #define STICK_PWM_CHANNEL_RV 3 - #define STICK_PWM_CHANNEL_RH 2 #endif #if defined(RADIO_T15) - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_1 // ADC3_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_0 // ADC3_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_3 // ADC3_IN3 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_2 // ADC3_IN2 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_5 // ADC3_IN5 #else - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC3_IN0 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC3_IN1 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC3_IN2 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC3_IN3 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_5 // ADC3_IN5 #endif #if !defined(RADIO_T15) - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_12 // ADC3_IN12 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_4 // ADC3_IN4 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_13 // ADC3_IN13 - #define ADC_CHANNEL_EXT1 LL_ADC_CHANNEL_6 // ADC3_IN6 - #define ADC_CHANNEL_EXT2 LL_ADC_CHANNEL_7 // 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 #endif #if defined(RADIO_T15) - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_RV) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_BATT) #else #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) - #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_SLIDER1 | ADC_GPIO_PIN_BATT | ADC_GPIO_PIN_EXT1 | ADC_GPIO_PIN_EXT2) #endif - #define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - #define ADC_MAIN ADC3 - #define ADC_EXT ADC1 #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 - #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 // VBat divider is /4 on F42x and F43x devices #if defined(RADIO_TX16S) || defined(RADIO_T15) || defined(RADIO_F16) || defined(RADIO_V16) || defined(RADIO_T18) @@ -583,19 +214,12 @@ #endif #if defined(RADIO_T15) - #define ADC_DIRECTION {1,-1,1,-1, 1,1} #elif defined(RADIO_T16) - #define ADC_DIRECTION {1,-1,1,-1, 1,1,1, -1,1,1,1, -1,1 } #elif defined(RADIO_T18) - #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) - #define ADC_DIRECTION {1,-1,1,-1, -1,1,-1, 1,-1, -1,-1, 0,0,0} #else #error "Missing ADC_DIRECTION array" #endif diff --git a/radio/src/targets/nv14/hal.h b/radio/src/targets/nv14/hal.h index 6b1e34435ed..097237c6f0a 100644 --- a/radio/src/targets/nv14/hal.h +++ b/radio/src/targets/nv14/hal.h @@ -48,29 +48,9 @@ // Trims -#define TRIMS_GPIO_REG_RHL GPIOD -#define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_7 // PD.07 -#define TRIMS_GPIO_REG_RHR GPIOG -#define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_10 // PG.10 -#define TRIMS_GPIO_REG_RVD GPIOJ -#define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_0 // PJ.00 -#define TRIMS_GPIO_REG_RVU GPIOB -#define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_15 // PB.15 - -#define KEYS_GPIO_REG_ENTER GPIOC -#define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PC.13 - -#define TRIMS_GPIO_REG_LHL GPIOH -#define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_2 // PH.02 -#define TRIMS_GPIO_REG_LHR GPIOG -#define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PG.02 -#define TRIMS_GPIO_REG_LVU GPIOH -#define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_7 // PH.07 -#define TRIMS_GPIO_REG_LVD GPIOJ -#define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_12 // PJ.12 - -#define KEYS_GPIO_REG_EXIT GPIOG -#define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_11 // PG.11 + + + // Monitor pin #define VBUS_MONITOR_GPIO GPIO_PIN(GPIOJ, 14) // PJ.14 @@ -94,81 +74,21 @@ #define STORAGE_SWITCH_H // Index of all switches / trims -#define KEYS_GPIO_ACTIVE_HIGH -#define TRIMS_GPIO_ACTIVE_HIGH // ADC -#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 -#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 -#define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_4 // PA.04 -#define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_5 // PA.05 -#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 VRA -#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_4 // PC.04 VRB -#define ADC_GPIO_PIN_SWA LL_GPIO_PIN_1 // PB.01 -#define ADC_GPIO_PIN_SWB LL_GPIO_PIN_8 // PF.08 -#define ADC_GPIO_PIN_SWC LL_GPIO_PIN_0 // PB.00 -#define ADC_GPIO_PIN_SWD LL_GPIO_PIN_10 // PF.10 -#define ADC_GPIO_PIN_SWE LL_GPIO_PIN_0 // PC.00 -#define ADC_GPIO_PIN_SWF LL_GPIO_PIN_1 // PC.01 -#define ADC_GPIO_PIN_SWG LL_GPIO_PIN_2 // PC.02 -#define ADC_GPIO_PIN_SWH LL_GPIO_PIN_7 // PA.07 -#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05 // FLYSKY_HALL_STICKS // #define ADC_GPIOA_PINS_FS (GPIO_Pin_6 | GPIO_Pin_7) -#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH \ - | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SWH) -#define ADC_GPIOB_PINS (ADC_GPIO_PIN_SWA | ADC_GPIO_PIN_SWC) -#define ADC_GPIOC_PINS \ - (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SWE | ADC_GPIO_PIN_SWF | ADC_GPIO_PIN_SWG | ADC_GPIO_PIN_BATT) -#define ADC_GPIOF_PINS (ADC_GPIO_PIN_SWB | ADC_GPIO_PIN_SWD) - -#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2 -#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC1_IN3 -#define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_4 // ADC12_IN4 -> ADC1_IN4 -#define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5 - -#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 -#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14 -#define ADC_CHANNEL_SWA LL_ADC_CHANNEL_9 // ADC12_IN9 -> ADC1_IN9 -#define ADC_CHANNEL_SWB LL_ADC_CHANNEL_6 // ADC3_IN6 -> ADC3_IN6 -#define ADC_CHANNEL_SWC LL_ADC_CHANNEL_8 // ADC12_IN8 -> ADC1_IN8 -#define ADC_CHANNEL_SWD LL_ADC_CHANNEL_8 // ADC3_IN8 -> ADC3_IN8 -#define ADC_CHANNEL_SWE LL_ADC_CHANNEL_10 // ADC123_IN10-> ADC1_IN10 -#define ADC_CHANNEL_SWF LL_ADC_CHANNEL_11 // ADC123_IN11-> ADC1_IN11 -#define ADC_CHANNEL_SWG LL_ADC_CHANNEL_12 // ADC123_IN12-> ADC1_IN12 -#define ADC_CHANNEL_SWH LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 - -#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - -#define ADC_MAIN ADC1 -#define ADC_EXT ADC3 -#define ADC_EXT_CHANNELS { ADC_CHANNEL_SWB, ADC_CHANNEL_SWD } -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES -#define ADC_DMA DMA2 -#define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0 -#define ADC_DMA_STREAM LL_DMA_STREAM_4 -#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn -#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler - -#define ADC_EXT_DMA DMA2 -#define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_2 -#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 -#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn -#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler -#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES + + + + + #define ADC_VREF_PREC2 330 -#define ADC_DIRECTION \ - { 0 /*STICK1*/, 0 /*STICK2*/, 0 /*STICK3*/, 0 /*STICK4*/, \ - -1 /*POT1*/, 0 /*POT2*/, 0 /*TX_VOLTAGE*/, 0 /*TX_VBAT*/, \ - 0 /*SWA*/, 0 /*SWB*/, 0 /*SWC*/, 0 /*SWD*/, 0 /*SWE*/, \ - -1 /*SWF*/, -1 /*SWG*/, 0 /*SWH*/ \ - } // Power #define PWR_SWITCH_GPIO GPIO_PIN(GPIOI, 11) // PI.11 diff --git a/radio/src/targets/pa01/hal.h b/radio/src/targets/pa01/hal.h index 2bc20e0ecaf..b2fc1c0eb6c 100644 --- a/radio/src/targets/pa01/hal.h +++ b/radio/src/targets/pa01/hal.h @@ -40,87 +40,37 @@ */ // Keys -#define KEYS_GPIO_REG_ENTER -#define KEYS_GPIO_PIN_ENTER #define KEYS_GPIO_ENTER GPIO_PIN(GPIOG, 13) // PG.13 // Keys in bsp matrix -#define KEYS_GPIO_REG_PAGEUP -#define KEYS_GPIO_PIN_PAGEUP -#define KEYS_GPIO_REG_PAGEDN -#define KEYS_GPIO_PIN_PAGEDN -#define KEYS_GPIO_REG_SYS -#define KEYS_GPIO_PIN_SYS -#define KEYS_GPIO_REG_EXIT -#define KEYS_GPIO_PIN_EXIT // Trims in bsp matrix -#define TRIMS_GPIO_REG_LHL -#define TRIMS_GPIO_PIN_LHL -#define TRIMS_GPIO_REG_LHR -#define TRIMS_GPIO_PIN_LHR -#define TRIMS_GPIO_REG_LVD -#define TRIMS_GPIO_PIN_LVD -#define TRIMS_GPIO_REG_LVU -#define TRIMS_GPIO_PIN_LVU -#define TRIMS_GPIO_REG_RHL -#define TRIMS_GPIO_PIN_RHL -#define TRIMS_GPIO_REG_RHR -#define TRIMS_GPIO_PIN_RHR -#define TRIMS_GPIO_REG_RVD -#define TRIMS_GPIO_PIN_RVD -#define TRIMS_GPIO_REG_RVU -#define TRIMS_GPIO_PIN_RVU // function switches -#define FUNCTION_SWITCH_1 SK -#define SWITCHES_GPIO_REG_K -#define SWITCHES_GPIO_PIN_K AW9523B_PIN_0 -#define SWITCHES_K_CFS_IDX 0 -#define FUNCTION_SWITCH_2 SL -#define SWITCHES_GPIO_REG_L -#define SWITCHES_GPIO_PIN_L AW9523B_PIN_1 -#define SWITCHES_L_CFS_IDX 1 -#define FUNCTION_SWITCH_3 SM -#define SWITCHES_GPIO_REG_M -#define SWITCHES_GPIO_PIN_M AW9523B_PIN_2 -#define SWITCHES_M_CFS_IDX 2 -#define FUNCTION_SWITCH_4 SN -#define SWITCHES_GPIO_REG_N -#define SWITCHES_GPIO_PIN_N AW9523B_PIN_3 -#define SWITCHES_N_CFS_IDX 3 // Direct switches // SWA #define STORAGE_SWITCH_A #define HARDWARE_SWITCH_A -#define SWITCHES_GPIO_REG_A GPIOA -#define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_2 // PA.02 // SWD #define STORAGE_SWITCH_D #define HARDWARE_SWITCH_D -#define SWITCHES_GPIO_REG_D GPIOF -#define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_8 // PF.08 // SWE #define STORAGE_SWITCH_E #define HARDWARE_SWITCH_E -#define SWITCHES_GPIO_REG_E GPIOG -#define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_3 // PG.03 // SWF #define STORAGE_SWITCH_F #define HARDWARE_SWITCH_F -#define SWITCHES_GPIO_REG_F GPIOG -#define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_2 // PG.02 #define KEYS_GPIOB_PINS (LL_GPIO_PIN_15) @@ -139,72 +89,24 @@ #define KEYS_OUT_GPIOH_PINS (LL_GPIO_PIN_7) // ADC -#define ADC_GPIO_PIN_STICK_LH -#define ADC_GPIO_PIN_STICK_LV -#define ADC_GPIO_PIN_STICK_RV -#define ADC_GPIO_PIN_STICK_RH -#define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_3 // PA.03 S1 -#define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_5 // PA.05 S2 -#define ADC_GPIO_PIN_SWB LL_GPIO_PIN_5 // PC.05 -#define ADC_GPIO_PIN_SWC LL_GPIO_PIN_7 // PF.07 -#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_1 // PC.01 -#define ADC_GPIOA_PINS ( ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 ) -#define ADC_GPIOC_PINS ( ADC_GPIO_PIN_BATT | ADC_GPIO_PIN_SWB ) -#define ADC_GPIOF_PINS ( ADC_GPIO_PIN_SWC ) -#define ADC_CHANNEL_STICK_LH -#define ADC_CHANNEL_STICK_LV -#define ADC_CHANNEL_STICK_RV -#define ADC_CHANNEL_STICK_RH // Sliders -#define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_15 // ADC12_INP15 -#define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_19 // ADC12_INP19 // Analog switches -#define ADC_CHANNEL_SWB LL_ADC_CHANNEL_8 // ADC12_INP8 -#define ADC_CHANNEL_SWC LL_ADC_CHANNEL_3 // ADC3_INP3 - -#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_11 // ADC123_INP11 -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC12_IN16 - -#define ADC_MAIN ADC1 -#define ADC_DMA DMA2 -#define ADC_DMA_CHANNEL LL_DMAMUX1_REQ_ADC1 -#define ADC_DMA_STREAM LL_DMA_STREAM_4 -#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn -#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_64CYCLES_5 - -#define ADC_EXT ADC3 -#define ADC_EXT_CHANNELS \ - { ADC_CHANNEL_SWC, ADC_CHANNEL_SWD } - -#define ADC_EXT_DMA DMA2 -#define ADC_EXT_DMA_CHANNEL LL_DMAMUX1_REQ_ADC3 -#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 -#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn -#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler -#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_64CYCLES_5 + + + + #define ADC_VREF_PREC2 329 -#define ADC_DIRECTION { \ - 0,0,0,0, /* gimbals */ \ - 0,0, /* sliders */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - -1, /* SWB */ \ - -1, /* SWC */ \ - 0, /* SWE */ \ - 0 /* SWF */ \ - } // Power #define PWR_SWITCH_GPIO GPIO_PIN(GPIOE, 6) // PE.06 diff --git a/radio/src/targets/pl18/hal.h b/radio/src/targets/pl18/hal.h index a53851692d0..580a913e5e6 100644 --- a/radio/src/targets/pl18/hal.h +++ b/radio/src/targets/pl18/hal.h @@ -53,29 +53,9 @@ #if defined(RADIO_NV14_FAMILY) // Trims - #define TRIMS_GPIO_REG_RHL GPIOD - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_7 // PD.07 - #define TRIMS_GPIO_REG_RHR GPIOG - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_10 // PG.10 - #define TRIMS_GPIO_REG_RVD GPIOJ - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_0 // PJ.00 - #define TRIMS_GPIO_REG_RVU GPIOB - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_15 // PB.15 - - #define TRIMS_GPIO_REG_LHL GPIOH - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_2 // PH.02 - #define TRIMS_GPIO_REG_LHR GPIOG - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PG.02 - #define TRIMS_GPIO_REG_LVU GPIOH - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_7 // PH.07 - #define TRIMS_GPIO_REG_LVD GPIOJ - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_12 // PJ.12 + // Keys - #define KEYS_GPIO_REG_ENTER GPIOC - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PC.13 - #define KEYS_GPIO_REG_EXIT GPIOG - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_11 // PG.11 // Monitor pin #define VBUS_MONITOR_GPIO GPIO_PIN(GPIOJ, 14) // PJ.14 @@ -99,199 +79,57 @@ #define STORAGE_SWITCH_H // Index of all switches / trims - #define KEYS_GPIO_ACTIVE_HIGH - #define TRIMS_GPIO_ACTIVE_HIGH // ADC - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_4 // PA.04 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_5 // PA.05 - - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 VRA - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_4 // PC.04 VRB - #define ADC_GPIO_PIN_SWA LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIO_PIN_SWB LL_GPIO_PIN_8 // PF.08 - #define ADC_GPIO_PIN_SWC LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_SWD LL_GPIO_PIN_10 // PF.10 - #define ADC_GPIO_PIN_SWE LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIO_PIN_SWF LL_GPIO_PIN_1 // PC.01 - #define ADC_GPIO_PIN_SWG LL_GPIO_PIN_2 // PC.02 - #define ADC_GPIO_PIN_SWH LL_GPIO_PIN_7 // PA.07 - - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05 - - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH \ - | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SWH) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_SWA | ADC_GPIO_PIN_SWC) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SWE | ADC_GPIO_PIN_SWF | ADC_GPIO_PIN_SWG | ADC_GPIO_PIN_BATT) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_SWB | ADC_GPIO_PIN_SWD) - - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC1_IN3 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_4 // ADC12_IN4 -> ADC1_IN4 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5 - - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14 - #define ADC_CHANNEL_SWA LL_ADC_CHANNEL_9 // ADC12_IN9 -> ADC1_IN9 - #define ADC_CHANNEL_SWB LL_ADC_CHANNEL_6 // ADC3_IN6 -> ADC3_IN6 - #define ADC_CHANNEL_SWC LL_ADC_CHANNEL_8 // ADC12_IN8 -> ADC1_IN8 - #define ADC_CHANNEL_SWD LL_ADC_CHANNEL_8 // ADC3_IN8 -> ADC3_IN8 - #define ADC_CHANNEL_SWE LL_ADC_CHANNEL_10 // ADC123_IN10-> ADC1_IN10 - #define ADC_CHANNEL_SWF LL_ADC_CHANNEL_11 // ADC123_IN11-> ADC1_IN11 - #define ADC_CHANNEL_SWG LL_ADC_CHANNEL_12 // ADC123_IN12-> ADC1_IN12 - #define ADC_CHANNEL_SWH LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 - - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 - #define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - - #define ADC_MAIN ADC1 - #define ADC_EXT ADC3 - #define ADC_EXT_CHANNELS { ADC_CHANNEL_SWB, ADC_CHANNEL_SWD } - #define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0 - #define ADC_DMA_STREAM LL_DMA_STREAM_4 - #define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn - #define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler - - #define ADC_EXT_DMA DMA2 - #define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_2 - #define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 - #define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn - #define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES + + + + + + + + #define ADC_VREF_PREC2 330 - #define ADC_DIRECTION \ - { 0 /*STICK1*/, 0 /*STICK2*/, 0 /*STICK3*/, 0 /*STICK4*/, \ - -1 /*POT1*/, 0 /*POT2*/, 0 /*TX_VOLTAGE*/, 0 /*TX_VBAT*/, \ - 0 /*SWA*/, 0 /*SWB*/, 0 /*SWC*/, 0 /*SWD*/, 0 /*SWE*/, \ - -1 /*SWF*/, -1 /*SWG*/, 0 /*SWH*/ \ - } #elif defined(RADIO_NB4P) // Trims - #define TRIMS_GPIO_REG_T1L - #define TRIMS_GPIO_PIN_T1L - #define TRIMS_GPIO_REG_T1R - #define TRIMS_GPIO_PIN_T1R - #define TRIMS_GPIO_REG_T2L - #define TRIMS_GPIO_PIN_T2L - #define TRIMS_GPIO_REG_T2R - #define TRIMS_GPIO_PIN_T2R // Switches #define SWITCHES_A_2POS #define SWITCHES_B_2POS // Keys - #define KEYS_GPIO_PIN_ENTER - #define KEYS_GPIO_REG_ENTER - #define KEYS_GPIO_PIN_EXIT - #define KEYS_GPIO_REG_EXIT - - #define ADC_GPIO_PIN_STICK_TH LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_STICK_ST LL_GPIO_PIN_2 // PA.02 - #define ADC_CHANNEL_STICK_TH LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC1_IN3 - #define ADC_CHANNEL_STICK_ST LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2 + #define ADC_GPIO_RAW1 GPIOC - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PC.02 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_7 // PA.07 - #define ADC_GPIO_PIN_RAW1 LL_GPIO_PIN_1 // PC.01 (SW1) - #define ADC_GPIO_PIN_RAW2 LL_GPIO_PIN_0 // PC.00 (SW2 SW3) - #define ADC_GPIO_PIN_RAW3 LL_GPIO_PIN_6 // PA.06 (TR1) - #define ADC_GPIO_PIN_RAW4 LL_GPIO_PIN_4 // PC.04 (TR2) - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_12 // ADC123_IN12 -> ADC1_IN12 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 - #define ADC_CHANNEL_RAW1 LL_ADC_CHANNEL_11 // ADC123_IN11 -> ADC1_IN11 - #define ADC_CHANNEL_RAW2 LL_ADC_CHANNEL_10 // ADC123_IN10 -> ADC1_IN10 - #define ADC_CHANNEL_RAW3 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 - #define ADC_CHANNEL_RAW4 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 - #define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_TH | ADC_GPIO_PIN_STICK_ST | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_RAW3) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_RAW1 | ADC_GPIO_PIN_RAW2 | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_RAW4 | ADC_GPIO_PIN_BATT) - - #define ADC_MAIN ADC1 - #define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0 - #define ADC_DMA_STREAM LL_DMA_STREAM_4 - #define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn - #define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler + #define ADC_VREF_PREC2 330 - #define ADC_DIRECTION { \ - 0,0, /* gimbals */ \ - 0,0, /* pots */ \ - 0,0,0,0, /* raw1-4 */ \ - 0, /* vbat */ \ - 0 /* rtc_bat */ \ - } #else // !defined(RADIO_NB4P) && !defined(RADIO_NV14_FAMILY) // Keys #if defined(RADIO_PL18U) -#define KEYS_GPIO_PIN_ENTER -#define KEYS_GPIO_REG_ENTER -#define KEYS_GPIO_PIN_EXIT -#define KEYS_GPIO_REG_EXIT #endif // Trims -#define TRIMS_GPIO_REG_LHL -#define TRIMS_GPIO_PIN_LHL -#define TRIMS_GPIO_REG_LHR -#define TRIMS_GPIO_PIN_LHR -#define TRIMS_GPIO_REG_LVD -#define TRIMS_GPIO_PIN_LVD -#define TRIMS_GPIO_REG_LVU -#define TRIMS_GPIO_PIN_LVU -#define TRIMS_GPIO_REG_RHL -#define TRIMS_GPIO_PIN_RHL -#define TRIMS_GPIO_REG_RHR -#define TRIMS_GPIO_PIN_RHR -#define TRIMS_GPIO_REG_RVD -#define TRIMS_GPIO_PIN_RVD -#define TRIMS_GPIO_REG_RVU -#define TRIMS_GPIO_PIN_RVU -#define TRIMS_GPIO_REG_LSD -#define TRIMS_GPIO_PIN_LSD -#define TRIMS_GPIO_REG_LSU -#define TRIMS_GPIO_PIN_LSU -#define TRIMS_GPIO_REG_RSD -#define TRIMS_GPIO_PIN_RSD -#define TRIMS_GPIO_REG_RSU -#define TRIMS_GPIO_PIN_RSU #if !defined(RADIO_PL18U) - #define TRIMS_GPIO_REG_T7L - #define TRIMS_GPIO_PIN_T7L - #define TRIMS_GPIO_REG_T7R - #define TRIMS_GPIO_PIN_T7R - #define TRIMS_GPIO_REG_T8D - #define TRIMS_GPIO_PIN_T8D - #define TRIMS_GPIO_REG_T8U - #define TRIMS_GPIO_PIN_T8U #define TRIMS_GPIO_REG_TR1U GPIOH->IDR #define TRIMS_GPIO_PIN_TR1U LL_GPIO_PIN_8 // PH.08 @@ -373,13 +211,7 @@ // (happy coincidence ;) // #if defined(RADIO_PL18U) - #define SWITCHES_GPIO_REG_A_H GPIOD - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_3 // PD.03 - #define SWITCHES_GPIO_REG_A_L GPIOB - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_6 // PB.06 #else - #define SWITCHES_GPIO_REG_A GPIOC - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_9 // PC.09 #endif // High rail of Switch C is not required and thus PC10 is free to use for @@ -391,151 +223,39 @@ // #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_11 // PC.11 #if defined(RADIO_PL18U) - #define SWITCHES_GPIO_REG_C_H GPIOJ - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_14 // PJ.14 - #define SWITCHES_GPIO_REG_C_L GPIOH - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_2 // PH.02 #else - #define SWITCHES_GPIO_REG_C GPIOC - #define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_11 // PC.11 #endif // ADC -#define ADC_GPIO_PIN_STICK_LH -#define ADC_GPIO_PIN_STICK_LV -#define ADC_GPIO_PIN_STICK_RV -#define ADC_GPIO_PIN_STICK_RH -#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 VRA -#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_4 // PC.04 VRB -#define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_8 // PF.08 VRC -#define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_9 // PF.09 VRD/LS -#define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_7 // PA.07 VRE/RS #if defined(RADIO_PL18EV) -#define ADC_GPIO_PIN_EXT1 LL_GPIO_PIN_5 // PA.05 -#define ADC_GPIO_PIN_EXT2 LL_GPIO_PIN_2 // PA.02 -#define ADC_GPIO_PIN_EXT3 LL_GPIO_PIN_6 // PF.06 -#define ADC_GPIO_PIN_EXT4 LL_GPIO_PIN_3 // PA.03 #endif -#define ADC_GPIO_PIN_SWB LL_GPIO_PIN_1 // PC.01 -#define ADC_GPIO_PIN_SWD LL_GPIO_PIN_0 // PC.00 -#define ADC_GPIO_PIN_SWE LL_GPIO_PIN_2 // PC.02 -#define ADC_GPIO_PIN_SWF LL_GPIO_PIN_0 // PB.00 -#define ADC_GPIO_PIN_SWG LL_GPIO_PIN_1 // PB.01 -#define ADC_GPIO_PIN_SWH LL_GPIO_PIN_10 // PF.10 - -#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05 - -#define ADC_GPIOA_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SLIDER2 | \ - ADC_GPIO_PIN_EXT1 | ADC_GPIO_PIN_EXT2 | ADC_GPIO_PIN_EXT4) -#define ADC_GPIOB_PINS (ADC_GPIO_PIN_SWF | ADC_GPIO_PIN_SWG) -#define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_BATT | \ - ADC_GPIO_PIN_SWB | ADC_GPIO_PIN_SWD | ADC_GPIO_PIN_SWE) -#define ADC_GPIOF_PINS (ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_SLIDER1 | \ - ADC_GPIO_PIN_EXT3 | ADC_GPIO_PIN_SWH) - -#define ADC_CHANNEL_STICK_LH -#define ADC_CHANNEL_STICK_LV -#define ADC_CHANNEL_STICK_RV -#define ADC_CHANNEL_STICK_RH - -#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 -#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14 -#define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_6 // ADC3_IN6 -> ADC3_IN6 -#define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_7 // ADC3_IN7 -> ADC3_IN7 -#define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 + + + + #if defined(RADIO_PL18EV) // Left, right stick end pot on PL18EV -#define ADC_CHANNEL_EXT1 LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5 -#define ADC_CHANNEL_EXT2 LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2 // Left, right stick end buttons on PL18EV -#define ADC_CHANNEL_EXT3 LL_ADC_CHANNEL_4 // ADC3_IN4 -> ADC3_IN4 -#define ADC_CHANNEL_EXT4 LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC3_IN3 #endif // Analog switches -#define ADC_CHANNEL_SWB LL_ADC_CHANNEL_11 // ADC123_IN11 -> ADC3_IN11 -#define ADC_CHANNEL_SWD LL_ADC_CHANNEL_10 // ADC123_IN10 -> ADC3_IN10 -#define ADC_CHANNEL_SWE LL_ADC_CHANNEL_12 // ADC123_IN12 -> ADC3_IN12 -#define ADC_CHANNEL_SWF LL_ADC_CHANNEL_8 // ADC12_IN8 -> ADC1_IN8 -#define ADC_CHANNEL_SWG LL_ADC_CHANNEL_9 // ADC12_IN9 -> ADC1_IN9 -#define ADC_CHANNEL_SWH LL_ADC_CHANNEL_8 // ADC3_IN8 -> ADC3_IN8 - -#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - -#define ADC_MAIN ADC1 -#define ADC_EXT ADC3 - -#define ADC_EXT_CHANNELS \ - { ADC_CHANNEL_POT3, ADC_CHANNEL_SLIDER1, ADC_CHANNEL_EXT3, ADC_CHANNEL_EXT4, \ - ADC_CHANNEL_SWB, ADC_CHANNEL_SWD, ADC_CHANNEL_SWE, ADC_CHANNEL_SWH \ - } - -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES -#define ADC_DMA DMA2 -#define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0 -#define ADC_DMA_STREAM LL_DMA_STREAM_4 -#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn -#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler - -#define ADC_EXT_DMA DMA2 -#define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_2 -#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 -#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn -#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler -#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES + + + + + #define ADC_VREF_PREC2 330 #if defined(RADIO_PL18EV) -#define ADC_DIRECTION { \ - 0,0,0,0, /* gimbals */ \ - 0,0,0, /* pots */ \ - -1,-1, /* sliders */ \ - 0,0,0,0, /* ext1-4 */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - -1, /* SWB */ \ - -1, /* SWD */ \ - 0, /* SWE */ \ - 0, /* SWF */ \ - 0, /* SWG */ \ - 0 /* SWH */ \ - } #elif defined(RADIO_PL18U) -#define ADC_DIRECTION { \ - 0,0,0,0, /* gimbals */ \ - 0,0,0, /* pots */ \ - -1,1, /* sliders */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - -1, /* SWB */ \ - 0, /* SWD */ \ - -1, /* SWE */ \ - 0, /* SWF */ \ - -1, /* SWG */ \ - 0 /* SWH */ \ - } #else -#define ADC_DIRECTION { \ - 0,0,0,0, /* gimbals */ \ - 0,0,0, /* pots */ \ - -1,-1, /* sliders */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - -1, /* SWB */ \ - -1, /* SWD */ \ - 0, /* SWE */ \ - 0, /* SWF */ \ - 0, /* SWG */ \ - 0 /* SWH */ \ - } #endif #endif diff --git a/radio/src/targets/st16/hal.h b/radio/src/targets/st16/hal.h index c32be675d8d..7b987aa553e 100644 --- a/radio/src/targets/st16/hal.h +++ b/radio/src/targets/st16/hal.h @@ -45,64 +45,18 @@ #define TIMER_MULT_APB2 2 // Keys -#define KEYS_GPIO_REG_ENTER GPIOG -#define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_14 // PG.14 -#define KEYS_GPIO_REG_PAGEDN GPIOA -#define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_8 // PA.08 -#define KEYS_GPIO_REG_EXIT GPIOC -#define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_5 // PC.05 // Trims -#define TRIMS_GPIO_REG_LHL -#define TRIMS_GPIO_PIN_LHL -#define TRIMS_GPIO_REG_LHR -#define TRIMS_GPIO_PIN_LHR -#define TRIMS_GPIO_REG_LVD -#define TRIMS_GPIO_PIN_LVD -#define TRIMS_GPIO_REG_LVU -#define TRIMS_GPIO_PIN_LVU -#define TRIMS_GPIO_REG_RHL -#define TRIMS_GPIO_PIN_RHL -#define TRIMS_GPIO_REG_RHR -#define TRIMS_GPIO_PIN_RHR -#define TRIMS_GPIO_REG_RVD -#define TRIMS_GPIO_PIN_RVD -#define TRIMS_GPIO_REG_RVU -#define TRIMS_GPIO_PIN_RVU // function switches -#define FUNCTION_SWITCH_1 SK -#define SWITCHES_GPIO_REG_K -#define SWITCHES_GPIO_PIN_K PCA95XX_PIN_0 -#define SWITCHES_K_CFS_IDX 0 -#define FUNCTION_SWITCH_2 SL -#define SWITCHES_GPIO_REG_L -#define SWITCHES_GPIO_PIN_L PCA95XX_PIN_1 -#define SWITCHES_L_CFS_IDX 1 -#define FUNCTION_SWITCH_3 SM -#define SWITCHES_GPIO_REG_M -#define SWITCHES_GPIO_PIN_M PCA95XX_PIN_2 -#define SWITCHES_M_CFS_IDX 2 -#define FUNCTION_SWITCH_4 SN -#define SWITCHES_GPIO_REG_N -#define SWITCHES_GPIO_PIN_N PCA95XX_PIN_3 -#define SWITCHES_N_CFS_IDX 3 -#define FUNCTION_SWITCH_5 SO -#define SWITCHES_GPIO_REG_O -#define SWITCHES_GPIO_PIN_O PCA95XX_PIN_4 -#define SWITCHES_O_CFS_IDX 4 -#define FUNCTION_SWITCH_6 SP -#define SWITCHES_GPIO_REG_P -#define SWITCHES_GPIO_PIN_P PCA95XX_PIN_5 -#define SWITCHES_P_CFS_IDX 5 // Direct switches @@ -110,132 +64,46 @@ #define STORAGE_SWITCH_G #define HARDWARE_SWITCH_G #define SWITCHES_G_2POS -#define SWITCHES_GPIO_REG_G -#define SWITCHES_GPIO_PIN_G PCA95XX_PIN_6 // Key 2 #define STORAGE_SWITCH_H #define HARDWARE_SWITCH_H #define SWITCHES_H_2POS -#define SWITCHES_GPIO_REG_H -#define SWITCHES_GPIO_PIN_H PCA95XX_PIN_7 // Key 3 #define STORAGE_SWITCH_I #define HARDWARE_SWITCH_I -#define SWITCHES_GPIO_REG_I GPIOI -#define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_3 // PI.03 // Key 4 #define STORAGE_SWITCH_J #define HARDWARE_SWITCH_J -#define SWITCHES_GPIO_REG_J GPIOI -#define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_11 // PI.11 // ADC -#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_2 // PA.02 -#define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_3 // PA.03 -#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 VRA -#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 VRB -#define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_0 // PB.00 VRC/LS -#define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_7 // PA.07 VRD/RS // If serial gimbals are used, we can reuse the channels -#define ADC_GPIO_PIN_EXT1 LL_GPIO_PIN_0 // PA.00 EXT1 -#define ADC_GPIO_PIN_EXT2 LL_GPIO_PIN_1 // PA.01 EXT2 -#define ADC_GPIO_PIN_EXT3 LL_GPIO_PIN_2 // PA.02 EXT3 -#define ADC_GPIO_PIN_EXT4 LL_GPIO_PIN_3 // PA.03 EXT4 -#define ADC_GPIO_PIN_SWA LL_GPIO_PIN_2 // PC.02_C -#define ADC_GPIO_PIN_SWB LL_GPIO_PIN_3 // PC.03_C -#define ADC_GPIO_PIN_SWC LL_GPIO_PIN_9 // PF.09 -#define ADC_GPIO_PIN_SWD LL_GPIO_PIN_7 // PF.07 -#define ADC_GPIO_PIN_SWE LL_GPIO_PIN_8 // PF.08 -#define ADC_GPIO_PIN_SWF LL_GPIO_PIN_6 // PF.06 -#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_1 // PC.01 -#define ADC_GPIOA_PINS \ - (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_STICK_LH | \ - ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_RV) -#define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SLIDER1) -#define ADC_GPIOC_PINS (ADC_GPIO_PIN_SWA | ADC_GPIO_PIN_SWB | ADC_GPIO_PIN_BATT) -#define ADC_GPIOF_PINS \ - (ADC_GPIO_PIN_SWC | ADC_GPIO_PIN_SWD | ADC_GPIO_PIN_SWE | ADC_GPIO_PIN_SWF) -#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_14 // ADC12_INP14 -#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_15 // ADC12_INP15 -#define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_16 // ADC12_INP16 -#define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_17 // ADC12_INP17 // Each ADC cannot map more than 8 channels, otherwise it will cause problems -#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_3 // ADC12_INP3 -#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_5 // ADC12_INP5 -#define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_9 // ADC12_INP9 -#define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_7 // ADC12_INP7 // Ext inputs: analog gimbal channel re-use -#define ADC_CHANNEL_EXT1 LL_ADC_CHANNEL_14 // ADC12_INP14 -#define ADC_CHANNEL_EXT2 LL_ADC_CHANNEL_15 // ADC12_INP15 -#define ADC_CHANNEL_EXT3 LL_ADC_CHANNEL_16 // ADC12_INP16 -#define ADC_CHANNEL_EXT4 LL_ADC_CHANNEL_17 // ADC12_INP17 // Analog switches -#define ADC_CHANNEL_SWA LL_ADC_CHANNEL_0 // ADC3_INP0 -#define ADC_CHANNEL_SWB LL_ADC_CHANNEL_1 // ADC3_INP1 -#define ADC_CHANNEL_SWC LL_ADC_CHANNEL_2 // ADC3_INP2 -#define ADC_CHANNEL_SWD LL_ADC_CHANNEL_3 // ADC3_INP3 -#define ADC_CHANNEL_SWE LL_ADC_CHANNEL_8 // ADC3_INP8 -#define ADC_CHANNEL_SWF LL_ADC_CHANNEL_7 // ADC3_INP7 - -#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_11 // ADC123_INP11 -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC12_IN16 - -#define ADC_MAIN ADC1 -#define ADC_DMA DMA2 -#define ADC_DMA_CHANNEL LL_DMAMUX1_REQ_ADC1 -#define ADC_DMA_STREAM LL_DMA_STREAM_4 -#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn -#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_8CYCLES_5 - -#define ADC_EXT ADC3 -#define ADC_EXT_CHANNELS \ - { \ - ADC_CHANNEL_SWA, ADC_CHANNEL_SWB, ADC_CHANNEL_SWC, ADC_CHANNEL_SWD, \ - ADC_CHANNEL_SWE, ADC_CHANNEL_SWF, ADC_CHANNEL_BATT \ - } - -#define ADC_EXT_DMA DMA2 -#define ADC_EXT_DMA_CHANNEL LL_DMAMUX1_REQ_ADC3 -#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 -#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn -#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler -#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_64CYCLES_5 + + + + #define ADC_VREF_PREC2 329 -#define ADC_DIRECTION { \ - 0,0,0,0, /* gimbals */ \ - 0,0, /* pots */ \ - 0,0, /* sliders */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - 0, /* SWA */ \ - 0, /* SWB */ \ - 0, /* SWC */ \ - 0, /* SWD */ \ - 0, /* SWE */ \ - 0 /* SWF */ \ - } #define USE_EXTI9_5_IRQ // used for I2C port extender interrupt #define EXTI9_5_IRQ_Priority 5 diff --git a/radio/src/targets/stm32h7s78-dk/hal.h b/radio/src/targets/stm32h7s78-dk/hal.h index 1b8540a0751..a345d9f0c4a 100644 --- a/radio/src/targets/stm32h7s78-dk/hal.h +++ b/radio/src/targets/stm32h7s78-dk/hal.h @@ -52,38 +52,18 @@ #define ADC_VREF_PREC2 1024 // fake -#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 -#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 -#define ADC_GPIO_PIN_STICK_RV -#define ADC_GPIO_PIN_STICK_RH -#define ADC_GPIO_PIN_BATT // fake // #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PA0_C VR1 // #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PA1_C VR2 // #define ADC_GPIOA_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) -#define ADC_GPIOC_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) // Fake gimbal channels -#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_10 -#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_12 -#define ADC_CHANNEL_STICK_RV -#define ADC_CHANNEL_STICK_RH -#define ADC_CHANNEL_BATT // fake -#define ADC_CHANNEL_RTC_BAT // fake // #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_0 // ADC12_INP0 // #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_1 // ADC12_INP1 -#define ADC_MAIN ADC1 -#define ADC_DMA GPDMA1 -#define ADC_DMA_CHANNEL LL_GPDMA1_REQUEST_ADC1 -#define ADC_DMA_STREAM LL_DMA_CHANNEL_0 -#define ADC_DMA_STREAM_IRQ GPDMA1_Channel0_IRQn -#define ADC_DMA_STREAM_IRQHandler GPDMA1_Channel0_IRQHandler -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_92CYCLES_5 -#define ADC_DIRECTION {0,0,0,0,0,0} // Power // #define PWR_SWITCH_GPIO GPIO_PIN(GPIOI, 11) // PI.11 diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index e89d43e3e56..0ab5ea33f63 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -45,209 +45,33 @@ // Keys #if defined(PCBX9E) - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_ENTER GPIOF - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_0 // PF.00 #elif defined(PCBXLITE) - #define KEYS_GPIO_REG_SHIFT GPIOE - #define KEYS_GPIO_PIN_SHIFT LL_GPIO_PIN_8 // PE.08 - #define KEYS_GPIO_REG_EXIT GPIOE - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_7 // PE.07 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_UP GPIOE - #define KEYS_GPIO_PIN_UP LL_GPIO_PIN_10 // PE.10 - #define KEYS_GPIO_REG_DOWN GPIOE - #define KEYS_GPIO_PIN_DOWN LL_GPIO_PIN_14 // PE.14 - #define KEYS_GPIO_REG_LEFT GPIOE - #define KEYS_GPIO_PIN_LEFT LL_GPIO_PIN_12 // PE.12 - #define KEYS_GPIO_REG_RIGHT GPIOE - #define KEYS_GPIO_PIN_RIGHT LL_GPIO_PIN_13 // PE.13 #elif defined(RADIO_TPROS) - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PA.13 #elif defined(RADIO_FAMILY_JUMPER_T12) && !defined(RADIO_TPRO) && !defined(RADIO_TPROV2) - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_10 // PE.10 - #define KEYS_GPIO_REG_UP GPIOE - #define KEYS_GPIO_PIN_UP LL_GPIO_PIN_9 // PE.09 - #define KEYS_GPIO_REG_DOWN GPIOE - #define KEYS_GPIO_PIN_DOWN LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_LEFT GPIOD - #define KEYS_GPIO_PIN_LEFT LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_RIGHT GPIOD - #define KEYS_GPIO_PIN_RIGHT LL_GPIO_PIN_3 // PD.03 #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_MT12) || defined(RADIO_POCKET) || defined(RADIO_GX12) #if defined(RADIO_MT12) - #define KEYS_GPIO_REG_PAGEUP GPIOD - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 #else - #define KEYS_GPIO_REG_PAGEUP GPIOD - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_7 // PD.07 #endif #if defined(RADIO_TX12) - #define KEYS_GPIO_REG_EXIT GPIOB - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_3 // PB.03 #else - #define KEYS_GPIO_REG_EXIT GPIOC - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_5 // PC.05 #endif #if defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_GX12) - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_10 // PA.10 #else - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PA.13 -#endif - #define KEYS_GPIO_REG_SYS GPIOB - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_4 // PB.04 - #define KEYS_GPIO_REG_MDL GPIOE - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_TELE GPIOD - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_2 // PD.02 +#endif #elif defined(RADIO_T8) - #define KEYS_GPIO_REG_PAGEUP GPIOD - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOB - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_3 // PB.03 - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PA.13 - #define KEYS_GPIO_REG_SYS GPIOB - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_4 // PB.04 - #define KEYS_GPIO_REG_MDL GPIOE - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_PLUS GPIOE - #define KEYS_GPIO_PIN_PLUS LL_GPIO_PIN_9 // PE.09 - #define KEYS_GPIO_REG_MINUS GPIOE - #define KEYS_GPIO_PIN_MINUS LL_GPIO_PIN_10 // PE.10 #define KEYS_GPIO_REG_BIND GPIOA #define KEYS_GPIO_PIN_BIND LL_GPIO_PIN_10 // PA.10 #elif defined(RADIO_COMMANDO8) - #define KEYS_GPIO_REG_PAGEUP GPIOE - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_PAGEDN GPIOE - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_13 // PE.13 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_10 // PE.10 - #define KEYS_GPIO_REG_SYS GPIOD - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_1 // PD.01 - #define KEYS_GPIO_REG_MDL GPIOD - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_0 // PD.00 - #define KEYS_GPIO_REG_PLUS GPIOE - #define KEYS_GPIO_PIN_PLUS LL_GPIO_PIN_12 // PE.12 - #define KEYS_GPIO_REG_MINUS GPIOE - #define KEYS_GPIO_PIN_MINUS LL_GPIO_PIN_14 // PE.14 #define KEYS_GPIO_REG_BIND GPIOD #define KEYS_GPIO_PIN_BIND LL_GPIO_PIN_9 // PD.09 #elif defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE) - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_11 // PD.11 - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_10 // PD.10 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_12 // PD.12 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_7 // PE.7 #elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PA.13 #elif defined(RADIO_GX12) - #define KEYS_GPIO_REG_SYS GPIOB - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_4 // PB.04 - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_10 // PA.10 - #define KEYS_GPIO_REG_EXIT GPIOC - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_5 // PC.05 - #define KEYS_GPIO_REG_MDL GPIOE - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_PAGEUP GPIOD - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_7 // PD.03 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.07 - #define KEYS_GPIO_REG_TELE GPIOD - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_2 // PD.02 #elif defined(RADIO_V14) || defined(RADIO_V12) - #define KEYS_GPIO_REG_PAGEUP GPIOD - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOE - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_1 // PE.01 - #define KEYS_GPIO_REG_ENTER GPIOD - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_11 // PD.11 - #define KEYS_GPIO_REG_SYS GPIOB - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_4 // PB.04 - #define KEYS_GPIO_REG_MDL GPIOE - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_TELE GPIOD - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_2 // PD.02 #elif defined(PCBX7) - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_10 // PE.10 #elif defined(PCBX9LITE) - #define KEYS_GPIO_REG_PAGEDN GPIOE - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_8 // PE.08 - #define KEYS_GPIO_REG_MENU GPIOE - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PE.07 - #define KEYS_GPIO_REG_EXIT GPIOE - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_9 // PE.09 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_11 // PE.11 #elif defined(RADIO_X9DP2019) - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_12 // PE.12 #else - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_PLUS GPIOE - #define KEYS_GPIO_PIN_PLUS LL_GPIO_PIN_10 // PE.10 - #define KEYS_GPIO_REG_MINUS GPIOE - #define KEYS_GPIO_PIN_MINUS LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_12 // PE.12 #endif // Rotary Encoder @@ -354,693 +178,155 @@ // Trims #if defined(PCBX9E) - #define TRIMS_GPIO_REG_LHL GPIOG - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_1 // PG.01 - #define TRIMS_GPIO_REG_LHR GPIOG - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_0 // PG.00 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOC - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHR GPIOC - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_13 // PC.13 #elif defined(PCBXLITE) - #define TRIMS_GPIO_REG_LHL GPIOC - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_4 // PC.04 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_5 // PC.05 - #define TRIMS_GPIO_REG_LVU GPIOB - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_0 // PB.00 - #define TRIMS_GPIO_REG_LVD GPIOB - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_1 // PB.01 - #define TRIMS_VIRTUAL_RV - #define TRIMS_VIRTUAL_RH #elif defined(RADIO_X7ACCESS) - #define TRIMS_GPIO_REG_LHR GPIOD - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_LHL GPIOC - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_4 // PE.04 #elif defined(RADIO_FAMILY_T20) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_LHR GPIOG - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PG.02 - #define TRIMS_GPIO_REG_LVD GPIOG - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_3 // PG.03 - #define TRIMS_GPIO_REG_LVU GPIOD - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_14 // PD.14 - #define TRIMS_GPIO_REG_RVD GPIOF - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_2 // PF.02 - #define TRIMS_GPIO_REG_RVU GPIOE - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RHR GPIOF - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_1 // PF.01 - #define TRIMS_GPIO_REG_LSD GPIOG - #define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_9 // PG.09 - #define TRIMS_GPIO_REG_LSU GPIOG - #define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_10 // PG.10 - #define TRIMS_GPIO_REG_RSD GPIOD - #define TRIMS_GPIO_PIN_RSD LL_GPIO_PIN_7 // PD.07 - #define TRIMS_GPIO_REG_RSU GPIOG - #define TRIMS_GPIO_PIN_RSU LL_GPIO_PIN_12 // PG.12 #if defined(RADIO_T20V2) - #define TRIMS_GPIO_REG_T7L GPIOC - #define TRIMS_GPIO_PIN_T7L LL_GPIO_PIN_13 // PC.13 #else - #define TRIMS_GPIO_REG_T7L GPIOB - #define TRIMS_GPIO_PIN_T7L LL_GPIO_PIN_3 // PB.03 -#endif - #define TRIMS_GPIO_REG_T7R GPIOG - #define TRIMS_GPIO_PIN_T7R LL_GPIO_PIN_15 // PG.15 - #define TRIMS_GPIO_REG_T8D GPIOG - #define TRIMS_GPIO_PIN_T8D LL_GPIO_PIN_13 // PG.13 - #define TRIMS_GPIO_REG_T8U GPIOB - #define TRIMS_GPIO_PIN_T8U LL_GPIO_PIN_4 // PB.04 +#endif #elif defined(RADIO_MT12) - #define TRIMS_GPIO_REG_T1R GPIOE - #define TRIMS_GPIO_PIN_T1R LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_T1L GPIOE - #define TRIMS_GPIO_PIN_T1L LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_T2R GPIOC - #define TRIMS_GPIO_PIN_T2R LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_T2L GPIOC - #define TRIMS_GPIO_PIN_T2L LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_T3R GPIOE - #define TRIMS_GPIO_PIN_T3R LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_T3L GPIOE - #define TRIMS_GPIO_PIN_T3L LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_T4R GPIOE - #define TRIMS_GPIO_PIN_T4R LL_GPIO_PIN_7 // PE.07 - #define TRIMS_GPIO_REG_T4L GPIOE - #define TRIMS_GPIO_PIN_T4L LL_GPIO_PIN_8 // PE.08 - #define TRIMS_GPIO_REG_T5R GPIOE - #define TRIMS_GPIO_PIN_T5R LL_GPIO_PIN_15 // PE.15 - #define TRIMS_GPIO_REG_T5L GPIOE - #define TRIMS_GPIO_PIN_T5L LL_GPIO_PIN_14 // PE.14 #elif defined(RADIO_GX12) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_4 // PE.04 #elif defined(RADIO_TPROS) - #define TRIMS_GPIO_REG_LHL GPIOC - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_RVU GPIOD - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_5 // PE.05 #elif defined(RADIO_BUMBLEBEE) - #define TRIMS_GPIO_REG_LHR GPIOG - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PG.02 - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_LVD GPIOG - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_3 // PG.03 - #define TRIMS_GPIO_REG_LVU GPIOD - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_14 // PD.14 - #define TRIMS_GPIO_REG_RVD GPIOF - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_2 // PF.02 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVU GPIOE - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_RHR GPIOF - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_1 // PF.01 #elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define TRIMS_GPIO_REG_LHL GPIOE - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_LHR GPIOE - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_LVD GPIOC - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_LVU GPIOC - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RVD GPIOE - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_RHL GPIOD - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_RVU GPIOE - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RHR GPIOC - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_1 // PC.01 #elif defined(RADIO_V14) || defined(RADIO_V12) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVU GPIOD - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_0 // PD.00 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_4 // PE.04 #elif defined(PCBX7) && !defined(RADIO_COMMANDO8) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_4 // PE.04 #elif defined(RADIO_COMMANDO8) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_6 // PC.06 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_1 // PE.01 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_0 // PE.00 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_7 // PC.07 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_15 // PE.15 #elif defined(PCBX9LITE) - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_4 // PC.04 - #define TRIMS_GPIO_REG_LHL GPIOC - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_5 // PC.05 - #define TRIMS_GPIO_REG_LVU GPIOB - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_0 // PB.00 - #define TRIMS_GPIO_REG_LVD GPIOB - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_1 // PB.01 - #define TRIMS_GPIO_REG_RVU GPIOE - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_13 // PE.13 - #define TRIMS_GPIO_REG_RHR GPIOD - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_8 // PD.08 - #define TRIMS_GPIO_REG_RVD GPIOE - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_14 // PE.14 - #define TRIMS_GPIO_REG_RHL GPIOD - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_9 // PD.09 #elif defined(RADIO_X9DP2019) - #define TRIMS_GPIO_REG_LHL GPIOE - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_LHR GPIOE - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHL GPIOC - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_13 // PC.13 - #define TRIMS_GPIO_REG_RHR GPIOC - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_1 // PC.01 #else - #define TRIMS_GPIO_REG_LHL GPIOE - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_LHR GPIOE - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOC - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHR GPIOC - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_13 // PC.13 #endif // Switches #if defined(PCBX9E) - #define SWITCHES_GPIO_REG_A_H GPIOD - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_10 // PD.10 - #define SWITCHES_GPIO_REG_A_L GPIOD - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_14 // PD.14 #elif defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_MT12) - #define SWITCHES_GPIO_REG_A_H GPIOE - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_A_L GPIOE - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_0 // PE.00 #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) - #define SWITCHES_GPIO_REG_A GPIOC - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_13 // PC.13 #elif defined(RADIO_GX12) #define SWITCHES_A_2POS - #define SWITCHES_A_CFS_IDX 7 - #define SWITCHES_GPIO_REG_A - #define SWITCHES_GPIO_PIN_A PCA95XX_PIN_14 #elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_A GPIOC - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_5 // PC.05 #elif defined(RADIO_T8) - #define SWITCHES_GPIO_REG_A GPIOE - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_14 // PE.14 #elif defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_A GPIOE - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_3 // PE.03 #elif defined(RADIO_TPRO) || defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_A_L GPIOE - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_13 // PE.13 - #define SWITCHES_GPIO_REG_A_H GPIOE - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_7 // PE.07 #elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_A_H GPIOE - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_A_L GPIOD - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_11 // PD.11 #elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_A_L GPIOD - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_2 // PD.02 - #define SWITCHES_GPIO_REG_A_H GPIOD - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_1 // PD.01 #elif defined(RADIO_FAMILY_T20) - #define SWITCHES_A_INVERTED - #define SWITCHES_GPIO_REG_A GPIOD - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_0 // PD.00 #elif defined(RADIO_V14) || defined(RADIO_V12) #define STORAGE_SWITCH_A #define HARDWARE_SWITCH_A - #define SWITCHES_GPIO_REG_A GPIOC - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_13 // PC.13 #elif defined(PCBX7) - #define SWITCHES_GPIO_REG_A_L GPIOE - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_7 // PE.07 - #define SWITCHES_GPIO_REG_A_H GPIOE - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_13 // PE.13 #else - #define SWITCHES_GPIO_REG_A_H GPIOB - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_5 // PB.05 - #define SWITCHES_GPIO_REG_A_L GPIOE - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_0 // PE.00 #endif #if defined(PCBX9E) - #define SWITCHES_GPIO_REG_B_H GPIOG - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_11 // PG.11 - #define SWITCHES_GPIO_REG_B_L GPIOG - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_10 // PG.10 #elif defined(PCBXLITE) - #define SWITCHES_GPIO_REG_B_L GPIOA - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_6 // PA.06 - #define SWITCHES_GPIO_REG_B_H GPIOA - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_5 // PA.05 #elif defined(RADIO_T8) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_7 // PE.07 - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_13 // PE.13 #elif defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_5 // PE.05 - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_4 // PE.04 #elif defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_2 // PE.02 #elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_B_L GPIOA - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_5 // PA.05 - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_15 // PE.15 #elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_1 // PE.01 #elif defined(RADIO_FAMILY_T20) - #define SWITCHES_B_INVERTED - #define SWITCHES_GPIO_REG_B GPIOE - #define SWITCHES_GPIO_PIN_B LL_GPIO_PIN_2 // PE.02 #elif (RADIO_LR3PRO) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_GPIO_REG_B_H GPIOA - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_5 // PA.05 #elif defined(RADIO_BOXER) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_7 // PE.07 #elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_B GPIOE - #define SWITCHES_GPIO_PIN_B LL_GPIO_PIN_7 // PE.07 #elif defined(RADIO_MT12) - #define SWITCHES_GPIO_REG_B GPIOD - #define SWITCHES_GPIO_PIN_B LL_GPIO_PIN_11 // PD.11 #elif defined(RADIO_GX12) #define SWITCHES_B_3POS - #define SWITCHES_GPIO_REG_B_H - #define SWITCHES_GPIO_PIN_B_H PCA95XX_PIN_10 - #define SWITCHES_GPIO_REG_B_L - #define SWITCHES_GPIO_PIN_B_L PCA95XX_PIN_11 #elif defined(RADIO_V14) || defined(RADIO_V12) // ADC based switch #elif defined(PCBX7) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_GPIO_REG_B_H GPIOA - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_5 // PA.05 #elif defined(PCBX9LITE) - #define SWITCHES_GPIO_REG_B_L GPIOB - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_4 // PB.04 - #define SWITCHES_GPIO_REG_B_H GPIOB - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_5 // PB.05 #else - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_2 // PE.02 #endif #if defined(PCBX9E) - #define SWITCHES_GPIO_REG_C_H GPIOF - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_13 // PF.13 - #define SWITCHES_GPIO_REG_C_L GPIOF - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_14 // PF.14 #elif defined(PCBXLITE) || defined(PCBX9LITE) - #define SWITCHES_GPIO_REG_C_L GPIOE - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_2 // PE.02 - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_3 // PE.03 #elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) - #define SWITCHES_GPIO_REG_C_L GPIOE - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_C_H GPIOD - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_11 // PD.11 #elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_C_L GPIOD - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_11 // PD.11 #elif defined(RADIO_TX12) - #define SWITCHES_GPIO_REG_C_L GPIOD - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_11 // PD.11 - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_0 // PE.00 #elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) - #define SWITCHES_GPIO_REG_C_L GPIOE - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_C_H GPIOD - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_11 // PD.11 #elif defined(RADIO_T8) - #define SWITCHES_GPIO_REG_C_L GPIOE - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_2 // PE.02 - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_1 // PE.01 #elif defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_C_L GPIOC - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_4 // PC.04 - #define SWITCHES_GPIO_REG_C_H GPIOA - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_6 // PA.06 #elif defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_LR3PRO) - #define SWITCHES_GPIO_REG_C GPIOE - #define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_14 // PE.14 #elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_C GPIOE - #define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_8 // PE.08 #elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_C GPIOD - #define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_0 // PD.00 #elif defined(RADIO_FAMILY_T20) - #define SWITCHES_GPIO_REG_C_L GPIOD - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_2 // PD.02 - #define SWITCHES_GPIO_REG_C_H GPIOD - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_1 // PD.01 #elif defined(RADIO_MT12) - #define SWITCHES_GPIO_REG_C GPIOC - #define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_13 // PC.13 #elif defined(RADIO_GX12) #define SWITCHES_C_3POS - #define SWITCHES_GPIO_REG_C_H - #define SWITCHES_GPIO_PIN_C_H PCA95XX_PIN_5 - #define SWITCHES_GPIO_REG_C_L - #define SWITCHES_GPIO_PIN_C_L PCA95XX_PIN_4 #elif defined(RADIO_V14) || defined(RADIO_V12) // ADC based switch #elif defined(PCBX7) - #define SWITCHES_GPIO_REG_C_L GPIOD - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_11 // PD.11 #if defined(PCBX7ACCESS) - #define SWITCHES_GPIO_REG_C_H GPIOD - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_10 // PD.10 #else - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_0 // PE.00 #endif #else - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_GPIO_REG_C_L GPIOA - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_5 // PA.05 #endif #if defined(PCBX9E) - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_D_L GPIOE - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_2 // PE.02 #elif defined(PCBX9DP) - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_7 // PE.07 - #define SWITCHES_GPIO_REG_D_L GPIOE - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_13 // PE.13 #elif defined(PCBXLITE) - #define SWITCHES_GPIO_REG_D_L GPIOB - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_4 // PB.04 - #define SWITCHES_GPIO_REG_D_H GPIOB - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_5 // PB.05 #elif defined(RADIO_T8) - #define SWITCHES_GPIO_REG_D GPIOD - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_14 // PD.14 #elif defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_D GPIOA - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_5 // PA.05 #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) - #define SWITCHES_GPIO_REG_D GPIOE - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_8 // PE.08 #elif defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_LR3PRO) - #define SWITCHES_GPIO_REG_D GPIOD - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_14 // PD.14 #elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_D GPIOC - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_13// PC.13 #elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_D_L GPIOA - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_5 // PA.05 - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_15 // PE.15 #elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_D GPIOE - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_2 // PE.02 #elif defined(RADIO_FAMILY_T20) - #define SWITCHES_GPIO_REG_D_L GPIOE - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_1 // PE.01 #elif defined(RADIO_MT12) - #define SWITCHES_GPIO_REG_D GPIOC - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_3 // PC.03 #elif defined(RADIO_GX12) #define SWITCHES_D_2POS - #define SWITCHES_D_CFS_IDX 6 - #define SWITCHES_GPIO_REG_D - #define SWITCHES_GPIO_PIN_D PCA95XX_PIN_1 #elif defined(RADIO_V14) || defined(RADIO_V12) #define STORAGE_SWITCH_D #define HARDWARE_SWITCH_D - #define SWITCHES_GPIO_REG_D GPIOE - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_8 // PE.08 #elif defined(PCBX7) && !defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_D_L GPIOE - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_2 // PE.02 #elif defined(PCBX7) && defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_D_L GPIOE - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_2 // PE.02 #elif defined(PCBX9LITE) - #define SWITCHES_GPIO_REG_D GPIOC - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_13 // PC.13 #else - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_7 // PE.07 - #define SWITCHES_GPIO_REG_D_L GPIOB - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_1 // PB.01 #endif #if defined(PCBX9E) - #define SWITCHES_GPIO_REG_E_H GPIOE - #define SWITCHES_GPIO_PIN_E_H LL_GPIO_PIN_7 // PE.07 - #define SWITCHES_GPIO_REG_E_L GPIOE - #define SWITCHES_GPIO_PIN_E_L LL_GPIO_PIN_13 // PE.13 #elif defined(PCBXLITES) - #define SWITCHES_GPIO_REG_E GPIOE - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_5 // PE.05 #elif defined(PCBXLITE) // no SWE but we want to remain compatible with XLiteS #elif defined(PCBX9LITE) - #define SWITCHES_GPIO_REG_E GPIOA - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_5 // PA.05 #elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) - #define SWITCHES_GPIO_REG_E GPIOE - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_7 // PE.07 #elif defined(RADIO_BOXER) - #define SWITCHES_GPIO_REG_E GPIOE - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_14 // PE.14 #elif defined(RADIO_TX12) - #define SWITCHES_GPIO_REG_E_H GPIOE - #define SWITCHES_GPIO_PIN_E_H LL_GPIO_PIN_13 // PE.13 - #define SWITCHES_GPIO_REG_E_L GPIOE - #define SWITCHES_GPIO_PIN_E_L LL_GPIO_PIN_7 // PE.07 #elif defined(RADIO_TX12MK2) - #define SWITCHES_GPIO_REG_E_H GPIOE - #define SWITCHES_GPIO_PIN_E_H LL_GPIO_PIN_14 // PE.14 - #define SWITCHES_GPIO_REG_E_L GPIOE - #define SWITCHES_GPIO_PIN_E_L LL_GPIO_PIN_7 // PE.07 #elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_E GPIOC - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_5 // PC.05 #elif defined(RADIO_TPRO) - #define SWITCHES_GPIO_REG_E GPIOG - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_10 // PG.10 #elif defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_E GPIOG - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_0 // PG.00 #elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_E GPIOD - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_3 // PD.03 #elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_E GPIOE - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_8 // PE.08 #elif defined(RADIO_FAMILY_T20) - #define SWITCHES_GPIO_REG_E GPIOD - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_3 // PD.03 #elif defined(RADIO_MT12) // ADC based switch/pot #elif defined(RADIO_GX12) #define SWITCHES_E_3POS - #define SWITCHES_GPIO_REG_E_H - #define SWITCHES_GPIO_PIN_E_H PCA95XX_PIN_12 - #define SWITCHES_GPIO_REG_E_L - #define SWITCHES_GPIO_PIN_E_L PCA95XX_PIN_13 #elif defined(RADIO_V14) || defined(RADIO_V12) // ADC based switch #elif defined(PCBX7) // no SWE #else - #define SWITCHES_GPIO_REG_E_H GPIOB - #define SWITCHES_GPIO_PIN_E_H LL_GPIO_PIN_3 // PB.03 - #define SWITCHES_GPIO_REG_E_L GPIOB - #define SWITCHES_GPIO_PIN_E_L LL_GPIO_PIN_4 // PB.04 #endif #if defined(PCBX9E) - #define SWITCHES_GPIO_REG_F GPIOE - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_11 // PE.11 #elif defined(PCBXLITES) - #define SWITCHES_GPIO_REG_F GPIOC - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_3 // PC.03 #elif defined(PCBXLITE) // no SWF but we want to remain compatible with XLiteS #elif defined(PCBX9LITES) - #define SWITCHES_GPIO_REG_F GPIOC - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_3 // PC.03 #elif defined(PCBX9LITE) // no SWF #elif defined(RADIO_ZORRO) || defined(RADIO_BOXER) - #define SWITCHES_GPIO_REG_F GPIOE - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_1 // PE.01 #elif defined(RADIO_TX12) - #define SWITCHES_GPIO_REG_F_L GPIOE - #define SWITCHES_GPIO_PIN_F_L LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_F_H GPIOE - #define SWITCHES_GPIO_PIN_F_H LL_GPIO_PIN_2 // PE.02 #elif defined(RADIO_TX12MK2) - #define SWITCHES_GPIO_REG_F_L GPIOD - #define SWITCHES_GPIO_PIN_F_L LL_GPIO_PIN_14 // PD.14 - #define SWITCHES_GPIO_REG_F_H GPIOE - #define SWITCHES_GPIO_PIN_F_H LL_GPIO_PIN_1 // PE.01 #elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_F GPIOE - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_7 // PE.07 #elif defined(RADIO_TPRO) - #define SWITCHES_GPIO_REG_F GPIOG - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_9 // PG.09 #elif defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_F GPIOG - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_1 // PG.01 #elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_F GPIOB - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_5 // PB.05 #elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_F GPIOC - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_13// PC.13 #elif defined(RADIO_FAMILY_T20) - #define SWITCHES_GPIO_REG_F GPIOB - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_5 // PB.05 #elif defined(RADIO_MT12) // ADC based switch/pot #elif defined(RADIO_T8) || defined(RADIO_TLITE) || defined(RADIO_COMMANDO8) || defined(RADIO_LR3PRO) || defined(RADIO_POCKET) @@ -1049,67 +335,31 @@ // no SWF #elif defined(RADIO_GX12) #define SWITCHES_F_3POS - #define SWITCHES_GPIO_REG_F_H - #define SWITCHES_GPIO_PIN_F_H PCA95XX_PIN_3 - #define SWITCHES_GPIO_REG_F_L - #define SWITCHES_GPIO_PIN_F_L PCA95XX_PIN_2 #elif defined(RADIO_V14) || defined(RADIO_V12) // ADC based switch #elif defined(PCBX7) - #define SWITCHES_GPIO_REG_F GPIOE - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_14 // PE.14 #else - #define SWITCHES_GPIO_REG_F GPIOE - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_14 // PE.14 #endif #if defined(PCBX9E) - #define SWITCHES_GPIO_REG_G_H GPIOF - #define SWITCHES_GPIO_PIN_G_H LL_GPIO_PIN_3 // PF.03 - #define SWITCHES_GPIO_REG_G_L GPIOF - #define SWITCHES_GPIO_PIN_G_L LL_GPIO_PIN_4 // PF.04 #elif defined(PCBX9LITES) - #define SWITCHES_GPIO_REG_G GPIOC - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_2 // PC.02 #elif defined(RADIO_T12) || defined(RADIO_ZORRO) - #define SWITCHES_GPIO_REG_G GPIOE - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_14 // PE.14 #elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_V14) || defined(RADIO_V12) #elif defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_G GPIOG - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_10 // PG.10 #elif defined(RADIO_TPRO) // SW1 - #define FUNCTION_SWITCH_1 SG - #define SWITCHES_GPIO_REG_G GPIOG - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_7 // PG.07 - #define SWITCHES_G_CFS_IDX 0 #elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_G GPIOD - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_15// PD.15 - Left trim push #elif defined(RADIO_FAMILY_T20) //TRIM left low - #define SWITCHES_GPIO_REG_G GPIOD - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_15 // PD.15 #elif defined(RADIO_GX12) #define SWITCHES_G_2POS - #define SWITCHES_GPIO_REG_G - #define SWITCHES_GPIO_PIN_G PCA95XX_PIN_15 #elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_MT12) || defined(RADIO_POCKET) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) // no SWG #else - #define SWITCHES_GPIO_REG_G_H GPIOE - #define SWITCHES_GPIO_PIN_G_H LL_GPIO_PIN_9 // PE.09 - #define SWITCHES_GPIO_REG_G_L GPIOE - #define SWITCHES_GPIO_PIN_G_L LL_GPIO_PIN_8 // PE.08 #endif #if defined(PCBX9E) - #define SWITCHES_GPIO_REG_H GPIOF - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_1 // PF.01 #elif defined(PCBX9DP) - #define SWITCHES_GPIO_REG_H GPIOD - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_14 // PD.14 #elif defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_POCKET) // no SWH #elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) @@ -1117,52 +367,28 @@ #elif defined(RADIO_TX12) || defined(RADIO_MT12) #elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_V14) || defined(RADIO_V12) #elif defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_H GPIOG - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_9 // PG.09 #elif defined(RADIO_TPRO) // SW2 - #define FUNCTION_SWITCH_2 SH - #define SWITCHES_GPIO_REG_H GPIOG - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_6 // PG.06 - #define SWITCHES_H_CFS_IDX 1 #elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_H GPIOF - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_0 // PF.00 - Right trim push #elif defined(RADIO_FAMILY_T20) //TRIM right low - #define SWITCHES_GPIO_REG_H GPIOF - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_0 // PF.00 #elif defined(RADIO_TLITE) || defined(RADIO_TPROS) || defined(RADIO_LR3PRO) // no SWH #elif defined(RADIO_GX12) #define SWITCHES_H_2POS - #define SWITCHES_GPIO_REG_H - #define SWITCHES_GPIO_PIN_H PCA95XX_PIN_0 #elif defined(PCBX7) - #define SWITCHES_GPIO_REG_H GPIOD - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_14 // PD.14 #else - #define SWITCHES_GPIO_REG_H GPIOE - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_13 // PE.13 #endif #if defined(RADIO_X9DP2019) - #define SWITCHES_GPIO_REG_I GPIOD - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_10 // PD.10 #elif defined(PCBX9D) || defined(PCBX9DP) #endif // X7 P400 P401 headers additionnal momentary switches #if defined(PCBX7ACCESS) - #define SWITCHES_GPIO_REG_I GPIOC - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_13 // PC.13 #elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) // no SWI/J #elif defined(RADIO_TX12) - #define SWITCHES_GPIO_REG_I GPIOE - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_14 // PE.14 - #define SWITCHES_GPIO_REG_J GPIOD - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_14 // PD.14 #elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_V14) || defined(RADIO_V12) // no headers #elif defined(RADIO_TLITE) || defined(RADIO_LR3PRO) @@ -1172,210 +398,50 @@ // No I/J #elif defined(RADIO_TPROV2) // SW1 - #define FUNCTION_SWITCH_1 SI - #define SWITCHES_GPIO_REG_I GPIOG - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_7 // PG.07 - #define SWITCHES_I_CFS_IDX 0 // SW2 - #define FUNCTION_SWITCH_2 SJ - #define SWITCHES_GPIO_REG_J GPIOG - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_6 // PG.06 - #define SWITCHES_J_CFS_IDX 1 // SW3 - #define FUNCTION_SWITCH_3 SK - #define SWITCHES_GPIO_REG_K GPIOG - #define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_5 // PG.05 - #define SWITCHES_K_CFS_IDX 2 // SW4 - #define FUNCTION_SWITCH_4 SL - #define SWITCHES_GPIO_REG_L GPIOG - #define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_4 // PG.04 - #define SWITCHES_L_CFS_IDX 3 // SW5 - #define FUNCTION_SWITCH_5 SM - #define SWITCHES_GPIO_REG_M GPIOG - #define SWITCHES_GPIO_PIN_M LL_GPIO_PIN_3 // PG.03 - #define SWITCHES_M_CFS_IDX 4 // SW6 - #define FUNCTION_SWITCH_6 SN - #define SWITCHES_GPIO_REG_N GPIOG - #define SWITCHES_GPIO_PIN_N LL_GPIO_PIN_2 // PG.02 - #define SWITCHES_N_CFS_IDX 5 #elif defined(RADIO_BUMBLEBEE) // SW1 - #define FUNCTION_SWITCH_1 SJ - #define SWITCHES_GPIO_REG_J GPIOE - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_J_CFS_IDX 0 // SW2 - #define FUNCTION_SWITCH_2 SK - #define SWITCHES_GPIO_REG_K GPIOE - #define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_14 // PE.14 - #define SWITCHES_K_CFS_IDX 1 // SW3 - #define FUNCTION_SWITCH_3 SL - #define SWITCHES_GPIO_REG_L GPIOE - #define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_13 // PE.13 - #define SWITCHES_L_CFS_IDX 2 // SW4 - #define FUNCTION_SWITCH_4 SM - #define SWITCHES_GPIO_REG_M GPIOE - #define SWITCHES_GPIO_PIN_M LL_GPIO_PIN_10 // PE.10 - #define SWITCHES_M_CFS_IDX 3 // SW5 - #define FUNCTION_SWITCH_5 SO - #define SWITCHES_GPIO_REG_O GPIOE - #define SWITCHES_GPIO_PIN_O LL_GPIO_PIN_8 // PE.08 - #define SWITCHES_O_CFS_IDX 4 // SW6 - #define FUNCTION_SWITCH_6 SP - #define SWITCHES_GPIO_REG_P GPIOE - #define SWITCHES_GPIO_PIN_P LL_GPIO_PIN_12 // PE.12 - #define SWITCHES_P_CFS_IDX 5 #elif defined(RADIO_TPRO) // SW3 - #define FUNCTION_SWITCH_3 SI - #define SWITCHES_GPIO_REG_I GPIOG - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_5 // PG.05 - #define SWITCHES_I_CFS_IDX 2 // SW4 - #define FUNCTION_SWITCH_4 SJ - #define SWITCHES_GPIO_REG_J GPIOG - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_4 // PG.04 - #define SWITCHES_J_CFS_IDX 3 // SW5 - #define FUNCTION_SWITCH_5 SK - #define SWITCHES_GPIO_REG_K GPIOG - #define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_3 // PG.03 - #define SWITCHES_K_CFS_IDX 4 // SW6 - #define FUNCTION_SWITCH_6 SL - #define SWITCHES_GPIO_REG_L GPIOG - #define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_2 // PG.02 - #define SWITCHES_L_CFS_IDX 5 #elif defined(RADIO_FAMILY_T20) //TRIM left up - #define SWITCHES_GPIO_REG_I GPIOG - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_11 // PG.11 //TRIM right up - #define SWITCHES_GPIO_REG_J GPIOG - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_14 // PG.14 #elif defined(RADIO_GX12) // I and J are part of function switches bellow #elif defined(PCBX7) - #define SWITCHES_GPIO_REG_I GPIOC - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_13 // PC.13 - #define SWITCHES_GPIO_REG_J GPIOD - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_10 // PD.10 #endif #if defined(RADIO_FAMILY_T20) //SW1 - #define FUNCTION_SWITCH_1 SK - #define SWITCHES_GPIO_REG_K GPIOE - #define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_10 // PE.10 - #define SWITCHES_K_CFS_IDX 0 //SW2 - #define FUNCTION_SWITCH_2 SL - #define SWITCHES_GPIO_REG_L GPIOE - #define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_8 // PE.08 - #define SWITCHES_L_CFS_IDX 1 //SW3 - #define FUNCTION_SWITCH_3 SM - #define SWITCHES_GPIO_REG_M GPIOE - #define SWITCHES_GPIO_PIN_M LL_GPIO_PIN_12 // PE.12 - #define SWITCHES_M_CFS_IDX 2 //SW4 - #define FUNCTION_SWITCH_4 SN - #define SWITCHES_GPIO_REG_N GPIOE - #define SWITCHES_GPIO_PIN_N LL_GPIO_PIN_13 // PE.13 - #define SWITCHES_N_CFS_IDX 3 //SW5 - #define FUNCTION_SWITCH_5 SO - #define SWITCHES_GPIO_REG_O GPIOE - #define SWITCHES_GPIO_PIN_O LL_GPIO_PIN_14 // PE.14 - #define SWITCHES_O_CFS_IDX 4 //SW6 - #define FUNCTION_SWITCH_6 SP - #define SWITCHES_GPIO_REG_P GPIOE - #define SWITCHES_GPIO_PIN_P LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_P_CFS_IDX 5 #endif #if defined(RADIO_GX12) //SW1 - #define SWITCHES_GPIO_REG_I - #define SWITCHES_GPIO_PIN_I PCA95XX_PIN_0 - #define SWITCHES_I_CFS_IDX 0 - #define FUNCTION_SWITCH_1 SI //SW2 - #define SWITCHES_GPIO_REG_J - #define SWITCHES_GPIO_PIN_J PCA95XX_PIN_1 - #define SWITCHES_J_CFS_IDX 1 - #define FUNCTION_SWITCH_2 SJ //SW3 - #define SWITCHES_GPIO_REG_K - #define SWITCHES_GPIO_PIN_K PCA95XX_PIN_2 - #define SWITCHES_K_CFS_IDX 2 - #define FUNCTION_SWITCH_3 SK //SW4 - #define SWITCHES_GPIO_REG_L - #define SWITCHES_GPIO_PIN_L PCA95XX_PIN_3 - #define SWITCHES_L_CFS_IDX 3 - #define FUNCTION_SWITCH_4 SL //SW5 - #define SWITCHES_GPIO_REG_M - #define SWITCHES_GPIO_PIN_M PCA95XX_PIN_4 - #define SWITCHES_M_CFS_IDX 4 - #define FUNCTION_SWITCH_5 SM //SW6 - #define SWITCHES_GPIO_REG_N - #define SWITCHES_GPIO_PIN_N PCA95XX_PIN_5 - #define SWITCHES_N_CFS_IDX 5 - #define FUNCTION_SWITCH_6 SN #endif #if defined(PCBX9E) - #define SWITCHES_GPIO_REG_I_H GPIOF - #define SWITCHES_GPIO_PIN_I_H LL_GPIO_PIN_15 // PF.15 - #define SWITCHES_GPIO_REG_I_L GPIOE - #define SWITCHES_GPIO_PIN_I_L LL_GPIO_PIN_14 // PE.14 - #define SWITCHES_GPIO_REG_J_H GPIOG - #define SWITCHES_GPIO_PIN_J_H LL_GPIO_PIN_7 // PG.07 - #define SWITCHES_GPIO_REG_J_L GPIOG - #define SWITCHES_GPIO_PIN_J_L LL_GPIO_PIN_8 // PG.08 - #define SWITCHES_GPIO_REG_K_H GPIOG - #define SWITCHES_GPIO_PIN_K_H LL_GPIO_PIN_13 // PG.13 - #define SWITCHES_GPIO_REG_K_L GPIOG - #define SWITCHES_GPIO_PIN_K_L LL_GPIO_PIN_12 // PG.12 - #define SWITCHES_GPIO_REG_L_H GPIOE - #define SWITCHES_GPIO_PIN_L_H LL_GPIO_PIN_9 // PE.09 - #define SWITCHES_GPIO_REG_L_L GPIOE - #define SWITCHES_GPIO_PIN_L_L LL_GPIO_PIN_8 // PE.08 - #define SWITCHES_GPIO_REG_M_H GPIOE - #define SWITCHES_GPIO_PIN_M_H LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_GPIO_REG_M_L GPIOA - #define SWITCHES_GPIO_PIN_M_L LL_GPIO_PIN_5 // PA.05 - #define SWITCHES_GPIO_REG_N_H GPIOB - #define SWITCHES_GPIO_PIN_N_H LL_GPIO_PIN_3 // PB.03 - #define SWITCHES_GPIO_REG_N_L GPIOB - #define SWITCHES_GPIO_PIN_N_L LL_GPIO_PIN_4 // PB.04 - #define SWITCHES_GPIO_REG_O_H GPIOF - #define SWITCHES_GPIO_PIN_O_H LL_GPIO_PIN_7 // PF.07 - #define SWITCHES_GPIO_REG_O_L GPIOE - #define SWITCHES_GPIO_PIN_O_L LL_GPIO_PIN_10 // PE.10 - #define SWITCHES_GPIO_REG_P_H GPIOF - #define SWITCHES_GPIO_PIN_P_H LL_GPIO_PIN_11 // PF.11 - #define SWITCHES_GPIO_REG_P_L GPIOF - #define SWITCHES_GPIO_PIN_P_L LL_GPIO_PIN_12 // PF.12 - #define SWITCHES_GPIO_REG_Q_H GPIOF - #define SWITCHES_GPIO_PIN_Q_H LL_GPIO_PIN_5 // PF.05 - #define SWITCHES_GPIO_REG_Q_L GPIOF - #define SWITCHES_GPIO_PIN_Q_L LL_GPIO_PIN_6 // PF.06 - #define SWITCHES_GPIO_REG_R_H GPIOB - #define SWITCHES_GPIO_PIN_R_H LL_GPIO_PIN_5 // PB.05 - #define SWITCHES_GPIO_REG_R_L GPIOE - #define SWITCHES_GPIO_PIN_R_L LL_GPIO_PIN_0 // PE.00 #endif // 6POS SW @@ -1388,105 +454,27 @@ // ADC #if !defined(RADIO_FAMILY_T20) && !defined(RADIO_BUMBLEBEE) - #define ADC_MAIN ADC1 - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0 - #define ADC_DMA_STREAM LL_DMA_STREAM_4 - #define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn - #define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler #endif -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT #if defined(PCBX9E) #define HARDWARE_POT1 #define HARDWARE_POT2 #define HARDWARE_POT3 #define HARDWARE_POT4 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_8 // PF.08 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_5 // PC.05 - #define ADC_GPIO_PIN_POT4 LL_GPIO_PIN_4 // PC.04 - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_10 // PF.10 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_9 // PF.09 - #define ADC_GPIO_PIN_SLIDER3 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_SLIDER4 LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_SLIDER3) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SLIDER4) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_POT4 | ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_BATT) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2) - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 // ADC3_IN6 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_8 // ADC1_IN8 - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_15 // ADC1_IN15 - #define ADC_CHANNEL_POT4 LL_ADC_CHANNEL_14 // ADC1_IN14 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_8 // ADC3_IN8 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_7 // ADC3_IN7 - #define ADC_CHANNEL_SLIDER3 LL_ADC_CHANNEL_6 // ADC1_IN6 - #define ADC_CHANNEL_SLIDER4 LL_ADC_CHANNEL_9 // ADC1_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 // ADC1_IN10 - #define ADC_EXT ADC3 - #define ADC_EXT_CHANNELS { ADC_CHANNEL_POT1, ADC_CHANNEL_SLIDER1, ADC_CHANNEL_SLIDER2 } - #define ADC_EXT_DMA DMA2 - #define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_2 - #define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 - #define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn - #define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES #define ADC_VREF_PREC2 300 #elif defined(PCBX9DP) #define HARDWARE_POT1 #define HARDWARE_POT2 #define HARDWARE_POT3 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_0 // PB.00 #if PCBREV < 2019 - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3) - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_9 #define ADC_VREF_PREC2 330 #else - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2) - #define ADC_CHANNEL_POT3 0 #define ADC_VREF_PREC2 300 #endif - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_4 // PC.04 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_5 // PC.05 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_POT1) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_BATT) - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_8 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_14 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_15 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #elif defined(PCBXLITE) #define HARDWARE_POT1 #define HARDWARE_POT2 - #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_1 // PC.01 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_2 // PC.02 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 #define PWM_STICKS #define PWM_TIMER TIM5 #define PWM_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) @@ -1495,51 +483,12 @@ #define PWM_IRQHandler TIM5_IRQHandler #define PWM_IRQn TIM5_IRQn #define PWM_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH) - #define STICK_PWM_CHANNEL_LH 0 - #define STICK_PWM_CHANNEL_LV 1 - #define STICK_PWM_CHANNEL_RV 3 - #define STICK_PWM_CHANNEL_RH 2 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_LH) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_BATT) - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_11 // ADC1_IN11 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_12 // ADC1_IN12 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 // ADC1_IN10 #define ADC_VREF_PREC2 330 #elif defined(RADIO_T8) // No pots - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOB_PINS 0 - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 300 #elif defined(RADIO_COMMANDO8) - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05 - #define ADC_GPIOB_PINS 0 - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 #define ADC_VREF_PREC2 320 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) #define PWM_STICKS #define PWM_TIMER TIM5 #define PWM_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) @@ -1548,370 +497,79 @@ #define PWM_IRQn TIM5_IRQn #define PWM_IRQHandler TIM5_IRQHandler #define PWM_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define STICK_PWM_CHANNEL_LH 1 - #define STICK_PWM_CHANNEL_LV 0 - #define STICK_PWM_CHANNEL_RV 2 - #define STICK_PWM_CHANNEL_RH 3 #elif defined(RADIO_TLITE) || defined(RADIO_LR3PRO) - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOB_PINS 0 - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 330 #elif defined(RADIO_T14) #define HARDWARE_POT1 #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 // ADC12_IN8 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_9 // ADC12_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 300 #elif defined(RADIO_TPROS) #define HARDWARE_POT1 #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00 - #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_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 // ADC12_IN8 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_9 // ADC12_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 300 #elif defined(RADIO_T12MAX) #define HARDWARE_POT1 #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00 - #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_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 // ADC12_IN8 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_9 // ADC12_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 300 #elif defined(RADIO_TPRO) || defined(RADIO_TPROV2) #define HARDWARE_POT1 #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2) - #define ADC_GPIOB_PINS ADC_GPIO_PIN_POT1 - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_8 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 300 #elif defined(RADIO_BUMBLEBEE) - #define ADC_MAIN ADC3 - #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_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC123_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC123_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_2 // ADC123_IN2 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC123_IN3 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_15 // ADC3_IN15 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_9 // ADC3_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_14 // ADC3_IN14 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_5 // PF.05 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_3 // PF.03 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_4 // PF.04 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_POT1, ADC_GPIO_PIN_POT2, ADC_GPIO_PIN_BATT) - #define ADC_EXT ADC1 - #define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BATT } - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES #define ADC_VREF_PREC2 300 #elif defined(RADIO_FAMILY_T20) - #define ADC_MAIN ADC3 - #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_GPIO_PIN_STICK_RV LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_1 // ADC123_IN1 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_0 // ADC123_IN0 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC123_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC123_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_1 // PC.01 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_3 // PC.03 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_2 // PC.02 - #define ADC_GPIO_PIN_SLIDER3 LL_GPIO_PIN_5 // PF.05 - #define ADC_GPIO_PIN_SLIDER4 LL_GPIO_PIN_3 // PF.03 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_4 // PF.04 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_11 // ADC123_IN11 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_10 // ADC123_IN10 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_13 // ADC123_IN13 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_12 // ADC123_IN12 - #define ADC_CHANNEL_SLIDER3 LL_ADC_CHANNEL_15 // ADC3_IN15 - #define ADC_CHANNEL_SLIDER4 LL_ADC_CHANNEL_9 // ADC3_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_14 // ADC3_IN14 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_SLIDER3 | ADC_GPIO_PIN_SLIDER4 | ADC_GPIO_PIN_BATT) - #define ADC_EXT ADC1 - #define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BATT } - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES #define ADC_VREF_PREC2 300 #elif defined(RADIO_MT12) - #define ADC_GPIO_PIN_STICK_TH LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_ST LL_GPIO_PIN_1 // PA.01 - #define ADC_CHANNEL_STICK_TH LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_ST LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_5 // PA.05 - #define ADC_GPIO_PIN_POT4 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_2 // ADC123_IN2 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_3 // ADC123_IN3 - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_5 // ADC12_IN5 - #define ADC_CHANNEL_POT4 LL_ADC_CHANNEL_6 // ADC12_IN6 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 // ADC123_IN10 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_TH | ADC_GPIO_PIN_STICK_ST | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_POT4) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_BATT) #define ADC_VREF_PREC2 330 #elif defined(RADIO_GX12) // Serial gimbal only - #define ADC_GPIO_PIN_STICK_LH - #define ADC_GPIO_PIN_STICK_LV - #define ADC_GPIO_PIN_STICK_RV - #define ADC_GPIO_PIN_STICK_RH - #define ADC_CHANNEL_STICK_LH - #define ADC_CHANNEL_STICK_LV - #define ADC_CHANNEL_STICK_RV - #define ADC_CHANNEL_STICK_RH // Analogs - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_5 // PA.05 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_2 // ADC123_IN2 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_3 // ADC123_IN3 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_8 // ADC12_IN8 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_5 // ADC12_IN6 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 // ADC123_IN10 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SLIDER2) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_SLIDER1) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_BATT) #define ADC_VREF_PREC2 330 #elif defined(RADIO_V12) || defined(RADIO_V14) - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC123_IN0 -> ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC123_IN1 -> ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_2 // PC.02 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 // ADC12_IN8 -> ADC1_IN8 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_12 // ADC123_IN12 -> ADC1_IN12 - #define ADC_GPIO_PIN_SWE LL_GPIO_PIN_7 // PA.07 - #define ADC_GPIO_PIN_SWB LL_GPIO_PIN_5 // PA.05 - #define ADC_GPIO_PIN_SWC LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIO_PIN_SWF LL_GPIO_PIN_5 // PC.05 - #define ADC_CHANNEL_SWE LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 - #define ADC_CHANNEL_SWB LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5 - #define ADC_CHANNEL_SWC LL_ADC_CHANNEL_10 // ADC123_IN10 -> ADC1_IN10 - #define ADC_CHANNEL_SWF LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SWE | ADC_GPIO_PIN_SWB) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT1) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_SWC | ADC_GPIO_PIN_SWF) - #define ADC_EXT ADC3 - #define ADC_EXT_DMA DMA2 - #define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_2 - #define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 - #define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn - #define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler - #define ADC_EXT_CHANNELS { ADC_CHANNEL_POT3 } - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES #define ADC_VREF_PREC2 330 #elif defined(PCBX7) #define HARDWARE_POT1 #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 #if !defined(RADIO_POCKET) - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_6 // PA.06 #endif - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 #if defined(RADIO_BOXER) || defined(RADIO_V14) || defined(RADIO_V12) #define HARDWARE_POT3 // 6 POS - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_5 // PA.05 - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_5 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3) #define ADC_GPIOA_PINS_FS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3) #else - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2) #endif - #define ADC_GPIOB_PINS ADC_GPIO_PIN_POT1 - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_6 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 330 #elif defined(PCBX9LITE) #define HARDWARE_POT1 - #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_2 // PA.02 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_1 // PC.01 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_BATT) - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_11 // ADC1_IN11 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 // ADC1_IN10 #define ADC_VREF_PREC2 300 #else #define HARDWARE_POT1 #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_4 // PC.04 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_5 // PC.05 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT1) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_BATT) - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_8 - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_9 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_14 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_15 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 330 #endif #if defined(PCBX9E) #if defined(HORUS_STICKS) - #define ADC_DIRECTION { 1,-1,1,-1,-1,-1,-1,1, -1,1,1,-1, -1,-1 } #else - #define ADC_DIRECTION { 1,1,-1,-1,-1,-1,-1,1, -1,1,1,-1, -1,-1 } #endif // HORUS_STICKS #elif defined(PCBX9DP) - #define ADC_DIRECTION {1,-1,1,-1, 1,1,-1, 1,1, 1, 1} #elif defined(PCBX9D) - #define ADC_DIRECTION {1,-1,1,-1, 1,1,0, 1,1, 1, 1} #elif defined(RADIO_TX12) - #define ADC_DIRECTION {-1,1,-1,1, -1,-1, 1, 1} #elif defined(RADIO_TX12MK2) - #define ADC_DIRECTION {-1,1,-1,1, 1,-1} #elif defined(RADIO_BOXER) - #define ADC_DIRECTION {1,-1,1,-1, -1,-1, 1} #elif defined(RADIO_ZORRO) - #define ADC_DIRECTION {-1, 1, 1, -1, -1, 1, 1, 1} #elif defined(RADIO_POCKET) - #define ADC_DIRECTION {-1, 1, 1, -1, -1} #elif defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) - #define ADC_DIRECTION {1,-1,1,-1, 1,1, 1, 1} #elif defined(RADIO_T14) - #define ADC_DIRECTION {1, -1, 1, -1, 1, 1, 1} #elif defined(RADIO_T12MAX) - #define ADC_DIRECTION {-1, 1, -1, 1, 1, 1, 1} #elif defined(RADIO_BUMBLEBEE) - #define ADC_DIRECTION {1,-1,1,-1, 1,1, 1} #elif defined(RADIO_FAMILY_T20) - #define ADC_DIRECTION {1,-1,1,-1, -1,1,-1,-1,-1,-1} #elif defined(RADIO_MT12) - #define ADC_DIRECTION {1,-1, -1,-1, 0, 0, 0, 0} #elif defined(RADIO_GX12) - #define ADC_DIRECTION {1,1,1,1, -1,-1, 1,-1} #elif defined(RADIO_V14) - #define ADC_DIRECTION {1,-1,1,-1, -1,-1,1, 0, 1,1,1,1 } #elif defined(RADIO_V12) - #define ADC_DIRECTION {1,-1,1,-1, -1,-1,1, 0, 1,1,1,1 } #elif defined(PCBX7) - #define ADC_DIRECTION {-1,1,-1,1, 1,1, 1, 1} #elif defined(PCBX9LITE) - #define ADC_DIRECTION {-1,1,-1,1, 1,1, 1} #elif defined(PCBXLITE) - #define ADC_DIRECTION {1,-1,-1,1, -1,1, 1, 1} #endif #if defined(RADIO_BOXER) diff --git a/radio/src/targets/tx15/hal.h b/radio/src/targets/tx15/hal.h index 83b70b7ebe3..dc507747688 100644 --- a/radio/src/targets/tx15/hal.h +++ b/radio/src/targets/tx15/hal.h @@ -71,106 +71,32 @@ TIM17: ROTARY_ENCODER_TIMER #define TIMER_MULT_APB2 2 // Keys -#define KEYS_GPIO_REG_PAGEDN GPIOA -#define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_8 // PA.08 -#define KEYS_GPIO_REG_PAGEUP GPIOG -#define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_7 // PG.07 -#define KEYS_GPIO_REG_SYS GPIOB -#define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_2 // PB.02 -#define KEYS_GPIO_REG_ENTER GPIOG -#define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_12 // PG.12 -#define KEYS_GPIO_REG_MDL GPIOE -#define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_3 // PE.03 -#define KEYS_GPIO_REG_EXIT GPIOG -#define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_3 // PG.03 -#define KEYS_GPIO_REG_TELE GPIOG -#define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_2 // PG.02 // Trims -#define TRIMS_GPIO_REG_LHL -#define TRIMS_GPIO_PIN_LHL -#define TRIMS_GPIO_REG_LHR -#define TRIMS_GPIO_PIN_LHR -#define TRIMS_GPIO_REG_LVD -#define TRIMS_GPIO_PIN_LVD -#define TRIMS_GPIO_REG_LVU -#define TRIMS_GPIO_PIN_LVU -#define TRIMS_GPIO_REG_RHL -#define TRIMS_GPIO_PIN_RHL -#define TRIMS_GPIO_REG_RHR -#define TRIMS_GPIO_PIN_RHR -#define TRIMS_GPIO_REG_RVD -#define TRIMS_GPIO_PIN_RVD -#define TRIMS_GPIO_REG_RVU -#define TRIMS_GPIO_PIN_RVU // function switches //SW1 -#define SWITCHES_GPIO_REG_G -#define SWITCHES_GPIO_PIN_G PCA95XX_P0 -#define SWITCHES_G_CFS_IDX 0 -#define FUNCTION_SWITCH_1 SG //SW2 -#define SWITCHES_GPIO_REG_H -#define SWITCHES_GPIO_PIN_H PCA95XX_P1 -#define SWITCHES_H_CFS_IDX 1 -#define FUNCTION_SWITCH_2 SH //SW3 -#define SWITCHES_GPIO_REG_I -#define SWITCHES_GPIO_PIN_I PCA95XX_P2 -#define SWITCHES_I_CFS_IDX 2 -#define FUNCTION_SWITCH_3 SI //SW4 -#define SWITCHES_GPIO_REG_J -#define SWITCHES_GPIO_PIN_J PCA95XX_P3 -#define SWITCHES_J_CFS_IDX 3 -#define FUNCTION_SWITCH_4 SJ //SW5 -#define SWITCHES_GPIO_REG_K -#define SWITCHES_GPIO_PIN_K PCA95XX_P4 -#define SWITCHES_K_CFS_IDX 4 -#define FUNCTION_SWITCH_5 SK //SW6 -#define SWITCHES_GPIO_REG_L -#define SWITCHES_GPIO_PIN_L PCA95XX_P5 -#define SWITCHES_L_CFS_IDX 5 -#define FUNCTION_SWITCH_6 SL // Extender Switches #define SWITCHES_A_3POS -#define SWITCHES_GPIO_REG_A_H -#define SWITCHES_GPIO_PIN_A_H PCA95XX_P15 -#define SWITCHES_GPIO_REG_A_L -#define SWITCHES_GPIO_PIN_A_L PCA95XX_P14 #define SWITCHES_B_3POS -#define SWITCHES_GPIO_REG_B_H -#define SWITCHES_GPIO_PIN_B_H PCA95XX_P13 -#define SWITCHES_GPIO_REG_B_L -#define SWITCHES_GPIO_PIN_B_L PCA95XX_P12 #define SWITCHES_C_3POS -#define SWITCHES_GPIO_REG_C_H -#define SWITCHES_GPIO_PIN_C_H PCA95XX_P11 -#define SWITCHES_GPIO_REG_C_L -#define SWITCHES_GPIO_PIN_C_L PCA95XX_P10 #define SWITCHES_D_3POS -#define SWITCHES_GPIO_REG_D_H -#define SWITCHES_GPIO_PIN_D_H PCA95XX_P7 -#define SWITCHES_GPIO_REG_D_L -#define SWITCHES_GPIO_PIN_D_L PCA95XX_P6 #define SWITCHES_E_2POS -#define SWITCHES_GPIO_REG_E -#define SWITCHES_GPIO_PIN_E PCA95XX_P16 #define SWITCHES_F_2POS -#define SWITCHES_GPIO_REG_F -#define SWITCHES_GPIO_PIN_F PCA95XX_P4 // Expanders @@ -182,64 +108,17 @@ TIM17: ROTARY_ENCODER_TIMER #endif // ADC -#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_6 // PA.06 -#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PC.03 -#define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_4 // PC.04 -#define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_5 // PC.05 -#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_1 // PC.01 POT1 -#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 POT2 -#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_3 // PH.03 -#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH) -#define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2) -#define ADC_GPIOC_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_POT1) -#define ADC_GPIOH_PINS (ADC_GPIO_PIN_BATT) -#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC12_INP3 -#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_13 // ADC12_INP13 -#define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_4 // ADC12_INP4 -#define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_8 // ADC12_INP8 // Each ADC cannot map more than 8 channels, otherwise it will cause problems -#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_11 // ADC12_INP11 -#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_5 // ADC12_INP5 -#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_14 // ADC3_INP14 -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC3_INP17 - -#define ADC_MAIN ADC1 -#define ADC_DMA DMA2 -#define ADC_DMA_CHANNEL LL_DMAMUX1_REQ_ADC1 -#define ADC_DMA_STREAM LL_DMA_STREAM_4 -#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn -#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_8CYCLES_5 - -#define ADC_EXT ADC3 -#define ADC_EXT_CHANNELS { ADC_CHANNEL_BATT , ADC_CHANNEL_RTC_BAT } -#define ADC_EXT_DMA DMA2 -#define ADC_EXT_DMA_CHANNEL LL_DMAMUX1_REQ_ADC3 -#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 -#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn -#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler -#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_64CYCLES_5 // No hardware oversampling on ADC3 + + #define ADC_VREF_PREC2 330 -#define ADC_DIRECTION { \ - 0,-1,0,-1, /* gimbals */ \ - -1,-1, /* pots */ \ - 0,0, /* sliders */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - 0, /* SWA */ \ - 0, /* SWB */ \ - 0, /* SWC */ \ - 0, /* SWD */ \ - 0, /* SWE */ \ - 0 /* SWF */ \ - } // Serial gimbal sync port #define HALL_SYNC GPIO_PIN(GPIOH, 11) From dd490c76880c1d40540debcf4df0b3442f3e1ae0 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Mon, 28 Jul 2025 14:04:35 +0200 Subject: [PATCH 05/49] chore(radio): document hardware definitions removal --- radio/util/hw_defs/README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/radio/util/hw_defs/README.md b/radio/util/hw_defs/README.md index 3b34f0a38e6..a053402bf78 100644 --- a/radio/util/hw_defs/README.md +++ b/radio/util/hw_defs/README.md @@ -41,3 +41,21 @@ Once the format is stable enough and does not require editing each target separa to add or rename each attribute, the JSON definition for each target will be generated and added to version control. Then the Python scripts will obsoleted and removed. The target's `hal.h` should be cleaned-up as well with the definitions present in JSON removed. + +## Removing parsed defines from `hal.h` + +As we now have JSON files for some parts of the hardware definitions, it would be +good to remove these redundant definitions and use only the JSON files. + +For a smooth transition, the removal and checks should happen as automated as possible. + +This includes: +- logging which defines are used from `hal.h`: [logging_dict.py](logging_dict.py) +- the output is then sorted and duplicates removed: +``` +./tools/generate-hw-defs.sh 2>hw_defs.log +cat hw_defs.log | sort -u | grep -v -E 'None|LL_GPIO|PWM_STICKS' > hw_defs.sorted +rm hw_defs.log +``` +- `hw_defs.sorted` can then be used to remove the definitions with [define_remover.py](../../../define_remover.py). +- a report about the usage of the removed definition is generated with [define_usage_checker.py](../../../define_usage_checker.py). From a12835ac08c162c04f5922cd34b3dd64767aa232 Mon Sep 17 00:00:00 2001 From: Raphael <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sun, 13 Jul 2025 05:50:28 +0000 Subject: [PATCH 06/49] chore: hal.h cleanup --- .../boards/generic_stm32/analog_inputs.cpp | 8 +- radio/src/targets/horus/hal.h | 145 +------ radio/src/targets/nv14/hal.h | 38 -- radio/src/targets/pa01/hal.h | 66 ---- radio/src/targets/pa01/key_driver.cpp | 2 + radio/src/targets/pl18/hal.h | 127 ------- radio/src/targets/st16/hal.h | 61 +-- radio/src/targets/stm32h7s78-dk/hal.h | 32 -- radio/src/targets/taranis/hal.h | 359 +----------------- radio/src/targets/tx15/hal.h | 65 +--- 10 files changed, 26 insertions(+), 877 deletions(-) diff --git a/radio/src/boards/generic_stm32/analog_inputs.cpp b/radio/src/boards/generic_stm32/analog_inputs.cpp index bfd99db1e2a..657b797d395 100644 --- a/radio/src/boards/generic_stm32/analog_inputs.cpp +++ b/radio/src/boards/generic_stm32/analog_inputs.cpp @@ -27,7 +27,7 @@ #include "hal.h" -#if defined(ADC_SPI) +#if defined(USE_ADS79XX) #include "ads79xx.h" #endif @@ -54,7 +54,7 @@ static_assert(n_inputs <= MAX_ANALOG_INPUTS, "Too many analog inputs"); static bool adc_init() { bool success = stm32_hal_adc_init(_ADC_adc, n_ADC, _ADC_inputs, _ADC_GPIOs, n_GPIO); -#if defined(ADC_SPI) +#if defined(USE_ADS79XX) if (n_ADC_spi > 0) ads79xx_init(&_ADC_spi[0]); #endif return success; @@ -63,7 +63,7 @@ static bool adc_init() static bool adc_start_read() { bool success = stm32_hal_adc_start_read(_ADC_adc, n_ADC, _ADC_inputs, n_inputs); -#if defined(ADC_SPI) +#if defined(USE_ADS79XX) if (n_ADC_spi > 0) { success = success && ads79xx_adc_start_read(&_ADC_spi[0], _ADC_inputs); } @@ -73,7 +73,7 @@ static bool adc_start_read() static void adc_wait_completion() { -#if defined(ADC_SPI) +#if defined(USE_ADS79XX) // ADS79xx does all the work in the completion function // so it's probably better to poll it first if (n_ADC_spi > 0) ads79xx_adc_wait_completion(&_ADC_spi[0], _ADC_inputs); diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 1dec91bc635..cecb8d3dccd 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -29,13 +29,6 @@ #define TELEMETRY_EXTI_PRIO 0 // required for soft serial -// Keys -#if defined(PCBX12S) -#elif defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16) -#elif defined(RADIO_T15) -#elif defined(PCBX10) -#endif - // Rotary Encoder #define ROTARY_ENCODER_GPIO GPIOH #define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_11 // PH.11 @@ -55,82 +48,7 @@ #define ROTARY_ENCODER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler #if defined(RADIO_T15) - #define ROTARY_ENCODER_INVERTED -#endif - -// Switches -#if defined(RADIO_T15) - #define STORAGE_SWITCH_A - #define HARDWARE_SWITCH_A - - #define STORAGE_SWITCH_B - #define HARDWARE_SWITCH_B - - #define STORAGE_SWITCH_C - #define HARDWARE_SWITCH_C - - #define STORAGE_SWITCH_D - #define HARDWARE_SWITCH_D - - #define STORAGE_SWITCH_E - #define HARDWARE_SWITCH_E - #define STORAGE_SWITCH_F - #define HARDWARE_SWITCH_F - //SW1 - #define STORAGE_SWITCH_G - #define HARDWARE_SWITCH_G - //SW2 - #define STORAGE_SWITCH_H - #define HARDWARE_SWITCH_H - //SW3 - #define STORAGE_SWITCH_I - #define HARDWARE_SWITCH_I - //SW4 - #define STORAGE_SWITCH_J - #define HARDWARE_SWITCH_J - //SW5 - #define STORAGE_SWITCH_K - #define HARDWARE_SWITCH_K - //SW6 - #define STORAGE_SWITCH_L - #define HARDWARE_SWITCH_L -#else - #define STORAGE_SWITCH_A - #define HARDWARE_SWITCH_A - #define STORAGE_SWITCH_B - #define HARDWARE_SWITCH_B - #define STORAGE_SWITCH_C - #define HARDWARE_SWITCH_C - #define STORAGE_SWITCH_D - #define HARDWARE_SWITCH_D - #define STORAGE_SWITCH_E - #define HARDWARE_SWITCH_E - #define STORAGE_SWITCH_F - #define HARDWARE_SWITCH_F - #define STORAGE_SWITCH_G - #define HARDWARE_SWITCH_G - #define STORAGE_SWITCH_H - #define HARDWARE_SWITCH_H - - #if defined(PCBX12S) - #elif defined(PCBX10) - #endif - - #if defined(PCBX10) && !defined(RADIO_F16) - // Gimbal switch left - #define STORAGE_SWITCH_I - #define HARDWARE_SWITCH_I - // Gimbal switch right - #define STORAGE_SWITCH_J - #define HARDWARE_SWITCH_J - #elif defined(PCBX12S) - // Gimbal switch left - #define STORAGE_SWITCH_I - #define HARDWARE_SWITCH_I - // Gimbal switch right - #define STORAGE_SWITCH_J - #define HARDWARE_SWITCH_J - #endif + #define ROTARY_ENCODER_INVERTED #endif // 6POS SW @@ -141,44 +59,13 @@ #define SIXPOS_LED_BLUE 0 #endif -// Trims -#if defined(RADIO_T15) -#elif defined(PCBX12S) -#elif defined(PCBX10) - // Left/Right Horizontal trims (LHL/LHR) - #if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16) - #else - #endif - - // Vertical trims - common across all PCBX10 variants - - // Right Horizontal trims - common across all PCBX10 variants - - // T5/T6 trim assignments - #if defined(RADIO_V16) - // T5/T6 trims are in exchanged positions to other handsets - #elif defined(RADIO_FAMILY_T16) - #else // Other PCBX10 variants - #endif -#endif - - // ADC #if defined(PCBX12S) - - - #define ADC_GPIO_MOUSE GPIOF - // TODO: use for SPI1_RX instead? + #define USE_ADS79XX #define ADC_VREF_PREC2 300 #elif defined(RADIO_V16) - #define ADC_GPIOA_PINS_FS (LL_GPIO_PIN_2 | LL_GPIO_PIN_3) #define ADC_VREF_PREC2 330 #elif defined(PCBX10) -#if defined(RADIO_T15) -#else -#endif -#if !defined(RADIO_T15) -#endif #if defined(RADIO_X10) || defined(RADIO_X10E) #define PWM_STICKS #define PWM_TIMER TIM5 @@ -187,22 +74,8 @@ #define PWM_GPIO_AF GPIO_AF2 #define PWM_IRQHandler TIM5_IRQHandler #define PWM_IRQn TIM5_IRQn - #define PWM_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_RV) + #define PWM_GPIOA_PINS (LL_GPIO_PIN_0 | LL_GPIO_PIN_1 | LL_GPIO_PIN_2 | LL_GPIO_PIN_3) #endif -#if defined(RADIO_T15) -#else -#endif -#if !defined(RADIO_T15) -#endif -#if defined(RADIO_T15) -#else - #define ADC_GPIOA_PINS_FS (LL_GPIO_PIN_2 | LL_GPIO_PIN_3) -#endif - #if defined(RADIO_V16) - // Required DMA for more than one channel for EXT_ADC - #else - #endif - // VBat divider is /4 on F42x and F43x devices #if defined(RADIO_TX16S) || defined(RADIO_T15) || defined(RADIO_F16) || defined(RADIO_V16) || defined(RADIO_T18) #define ADC_VREF_PREC2 330 @@ -213,22 +86,10 @@ #endif #endif -#if defined(RADIO_T15) -#elif defined(RADIO_T16) -#elif defined(RADIO_T18) -#elif defined(RADIO_TX16S) || defined(RADIO_F16) -#elif defined(RADIO_V16) -#elif defined(PCBX10) -#elif defined(PCBX12S) -#else - #error "Missing ADC_DIRECTION array" -#endif - #if defined(RADIO_TX16S) #define DEFAULT_6POS_CALIB {3, 12, 21, 30, 38} #define DEFAULT_6POS_IDX 5 #endif - // Power #if defined(RADIO_T18) diff --git a/radio/src/targets/nv14/hal.h b/radio/src/targets/nv14/hal.h index 097237c6f0a..4d1f880e951 100644 --- a/radio/src/targets/nv14/hal.h +++ b/radio/src/targets/nv14/hal.h @@ -46,50 +46,12 @@ 2/3/4 SDIO */ - -// Trims - - - - // Monitor pin #define VBUS_MONITOR_GPIO GPIO_PIN(GPIOJ, 14) // PJ.14 -// Switches -#define HARDWARE_SWITCH_A -#define STORAGE_SWITCH_A -#define HARDWARE_SWITCH_B -#define STORAGE_SWITCH_B -#define HARDWARE_SWITCH_C -#define STORAGE_SWITCH_C -#define HARDWARE_SWITCH_D -#define STORAGE_SWITCH_D -#define HARDWARE_SWITCH_E -#define STORAGE_SWITCH_E -#define HARDWARE_SWITCH_F -#define STORAGE_SWITCH_F -#define HARDWARE_SWITCH_G -#define STORAGE_SWITCH_G -#define HARDWARE_SWITCH_H -#define STORAGE_SWITCH_H - -// Index of all switches / trims - // ADC - - - - -// FLYSKY_HALL_STICKS -// #define ADC_GPIOA_PINS_FS (GPIO_Pin_6 | GPIO_Pin_7) - - - - - #define ADC_VREF_PREC2 330 - // Power #define PWR_SWITCH_GPIO GPIO_PIN(GPIOI, 11) // PI.11 #define PWR_ON_GPIO GPIO_PIN(GPIOI, 14) // PI.14 diff --git a/radio/src/targets/pa01/hal.h b/radio/src/targets/pa01/hal.h index b2fc1c0eb6c..baf7fc14d0f 100644 --- a/radio/src/targets/pa01/hal.h +++ b/radio/src/targets/pa01/hal.h @@ -39,75 +39,9 @@ /* DMA Allocation: */ -// Keys -#define KEYS_GPIO_ENTER GPIO_PIN(GPIOG, 13) // PG.13 - -// Keys in bsp matrix - -// Trims in bsp matrix - - - - - - - - -// function switches - -// Direct switches -// SWA -#define STORAGE_SWITCH_A -#define HARDWARE_SWITCH_A - -// SWD -#define STORAGE_SWITCH_D -#define HARDWARE_SWITCH_D - -// SWE -#define STORAGE_SWITCH_E -#define HARDWARE_SWITCH_E - -// SWF -#define STORAGE_SWITCH_F -#define HARDWARE_SWITCH_F - -#define KEYS_GPIOB_PINS (LL_GPIO_PIN_15) - -// PC8 allocated to SDIO D0, is not required to sample SWA ! -#define KEYS_GPIOC_PINS (LL_GPIO_PIN_13) - -#define KEYS_GPIOD_PINS () - -#define KEYS_GPIOH_PINS \ - (LL_GPIO_PIN_8 | LL_GPIO_PIN_9 | LL_GPIO_PIN_10 | LL_GPIO_PIN_11) - -#define KEYS_GPIOJ_PINS (LL_GPIO_PIN_12) - -#define KEYS_OUT_GPIOG_PINS (LL_GPIO_PIN_2 ) - -#define KEYS_OUT_GPIOH_PINS (LL_GPIO_PIN_7) - // ADC - - - - - - - - -// Sliders - -// Analog switches - - - - - #define ADC_VREF_PREC2 329 - // Power #define PWR_SWITCH_GPIO GPIO_PIN(GPIOE, 6) // PE.06 #define PWR_ON_GPIO GPIO_PIN(GPIOE, 3) // PE.03 diff --git a/radio/src/targets/pa01/key_driver.cpp b/radio/src/targets/pa01/key_driver.cpp index e8435d25510..c8255aaaa43 100644 --- a/radio/src/targets/pa01/key_driver.cpp +++ b/radio/src/targets/pa01/key_driver.cpp @@ -34,6 +34,8 @@ #define BSP_KEY_OUT_MASK \ (BSP_KEY_OUT1 | BSP_KEY_OUT2 | BSP_KEY_OUT3 | BSP_KEY_OUT4) +#define KEYS_GPIO_ENTER GPIO_PIN(GPIOG, 13) // PG.13 + /* The output bit-order has to be: 0 LHL TR3L (Left equals down) 1 LHR TR3R diff --git a/radio/src/targets/pl18/hal.h b/radio/src/targets/pl18/hal.h index 580a913e5e6..4fd79ef25fe 100644 --- a/radio/src/targets/pl18/hal.h +++ b/radio/src/targets/pl18/hal.h @@ -47,90 +47,18 @@ 2/3/4 SDIO */ -// Keys -// PL18/PL18EV only has virtual keys via trim buttons -// #define KEYS_GPIO_PIN_PGUP /* for activating PGUP in keys diagnose screen */ - #if defined(RADIO_NV14_FAMILY) - // Trims - - - // Keys - // Monitor pin #define VBUS_MONITOR_GPIO GPIO_PIN(GPIOJ, 14) // PJ.14 - - // Switches - #define HARDWARE_SWITCH_A - #define STORAGE_SWITCH_A - #define HARDWARE_SWITCH_B - #define STORAGE_SWITCH_B - #define HARDWARE_SWITCH_C - #define STORAGE_SWITCH_C - #define HARDWARE_SWITCH_D - #define STORAGE_SWITCH_D - #define HARDWARE_SWITCH_E - #define STORAGE_SWITCH_E - #define HARDWARE_SWITCH_F - #define STORAGE_SWITCH_F - #define HARDWARE_SWITCH_G - #define STORAGE_SWITCH_G - #define HARDWARE_SWITCH_H - #define STORAGE_SWITCH_H - - // Index of all switches / trims - // ADC - - - - - - - - #define ADC_VREF_PREC2 330 - - #elif defined(RADIO_NB4P) - // Trims - - // Switches - #define SWITCHES_A_2POS - #define SWITCHES_B_2POS - - // Keys - #define ADC_GPIO_RAW1 GPIOC - - #define ADC_VREF_PREC2 330 - - -#else // !defined(RADIO_NB4P) && !defined(RADIO_NV14_FAMILY) - -// Keys -#if defined(RADIO_PL18U) #endif // Trims - - - - - - - - - - - - #if !defined(RADIO_PL18U) - - - - #define TRIMS_GPIO_REG_TR1U GPIOH->IDR #define TRIMS_GPIO_PIN_TR1U LL_GPIO_PIN_8 // PH.08 #define TRIMS_GPIO_REG_TR1D GPIOH->IDR @@ -174,7 +102,6 @@ #define TRIMS_GPIO_PIN_IN4 LL_GPIO_PIN_12 // PJ.12 // Index of all trims - #define KEYS_GPIOB_PINS (LL_GPIO_PIN_15) // PC8 allocated to SDIO D0, is not required to sample SWA ! @@ -203,63 +130,9 @@ // #define VBUS_MONITOR_GPIO (GPIOJ) // #define VBUS_MONITOR_PIN (LL_GPIO_PIN_14) -// Switches: -// Switches A and C on PL18/PL18EV are 2-position switches, -// so there is no NEED to configure two pins for Switches A and C. -// -// Especially, as on current dev. state, using PC8 for SDIO D0. -// (happy coincidence ;) -// -#if defined(RADIO_PL18U) -#else -#endif - -// High rail of Switch C is not required and thus PC10 is free to use for -// customizations. -// -// #define SWITCHES_GPIO_REG_C_H GPIOC -// #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_10 // PC.10 -// #define SWITCHES_GPIO_REG_C_L GPIOC -// #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_11 // PC.11 - -#if defined(RADIO_PL18U) -#else -#endif - // ADC - - - -#if defined(RADIO_PL18EV) -#endif - - - - - - -#if defined(RADIO_PL18EV) -// Left, right stick end pot on PL18EV - -// Left, right stick end buttons on PL18EV -#endif - -// Analog switches - - - - - - #define ADC_VREF_PREC2 330 -#if defined(RADIO_PL18EV) -#elif defined(RADIO_PL18U) -#else -#endif - -#endif - // Power #define PWR_SWITCH_GPIO GPIO_PIN(GPIOI, 11) // PI.11 #define PWR_ON_GPIO GPIO_PIN(GPIOI, 14) // PI.14 diff --git a/radio/src/targets/st16/hal.h b/radio/src/targets/st16/hal.h index 7b987aa553e..086c55a7927 100644 --- a/radio/src/targets/st16/hal.h +++ b/radio/src/targets/st16/hal.h @@ -44,66 +44,7 @@ #define TIMER_MULT_APB1 2 #define TIMER_MULT_APB2 2 -// Keys - -// Trims - - - - - - - - - -// function switches - -// Direct switches - -// Key 1 -#define STORAGE_SWITCH_G -#define HARDWARE_SWITCH_G -#define SWITCHES_G_2POS - -// Key 2 -#define STORAGE_SWITCH_H -#define HARDWARE_SWITCH_H -#define SWITCHES_H_2POS - - -// Key 3 -#define STORAGE_SWITCH_I -#define HARDWARE_SWITCH_I - -// Key 4 -#define STORAGE_SWITCH_J -#define HARDWARE_SWITCH_J - - -// ADC - - -// If serial gimbals are used, we can reuse the channels - - - - - - - - -// Each ADC cannot map more than 8 channels, otherwise it will cause problems - -// Ext inputs: analog gimbal channel re-use - -// Analog switches - - - - - -#define ADC_VREF_PREC2 329 - +#define ADC_VREF_PREC2 329 #define USE_EXTI9_5_IRQ // used for I2C port extender interrupt #define EXTI9_5_IRQ_Priority 5 diff --git a/radio/src/targets/stm32h7s78-dk/hal.h b/radio/src/targets/stm32h7s78-dk/hal.h index a345d9f0c4a..d73d34c9e34 100644 --- a/radio/src/targets/stm32h7s78-dk/hal.h +++ b/radio/src/targets/stm32h7s78-dk/hal.h @@ -49,40 +49,8 @@ // ADC - #define ADC_VREF_PREC2 1024 // fake - -// #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PA0_C VR1 -// #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PA1_C VR2 - -// #define ADC_GPIOA_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) - -// Fake gimbal channels - -// #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_0 // ADC12_INP0 -// #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_1 // ADC12_INP1 - - - -// Power -// #define PWR_SWITCH_GPIO GPIO_PIN(GPIOI, 11) // PI.11 -// #define PWR_ON_GPIO GPIO_PIN(GPIOI, 14) // PI.14 - -// Chargers (USB and wireless) -// #define UCHARGER_GPIO GPIO_PIN(GPIOB, 14) // PB.14 input -// #define UCHARGER_CHARGE_END_GPIO GPIO_PIN(GPIOB, 13) // PB.13 input -// #define UCHARGER_EN_GPIO GPIO_PIN(GPIOG, 3) // PG.03 output - -// #if defined (WIRELESS_CHARGER) -// #define WCHARGER_GPIO GPIO_PIN(GPIOI, 9) // PI.09 input -// #define WCHARGER_CHARGE_END_GPIO GPIO_PIN(GPIOI, 10) // PI.10 input -// #define WCHARGER_EN_GPIO GPIO_PIN(GPIOH, 4) // PH.04 output -// #define WCHARGER_I_CONTROL_GPIO GPIO_PIN(GPIOH, 13) // PH.13 output -// #endif - -// TODO! Check IOLL1 to PI.01 connectivity! - // S.Port update connector // #define SPORT_MAX_BAUDRATE 400000 // #define SPORT_UPDATE_RCC_AHB1Periph 0 diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 0ab5ea33f63..40846403350 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -44,34 +44,12 @@ #define TELEMETRY_EXTI_PRIO 0 // required for soft serial // Keys -#if defined(PCBX9E) -#elif defined(PCBXLITE) -#elif defined(RADIO_TPROS) -#elif defined(RADIO_FAMILY_JUMPER_T12) && !defined(RADIO_TPRO) && !defined(RADIO_TPROV2) -#elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_MT12) || defined(RADIO_POCKET) || defined(RADIO_GX12) -#if defined(RADIO_MT12) -#else -#endif -#if defined(RADIO_TX12) -#else -#endif -#if defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_GX12) -#else -#endif -#elif defined(RADIO_T8) +#if defined(RADIO_T8) #define KEYS_GPIO_REG_BIND GPIOA #define KEYS_GPIO_PIN_BIND LL_GPIO_PIN_10 // PA.10 #elif defined(RADIO_COMMANDO8) #define KEYS_GPIO_REG_BIND GPIOD #define KEYS_GPIO_PIN_BIND LL_GPIO_PIN_9 // PD.09 -#elif defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE) -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) -#elif defined(RADIO_GX12) -#elif defined(RADIO_V14) || defined(RADIO_V12) -#elif defined(PCBX7) -#elif defined(PCBX9LITE) -#elif defined(RADIO_X9DP2019) -#else #endif // Rotary Encoder @@ -176,274 +154,6 @@ #define ROTARY_ENCODER_TIMER_IRQHandler TIM5_IRQHandler #endif -// Trims -#if defined(PCBX9E) -#elif defined(PCBXLITE) -#elif defined(RADIO_X7ACCESS) -#elif defined(RADIO_FAMILY_T20) -#if defined(RADIO_T20V2) -#else -#endif -#elif defined(RADIO_MT12) -#elif defined(RADIO_GX12) -#elif defined(RADIO_TPROS) -#elif defined(RADIO_BUMBLEBEE) -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) -#elif defined(RADIO_V14) || defined(RADIO_V12) -#elif defined(PCBX7) && !defined(RADIO_COMMANDO8) -#elif defined(RADIO_COMMANDO8) -#elif defined(PCBX9LITE) -#elif defined(RADIO_X9DP2019) -#else -#endif - -// Switches -#if defined(PCBX9E) -#elif defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_MT12) -#elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) -#elif defined(RADIO_GX12) - #define SWITCHES_A_2POS -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) -#elif defined(RADIO_T8) -#elif defined(RADIO_COMMANDO8) -#elif defined(RADIO_TPRO) || defined(RADIO_TPROV2) -#elif defined(RADIO_TPROS) -#elif defined(RADIO_BUMBLEBEE) -#elif defined(RADIO_FAMILY_T20) -#elif defined(RADIO_V14) || defined(RADIO_V12) - #define STORAGE_SWITCH_A - #define HARDWARE_SWITCH_A -#elif defined(PCBX7) -#else -#endif - -#if defined(PCBX9E) -#elif defined(PCBXLITE) -#elif defined(RADIO_T8) -#elif defined(RADIO_COMMANDO8) -#elif defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) -#elif defined(RADIO_TPROS) -#elif defined(RADIO_BUMBLEBEE) -#elif defined(RADIO_FAMILY_T20) -#elif (RADIO_LR3PRO) -#elif defined(RADIO_BOXER) -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) -#elif defined(RADIO_MT12) -#elif defined(RADIO_GX12) - #define SWITCHES_B_3POS -#elif defined(RADIO_V14) || defined(RADIO_V12) -// ADC based switch -#elif defined(PCBX7) -#elif defined(PCBX9LITE) -#else -#endif - -#if defined(PCBX9E) -#elif defined(PCBXLITE) || defined(PCBX9LITE) -#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) -#elif defined(RADIO_TX12) -#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) -#elif defined(RADIO_T8) -#elif defined(RADIO_COMMANDO8) -#elif defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_LR3PRO) -#elif defined(RADIO_TPROS) -#elif defined(RADIO_BUMBLEBEE) -#elif defined(RADIO_FAMILY_T20) -#elif defined(RADIO_MT12) -#elif defined(RADIO_GX12) - #define SWITCHES_C_3POS -#elif defined(RADIO_V14) || defined(RADIO_V12) -// ADC based switch -#elif defined(PCBX7) - #if defined(PCBX7ACCESS) - #else - #endif -#else -#endif - -#if defined(PCBX9E) -#elif defined(PCBX9DP) -#elif defined(PCBXLITE) -#elif defined(RADIO_T8) -#elif defined(RADIO_COMMANDO8) -#elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) -#elif defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_LR3PRO) -#elif defined(RADIO_TPROS) -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) -#elif defined(RADIO_BUMBLEBEE) -#elif defined(RADIO_FAMILY_T20) -#elif defined(RADIO_MT12) -#elif defined(RADIO_GX12) - #define SWITCHES_D_2POS -#elif defined(RADIO_V14) || defined(RADIO_V12) - #define STORAGE_SWITCH_D - #define HARDWARE_SWITCH_D -#elif defined(PCBX7) && !defined(RADIO_COMMANDO8) -#elif defined(PCBX7) && defined(RADIO_COMMANDO8) -#elif defined(PCBX9LITE) -#else -#endif - -#if defined(PCBX9E) -#elif defined(PCBXLITES) -#elif defined(PCBXLITE) - // no SWE but we want to remain compatible with XLiteS -#elif defined(PCBX9LITE) -#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) -#elif defined(RADIO_BOXER) -#elif defined(RADIO_TX12) -#elif defined(RADIO_TX12MK2) -#elif defined(RADIO_TPROS) -#elif defined(RADIO_TPRO) -#elif defined(RADIO_TPROV2) -#elif defined(RADIO_BUMBLEBEE) -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) -#elif defined(RADIO_FAMILY_T20) -#elif defined(RADIO_MT12) - // ADC based switch/pot -#elif defined(RADIO_GX12) - #define SWITCHES_E_3POS -#elif defined(RADIO_V14) || defined(RADIO_V12) - // ADC based switch -#elif defined(PCBX7) - // no SWE -#else -#endif - -#if defined(PCBX9E) -#elif defined(PCBXLITES) -#elif defined(PCBXLITE) - // no SWF but we want to remain compatible with XLiteS -#elif defined(PCBX9LITES) -#elif defined(PCBX9LITE) -// no SWF -#elif defined(RADIO_ZORRO) || defined(RADIO_BOXER) -#elif defined(RADIO_TX12) -#elif defined(RADIO_TX12MK2) -#elif defined(RADIO_TPROS) -#elif defined(RADIO_TPRO) -#elif defined(RADIO_TPROV2) -#elif defined(RADIO_BUMBLEBEE) -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) -#elif defined(RADIO_FAMILY_T20) -#elif defined(RADIO_MT12) - // ADC based switch/pot -#elif defined(RADIO_T8) || defined(RADIO_TLITE) || defined(RADIO_COMMANDO8) || defined(RADIO_LR3PRO) || defined(RADIO_POCKET) - // no SWF -#elif defined(RADIO_T12) - // no SWF -#elif defined(RADIO_GX12) - #define SWITCHES_F_3POS -#elif defined(RADIO_V14) || defined(RADIO_V12) - // ADC based switch -#elif defined(PCBX7) -#else -#endif - -#if defined(PCBX9E) -#elif defined(PCBX9LITES) -#elif defined(RADIO_T12) || defined(RADIO_ZORRO) -#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_V14) || defined(RADIO_V12) -#elif defined(RADIO_TPROV2) -#elif defined(RADIO_TPRO) - // SW1 -#elif defined(RADIO_BUMBLEBEE) -#elif defined(RADIO_FAMILY_T20) - //TRIM left low -#elif defined(RADIO_GX12) - #define SWITCHES_G_2POS -#elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_MT12) || defined(RADIO_POCKET) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) - // no SWG -#else -#endif - -#if defined(PCBX9E) -#elif defined(PCBX9DP) -#elif defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_POCKET) - // no SWH -#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) - // no SWH -#elif defined(RADIO_TX12) || defined(RADIO_MT12) -#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_V14) || defined(RADIO_V12) -#elif defined(RADIO_TPROV2) -#elif defined(RADIO_TPRO) - // SW2 -#elif defined(RADIO_BUMBLEBEE) -#elif defined(RADIO_FAMILY_T20) - //TRIM right low -#elif defined(RADIO_TLITE) || defined(RADIO_TPROS) || defined(RADIO_LR3PRO) - // no SWH -#elif defined(RADIO_GX12) - #define SWITCHES_H_2POS -#elif defined(PCBX7) -#else -#endif - -#if defined(RADIO_X9DP2019) -#elif defined(PCBX9D) || defined(PCBX9DP) -#endif - -// X7 P400 P401 headers additionnal momentary switches -#if defined(PCBX7ACCESS) -#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) - // no SWI/J -#elif defined(RADIO_TX12) -#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_V14) || defined(RADIO_V12) - // no headers -#elif defined(RADIO_TLITE) || defined(RADIO_LR3PRO) - // no SWI - // no SWJ -#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) -// No I/J -#elif defined(RADIO_TPROV2) - // SW1 - // SW2 - // SW3 - // SW4 - // SW5 - // SW6 -#elif defined(RADIO_BUMBLEBEE) - // SW1 - // SW2 - // SW3 - // SW4 - // SW5 - // SW6 -#elif defined(RADIO_TPRO) - // SW3 - // SW4 - // SW5 - // SW6 -#elif defined(RADIO_FAMILY_T20) - //TRIM left up - //TRIM right up -#elif defined(RADIO_GX12) - // I and J are part of function switches bellow -#elif defined(PCBX7) -#endif - -#if defined(RADIO_FAMILY_T20) - //SW1 - //SW2 - //SW3 - //SW4 - //SW5 - //SW6 -#endif - -#if defined(RADIO_GX12) - //SW1 - //SW2 - //SW3 - //SW4 - //SW5 - //SW6 -#endif - -#if defined(PCBX9E) -#endif - // 6POS SW #if defined(RADIO_V14) || defined(RADIO_V12) #define SIXPOS_SWITCH_INDEX 6 @@ -452,29 +162,15 @@ #define SIXPOS_LED_BLUE 0 #endif -// ADC -#if !defined(RADIO_FAMILY_T20) && !defined(RADIO_BUMBLEBEE) -#endif - - #if defined(PCBX9E) - #define HARDWARE_POT1 - #define HARDWARE_POT2 - #define HARDWARE_POT3 - #define HARDWARE_POT4 #define ADC_VREF_PREC2 300 #elif defined(PCBX9DP) - #define HARDWARE_POT1 - #define HARDWARE_POT2 - #define HARDWARE_POT3 #if PCBREV < 2019 #define ADC_VREF_PREC2 330 #else #define ADC_VREF_PREC2 300 #endif #elif defined(PCBXLITE) - #define HARDWARE_POT1 - #define HARDWARE_POT2 #define PWM_STICKS #define PWM_TIMER TIM5 #define PWM_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) @@ -482,10 +178,9 @@ #define PWM_GPIO_AF GPIO_AF2 #define PWM_IRQHandler TIM5_IRQHandler #define PWM_IRQn TIM5_IRQn - #define PWM_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH) + #define PWM_GPIOA_PINS (LL_GPIO_PIN_0 | LL_GPIO_PIN_1 | LL_GPIO_PIN_2 | LL_GPIO_PIN_3) #define ADC_VREF_PREC2 330 #elif defined(RADIO_T8) - // No pots #define ADC_VREF_PREC2 300 #elif defined(RADIO_COMMANDO8) #define ADC_VREF_PREC2 320 @@ -496,24 +191,16 @@ #define PWM_GPIO_AF GPIO_AF2 #define PWM_IRQn TIM5_IRQn #define PWM_IRQHandler TIM5_IRQHandler - #define PWM_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) + #define PWM_GPIOA_PINS (LL_GPIO_PIN_0 | LL_GPIO_PIN_1 | LL_GPIO_PIN_2 | LL_GPIO_PIN_3) #elif defined(RADIO_TLITE) || defined(RADIO_LR3PRO) #define ADC_VREF_PREC2 330 #elif defined(RADIO_T14) - #define HARDWARE_POT1 - #define HARDWARE_POT2 #define ADC_VREF_PREC2 300 #elif defined(RADIO_TPROS) - #define HARDWARE_POT1 - #define HARDWARE_POT2 #define ADC_VREF_PREC2 300 #elif defined(RADIO_T12MAX) - #define HARDWARE_POT1 - #define HARDWARE_POT2 #define ADC_VREF_PREC2 300 #elif defined(RADIO_TPRO) || defined(RADIO_TPROV2) - #define HARDWARE_POT1 - #define HARDWARE_POT2 #define ADC_VREF_PREC2 300 #elif defined(RADIO_BUMBLEBEE) #define ADC_VREF_PREC2 300 @@ -522,63 +209,23 @@ #elif defined(RADIO_MT12) #define ADC_VREF_PREC2 330 #elif defined(RADIO_GX12) - // Serial gimbal only - // Analogs #define ADC_VREF_PREC2 330 #elif defined(RADIO_V12) || defined(RADIO_V14) #define ADC_VREF_PREC2 330 #elif defined(PCBX7) - #define HARDWARE_POT1 - #define HARDWARE_POT2 -#if !defined(RADIO_POCKET) -#endif -#if defined(RADIO_BOXER) || defined(RADIO_V14) || defined(RADIO_V12) - #define HARDWARE_POT3 // 6 POS - #define ADC_GPIOA_PINS_FS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3) -#else -#endif #define ADC_VREF_PREC2 330 #elif defined(PCBX9LITE) - #define HARDWARE_POT1 #define ADC_VREF_PREC2 300 #else - #define HARDWARE_POT1 - #define HARDWARE_POT2 #define ADC_VREF_PREC2 330 #endif -#if defined(PCBX9E) - #if defined(HORUS_STICKS) - #else - #endif // HORUS_STICKS -#elif defined(PCBX9DP) -#elif defined(PCBX9D) -#elif defined(RADIO_TX12) -#elif defined(RADIO_TX12MK2) -#elif defined(RADIO_BOXER) -#elif defined(RADIO_ZORRO) -#elif defined(RADIO_POCKET) -#elif defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) -#elif defined(RADIO_T14) -#elif defined(RADIO_T12MAX) -#elif defined(RADIO_BUMBLEBEE) -#elif defined(RADIO_FAMILY_T20) -#elif defined(RADIO_MT12) -#elif defined(RADIO_GX12) -#elif defined(RADIO_V14) -#elif defined(RADIO_V12) -#elif defined(PCBX7) -#elif defined(PCBX9LITE) -#elif defined(PCBXLITE) -#endif - #if defined(RADIO_BOXER) #define DEFAULT_6POS_CALIB {5, 13, 22, 31, 40} #define DEFAULT_6POS_IDX 6 #endif // PWR and LED driver - #if defined(PCBX9LITE) #define PWR_SWITCH_GPIO GPIO_PIN(GPIOA, 7) // PA.07 #define PWR_ON_GPIO GPIO_PIN(GPIOA, 6) // PA.06 diff --git a/radio/src/targets/tx15/hal.h b/radio/src/targets/tx15/hal.h index dc507747688..a6da11febef 100644 --- a/radio/src/targets/tx15/hal.h +++ b/radio/src/targets/tx15/hal.h @@ -70,35 +70,6 @@ TIM17: ROTARY_ENCODER_TIMER #define TIMER_MULT_APB1 2 #define TIMER_MULT_APB2 2 -// Keys - -// Trims - - - - - - - - - -// function switches -//SW1 -//SW2 -//SW3 -//SW4 -//SW5 -//SW6 - -// Extender Switches -#define SWITCHES_A_3POS -#define SWITCHES_B_3POS -#define SWITCHES_C_3POS -#define SWITCHES_D_3POS -#define SWITCHES_E_2POS -#define SWITCHES_F_2POS - - // Expanders #define IO_INT_GPIO GPIO_PIN(GPIOD, 3) #define IO_RESET_GPIO GPIO_PIN(GPIOG, 10) @@ -108,18 +79,8 @@ TIM17: ROTARY_ENCODER_TIMER #endif // ADC - - - - - -// Each ADC cannot map more than 8 channels, otherwise it will cause problems - - - #define ADC_VREF_PREC2 330 - // Serial gimbal sync port #define HALL_SYNC GPIO_PIN(GPIOH, 11) @@ -140,19 +101,19 @@ TIM17: ROTARY_ENCODER_TIMER #define HAS_SPORT_UPDATE_CONNECTOR() (false) // Telemetry - #define TELEMETRY_SET_INPUT 0 - #define TELEMETRY_TX_GPIO GPIO_PIN(GPIOA, 9) - #define TELEMETRY_RX_GPIO GPIO_UNDEF - #define TELEMETRY_USART USART1 - #define TELEMETRY_USART_IRQn USART1_IRQn - #define TELEMETRY_DMA DMA1 - #define TELEMETRY_DMA_Stream_TX LL_DMA_STREAM_7 - #define TELEMETRY_DMA_Channel_TX LL_DMAMUX1_REQ_USART1_TX - #define TELEMETRY_DMA_TX_Stream_IRQ DMA1_Stream7_IRQn - #define TELEMETRY_DMA_TX_IRQHandler DMA1_Stream7_IRQHandler - #define TELEMETRY_DMA_Stream_RX LL_DMA_STREAM_3 - #define TELEMETRY_DMA_Channel_RX LL_DMAMUX1_REQ_USART1_RX - #define TELEMETRY_USART_IRQHandler USART1_IRQHandler +#define TELEMETRY_SET_INPUT 0 +#define TELEMETRY_TX_GPIO GPIO_PIN(GPIOA, 9) +#define TELEMETRY_RX_GPIO GPIO_UNDEF +#define TELEMETRY_USART USART1 +#define TELEMETRY_USART_IRQn USART1_IRQn +#define TELEMETRY_DMA DMA1 +#define TELEMETRY_DMA_Stream_TX LL_DMA_STREAM_7 +#define TELEMETRY_DMA_Channel_TX LL_DMAMUX1_REQ_USART1_TX +#define TELEMETRY_DMA_TX_Stream_IRQ DMA1_Stream7_IRQn +#define TELEMETRY_DMA_TX_IRQHandler DMA1_Stream7_IRQHandler +#define TELEMETRY_DMA_Stream_RX LL_DMA_STREAM_3 +#define TELEMETRY_DMA_Channel_RX LL_DMAMUX1_REQ_USART1_RX +#define TELEMETRY_USART_IRQHandler USART1_IRQHandler // Software IRQ (Prio 5 -> FreeRTOS compatible) #define TELEMETRY_USE_CUSTOM_EXTI From 743b938d4513e999c3345aad590f772b73f45a5d Mon Sep 17 00:00:00 2001 From: Raphael <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sun, 13 Jul 2025 06:20:04 +0000 Subject: [PATCH 07/49] fix: define SURFACE_RADIO directly --- radio/src/targets/pl18/board.h | 4 ++-- radio/src/targets/taranis/board.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/radio/src/targets/pl18/board.h b/radio/src/targets/pl18/board.h index fc1a771124a..3c45038f3f8 100644 --- a/radio/src/targets/pl18/board.h +++ b/radio/src/targets/pl18/board.h @@ -29,8 +29,8 @@ #include "hal/serial_port.h" #include "hal/watchdog_driver.h" -#if defined(ADC_GPIO_PIN_STICK_TH) -#define SURFACE_RADIO true +#if defined(RADIO_NB4P) + #define SURFACE_RADIO true #endif #define FLASHSIZE 0x200000 diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 3c55039659d..08dd47bbb4e 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -110,7 +110,7 @@ enum { #endif -#if defined(ADC_GPIO_PIN_STICK_TH) +#if defined(RADIO_MT12) #define SURFACE_RADIO true #endif From 75cf8c3d65321c32952641011344f0057c02043c Mon Sep 17 00:00:00 2001 From: Raphael <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sun, 13 Jul 2025 06:30:03 +0000 Subject: [PATCH 08/49] fix: remove KEYS_GPIO_REG_PAGEDN usage --- radio/src/keys.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/radio/src/keys.cpp b/radio/src/keys.cpp index b529c315639..17fa072aa41 100644 --- a/radio/src/keys.cpp +++ b/radio/src/keys.cpp @@ -467,22 +467,20 @@ bool keysPollingCycle() event_t evt = keys[i].input(keys_input & (1 << i)); if (evt) { evt |= i; -#if defined(KEYS_GPIO_REG_PAGEDN) && !defined(KEYS_GPIO_REG_PAGEUP) + // Radio with single PAGEDN key - if (evt == EVT_KEY_LONG(KEY_PAGEDN)) { - // Convert long press PAGEDN to short press PAGEUP - evt = EVT_KEY_BREAK(KEY_PAGEUP); - killEvents(KEY_PAGEDN); + if (keysGetSupported() & (1 << KEY_PAGEUP)) { + if (evt == EVT_KEY_LONG(KEY_PAGEDN)) { + // Convert long press PAGEDN to short press PAGEUP + evt = EVT_KEY_BREAK(KEY_PAGEUP); + killEvents(KEY_PAGEDN); + } } -#endif -#if defined(KEYS_GPIO_REG_SHIFT) + // SHIFT key should not trigger REPT events - if (evt != EVT_KEY_REPT(KEY_SHIFT)) { - pushEvent(evt); - } -#else + if (evt == EVT_KEY_REPT(KEY_SHIFT)) continue; + pushEvent(evt); -#endif } } From 5cdfa6892ab412b64d81be778a2def754f092ec4 Mon Sep 17 00:00:00 2001 From: Raphael <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sun, 13 Jul 2025 06:44:12 +0000 Subject: [PATCH 09/49] fix: remove KEYS_GPIO_REG_DOWN, KEYS_GPIO_REG_MINUS and KEYS_GPIO_REG_PLUS --- .../gui/common/stdlcd/radio_ghost_menu.cpp | 14 +++-------- radio/src/targets/simu/opentxsimulator.cpp | 24 +++++++------------ 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/radio/src/gui/common/stdlcd/radio_ghost_menu.cpp b/radio/src/gui/common/stdlcd/radio_ghost_menu.cpp index a0e1e816e76..6ce59251e10 100644 --- a/radio/src/gui/common/stdlcd/radio_ghost_menu.cpp +++ b/radio/src/gui/common/stdlcd/radio_ghost_menu.cpp @@ -38,26 +38,18 @@ void menuGhostModuleConfig(event_t event) moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL; break; -#if defined(ROTARY_ENCODER_NAVIGATION) case EVT_ROTARY_LEFT: -#elif defined(KEYS_GPIO_REG_UP) - case EVT_KEY_BREAK(KEY_UP): -#elif defined(KEYS_GPIO_REG_PLUS) - case EVT_KEY_BREAK(KEY_PLUS): -#endif + case EVT_KEY_BREAK(KEY_UP): + case EVT_KEY_BREAK(KEY_PLUS): reusableBuffer.ghostMenu.buttonAction = GHST_BTN_JOYUP; reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_NONE; moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL; audioKeyPress(); break; -#if defined(ROTARY_ENCODER_NAVIGATION) case EVT_ROTARY_RIGHT: -#elif defined(KEYS_GPIO_REG_DOWN) - case EVT_KEY_BREAK(KEY_DOWN): -#elif defined(KEYS_GPIO_REG_MINUS) + case EVT_KEY_BREAK(KEY_DOWN): case EVT_KEY_BREAK(KEY_MINUS): -#endif reusableBuffer.ghostMenu.buttonAction = GHST_BTN_JOYDOWN; reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_NONE; moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL; diff --git a/radio/src/targets/simu/opentxsimulator.cpp b/radio/src/targets/simu/opentxsimulator.cpp index 1c96ef2b07b..b9288daeef4 100644 --- a/radio/src/targets/simu/opentxsimulator.cpp +++ b/radio/src/targets/simu/opentxsimulator.cpp @@ -421,6 +421,8 @@ extern volatile uint32_t rotencDt; void OpenTxSimulator::rotaryEncoderEvent(int steps) { + if (steps == 0) return; + #if defined(ROTARY_ENCODER_NAVIGATION) && !defined(USE_HATS_AS_KEYS) static uint32_t last_tick = 0; if (steps != 0) { @@ -434,22 +436,14 @@ void OpenTxSimulator::rotaryEncoderEvent(int steps) last_tick = now; } #else - // TODO : this should probably be handled in the GUI int key; -#if defined(PCBXLITE) - if (steps > 0) - key = KEY_DOWN; - else if (steps < 0) - key = KEY_UP; -#elif defined(KEYS_GPIO_REG_PLUS) && defined(KEYS_GPIO_REG_MINUS) - if (steps > 0) - key = KEY_MINUS; - else if (steps < 0) - key = KEY_PLUS; - else -#endif - // Should not happen but Clang complains that key is unset otherwise - return; + if (keysGetSupported() & ((1 << KEY_UP) | (1 << KEY_DOWN))) { + key = steps > 0 ? KEY_DOWN : KEY_UP; + } else if (keysGetSupported() & ((1 << KEY_PLUS) | (1 << KEY_MINUS))) { + key = steps > 0 ? KEY_MINUS : KEY_PLUS; + } else { + return; // not supposed to happen??? + } setKey(key, 1); QTimer::singleShot(10, [this, key]() { setKey(key, 0); }); From ceacdbf72c644b80b656dfb22072b6ce8eb3147c Mon Sep 17 00:00:00 2001 From: Raphael <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sun, 13 Jul 2025 06:54:55 +0000 Subject: [PATCH 10/49] fix: remove KEYS_GPIO_REG_MENU --- radio/src/gui/common/stdlcd/radio_sdmanager.cpp | 2 -- radio/src/lua/api_general.cpp | 17 ++++++++++++----- radio/src/lua/interface.cpp | 4 ++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp index 104f66bdefb..c6888798f87 100644 --- a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp +++ b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp @@ -304,14 +304,12 @@ void menuRadioSdManager(event_t _event) switch (_event) { -#if defined(KEYS_GPIO_REG_MENU) case EVT_KEY_LONG(KEY_MENU): if (SD_CARD_PRESENT() && s_editMode == 0) { POPUP_MENU_ADD_ITEM(STR_SD_INFO); POPUP_MENU_START(onSdManagerMenu); } break; -#endif case EVT_KEY_BREAK(KEY_EXIT): REFRESH_FILES(); diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index ee23bb7d1bc..50604684473 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -1693,11 +1693,12 @@ Stops key state machine. See [Key Events](../key_events.md) for the detailed des */ static int luaKillEvents(lua_State * L) { -#if defined(KEYS_GPIO_REG_MENU) - #define IS_MASKABLE(key) \ - ((key) != KEY_EXIT && (key) != KEY_ENTER && \ - ((scriptInternalData[0].reference == SCRIPT_STANDALONE) || \ - (key) != KEY_PAGEDN)) +#if !defined(COLORLCD) + #define IS_KEY_AVAIL(key) (keysGetSupported() & (1 << (key))) + #define IS_STANDALONE() (scriptInternalData[0].reference == SCRIPT_STANDALONE) + #define IS_MASKABLE(key) \ + ((key) != KEY_EXIT && (key) != KEY_ENTER && \ + (!IS_KEY_AVAIL(KEY_MENU) || (IS_STANDALONE() || ((key) != KEY_PAGEDN)))) #else #define IS_MASKABLE(key) ((key) != KEY_EXIT && (key) != KEY_ENTER) #endif @@ -1710,6 +1711,12 @@ static int luaKillEvents(lua_State * L) luaEmptyEventBuffer(); } return 0; + +#undef IS_MASKABLE +#if !defined(COLORLCD) + #undef IS_STANDALONE + #undef IS_KEY_AVAIL +#endif } #if LCD_DEPTH > 1 && !defined(COLORLCD) diff --git a/radio/src/lua/interface.cpp b/radio/src/lua/interface.cpp index 7113c767410..be01b4acab0 100644 --- a/radio/src/lua/interface.cpp +++ b/radio/src/lua/interface.cpp @@ -1236,8 +1236,8 @@ static bool resumeLua(bool init, bool allowLcdUsage) luaState = INTERPRETER_RELOAD_PERMANENT_SCRIPTS; killEvents(evt.event); } -#if defined(KEYS_GPIO_REG_MENU) - // TODO find another key and add a #define +#if !defined(COLORLCD) + // TODO find another key else if (evt.event == EVT_KEY_LONG(KEY_MENU)) { luaEmptyEventBuffer(); luaDisplayStatistics = !luaDisplayStatistics; From 7bfbee465eeb5f815b3622a0dff259eabcb76e42 Mon Sep 17 00:00:00 2001 From: Raphael <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sun, 13 Jul 2025 08:31:50 +0000 Subject: [PATCH 11/49] fix: use new hardware defs JSON location --- cmake/Macros.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Macros.cmake b/cmake/Macros.cmake index 86735061426..1d509ffc0c1 100644 --- a/cmake/Macros.cmake +++ b/cmake/Macros.cmake @@ -112,7 +112,7 @@ function(AddHWGenTarget input template output) set(GEN_JSON ${PYTHON_EXECUTABLE} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py) # Inputs - set(INPUT_JSON ${CMAKE_CURRENT_BINARY_DIR}/${input}) + set(INPUT_JSON ${RADIO_SRC_DIR}/boards/hw_defs/${input}) set(TEMPLATE ${RADIO_DIRECTORY}/util/hw_defs/${template}.jinja) set(GEN_PY_DEPS ${RADIO_DIRECTORY}/util/hw_defs/generator.py From 05269054411b270ece9ea29b8dcc3aa98c890719 Mon Sep 17 00:00:00 2001 From: Raphael <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sun, 13 Jul 2025 08:40:28 +0000 Subject: [PATCH 12/49] fix: cleanup NB4P ADC usage in boot loader --- .../boards/generic_stm32/analog_inputs.cpp | 10 ++ radio/src/hal/adc_driver.h | 1 + radio/src/myeeprom.h | 2 + .../targets/common/arm/stm32/stm32_adc.cpp | 10 ++ .../src/targets/common/arm/stm32/stm32_adc.h | 2 + radio/src/targets/pl18/CMakeLists.txt | 8 ++ radio/src/targets/pl18/board.cpp | 2 +- radio/src/targets/pl18/nb4p_key_driver.cpp | 97 ++++++------------- 8 files changed, 64 insertions(+), 68 deletions(-) diff --git a/radio/src/boards/generic_stm32/analog_inputs.cpp b/radio/src/boards/generic_stm32/analog_inputs.cpp index 657b797d395..d3d1da12aeb 100644 --- a/radio/src/boards/generic_stm32/analog_inputs.cpp +++ b/radio/src/boards/generic_stm32/analog_inputs.cpp @@ -41,7 +41,9 @@ // generated files #include "stm32_adc_inputs.inc" #include "stm32_pwm_inputs.inc" +#if !defined(BOOT) #include "hal_adc_inputs.inc" +#endif constexpr uint8_t n_ADC = DIM(_ADC_adc); constexpr uint8_t n_ADC_spi = DIM(_ADC_spi); @@ -60,6 +62,11 @@ static bool adc_init() return success; } +static void adc_deinit() +{ + stm32_hal_adc_deinit(_ADC_adc, n_ADC); +} + static bool adc_start_read() { bool success = stm32_hal_adc_start_read(_ADC_adc, n_ADC, _ADC_inputs, n_inputs); @@ -82,9 +89,12 @@ static void adc_wait_completion() } const etx_hal_adc_driver_t _adc_driver = { +#if !defined(BOOT) .inputs = _hal_inputs, .default_pots_cfg = _pot_default_config, +#endif .init = adc_init, + .deinit = adc_deinit, .start_conversion = adc_start_read, .wait_completion = adc_wait_completion, .set_input_mask = stm32_hal_set_inputs_mask, diff --git a/radio/src/hal/adc_driver.h b/radio/src/hal/adc_driver.h index 41468445e81..93ea83ccb90 100644 --- a/radio/src/hal/adc_driver.h +++ b/radio/src/hal/adc_driver.h @@ -77,6 +77,7 @@ struct etx_hal_adc_driver_t { potconfig_t default_pots_cfg; bool (*init)(); + void (*deinit)(); bool (*start_conversion)(); void (*wait_completion)(); diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 835c08f1d9d..51136a4af94 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -242,8 +242,10 @@ enum DisplayTrims DISPLAY_TRIMS_ALWAYS }; +#if !defined(BOOT) extern RadioData g_eeGeneral; extern ModelData g_model; +#endif constexpr uint8_t EE_GENERAL = 0x01; constexpr uint8_t EE_MODEL = 0x02; diff --git a/radio/src/targets/common/arm/stm32/stm32_adc.cpp b/radio/src/targets/common/arm/stm32/stm32_adc.cpp index 75d8c860b5e..d80ea9e7414 100644 --- a/radio/src/targets/common/arm/stm32/stm32_adc.cpp +++ b/radio/src/targets/common/arm/stm32/stm32_adc.cpp @@ -540,6 +540,16 @@ bool stm32_hal_adc_init(const stm32_adc_t* ADCs, uint8_t n_ADC, return true; } +void stm32_hal_adc_deinit(const stm32_adc_t* ADCs, uint8_t n_ADC) +{ + const stm32_adc_t* adc = ADCs; + + while (n_ADC > 0) { + LL_ADC_Disable(adc->ADCx); + adc++; n_ADC--; + } +} + #if defined(STM32H7RS) static inline DMA_Channel_TypeDef* _dma_get_stream(DMA_TypeDef *DMAx, uint32_t Channel) diff --git a/radio/src/targets/common/arm/stm32/stm32_adc.h b/radio/src/targets/common/arm/stm32/stm32_adc.h index 9812a1526b0..f0e94856308 100644 --- a/radio/src/targets/common/arm/stm32/stm32_adc.h +++ b/radio/src/targets/common/arm/stm32/stm32_adc.h @@ -56,6 +56,8 @@ bool stm32_hal_adc_init(const stm32_adc_t* ADCs, uint8_t n_ADC, const stm32_adc_input_t* inputs, const stm32_adc_gpio_t* ADC_GPIOs, uint8_t n_GPIO); +void stm32_hal_adc_deinit(const stm32_adc_t* ADCs, uint8_t n_ADC); + bool stm32_hal_adc_start_read(const stm32_adc_t* ADCs, uint8_t n_ADC, const stm32_adc_input_t* inputs, uint8_t n_inputs); diff --git a/radio/src/targets/pl18/CMakeLists.txt b/radio/src/targets/pl18/CMakeLists.txt index ad9cc6b7270..000fbe5a13d 100644 --- a/radio/src/targets/pl18/CMakeLists.txt +++ b/radio/src/targets/pl18/CMakeLists.txt @@ -201,6 +201,14 @@ add_library(board_bl OBJECT EXCLUDE_FROM_ALL targets/common/arm/stm32/sdram_driver.cpp ) add_dependencies(board_bl ${BITMAPS_TARGET}) + +if(PCBREV STREQUAL NB4P) + target_sources(board_bl PUBLIC + ${CMAKE_CURRENT_BINARY_DIR}/stm32_adc_inputs.inc + boards/generic_stm32/analog_inputs.cpp + ) +endif() + set(BOOTLOADER_SRC ${BOOTLOADER_SRC} $) # Firmware board library diff --git a/radio/src/targets/pl18/board.cpp b/radio/src/targets/pl18/board.cpp index d8d265e5b8b..7508cdfa7f3 100644 --- a/radio/src/targets/pl18/board.cpp +++ b/radio/src/targets/pl18/board.cpp @@ -183,7 +183,7 @@ void boardBLPreJump() { SDRAM_Init(); #if defined(RADIO_NB4P) - LL_ADC_Disable(ADC_MAIN); + _adc_driver.deinit(); #endif } diff --git a/radio/src/targets/pl18/nb4p_key_driver.cpp b/radio/src/targets/pl18/nb4p_key_driver.cpp index c3521c4fe48..0bac65c23b5 100644 --- a/radio/src/targets/pl18/nb4p_key_driver.cpp +++ b/radio/src/targets/pl18/nb4p_key_driver.cpp @@ -28,11 +28,15 @@ #include "delays_driver.h" #include "keys.h" -#if !defined(BOOT) - #include "hal/adc_driver.h" +#include "hal/adc_driver.h" + +#if defined(BOOT) + #include "stm32_adc.h" + #include "boards/generic_stm32/analog_inputs.h" #endif -#define BOOTLOADER_KEYS 0x42 +#define BOOTLOADER_KEYS 0x42 +#define ADC_KEYS_INDEX 4 /* The output bit-order has to be: 0 LHL STD (Left equals down) @@ -47,92 +51,51 @@ enum PhysicalTrims STU, THD = 2, THU, -/* TR2L = 4, +/* + TR2L = 4, TR2R, TR2D = 8, - TR2U,*/ + TR2U, +*/ }; void keysInit() { #if defined(BOOT) - LL_GPIO_InitTypeDef pinInit; - LL_GPIO_StructInit(&pinInit); - - pinInit.Pin = ADC_GPIO_PIN_RAW1; - pinInit.Mode = LL_GPIO_MODE_ANALOG; - pinInit.Pull = LL_GPIO_PULL_NO; - stm32_gpio_enable_clock(ADC_GPIO_RAW1); - LL_GPIO_Init(ADC_GPIO_RAW1, &pinInit); - - // Init ADC clock - uint32_t adc_idx = (((uint32_t) ADC_MAIN) - ADC1_BASE) / 0x100UL; - uint32_t adc_msk = RCC_APB2ENR_ADC1EN << adc_idx; - LL_APB2_GRP1_EnableClock(adc_msk); - - // Init common to all ADCs - LL_ADC_CommonInitTypeDef commonInit; - LL_ADC_CommonStructInit(&commonInit); - - commonInit.CommonClock = LL_ADC_CLOCK_SYNC_PCLK_DIV4; - LL_ADC_CommonInit(__LL_ADC_COMMON_INSTANCE(ADC_MAIN), &commonInit); - - // ADC must be disabled for the functions used here - LL_ADC_Disable(ADC_MAIN); - - LL_ADC_InitTypeDef adcInit; - LL_ADC_StructInit(&adcInit); - adcInit.SequencersScanMode = LL_ADC_SEQ_SCAN_DISABLE; - adcInit.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT; - adcInit.Resolution = LL_ADC_RESOLUTION_12B; - LL_ADC_Init(ADC_MAIN, &adcInit); - - LL_ADC_REG_InitTypeDef adcRegInit; - LL_ADC_REG_StructInit(&adcRegInit); - adcRegInit.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE; - adcRegInit.ContinuousMode = LL_ADC_REG_CONV_SINGLE; - LL_ADC_REG_Init(ADC_MAIN, &adcRegInit); - - // Enable ADC - LL_ADC_Enable(ADC_MAIN); + _adc_driver.init(); #endif } #if defined(BOOT) -uint16_t _adcRead() -{ - // Configure ADC channel - LL_ADC_REG_SetSequencerRanks(ADC_MAIN, LL_ADC_REG_RANK_1, ADC_CHANNEL_RAW1); - LL_ADC_SetChannelSamplingTime(ADC_MAIN, ADC_CHANNEL_RAW1, LL_ADC_SAMPLINGTIME_3CYCLES); - - // Start ADC conversion - LL_ADC_REG_StartConversionSWStart(ADC_MAIN); +static uint16_t _adc_values[MAX_ADC_INPUTS]; - // Wait until ADC conversion is complete - while (!LL_ADC_IsActiveFlag_EOCS(ADC_MAIN)); +uint16_t* getAnalogValues() { return _adc_values; } - // Read ADC converted value - return LL_ADC_REG_ReadConversionData12(ADC_MAIN); +static uint16_t _adcRead(uint8_t index) +{ + if (!_adc_driver.start_conversion()) { + return ADC_MAX_VALUE / 2; + } + _adc_driver.wait_completion(); + return _adc_values[4]; } #endif uint32_t readKeys() { + uint16_t value; uint32_t result = 0; #if defined(BOOT) - uint16_t value = _adcRead(); - if (value >= 3584) - result |= 1 << KEY_EXIT; - else if (value < 512) - result |= 1 << KEY_ENTER; + value = _adcRead(ADC_KEYS_INDEX); #else - uint16_t value = getAnalogValue(4); + value = getAnalogValue(ADC_KEYS_INDEX); +#endif + if (value >= 3584) result |= 1 << KEY_EXIT; else if (value < 512) result |= 1 << KEY_ENTER; -#endif return result; } @@ -142,12 +105,12 @@ uint32_t readTrims() uint32_t result = 0; #if defined(BOOT) - uint16_t value = _adcRead(); + uint16_t value = _adcRead(ADC_KEYS_INDEX); if (value >= 1536 && value < 2560) result = BOOTLOADER_KEYS; #else - uint16_t tr1Val = getAnalogValue(6); - uint16_t tr2Val = getAnalogValue(7); + uint16_t tr1Val = getAnalogValue(6); // TODO: define constant + uint16_t tr2Val = getAnalogValue(7); // TODO: define constant if (tr1Val < 500) // Physical TR1 Left // result |= 1 << TR1L; ; @@ -171,4 +134,4 @@ uint32_t readTrims() #endif return result; -} \ No newline at end of file +} From f9b667c1c037d173c5bf25ac798ca4688cfad41d Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sun, 13 Jul 2025 14:28:49 +0200 Subject: [PATCH 13/49] fix: paths and dependencies related to hardware definitions --- cmake/Macros.cmake | 16 ++++++++++------ companion/src/CMakeLists.txt | 4 ++-- radio/src/CMakeLists.txt | 2 +- radio/src/boards/generic_stm32/CMakeLists.txt | 2 +- radio/src/bootloader/CMakeLists.txt | 2 +- radio/src/targets/simu/CMakeLists.txt | 6 +++--- tools/generate-hw-defs.sh | 5 ----- 7 files changed, 18 insertions(+), 19 deletions(-) diff --git a/cmake/Macros.cmake b/cmake/Macros.cmake index 1d509ffc0c1..89d47ffab49 100644 --- a/cmake/Macros.cmake +++ b/cmake/Macros.cmake @@ -96,14 +96,18 @@ function(AddHardwareDefTarget output) endforeach() set(GEN_HW_DEFS ${CMAKE_CXX_COMPILER} ${HW_DEF_ARGS} -x c++-header -E -dM ${HW_DEF_SRC}) - set(GEN_JSON ${PYTHON_EXECUTABLE} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py) - set(GEN_JSON ${GEN_JSON} -i defines -T ${FLAVOUR} -) + # set(GEN_JSON ${PYTHON_EXECUTABLE} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py) + # set(GEN_JSON ${GEN_JSON} -i defines -T ${FLAVOUR} -) - add_custom_command(OUTPUT ${output} - COMMAND ${GEN_HW_DEFS} | ${GEN_JSON} > ${output} - DEPENDS ${HW_DEF_SRC} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py - ) + # add_custom_command(OUTPUT ${output} + # COMMAND ${GEN_HW_DEFS} | ${GEN_JSON} > ${output} + # DEPENDS ${HW_DEF_SRC} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py + # ) + add_custom_command(OUTPUT ${output}.h + COMMAND ${GEN_HW_DEFS} > ${output}.h + DEPENDS ${HW_DEF_SRC} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py + ) endfunction() function(AddHWGenTarget input template output) diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 918367a6396..2ddeb354fe6 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -130,7 +130,8 @@ else() endif() ############# Import radio hardware definitions ############### -set(HWDEFS_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../radio/src") + +set(HWDEFS_DIR "${CMAKE_SOURCE_DIR}/radio/src/boards/hw_defs") set(HWDEFS_TMPL "${COMPANION_SRC_DIRECTORY}/hwdefs.qrc.in") set(HWDEFS_PHDR "HWDEF_JSON_LIST") set(HWDEFS_QRC "${CMAKE_CURRENT_BINARY_DIR}/hwdefs.qrc") @@ -680,4 +681,3 @@ else() endif() include(CPack) - diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 9e3fe87f874..9358725d00e 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -104,7 +104,7 @@ set(HW_DESC_JSON ${FLAVOUR}.json) AddHardwareDefTarget(${HW_DESC_JSON}) # enable generating JSON definition separately for debugging -add_custom_target(hardware_defs DEPENDS ${HW_DESC_JSON}) +add_custom_target(hardware_defs DEPENDS ${HW_DESC_JSON}.h) include(hal/CMakeLists.txt) diff --git a/radio/src/boards/generic_stm32/CMakeLists.txt b/radio/src/boards/generic_stm32/CMakeLists.txt index 629da13d719..8739feebb21 100644 --- a/radio/src/boards/generic_stm32/CMakeLists.txt +++ b/radio/src/boards/generic_stm32/CMakeLists.txt @@ -8,7 +8,7 @@ AddHWGenTarget(${HW_DESC_JSON} hal_adc_inputs hal_adc_inputs.inc) # Dependencies common to bootloader and firmware set(MINIMAL_BOARD_LIB_SRC - ${CMAKE_CURRENT_BINARY_DIR}/${HW_DESC_JSON} + ${RADIO_SRC_DIR}/boards/hw_defs/${HW_DESC_JSON} ${CMAKE_CURRENT_BINARY_DIR}/stm32_keys.inc boards/generic_stm32/inputs.cpp diff --git a/radio/src/bootloader/CMakeLists.txt b/radio/src/bootloader/CMakeLists.txt index 905d967d357..b79c4cd9d15 100644 --- a/radio/src/bootloader/CMakeLists.txt +++ b/radio/src/bootloader/CMakeLists.txt @@ -1,7 +1,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) -AddHardwareDefTarget(${HW_DESC_JSON}) +# AddHardwareDefTarget(${HW_DESC_JSON}) AddHWGenTarget(${HW_DESC_JSON} hal_keys hal_keys.inc) set(BOOTLOADER_SRC ${BOOTLOADER_SRC} diff --git a/radio/src/targets/simu/CMakeLists.txt b/radio/src/targets/simu/CMakeLists.txt index b55d12cdea2..cd601777ac8 100644 --- a/radio/src/targets/simu/CMakeLists.txt +++ b/radio/src/targets/simu/CMakeLists.txt @@ -23,7 +23,7 @@ set(SIMU_DRIVERS ) set(HW_DESC_JSON ${FLAVOUR}.json) -AddHardwareDefTarget(${HW_DESC_JSON}) +# AddHardwareDefTarget(${HW_DESC_JSON}) AddHWGenTarget(${HW_DESC_JSON} simu_keys simu_keys.inc) AddHWGenTarget(${HW_DESC_JSON} simu_switches simu_switches.inc) AddHWGenTarget(${HW_DESC_JSON} hal_adc_inputs hal_adc_inputs.inc) @@ -32,8 +32,8 @@ set(SIMU_DRIVERS ${SIMU_DRIVERS} ${CMAKE_CURRENT_BINARY_DIR}/simu_keys.inc ${CMAKE_CURRENT_BINARY_DIR}/simu_switches.inc ${CMAKE_CURRENT_BINARY_DIR}/hal_adc_inputs.inc - ${CMAKE_CURRENT_BINARY_DIR}/${HW_DESC_JSON} - ) + ${RADIO_SRC_DIR}/boards/hw_defs/${HW_DESC_JSON} +) include_directories(${CMAKE_CURRENT_BINARY_DIR}) if(SIMU_LUA_COMPILER) diff --git a/tools/generate-hw-defs.sh b/tools/generate-hw-defs.sh index 1e895735603..65d4dd7af1f 100755 --- a/tools/generate-hw-defs.sh +++ b/tools/generate-hw-defs.sh @@ -17,8 +17,6 @@ rm -rf build && mkdir -p build && cd build target_names=$(echo "$FLAVOR" | tr '[:upper:]' '[:lower:]' | tr ';' '\n') -TARGET_DIR="${SRCDIR}/radio/src/targets/hw_defs" - for target_name in $target_names do BUILD_OPTIONS=${COMMON_OPTIONS} @@ -35,8 +33,5 @@ do cmake --build . --target arm-none-eabi-configure cmake --build arm-none-eabi --target hardware_defs - mkdir -p ${TARGET_DIR} - mv arm-none-eabi/radio/src/*.json* ${TARGET_DIR} - rm -f CMakeCache.txt arm-none-eabi/CMakeCache.txt done From d665d9fb6b91978df8871c3c03ce47aa50bf84f0 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sun, 13 Jul 2025 20:03:13 +0200 Subject: [PATCH 14/49] chore: hw defs cleanup and validator --- radio/util/hw_defs/generator.py | 94 ++-- radio/util/hw_defs/hal_adc.py | 286 ------------ radio/util/hw_defs/hal_json.py | 64 +-- radio/util/hw_defs/hal_keys.py | 226 ---------- radio/util/hw_defs/hal_switches.py | 140 ------ radio/util/hw_defs/json_validator.py | 116 +++++ radio/util/hw_defs/models.py | 188 ++++++++ radio/util/hw_defs/pot_config.py | 280 ------------ radio/util/hw_defs/switch_config.py | 636 --------------------------- 9 files changed, 360 insertions(+), 1670 deletions(-) delete mode 100644 radio/util/hw_defs/hal_adc.py delete mode 100644 radio/util/hw_defs/hal_keys.py delete mode 100644 radio/util/hw_defs/hal_switches.py create mode 100644 radio/util/hw_defs/json_validator.py create mode 100644 radio/util/hw_defs/models.py delete mode 100644 radio/util/hw_defs/pot_config.py delete mode 100644 radio/util/hw_defs/switch_config.py diff --git a/radio/util/hw_defs/generator.py b/radio/util/hw_defs/generator.py index 616ed5302c9..a9ba622bfae 100644 --- a/radio/util/hw_defs/generator.py +++ b/radio/util/hw_defs/generator.py @@ -1,101 +1,77 @@ - import json import jinja2 import legacy_names import json_index +from models import KeyEnum + MAIN_CONTROL_LUT = { # 2 Gimbal radios - "LH": { "str": "Rud", "local": "STR_STICK_NAMES0" }, - "LV": { "str": "Ele", "local": "STR_STICK_NAMES1" }, - "RV": { "str": "Thr", "local": "STR_STICK_NAMES2" }, - "RH": { "str": "Ail", "local": "STR_STICK_NAMES3" }, + "LH": {"str": "Rud", "local": "STR_STICK_NAMES0"}, + "LV": {"str": "Ele", "local": "STR_STICK_NAMES1"}, + "RV": {"str": "Thr", "local": "STR_STICK_NAMES2"}, + "RH": {"str": "Ail", "local": "STR_STICK_NAMES3"}, # Surface radios - "ST": { "str": "ST", "local": "STR_SURFACE_NAMES0" }, - "TH": { "str": "TH", "local": "STR_SURFACE_NAMES1" }, + "ST": {"str": "ST", "local": "STR_SURFACE_NAMES0"}, + "TH": {"str": "TH", "local": "STR_SURFACE_NAMES1"}, } -# MUST be the same order as 'EnumKeys' -KEYS_LUT = [ - "KEY_MENU", - "KEY_EXIT", - "KEY_ENTER", - - "KEY_PAGEUP", - "KEY_PAGEDN", - - "KEY_UP", - "KEY_DOWN", - - "KEY_LEFT", - "KEY_RIGHT", - - "KEY_PLUS", - "KEY_MINUS", - - "KEY_MODEL", - "KEY_TELE", - "KEY_SYS", - - "KEY_SHIFT", - "KEY_BIND", -] - # def eprint(*args, **kwargs): # from sys import stderr # print(*args, file=stderr, **kwargs) -def is_ext_input(input): - if input.get('type') != 'FLEX': +def is_ext_input(input): + if input.get("type") != "FLEX": return False - name = input.get('name') - if name and name.startswith('EXT'): + name = input.get("name") + if name and name.startswith("EXT"): return True return False def generate_from_template(json_filename, template_filename, target): - with open(json_filename) as json_file: with open(template_filename) as template_file: - root_obj = json.load(json_file) - adc_inputs = root_obj.get('adc_inputs') + adc_inputs = root_obj.get("adc_inputs") adc_index = json_index.build_adc_index(adc_inputs) adc_gpios = json_index.build_adc_gpio_port_index(adc_inputs) - switches = root_obj.get('switches') + switches = root_obj.get("switches") switch_gpios = json_index.build_switch_gpio_port_index(switches) - keys = root_obj.get('keys') + keys = root_obj.get("keys") key_gpios = json_index.build_key_gpio_port_index(keys) - trims = root_obj.get('trims') + trims = root_obj.get("trims") trim_gpios = json_index.build_trim_gpio_port_index(trims) - + legacy_inputs = legacy_names.inputs_by_target(target) - - env = jinja2.Environment( - lstrip_blocks=True, - trim_blocks=True - ) - env.tests['ext_input'] = is_ext_input + env = jinja2.Environment(lstrip_blocks=True, trim_blocks=True) + + env.tests["ext_input"] = is_ext_input template_str = template_file.read() template = env.from_string(template_str) - print(template.render(root_obj, - adc_index=adc_index, - adc_gpios=adc_gpios, - switch_gpios=switch_gpios, - key_gpios=key_gpios, - trim_gpios=trim_gpios, - legacy_inputs=legacy_inputs, - main_labels=MAIN_CONTROL_LUT, - key_index=KEYS_LUT)) + key_index = list([str(i) for i in KeyEnum]) + + print( + template.render( + root_obj, + adc_index=adc_index, + adc_gpios=adc_gpios, + switch_gpios=switch_gpios, + key_gpios=key_gpios, + trim_gpios=trim_gpios, + legacy_inputs=legacy_inputs, + main_labels=MAIN_CONTROL_LUT, + key_index=key_index, + ) + ) diff --git a/radio/util/hw_defs/hal_adc.py b/radio/util/hw_defs/hal_adc.py deleted file mode 100644 index 52aaef29047..00000000000 --- a/radio/util/hw_defs/hal_adc.py +++ /dev/null @@ -1,286 +0,0 @@ -from pot_config import pot_cfg_by_target - -MAX_POTS = 4 -MAX_SLIDERS = 4 -MAX_EXTS = 4 -MAX_RAWS = 4 - - -def eprint(*args, **kwargs): - from sys import stderr - print(*args, file=stderr, **kwargs) - -class ADCInput: - - TYPE_STICK = 'STICK' - TYPE_FLEX = 'FLEX' - TYPE_SWITCH = 'SWITCH' - TYPE_RAW = 'RAW' - # TYPE_BATT = 'BATT' - - def __init__(self, name, adc_input_type, adc, gpio, pin, channel): - self.name = name - self.type = adc_input_type - self.adc = adc - self.gpio = gpio - self.pin = pin - self.channel = channel - -class SPI_ADCInput: - - def __init__(self, name, adc_input_type, channel): - self.name = name - self.type = adc_input_type - self.adc = 'SPI' - self.channel = channel - -class ADC: - def __init__(self, name, adc): - self.name = name - self.adc = adc - -class MouseName: - AXIS = ['x','y'] - def format(self, idx): - axis = self.AXIS[idx - 1] - return f'JS{axis}' - -def AZ_seq(): - return [chr(i) for i in range(ord('A'), ord('Z') + 1)] - -class ADCInputParser: - - ADC_MAIN = 'MAIN' - ADC_EXT = 'EXT' - - ADC_INPUTS = [ - { - 'range': ['LH','LV','RV','RH','ST','TH'], - 'type': ADCInput.TYPE_STICK, - 'suffix': 'STICK_{}', - 'name': '{}', - }, - { - 'range': range(1, MAX_POTS + 1), - 'type': ADCInput.TYPE_FLEX, - 'suffix': 'POT{}', - 'name': 'P{}', - }, - { - 'range': range(1, MAX_SLIDERS + 1), - 'type': ADCInput.TYPE_FLEX, - 'suffix': 'SLIDER{}', - 'name': 'SL{}', - }, - { - 'range': range(1, MAX_EXTS + 1), - 'type': ADCInput.TYPE_FLEX, - 'suffix': 'EXT{}', - 'name': 'EXT{}', - }, - { - 'range': range(1, MAX_RAWS + 1), - 'type': ADCInput.TYPE_RAW, - 'suffix': 'RAW{}', - 'name': 'RAW{}', - }, - { - 'range': range(1, 2 + 1), - 'type': ADCInput.TYPE_FLEX, - 'suffix': 'MOUSE{}', - 'name': MouseName(), - }, - { - 'type': 'VBAT', - 'name': 'VBAT', - 'suffix': 'BATT', - }, - { - 'type': 'RTC_BAT', - 'name': 'RTC_BAT', - 'suffix': 'RTC_BAT', - }, - { - 'range': AZ_seq(), - 'type': ADCInput.TYPE_SWITCH, - 'suffix': 'SW{}', - 'name': 'SW{}', - }, - ] - - - def __init__(self, target, hw_defs, labels): - self.target = target - self.hw_defs = hw_defs - self.labels = labels - self.regs = self._parse_regs() - self.dirs = self._parse_dirs() - self.adcs = [] - - def _parse_regs(self): - - regs = {} - for reg in AZ_seq(): - reg = f'GPIO{reg}' - pins_def = f'ADC_{reg}_PINS' - if pins_def in self.hw_defs: - regs[reg] = self.hw_defs[pins_def] - - return regs - - def _parse_dirs(self): - - ret = [] - dirs = self.hw_defs.get('ADC_DIRECTION') or '' - if dirs: - dirs = dirs.strip('{} ').split(',') - # eprint(dirs) - for i in dirs: - ret.append(int(i)) - - return ret - - def _find_adc(self, channel_def): - - if (self.ext_list is None) or (channel_def not in self.ext_list): - return self.ADC_MAIN - else: - return self.ADC_EXT - - def _find_gpio(self, pin): - gpio = None - for reg, pins_def in self.regs.items(): - if pins_def and (pin in pins_def): - gpio = reg - - return gpio - - - def _parse_adc(self, name, periph, prefix): - - adc_periph = self.hw_defs.get(periph) - if not adc_periph: - return None - - adc = ADC(name, adc_periph) - adc.dma = self.hw_defs.get(f'{prefix}_DMA') - if adc.dma: - adc.dma_channel = self.hw_defs[f'{prefix}_DMA_CHANNEL'] - adc.dma_stream = self.hw_defs[f'{prefix}_DMA_STREAM'] - adc.dma_stream_irq = self.hw_defs[f'{prefix}_DMA_STREAM_IRQ'] - adc.dma_stream_irq_handler = self.hw_defs[f'{prefix}_DMA_STREAM_IRQHandler'] - - adc.sample_time = self.hw_defs[f'{prefix}_SAMPTIME'] - return adc - - def _parse_adcs(self): - - adcs = [] - - adc_spi = self.hw_defs.get('ADC_SPI') - if adc_spi: - #eprint('## Found SPI ADC') - adc = ADC('SPI', adc_spi) - adc.gpio_pin_miso = self.hw_defs['ADC_SPI_GPIO_PIN_MISO'] - adc.gpio_pin_mosi = self.hw_defs['ADC_SPI_GPIO_PIN_MOSI'] - adc.gpio_pin_sck = self.hw_defs['ADC_SPI_GPIO_PIN_SCK'] - adc.gpio_pin_cs = self.hw_defs['ADC_SPI_GPIO_PIN_CS'] - adcs.append(adc) - - adc_main = self._parse_adc('MAIN', 'ADC_MAIN', 'ADC') - if adc_main: - adcs.append(adc_main) - - self.ext_list = None - adc_ext = self._parse_adc('EXT', 'ADC_EXT', 'ADC_EXT') - if adc_ext: - self.ext_list = self.hw_defs['ADC_EXT_CHANNELS'] - adcs.append(adc_ext) - - return adcs - - def _parse_input_type(self, input_type, name, suffix): - - gpio = None - pin = None - d = 1 # non-inverted - - # search for SPI input first - spi_def = f'ADC_SPI_{suffix}' - if spi_def in self.hw_defs: - #eprint('## Found SPI ADC Input:', spi_def) - channel = self.hw_defs[spi_def] - return SPI_ADCInput(name, input_type, channel) - - if name != 'RTC_BAT': - pin_def = f'ADC_GPIO_PIN_{suffix}' - pin = self.hw_defs[pin_def] - gpio = self._find_gpio(pin_def) - - # check if 'pin' is maybe an alias - alias = self.hw_defs.get(pin) - if alias is not None: - alias_gpio = self._find_gpio(pin) - gpio = alias_gpio if alias_gpio else gpio - pin = alias - - channel_def = f'ADC_CHANNEL_{suffix}' - channel = self.hw_defs[channel_def] - adc = self._find_adc(channel_def) - - return ADCInput(name, input_type, adc, gpio, pin, channel) - - def _add_input(self, adc_input): - if adc_input is not None: - idx = len(self.inputs) - if adc_input.type == 'STICK': - if 'PWM_STICKS' in self.hw_defs: - ch = self.hw_defs.get(f'STICK_PWM_CHANNEL_{adc_input.name}') - adc_input.pwm_channel = idx if ch is None else ch - if adc_input.type != 'VBAT' and adc_input.type != 'RTC_BAT': - d = self.dirs[idx] - if d < 0: - adc_input.inverted = True - if adc_input.type == 'FLEX': - input_labels = self.labels[adc_input.name] - adc_input.label = input_labels.get('label') - adc_input.short_label = input_labels.get('short_label') - cfg = pot_cfg_by_target(self.target,adc_input.name) - if cfg: - adc_input.default = cfg.get('default') - - self.inputs.append(adc_input) - - def parse_inputs(self): - - self.adcs = self._parse_adcs() - self.inputs = [] - - for adc_input in self.ADC_INPUTS: - input_type = adc_input['type'] - input_range = adc_input.get('range') - - if input_range is not None: - for i in input_range: - name = adc_input['name'].format(i) - suffix = adc_input['suffix'].format(i) - try: - self._add_input(self._parse_input_type(input_type, name, suffix)) - except KeyError: - pass - else: - # type, name, suffix - name = adc_input['name'] - suffix = adc_input['suffix'] - try: - self._add_input(self._parse_input_type(input_type, name, suffix)) - except KeyError: - pass - - return { 'adcs': self.adcs, 'inputs': self.inputs } - - def find_input(self, name): - for adc_input in self.inputs: - if adc_input.name == name: - return adc_input - return None diff --git a/radio/util/hw_defs/hal_json.py b/radio/util/hw_defs/hal_json.py index 2f5fbe86379..1a43695eadc 100644 --- a/radio/util/hw_defs/hal_json.py +++ b/radio/util/hw_defs/hal_json.py @@ -1,13 +1,5 @@ import re import sys -import json - -from hal_switches import Switch, parse_switches -from hal_adc import ADCInput, SPI_ADCInput, ADC, ADCInputParser -from hal_keys import Key, Trim, parse_trims, parse_keys -from logging_dict import LoggingDict - -import legacy_names # @@ -50,45 +42,31 @@ def prune_dict(d): return d -class DictEncoder(json.JSONEncoder): - def default(self, o): - if isinstance(o, Switch): - return prune_dict(o.__dict__) - if isinstance(o, ADCInput): - return prune_dict(o.__dict__) - if isinstance(o, SPI_ADCInput): - return prune_dict(o.__dict__) - if isinstance(o, ADC): - return prune_dict(o.__dict__) - if isinstance(o, Trim): - return prune_dict(o.__dict__) - if isinstance(o, Key): - return prune_dict(o.__dict__) +# class DictEncoder(json.JSONEncoder): +# def default(self, o): +# if isinstance(o, Switch): +# return prune_dict(o.__dict__) +# if isinstance(o, ADCInput): +# return prune_dict(o.__dict__) +# if isinstance(o, SPI_ADCInput): +# return prune_dict(o.__dict__) +# if isinstance(o, ADC): +# return prune_dict(o.__dict__) +# if isinstance(o, Trim): +# return prune_dict(o.__dict__) +# if isinstance(o, Key): +# return prune_dict(o.__dict__) - # Let the base class default method raise the TypeError - return json.JSONEncoder.default(self, o) +# # Let the base class default method raise the TypeError +# return json.JSONEncoder.default(self, o) # # Parse HAL defines into JSON # def parse_defines(filename, target): - hw_defs = LoggingDict(parse_hw_defs(filename)) - out_defs = {} - - # parse ADC first, we might have switches using ADC - legacy_inputs = legacy_names.inputs_by_target(target) - adc_parser = ADCInputParser(target, hw_defs, legacy_inputs) - adc_inputs = adc_parser.parse_inputs() - out_defs["adc_inputs"] = adc_inputs - - switches = parse_switches(target, hw_defs, adc_parser) - out_defs["switches"] = switches - - keys = parse_keys(target, hw_defs) - out_defs["keys"] = keys - - trims = parse_trims(hw_defs) - out_defs["trims"] = trims - - print(json.dumps(out_defs, cls=DictEncoder, indent=2)) + # hw_defs = LoggingDict(parse_hw_defs(filename)) + # out_defs = {} + # + # print(json.dumps(out_defs, cls=DictEncoder, indent=2)) + pass diff --git a/radio/util/hw_defs/hal_keys.py b/radio/util/hw_defs/hal_keys.py deleted file mode 100644 index 8a00b0a311a..00000000000 --- a/radio/util/hw_defs/hal_keys.py +++ /dev/null @@ -1,226 +0,0 @@ - -# Trims: -# TRIMS_GPIO_REG_[trim] -# TRIMS_GPIO_PIN_[trim] -# -# where 'trim' is one of: -# -# (-) (+) -# 'LHL', 'LHR', -# 'LVD', 'LVU', -# 'RVD', 'RVU', -# 'RHL', 'RHR', -# 'LSD', 'LSU', T4 -# 'RSD', 'RSU', T5 - -TRIMS = [ - # Air - { "name": "T1", "dec": "LHL", "inc": "LHR", "input": "LH" }, - { "name": "T2", "dec": "LVD", "inc": "LVU", "input": "LV" }, - { "name": "T3", "dec": "RVD", "inc": "RVU", "input": "RV" }, - { "name": "T4", "dec": "RHL", "inc": "RHR", "input": "RH" }, - { "name": "T5", "dec": "LSD", "inc": "LSU" }, - { "name": "T6", "dec": "RSD", "inc": "RSU" }, - { "name": "T7", "dec": "T7L", "inc": "T7R" }, - { "name": "T8", "dec": "T8D", "inc": "T8U" }, - # Surface - { "name": "T1", "dec": "T1L", "inc": "T1R", "input": "ST" }, - { "name": "T2", "dec": "T2L", "inc": "T2R", "input": "TH" }, - { "name": "T3", "dec": "T3L", "inc": "T3R"}, - { "name": "T4", "dec": "T4L", "inc": "T4R"}, - { "name": "T5", "dec": "T5L", "inc": "T5R" }, - { "name": "T6", "dec": "T6D", "inc": "T6U" }, -] - -KEYS = [ - { "name": "MENU", "key": "KEY_MENU", "label": "MENU" }, - { "name": "EXIT", "key": "KEY_EXIT", "label": "EXIT" }, - { "name": "ENTER", "key": "KEY_ENTER", "label": "Enter" }, - - { "name": "PAGEUP", "key": "KEY_PAGEUP", "label": "PAGE<" }, - { "name": "PAGEDN", "key": "KEY_PAGEDN", "label": "PAGE>" }, - - { "name": "UP", "key": "KEY_UP", "label": "Up" }, - { "name": "DOWN", "key": "KEY_DOWN", "label": "Down" }, - - { "name": "LEFT", "key": "KEY_LEFT", "label": "Left" }, - { "name": "RIGHT", "key": "KEY_RIGHT", "label": "Right" }, - - { "name": "PLUS", "key": "KEY_PLUS", "label": "(+)" }, - { "name": "MINUS", "key": "KEY_MINUS", "label": "(-)" }, - - { "name": "MDL", "key": "KEY_MODEL", "label": "MDL" }, - { "name": "TELE", "key": "KEY_TELE", "label": "TELE" }, - { "name": "SYS", "key": "KEY_SYS", "label": "SYS" }, - - { "name": "SHIFT", "key": "KEY_SHIFT", "label": "Shift" } -] - -KEY_LABELS = [ - { - "targets": {"boxer", "f16", "mt12", "gx12", "pocket", "tx12", "tx12mk2", "tx16s", "v16", "zorro"}, - "keys": { - "EXIT": { "label": "RTN" } - } - }, - { - "targets": {"bumblebee", "t12max", "t14", "t15", "t20", "t20v2", "tpro", "tpros", "tprov2"}, - "keys": { - "PAGEDN": { "label": "" }, - } - }, - { - "targets": {"x7", "x7access", "x9e"}, - "keys": { - "PAGEDN": { "label": "PAGE" }, - } - }, - { - "targets": {"t16", "t18"}, - "keys": { - "EXIT": { "label": "RTN" }, - "PAGEDN": {"label": "PAGE" } - } - }, - { - "targets": {"x9d", "x9d+", "x9d+2019"}, - "keys": { - "ENTER": { "label": "ENT" }, - "PAGEDN": { "label": "PAGE" } - } - }, - { - "targets": {"x10", "x10express"}, - "keys": { - "EXIT": { "label": "RTN" }, - "PAGEDN": { "label": "PgUp/Dn" } - } - }, - { - "targets": {"x12s"}, - "keys": { - "EXIT": { "label": "RTN" }, - "PAGEUP": { "label": "PgUp" }, - "PAGEDN": { "label": "PgDn" } - } - }, - { - "targets": {"t8"}, - "keys": { - "EXIT": { "label": "RTN" }, - "ENTER": { "label": "ENT" } - } - }, - { - "targets": {"tlite"}, - "keys": { - "EXIT": { "label": "RTN" }, - "ENTER": { "label": "ENT" }, - "LEFT": { "label": "Left/SYS" }, - "RIGHT": { "label": "Right/MDL" } - } - }, - { - "targets": {"commando8"}, - "keys": { - "EXIT": { "label": "BCK" }, - "PAGEUP": { "label": "Left" }, - "PAGEDN": { "label": "Right" }, - "PLUS": { "label": "Up" }, - "MINUS": { "label": "Down" }, - "MENU": { "label": "Menu" } - } - }, - { - "targets": {"st16"}, - "keys": { - "PAGEDN": { "label": "MENU" } - } - }, -] - -class Key: - - def __init__(self, gpio, pin): - self.gpio = gpio - self.pin = pin - self.active_low = True - -class Trim: - - def __init__(self, name, dec, inc): - self.name = name - if dec and dec.gpio and inc and inc.gpio: - self.dec = dec - self.inc = inc - self.active_low = True - -def get_trim_switch(hw_defs, tag): - - gpio = f'TRIMS_GPIO_REG_{tag}' - pin = f'TRIMS_GPIO_PIN_{tag}' - - if (gpio in hw_defs) and (pin in hw_defs): - key = Key(hw_defs[gpio], hw_defs[pin]) - if 'TRIMS_GPIO_ACTIVE_HIGH' in hw_defs: - key.active_low = False - return key - - return None - - -def parse_trims(hw_defs): - - trims = [] - for t in TRIMS: - - name = t['name'] - dec = get_trim_switch(hw_defs, t['dec']) - inc = get_trim_switch(hw_defs, t['inc']) - - if dec and inc: - trims.append(Trim(name, dec, inc)) - - elif t.get('input'): - input = t['input'] - if f'TRIMS_VIRTUAL_{input}' in hw_defs: - trims.append(Trim(name, None, None)) - - return trims - - -def key_label(target, name): - for d in KEY_LABELS: - if target in d['targets']: - keys = d.get('keys') - key = keys.get(name) - if key: - return key['label'] - - return None - - -def parse_keys(target, hw_defs): - - keys = [] - - for k in KEYS: - - name = k['name'] - gpio = f'KEYS_GPIO_REG_{name}' - pin = f'KEYS_GPIO_PIN_{name}' - - if (gpio in hw_defs) and (pin in hw_defs): - key = Key(hw_defs[gpio], hw_defs[pin]) - key.key = k['key'] - key.name = name - label = key_label(target, name) - if label: - key.label = label - else: - key.label = k['label'] - if 'KEYS_GPIO_ACTIVE_HIGH' in hw_defs: - key.active_low = False - keys.append(key) - - return keys diff --git a/radio/util/hw_defs/hal_switches.py b/radio/util/hw_defs/hal_switches.py deleted file mode 100644 index 7d1a40fb511..00000000000 --- a/radio/util/hw_defs/hal_switches.py +++ /dev/null @@ -1,140 +0,0 @@ -from switch_config import switch_cfg_by_target - -class Switch: - TYPE_2POS = "2POS" - TYPE_3POS = "3POS" - TYPE_ADC = "ADC" - - def __init__(self, name, sw_type, flags): - self.name = name - self.type = sw_type - self.flags = flags - self.inverted = False - self.default = None - self.display = None - - -class Switch2POS(Switch): - def __init__(self, name, gpio, pin, flags=0): - super(Switch2POS, self).__init__(name, Switch.TYPE_2POS, flags) - self.gpio = gpio - self.pin = pin - - -class Switch3POS(Switch): - def __init__(self, name, gpio_high, pin_high, gpio_low, pin_low, flags=0): - super(Switch3POS, self).__init__(name, Switch.TYPE_3POS, flags) - self.gpio_high = gpio_high - self.pin_high = pin_high - self.gpio_low = gpio_low - self.pin_low = pin_low - - -class SwitchADC(Switch): - def __init__(self, name, adc_input, flags=0): - super(SwitchADC, self).__init__(name, Switch.TYPE_ADC, flags) - self.adc_input = adc_input - - -class SwitchCustom(Switch): - def __init__(self, name, type, flags=0): - super(SwitchCustom, self).__init__(name, type, flags) - - -def AZ_seq(): - return [chr(i) for i in range(ord("A"), ord("Z") + 1)] - - -def eprint(*args, **kwargs): - from sys import stderr - - print(*args, file=stderr, **kwargs) - - -def prefixsearch(dictionary, prefix): - for k in dictionary.keys(): - if k.startswith(prefix): - return k[len(prefix) :] - - return None - - -# switches from A to Z -def parse_switches(target, hw_defs, adc_parser): - switches = [] - - def find_switch(name): - for sw in switches: - if name == sw.name: - return sw - return None - - for s in AZ_seq(): - name = f"S{s}" - - reg = f"SWITCHES_GPIO_REG_{s}" - reg_high = f"{reg}_H" - reg_low = f"{reg}_L" - - pin = f"SWITCHES_GPIO_PIN_{s}" - pin_high = f"{pin}_H" - pin_low = f"{pin}_L" - - inverted = f"SWITCHES_{s}_INVERTED" - - adc_input_name = f"SW{s}" - custom = f"SWITCHES_{s}_" - - cfs_idx = f"SWITCHES_{s}_CFS_IDX" - - switch = None - if reg in hw_defs: - # 2POS switch - reg = hw_defs[reg] - pin = hw_defs[pin] - switch = Switch2POS(name, reg, pin) - elif (reg_high in hw_defs) and (reg_low in hw_defs): - # 3POS switch - reg_high = hw_defs[reg_high] - pin_high = hw_defs[pin_high] - reg_low = hw_defs[reg_low] - pin_low = hw_defs[pin_low] - switch = Switch3POS(name, reg_high, pin_high, reg_low, pin_low) - elif adc_parser.find_input(adc_input_name): - # ADC switch - switch = SwitchADC(name, adc_input_name) - else: - type = prefixsearch(hw_defs, custom) - if type is not None: - switch = SwitchCustom(name, type) - - if switch: - if inverted in hw_defs: - switch.inverted = True - - if cfs_idx in hw_defs: - switch.is_cfs = True - switch.cfs_idx = hw_defs[cfs_idx] - else: - switch.is_cfs = False - - cfg = switch_cfg_by_target(target, name) - if cfg: - switch.default = cfg.get("default") - switch.display = cfg.get("display") - else: - switch.default = "NONE" - - switches.append(switch) - - for i in range(1, 6 + 1): - f_sw_marker = f"FUNCTION_SWITCH_{i}" - if f_sw_marker in hw_defs: - switch = find_switch(hw_defs[f_sw_marker]) - if switch: - switch.name = f"SW{i}" - else: - switch = SwitchCustom(f"SW{i}", Switch.TYPE_2POS) - switches.append(switch) - - return switches diff --git a/radio/util/hw_defs/json_validator.py b/radio/util/hw_defs/json_validator.py new file mode 100644 index 00000000000..4bb57e09c84 --- /dev/null +++ b/radio/util/hw_defs/json_validator.py @@ -0,0 +1,116 @@ +from json import JSONDecodeError +from pathlib import Path +from typing import List, Tuple +from typing_extensions import Type + +from pydantic import BaseModel, ValidationError + + +def validate_json_files( + directory: str, model_class: Type[BaseModel] +) -> Tuple[List[str], List[Tuple[str, str]]]: + """ + Validate all JSON files in a directory against a Pydantic model. + + Args: + directory: Path to the directory containing JSON files + model_class: Pydantic model class to validate against + + Returns: + Tuple of (valid_files, invalid_files_with_errors) + """ + directory_path = Path(directory) + + if not directory_path.exists(): + raise FileNotFoundError(f"Directory {directory} does not exist") + + valid_files = [] + invalid_files = [] + + # Find all JSON files in the directory + json_files = list(directory_path.glob("*.json")) + + if not json_files: + print(f"No JSON files found in {directory}") + return valid_files, invalid_files + + print(f"Found {len(json_files)} JSON files to validate") + + for json_file in json_files: + try: + # Read the JSON file + with open(json_file, "r", encoding="utf-8") as f: + json_data = f.read() + + # Validate against given model + model_class.model_validate_json(json_data) + + valid_files.append(str(json_file)) + print(f"✓ {json_file.name} - Valid") + + except ValidationError as e: + error_msg = str(e) + invalid_files.append((str(json_file), error_msg)) + print(f"✗ {json_file.name} - Validation Error:") + print(f" {error_msg}") + + except JSONDecodeError as e: + error_msg = f"Invalid JSON syntax: {e}" + invalid_files.append((str(json_file), error_msg)) + print(f"✗ {json_file.name} - JSON Decode Error:") + print(f" {error_msg}") + + except Exception as e: + error_msg = f"Unexpected error: {e}" + invalid_files.append((str(json_file), error_msg)) + print(f"✗ {json_file.name} - Unexpected Error:") + print(f" {error_msg}") + + return valid_files, invalid_files + + +def main(): + """Main function to run the validation""" + import argparse + + parser = argparse.ArgumentParser( + description="Validate JSON files against HardwareDefinition model" + ) + parser.add_argument( + "-v", "--verbose", action="store_true", help="Show detailed error messages" + ) + parser.add_argument( + "directory", help="Path to directory containing JSON files to validate" + ) + + args = parser.parse_args() + + try: + from models import HardwareDefinition + + valid_files, invalid_files = validate_json_files( + args.directory, HardwareDefinition + ) + + print("\n=== Validation Summary ===") + print(f"Total files processed: {len(valid_files) + len(invalid_files)}") + print(f"Valid files: {len(valid_files)}") + print(f"Invalid files: {len(invalid_files)}") + + if invalid_files: + print("\nInvalid files:") + for file_path, error in invalid_files: + if args.verbose: + print(f" - {Path(file_path).name}: {error}") + else: + print(f" - {Path(file_path).name}") + + return 0 if not invalid_files else 1 + + except Exception as e: + print(f"Error during validation: {e}") + return 1 + + +if __name__ == "__main__": + exit(main()) diff --git a/radio/util/hw_defs/models.py b/radio/util/hw_defs/models.py new file mode 100644 index 00000000000..0b837cb0946 --- /dev/null +++ b/radio/util/hw_defs/models.py @@ -0,0 +1,188 @@ +from enum import Enum +from typing_extensions import List, Literal, Optional, Tuple, Union + +from pydantic import BaseModel +from pydantic_core import from_json + + +class StrEnum(str, Enum): + @staticmethod + def _generate_next_value_(name, start, count, last_values): + return name + + def __str__(self) -> str: + return self.value + + +ADCNameType = Literal["MAIN", "EXT", "SPI"] + + +class ADC(BaseModel): + name: ADCNameType + adc: str + sample_time: Optional[str] = None + dma: Optional[str] = None + dma_channel: Optional[str] = None + dma_stream: Optional[str] = None + dma_stream_irq: Optional[str] = None + dma_stream_irq_handler: Optional[str] = None + + +StickEnum = StrEnum( + "StickEnum", + ( + # 2 Gimbal radios + "LH", + "LV", + "RV", + "RH", + # Surface radios + "ST", + "TH", + ), +) + +MAX_POTS = 8 +MAX_SLIDERS = 8 +MAX_EXT = 16 +MAX_RAW = 8 + +InputEnum = StrEnum( + "InputEnum", + ( + [f"P{i}" for i in range(1, MAX_POTS)] + + [f"SL{i}" for i in range(1, MAX_SLIDERS)] + + [f"EXT{i}" for i in range(1, MAX_EXT)] + + [f"SW{chr(i)}" for i in range(ord("A"), ord("Z") + 1)] + + [f"RAW{i}" for i in range(1, MAX_RAW)] + + ["JSx", "JSy"] + + ["VBAT", "RTC_BAT"] + ), +) + +InputNameType = Union[StickEnum, InputEnum] + +InputType = StrEnum( + "InputType", + ( + "STICK", + "FLEX", + "SWITCH", + "VBAT", + "RTC_BAT", + "RAW", + ), +) + +FlexType = StrEnum( + "FlexType", + ( + "NONE", + "POT", + "POT_CENTER", + "SLIDER", + "MULTIPOS", + "AXIS_X", + "AXIS_Y", + ), +) + + +class Input(BaseModel): + name: InputNameType + type: InputType + adc: Optional[ADCNameType] = None + gpio: Optional[str] = None + pin: Optional[str] = None + channel: Optional[Union[str, int]] = None + inverted: Optional[bool] = False + label: Optional[str] = None + short_label: Optional[str] = None + default: Optional[FlexType] = None + + +class ADCInputs(BaseModel): + adcs: List[ADC] + inputs: List[Input] + + +# MUST be the same order as 'EnumKeys' +KeyEnum = StrEnum( + "KeyEnum", + ( + "KEY_MENU", + "KEY_EXIT", + "KEY_ENTER", + "KEY_PAGEUP", + "KEY_PAGEDN", + "KEY_UP", + "KEY_DOWN", + "KEY_LEFT", + "KEY_RIGHT", + "KEY_PLUS", + "KEY_MINUS", + "KEY_MODEL", + "KEY_TELE", + "KEY_SYS", + "KEY_SHIFT", + "KEY_BIND", + ), +) + + +class Key(BaseModel): + name: str + label: str + key: KeyEnum + active_low: Optional[bool] = False + gpio: Optional[str] = None + pin: Optional[str] = None + + +SwitchHardwareTypeEnum = StrEnum( + "SwitchTypeEnum", + ( + "2POS", + "3POS", + "ADC", + "FSWITCH", + ), +) + +SwitchTypeEnum = StrEnum( + "SwitchTypeEnum", + ( + "2POS", + "3POS", + "TOGGLE", + "NONE", + ), +) + +SwitchDisplayType = Union[Tuple[int, int], Tuple] + + +class Switch(BaseModel): + name: str + type: SwitchHardwareTypeEnum + default: Optional[SwitchTypeEnum] = SwitchTypeEnum.NONE + flags: Optional[int] = 0 + inverted: Optional[bool] = False + adc_input: Optional[str] = None + gpio: Optional[str] = None + pin: Optional[str] = None + gpio_high: Optional[str] = None + pin_high: Optional[str] = None + gpio_low: Optional[str] = None + pin_low: Optional[str] = None + display: Optional[SwitchDisplayType] = None + + +class HardwareDefinition(BaseModel): + adc_inputs: ADCInputs + switches: List[Switch] + keys: List[Key] + + @staticmethod + def from_json(data: str | bytes | bytearray) -> "HardwareDefinition": + return HardwareDefinition.model_validate(from_json(data)) diff --git a/radio/util/hw_defs/pot_config.py b/radio/util/hw_defs/pot_config.py deleted file mode 100644 index 174a9f7cf50..00000000000 --- a/radio/util/hw_defs/pot_config.py +++ /dev/null @@ -1,280 +0,0 @@ -"""Default configuration of pots and sliders for each target.""" - -POT_CONFIG = { - "boxer": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "P3": {"default": "MULTIPOS"} - }, - "gx12": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "el18": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "nv14": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "pl18": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"}, - "P3": {"default": "POT"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "pl18ev": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - "EXT1": {"default": "POT_CENTER"}, - "EXT2": {"default": "POT_CENTER"}, - "EXT3": {"default": "MULTIPOS"}, - "EXT4": {"default": "MULTIPOS"} - }, - "pl18u": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "nb4p": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"} - }, - "v12": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "P3": {"default": "MULTIPOS"}, - }, - "v14": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "P3": {"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"}, - "P3": {"default": "NONE"}, - "P4": {"default": "NONE"} - }, - "tpro": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "tprov2": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "tpros": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "bumblebee": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "t20": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - "SL3": {"default": "SLIDER"}, - "SL4": {"default": "SLIDER"}, - }, - "t20v2": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - "SL3": {"default": "SLIDER"}, - "SL4": {"default": "SLIDER"}, - }, - "t12": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"} - }, - "t12max": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "t14": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "tx12": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "tx12mk2": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "t15": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - }, - "t16": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "t18": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "tx15": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"}, - }, - "tx16s": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "f16": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x7": { - "P1": {"default": "POT"}, - "P2": {"default": "POT_CENTER"} - }, - "x7access": { - "P1": {"default": "POT"}, - "P2": {"default": "POT_CENTER"} - }, - "x9d": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x9d+": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x9d+2019": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x9e": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "P3": {"default": "NONE"}, - "P4": {"default": "NONE"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - "SL3": {"default": "SLIDER"}, - "SL4": {"default": "SLIDER"} - }, - "x10": { - "P1": {"default": "POT"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x10express": { - "P1": {"default": "POT"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x12s": { - "P1": {"default": "POT"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - "SL3": {"default": "SLIDER"}, - "SL4": {"default": "SLIDER"}, - "JSx": {"default": "AXIS_X"}, - "JSy": {"default": "AXIS_Y"} - }, - "xlite": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"} - }, - "xlites": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"} - }, - "x9lite": { - "P1": {"default": "POT_CENTER"}, - }, - "x9lites": { - "P1": {"default": "POT_CENTER"}, - }, - "zorro": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"} - }, - "pocket": { - "P1": {"default": "POT"} - }, - "st16": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - }, - "pa01": { - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - }, -} - - -def pot_cfg_by_target(target, name): - """Retrieve default pot config. - - Parameters - ---------- - target: str - Name of the target - name: str - Canonical name of the pot (Px where 'x' is a number) - or slider (SLx where 'x' is a number) - - Returns - ------- - dict - a dictionary with one key for each pot or slider that mapped - to another dictionary with a single attribute ("default") containing - the default configuration for a pot or slider - """ - sw = POT_CONFIG.get(target) - if sw: - return sw.get(name) - - return None diff --git a/radio/util/hw_defs/switch_config.py b/radio/util/hw_defs/switch_config.py deleted file mode 100644 index f12011f9145..00000000000 --- a/radio/util/hw_defs/switch_config.py +++ /dev/null @@ -1,636 +0,0 @@ -"""Default switches configurations and display positions.""" - -SWITCH_CONFIG = { - "boxer": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SG": {"default": "2POS", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]}, - "SF": {"default": "TOGGLE", "display": [1, 2]}, - "SH": {"default": "2POS", "display": [1, 3]}, - }, - "gx12": { - # left side - "SA": {"default": "TOGGLE"}, - "SB": {"default": "3POS", "display": [0, 0]}, - "SE": {"default": "3POS", "display": [0, 1]}, - "SG": {"default": "TOGGLE", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE"}, - "SF": {"default": "3POS", "display": [1, 1]}, - "SH": {"default": "TOGGLE", "display": [1, 2]}, - # custom switches - "SI": {"default": "2POS"}, - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - }, - "commando8": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "el18": { - "SA": { "default": "2POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "3POS" }, - "SD": { "default": "2POS" }, - "SE": { "default": "2POS" }, - "SF": { "default": "3POS" }, - "SG": { "default": "3POS" }, - "SH": { "default": "TOGGLE" } - }, - "pl18": { - "SA": { "default": "2POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "2POS" }, - "SD": { "default": "3POS" }, - "SE": { "default": "3POS" }, - "SF": { "default": "2POS" }, - "SG": { "default": "3POS" }, - "SH": { "default": "TOGGLE" } - }, - "pl18ev": { - "SA": { "default": "2POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "2POS" }, - "SD": { "default": "3POS" }, - "SE": { "default": "3POS" }, - "SF": { "default": "2POS" }, - "SG": { "default": "3POS" }, - "SH": { "default": "3POS" }, - "SI": { "default": "3POS" }, - "SJ": { "default": "3POS" } - }, - "pl18u": { - "SA": { "default": "3POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "3POS" }, - "SD": { "default": "3POS" }, - "SE": { "default": "3POS" }, - "SF": { "default": "3POS" }, - "SG": { "default": "3POS" }, - "SH": { "default": "TOGGLE" } - }, - "nb4p": { - "SA" : { "default": "TOGGLE" }, - "SB" : { "default": "TOGGLE" } - }, - "st16": { - "SA": { "default": "2POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "3POS" }, - "SD": { "default": "2POS" }, - "SE": { "default": "2POS" }, - "SF": { "default": "2POS" }, - "SG": { "default": "TOGGLE" }, - "SH": { "default": "TOGGLE" }, - "SI": { "default": "TOGGLE" }, - "SJ": { "default": "TOGGLE" }, - # custom switches - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - "SO": {"default": "2POS"}, - "SP": {"default": "2POS"}, - }, - "pa01": { - "SA": { "default": "2POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "3POS" }, - "SD": { "default": "TOGGLE" }, - "SE": { "default": "TOGGLE" }, - "SF": { "default": "TOGGLE" }, - # custom switches - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - }, - "lr3pro": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "nv14": { - "SA": {"default": "2POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "TOGGLE"}, - "SD": {"default": "2POS"}, - "SE": {"default": "TOGGLE"}, - "SF": {"default": "3POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "v12": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SF": {"default": "TOGGLE", "display": [1, 2]}, - }, - "v14": { - # left side - "SA": {"default": "TOGGLE", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "TOGGLE", "display": [1, 2]}, - }, - "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 ] }, - "SB": { "default": "TOGGLE", "display": [ 0, 1 ] }, - # right side - "SC": { "default": "TOGGLE", "display": [ 1, 0 ] }, - "SD": { "default": "TOGGLE", "display": [ 1, 1 ] }, - }, - "t8": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "t12": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SG": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SH": {"default": "2POS", "display": [1, 2]} - }, - "t12max": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]} - }, - "t14": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SF": {"default": "TOGGLE", "display": [1, 2]} - }, - "t15": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "2POS"}, - "SF": {"default": "2POS"}, - # custom switches - "SG": {"default": "2POS"}, - "SH": {"default": "2POS"}, - "SI": {"default": "2POS"}, - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - }, - "t16": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "t18": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "tlite": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "2POS", "display": [0, 1]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "tlitef4": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "2POS", "display": [0, 1]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "tpro": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "TOGGLE", "display": [0, 1]}, - "SE": {"default": "NONE", "display": [0, 2]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "NONE", "display": [1, 2]}, - # custom switches - "SG": {"default": "2POS"}, - "SH": {"default": "2POS"}, - "SI": {"default": "2POS"}, - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - }, - "tprov2": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "TOGGLE", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - "SG": {"default": "NONE", "display": [0, 3]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - "SH": {"default": "NONE", "display": [1, 3]}, - # custom switches - "SI": {"default": "2POS"}, - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - }, - "tpros": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "TOGGLE", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - }, - "bumblebee": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "TOGGLE", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - "SG": {"default": "TOGGLE", "display": [0, 3]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]}, - # custom switches - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SO": {"default": "2POS"}, - "SP": {"default": "2POS"}, - }, - "t20": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - "SG": {"default": "TOGGLE", "display": [0, 3]}, - "SI": {"default": "TOGGLE", "display": [0, 4]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]}, - "SJ": {"default": "TOGGLE", "display": [1, 4]}, - # custom switches - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - "SO": {"default": "2POS"}, - "SP": {"default": "2POS"}, - }, - "t20v2": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - "SG": {"default": "TOGGLE", "display": [0, 3]}, - "SI": {"default": "TOGGLE", "display": [0, 4]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]}, - "SJ": {"default": "TOGGLE", "display": [1, 4]}, - # custom switches - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - "SO": {"default": "2POS"}, - "SP": {"default": "2POS"}, - }, - "tx12": { - # left side - "SA": {"default": "TOGGLE", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SG": {"default": "NONE", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "3POS", "display": [1, 2]}, - "SH": {"default": "NONE", "display": [1, 3]} - }, - "tx15": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "2POS"}, - "SF": {"default": "TOGGLE"}, - # custom switches - "SG": {"default": "2POS"}, - "SH": {"default": "2POS"}, - "SI": {"default": "2POS"}, - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - }, - "tx16s": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "f16": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "tx12mk2": { - # left side - "SA": {"default": "TOGGLE", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "3POS", "display": [1, 2]}, - }, - "x7": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SF": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SH": {"default": "TOGGLE", "display": [1, 2]}, - # optional - "SI": {"default": "NONE", "display": [0, 3]}, - "SJ": {"default": "NONE", "display": [0, 3]}, - }, - "x7access": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SF": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SH": {"default": "TOGGLE", "display": [1, 2]}, - # optional - "SI": {"default": "NONE", "display": [0, 3]}, - "SJ": {"default": "NONE", "display": [0, 3]}, - }, - "x9d": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SF": {"default": "2POS", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SG": {"default": "3POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]} - }, - "x9d+": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SF": {"default": "2POS", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SG": {"default": "3POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]} - }, - "x9d+2019": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SF": {"default": "2POS", "display": [0, 3]}, - "SI": {"default": "TOGGLE", "display": [0, 4]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SG": {"default": "3POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]} - }, - "x9e": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SF": {"default": "2POS", "display": [0, 3]}, - # extra - "SI": {"default": "NONE", "display": [0, 4]}, - "SK": {"default": "NONE", "display": [0, 5]}, - "SM": {"default": "NONE", "display": [0, 6]}, - "SO": {"default": "NONE", "display": [0, 7]}, - "SQ": {"default": "NONE", "display": [0, 8]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SH": {"default": "3POS", "display": [1, 2]}, - "SG": {"default": "TOGGLE", "display": [1, 3]}, - # extra - "SJ": {"default": "NONE", "display": [1, 4]}, - "SL": {"default": "NONE", "display": [1, 5]}, - "SN": {"default": "NONE", "display": [1, 6]}, - "SP": {"default": "NONE", "display": [1, 7]}, - "SR": {"default": "NONE", "display": [1, 8]} - }, - "xlite": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "xlites": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "TOGGLE", "display": [0, 2]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]}, - "SF": {"default": "TOGGLE", "display": [1, 2]} - }, - "x9lite": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SD": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SE": {"default": "TOGGLE", "display": [1, 1]} - }, - "x9lites": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SD": {"default": "2POS", "display": [0, 2]}, - "SF": {"default": "TOGGLE", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 1]}, - "SE": {"default": "TOGGLE", "display": [1, 2]}, - "SG": {"default": "TOGGLE", "display": [1, 3]} - }, - "x10": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"}, - "SI": {"default": "NONE"}, - "SJ": {"default": "NONE"} - }, - "x12s": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"}, - "SI": {"default": "NONE"}, - "SJ": {"default": "NONE"} - }, - "x10express": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "zorro": { - # left side - "SB": {"default": "3POS", "display": [0, 0]}, - "SA": {"default": "TOGGLE", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - "SG": {"default": "TOGGLE", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]}, - }, - "pocket": { - # left side - "SA": { "default": "2POS", "display": [ 0, 0 ] }, - "SB": { "default": "3POS", "display": [ 0, 1 ] }, - "SE": { "default": "TOGGLE", "display": [ 0, 2 ] }, - # right side - "SD": { "default": "2POS", "display": [ 1, 0 ] }, - "SC": { "default": "3POS", "display": [ 1, 1 ] }, - }, -} - - -def switch_cfg_by_target(target, name): - """Retrieve default switches config. - - Parameters - ---------- - target: str - Name of the target - name: str - Canonical switch name (Sx where 'x' is a capital letter) - - Returns - ------- - dict - a dictionary with one key for each pot or slider that mapped - to another dictionary with a "default" attribute containing - the default switches configuration. On 'stdlcd' targets, a - 'display' 2 dimensional array defining the switch's position - on screen. - """ - sw = SWITCH_CONFIG.get(target) - if sw: - return sw.get(name) - - return None From e984693d830cf04b7ed4885cf75f634abf912043 Mon Sep 17 00:00:00 2001 From: Raphael <1050031+raphaelcoeffic@users.noreply.github.com> Date: Mon, 14 Jul 2025 04:33:12 +0000 Subject: [PATCH 15/49] fix: compat Python 3.8 --- radio/util/hw_defs/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/util/hw_defs/models.py b/radio/util/hw_defs/models.py index 0b837cb0946..f065bd6ef91 100644 --- a/radio/util/hw_defs/models.py +++ b/radio/util/hw_defs/models.py @@ -184,5 +184,5 @@ class HardwareDefinition(BaseModel): keys: List[Key] @staticmethod - def from_json(data: str | bytes | bytearray) -> "HardwareDefinition": + def from_json(data: Union[str, bytes, bytearray]) -> "HardwareDefinition": return HardwareDefinition.model_validate(from_json(data)) From f3a6922f4a1ebc0b019ba61781a98c54246c525c Mon Sep 17 00:00:00 2001 From: Raphael <1050031+raphaelcoeffic@users.noreply.github.com> Date: Mon, 14 Jul 2025 04:48:07 +0000 Subject: [PATCH 16/49] fix(ci): add missing pydantic --- .github/workflows/macosx_cpn.yml | 2 +- .github/workflows/win_cpn-64.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/macosx_cpn.yml b/.github/workflows/macosx_cpn.yml index 268275478f1..324d2c33f65 100644 --- a/.github/workflows/macosx_cpn.yml +++ b/.github/workflows/macosx_cpn.yml @@ -67,7 +67,7 @@ jobs: cache-key-prefix: 'install-qt-action-macOS' - name: Install dependencies - run: python3 -m pip install --upgrade pip Pillow lz4 clang jinja2 + run: python3 -m pip install --upgrade pip Pillow lz4 clang jinja2 pydantic - name: Install libusb run: brew install libusb diff --git a/.github/workflows/win_cpn-64.yml b/.github/workflows/win_cpn-64.yml index e5cbcd7ca13..ed67e98fb77 100644 --- a/.github/workflows/win_cpn-64.yml +++ b/.github/workflows/win_cpn-64.yml @@ -69,7 +69,7 @@ jobs: - name: Install Python Dependencies run: | echo $PATH - $Python3_ROOT_DIR/python3.exe -m pip install clang jinja2 lz4 pillow + $Python3_ROOT_DIR/python3.exe -m pip install clang jinja2 lz4 pillow pydantic - name: Setup dfu-util and libusb run: | From d307eb4b61b04c26acaafa0c8744e047090e45c7 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Mon, 14 Jul 2025 08:43:04 +0200 Subject: [PATCH 17/49] feat: better hardware definition type checking --- radio/util/hw_defs/models.py | 143 ++++++++++++++++++++++++++++++++--- 1 file changed, 131 insertions(+), 12 deletions(-) diff --git a/radio/util/hw_defs/models.py b/radio/util/hw_defs/models.py index f065bd6ef91..58f6864bdc0 100644 --- a/radio/util/hw_defs/models.py +++ b/radio/util/hw_defs/models.py @@ -1,8 +1,8 @@ from enum import Enum from typing_extensions import List, Literal, Optional, Tuple, Union -from pydantic import BaseModel -from pydantic_core import from_json +from pydantic import BaseModel, model_validator +from pydantic_core import from_json, PydanticCustomError class StrEnum(str, Enum): @@ -47,20 +47,24 @@ class ADC(BaseModel): MAX_EXT = 16 MAX_RAW = 8 -InputEnum = StrEnum( - "InputEnum", +FlexInputEnum = StrEnum( + "FlexInputEnum", ( [f"P{i}" for i in range(1, MAX_POTS)] + [f"SL{i}" for i in range(1, MAX_SLIDERS)] + [f"EXT{i}" for i in range(1, MAX_EXT)] - + [f"SW{chr(i)}" for i in range(ord("A"), ord("Z") + 1)] - + [f"RAW{i}" for i in range(1, MAX_RAW)] + ["JSx", "JSy"] - + ["VBAT", "RTC_BAT"] ), ) -InputNameType = Union[StickEnum, InputEnum] +SwitchInputEnum = StrEnum( + "SwitchInputEnum", + list([f"SW{chr(i)}" for i in range(ord("A"), ord("Z") + 1)]), +) + +RawInputEnum = StrEnum("RawInputEnum", list([f"RAW{i}" for i in range(1, MAX_RAW)])) + +InputNameType = Union[StickEnum, FlexInputEnum, SwitchInputEnum, RawInputEnum] InputType = StrEnum( "InputType", @@ -88,17 +92,65 @@ class ADC(BaseModel): ) -class Input(BaseModel): - name: InputNameType - type: InputType +class StickInput(BaseModel): + name: StickEnum + type: Literal["STICK"] adc: Optional[ADCNameType] = None gpio: Optional[str] = None pin: Optional[str] = None channel: Optional[Union[str, int]] = None inverted: Optional[bool] = False + + +class FlexInput(BaseModel): + name: FlexInputEnum + type: Literal["FLEX"] + adc: ADCNameType + gpio: Optional[str] = None + pin: Optional[str] = None + channel: Optional[Union[str, int]] = None + inverted: Optional[bool] = False + default: Optional[FlexType] = FlexType.NONE label: Optional[str] = None short_label: Optional[str] = None - default: Optional[FlexType] = None + + +class SwitchInput(BaseModel): + name: SwitchInputEnum + type: Literal["SWITCH"] + adc: ADCNameType + gpio: Optional[str] = None + pin: Optional[str] = None + channel: Optional[Union[str, int]] = None + inverted: Optional[bool] = False + + +class RawInput(BaseModel): + name: RawInputEnum + type: Literal["RAW"] + adc: ADCNameType + gpio: Optional[str] = None + pin: Optional[str] = None + channel: Optional[Union[str, int]] = None + + +class VBatInput(BaseModel): + name: Literal["VBAT"] + type: Literal["VBAT"] + adc: ADCNameType + gpio: Optional[str] = None + pin: Optional[str] = None + channel: Optional[Union[str, int]] = None + + +class RTCBatInput(BaseModel): + name: Literal["RTC_BAT"] + type: Literal["RTC_BAT"] + adc: Literal["MAIN", "EXT"] + channel: str + + +Input = Union[StickInput, FlexInput, SwitchInput, RawInput, VBatInput, RTCBatInput] class ADCInputs(BaseModel): @@ -138,6 +190,16 @@ class Key(BaseModel): gpio: Optional[str] = None pin: Optional[str] = None + @model_validator(mode="after") + def check_hardware(self: "Key") -> "Key": + if bool(self.gpio) != bool(self.pin): + raise PydanticCustomError( + "KeyHardwareError", + "Key missing either 'gpio' or 'pin'", + ) + + return self + SwitchHardwareTypeEnum = StrEnum( "SwitchTypeEnum", @@ -177,6 +239,63 @@ class Switch(BaseModel): pin_low: Optional[str] = None display: Optional[SwitchDisplayType] = None + def _uses_single_gpio(self: "Switch") -> bool: + return bool(self.gpio or self.pin) + + def _uses_two_gpios(self: "Switch") -> bool: + return bool(self.gpio_high or self.pin_high or self.gpio_low or self.pin_low) + + def _uses_gpio(self: "Switch") -> bool: + return self._uses_single_gpio() or self._uses_two_gpios() + + @model_validator(mode="after") + def check_hardware(self: "Switch") -> "Switch": + if bool(self.adc_input) == self._uses_gpio(): + if self.adc_input: + raise PydanticCustomError( + "SwitchHardwareError", + "A switch is either using ADC or it's own GPIO pin(s)", + ) + + if self._uses_gpio() and (self._uses_single_gpio() == self._uses_two_gpios()): + raise PydanticCustomError( + "SwitchHardwareError", + "A switch based on GPIO pin(s) uses either a single or two GPIOs", + ) + + if self._uses_single_gpio(): + if not self.gpio or not self.pin: + raise PydanticCustomError( + "SwitchHardwareError", + "Switch missing either 'gpio' or 'pin'", + ) + if str(self.type) not in ["2POS", "FSWITCH"]: + raise PydanticCustomError( + "SwitchHardwareError", + "Single GPIO switch type is either '2POS' or 'FSWITCH'", + ) + # TODO: check 'default' as well? + + if self._uses_two_gpios(): + if ( + not self.gpio_high + or not self.pin_high + or not self.gpio_low + or not self.pin_low + ): + raise PydanticCustomError( + "SwitchHardwareError", + "Switch missing 'gpio_high' or 'pin_high' or 'gpio_low' or 'pin_low'", + ) + if str(self.type) != "3POS": + raise PydanticCustomError( + "SwitchHardwareError", + "Dual GPIO switch type is always '3POS", + ) + # TODO: check 'default' as well? + + return self + class HardwareDefinition(BaseModel): adc_inputs: ADCInputs From 93d847ea9de8b4fcbb4be1187d42e0c5dd796401 Mon Sep 17 00:00:00 2001 From: philmoz Date: Mon, 14 Jul 2025 19:14:30 +1000 Subject: [PATCH 18/49] Fix PGUP key logic. Cleanup color text & number edit. --- .../src/gui/colorlcd/libui/keyboard_base.cpp | 6 ++++ radio/src/gui/colorlcd/libui/keyboard_base.h | 1 + .../gui/colorlcd/libui/keyboard_number.cpp | 34 ++++--------------- .../src/gui/colorlcd/libui/keyboard_number.h | 2 -- .../src/gui/colorlcd/libui/keyboard_text.cpp | 34 ++++--------------- radio/src/keys.cpp | 2 +- 6 files changed, 21 insertions(+), 58 deletions(-) diff --git a/radio/src/gui/colorlcd/libui/keyboard_base.cpp b/radio/src/gui/colorlcd/libui/keyboard_base.cpp index 07e4c31abea..e2c500ba02f 100644 --- a/radio/src/gui/colorlcd/libui/keyboard_base.cpp +++ b/radio/src/gui/colorlcd/libui/keyboard_base.cpp @@ -84,6 +84,12 @@ static void _assign_lv_group(lv_group_t* g) Keyboard::Keyboard(coord_t height) : NavWindow(MainWindow::instance(), {0, LCD_H - height, LCD_W, height}) { +#if defined(USE_HATS_AS_KEYS) + hasTwoPageKeys = true; +#else + hasTwoPageKeys = (keysGetSupported() & (1 << KEY_PAGEUP)); +#endif + lv_obj_set_parent(lvobj, lv_layer_top()); // the keyboard is always on top // use a separate group for the keyboard diff --git a/radio/src/gui/colorlcd/libui/keyboard_base.h b/radio/src/gui/colorlcd/libui/keyboard_base.h index cf670073f7c..5b7697a2fdd 100644 --- a/radio/src/gui/colorlcd/libui/keyboard_base.h +++ b/radio/src/gui/colorlcd/libui/keyboard_base.h @@ -36,6 +36,7 @@ class Keyboard : public NavWindow protected: static Keyboard *activeKeyboard; + bool hasTwoPageKeys; lv_group_t* group = nullptr; lv_obj_t* keyboard = nullptr; diff --git a/radio/src/gui/colorlcd/libui/keyboard_number.cpp b/radio/src/gui/colorlcd/libui/keyboard_number.cpp index de9efde635c..38609b85303 100644 --- a/radio/src/gui/colorlcd/libui/keyboard_number.cpp +++ b/radio/src/gui/colorlcd/libui/keyboard_number.cpp @@ -111,36 +111,14 @@ void NumberKeyboard::changeSign() #if defined(HARDWARE_KEYS) -#if (defined(KEYS_GPIO_REG_PAGEUP) || defined(USE_HATS_AS_KEYS)) && \ - !defined(PCBX12S) -// Radios with both PGUP and PGDN buttons except X12S -void NumberKeyboard::onPressSYS() { decLarge(); } +void NumberKeyboard::onPressSYS() { if (hasTwoPageKeys) decLarge(); else decSmall(); } void NumberKeyboard::onLongPressSYS() { setMIN(); } void NumberKeyboard::onPressMDL() { incLarge(); } -void NumberKeyboard::onLongPressMDL() { setMAX(); } -void NumberKeyboard::onPressTELE() { changeSign(); } -void NumberKeyboard::onLongPressTELE() { setDEF(); } -void NumberKeyboard::onPressPGUP() { decSmall(); } -void NumberKeyboard::onPressPGDN() { incSmall(); } -void NumberKeyboard::onLongPressPGUP() {} -void NumberKeyboard::onLongPressPGDN() {} -#else -// Radios witb only a single PGUP/DN button or X12S -void NumberKeyboard::onPressSYS() { decSmall(); } -void NumberKeyboard::onLongPressSYS() { setMIN(); } -void NumberKeyboard::onPressMDL() { incLarge(); } -void NumberKeyboard::onLongPressMDL() { changeSign(); } -void NumberKeyboard::onPressTELE() { incSmall(); } -void NumberKeyboard::onLongPressTELE() { setMAX(); } -#if defined(PCBX12S) -void NumberKeyboard::onPressPGUP() { decLarge(); } -#else -void NumberKeyboard::onPressPGUP() { setDEF(); } -#endif -void NumberKeyboard::onPressPGDN() { decLarge(); } -void NumberKeyboard::onLongPressPGUP() { setDEF(); } -void NumberKeyboard::onLongPressPGDN() { setDEF(); } -#endif +void NumberKeyboard::onLongPressMDL() { if (hasTwoPageKeys) setMAX(); else changeSign(); } +void NumberKeyboard::onPressTELE() { if (hasTwoPageKeys) changeSign(); else incSmall(); } +void NumberKeyboard::onLongPressTELE() { if (hasTwoPageKeys) setDEF(); else setMAX(); } +void NumberKeyboard::onPressPGUP() { if (hasTwoPageKeys) decSmall(); else setDEF(); } +void NumberKeyboard::onPressPGDN() { if (hasTwoPageKeys) incSmall(); else decLarge(); } #endif diff --git a/radio/src/gui/colorlcd/libui/keyboard_number.h b/radio/src/gui/colorlcd/libui/keyboard_number.h index 0354a9c3176..c396ac295a3 100644 --- a/radio/src/gui/colorlcd/libui/keyboard_number.h +++ b/radio/src/gui/colorlcd/libui/keyboard_number.h @@ -53,8 +53,6 @@ class NumberKeyboard : public Keyboard void onLongPressTELE() override; void onPressPGUP() override; void onPressPGDN() override; - void onLongPressPGUP() override; - void onLongPressPGDN() override; #endif static NumberKeyboard* _instance; diff --git a/radio/src/gui/colorlcd/libui/keyboard_text.cpp b/radio/src/gui/colorlcd/libui/keyboard_text.cpp index a4f72938631..ee85e60cc7b 100644 --- a/radio/src/gui/colorlcd/libui/keyboard_text.cpp +++ b/radio/src/gui/colorlcd/libui/keyboard_text.cpp @@ -95,36 +95,16 @@ void TextKeyboard::cursorEnd() lv_textarea_cursor_right(kb->ta); } -#if (defined(KEYS_GPIO_REG_PAGEUP) || defined(USE_HATS_AS_KEYS)) && \ - !defined(PCBX12S) -// Radios with both PGUP and PGDN buttons except X12S -void TextKeyboard::onPressSYS() { changeMode(); } -void TextKeyboard::onLongPressSYS() {} -void TextKeyboard::onPressMDL() {} +void TextKeyboard::onPressSYS() { if (hasTwoPageKeys) changeMode(); else cursorLeft(); } +void TextKeyboard::onLongPressSYS() { if (!hasTwoPageKeys) cursorStart(); } +void TextKeyboard::onPressMDL() { if (!hasTwoPageKeys) changeMode(); } void TextKeyboard::onLongPressMDL() { backspace(); } -void TextKeyboard::onPressTELE() { toggleCase(); } -void TextKeyboard::onLongPressTELE() { deleteChar(); } -void TextKeyboard::onPressPGUP() { cursorLeft(); } -void TextKeyboard::onPressPGDN() { cursorRight(); } +void TextKeyboard::onPressTELE() { if (hasTwoPageKeys) toggleCase(); else cursorRight(); } +void TextKeyboard::onLongPressTELE() { if (hasTwoPageKeys) deleteChar(); else cursorEnd(); } +void TextKeyboard::onPressPGUP() { if (hasTwoPageKeys) cursorLeft(); else deleteChar(); } +void TextKeyboard::onPressPGDN() { if (hasTwoPageKeys) cursorRight(); else toggleCase(); } void TextKeyboard::onLongPressPGUP() { cursorStart(); } void TextKeyboard::onLongPressPGDN() { cursorEnd(); } -#else -// Radios witb only a single PGUP/DN button or X12S -void TextKeyboard::onPressSYS() { cursorLeft(); } -void TextKeyboard::onLongPressSYS() { cursorStart(); } -void TextKeyboard::onPressMDL() { changeMode(); } -void TextKeyboard::onLongPressMDL() { backspace(); } -void TextKeyboard::onPressTELE() { cursorRight(); } -void TextKeyboard::onLongPressTELE() { cursorEnd(); } -#if defined(PCBX12S) -void TextKeyboard::onPressPGUP() { toggleCase(); } -#else -void TextKeyboard::onPressPGUP() { deleteChar(); } -#endif -void TextKeyboard::onPressPGDN() { toggleCase(); } -void TextKeyboard::onLongPressPGUP() {} -void TextKeyboard::onLongPressPGDN() { deleteChar(); } -#endif #endif void TextKeyboard::open(FormField* field) diff --git a/radio/src/keys.cpp b/radio/src/keys.cpp index 17fa072aa41..262f46ca642 100644 --- a/radio/src/keys.cpp +++ b/radio/src/keys.cpp @@ -469,7 +469,7 @@ bool keysPollingCycle() evt |= i; // Radio with single PAGEDN key - if (keysGetSupported() & (1 << KEY_PAGEUP)) { + if (!(keysGetSupported() & (1 << KEY_PAGEUP))) { if (evt == EVT_KEY_LONG(KEY_PAGEDN)) { // Convert long press PAGEDN to short press PAGEUP evt = EVT_KEY_BREAK(KEY_PAGEUP); From 01ec4affcf2de18cbe84f326144be430f9855bc5 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Wed, 16 Jul 2025 12:41:07 +0200 Subject: [PATCH 19/49] Use keyIsSupported() --- radio/src/cli.cpp | 2 +- radio/src/gui/colorlcd/libui/keyboard_base.cpp | 2 +- radio/src/hal/key_driver.h | 5 +++++ radio/src/keys.cpp | 2 +- radio/src/lua/api_general.cpp | 9 +++------ radio/src/targets/simu/opentxsimulator.cpp | 4 ++-- 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/radio/src/cli.cpp b/radio/src/cli.cpp index a0e3f97f4ed..8d7aa1f0fe5 100644 --- a/radio/src/cli.cpp +++ b/radio/src/cli.cpp @@ -1442,7 +1442,7 @@ int cliDisplay(const char ** argv) if (!strcmp(argv[1], "keys")) { for (int i = 0; i <= MAX_KEYS; i++) { - if (keysGetSupported() & (1 << i)) { + if (keyIsSupported(i)) { cliSerialPrint("[Key %s] = %s", keysGetLabel((EnumKeys)i), keysGetState(i) ? "on" : "off"); diff --git a/radio/src/gui/colorlcd/libui/keyboard_base.cpp b/radio/src/gui/colorlcd/libui/keyboard_base.cpp index e2c500ba02f..880a785ce61 100644 --- a/radio/src/gui/colorlcd/libui/keyboard_base.cpp +++ b/radio/src/gui/colorlcd/libui/keyboard_base.cpp @@ -87,7 +87,7 @@ Keyboard::Keyboard(coord_t height) : #if defined(USE_HATS_AS_KEYS) hasTwoPageKeys = true; #else - hasTwoPageKeys = (keysGetSupported() & (1 << KEY_PAGEUP)); + hasTwoPageKeys = keyIsSupported(KEY_PAGEUP); #endif lv_obj_set_parent(lvobj, lv_layer_top()); // the keyboard is always on top diff --git a/radio/src/hal/key_driver.h b/radio/src/hal/key_driver.h index 933fbd08119..b5932b8a033 100644 --- a/radio/src/hal/key_driver.h +++ b/radio/src/hal/key_driver.h @@ -60,8 +60,13 @@ uint32_t readTrims(); // Init GPIO ports void keysInit(); +// returns a bit field with each supported key uint32_t keysGetSupported(); +static inline bool keyIsSupported(EnumKeys key) { + return keysGetSupported() & (1 << key); +} + uint8_t keysGetMaxKeys(); uint8_t keysGetMaxTrims(); diff --git a/radio/src/keys.cpp b/radio/src/keys.cpp index 262f46ca642..42d429b185c 100644 --- a/radio/src/keys.cpp +++ b/radio/src/keys.cpp @@ -469,7 +469,7 @@ bool keysPollingCycle() evt |= i; // Radio with single PAGEDN key - if (!(keysGetSupported() & (1 << KEY_PAGEUP))) { + if (!keyIsSupported(KEY_PAGEUP)) { if (evt == EVT_KEY_LONG(KEY_PAGEDN)) { // Convert long press PAGEDN to short press PAGEUP evt = EVT_KEY_BREAK(KEY_PAGEUP); diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 50604684473..7f59d05dc8c 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -1694,12 +1694,12 @@ Stops key state machine. See [Key Events](../key_events.md) for the detailed des static int luaKillEvents(lua_State * L) { #if !defined(COLORLCD) - #define IS_KEY_AVAIL(key) (keysGetSupported() & (1 << (key))) #define IS_STANDALONE() (scriptInternalData[0].reference == SCRIPT_STANDALONE) #define IS_MASKABLE(key) \ ((key) != KEY_EXIT && (key) != KEY_ENTER && \ - (!IS_KEY_AVAIL(KEY_MENU) || (IS_STANDALONE() || ((key) != KEY_PAGEDN)))) + (!keyIsSupported(KEY_MENU) || (IS_STANDALONE() || ((key) != KEY_PAGEDN)))) #else + #define IS_STANDALONE() (false) #define IS_MASKABLE(key) ((key) != KEY_EXIT && (key) != KEY_ENTER) #endif @@ -1713,10 +1713,7 @@ static int luaKillEvents(lua_State * L) return 0; #undef IS_MASKABLE -#if !defined(COLORLCD) - #undef IS_STANDALONE - #undef IS_KEY_AVAIL -#endif +#undef IS_STANDALONE } #if LCD_DEPTH > 1 && !defined(COLORLCD) diff --git a/radio/src/targets/simu/opentxsimulator.cpp b/radio/src/targets/simu/opentxsimulator.cpp index b9288daeef4..f4b97fe7f49 100644 --- a/radio/src/targets/simu/opentxsimulator.cpp +++ b/radio/src/targets/simu/opentxsimulator.cpp @@ -437,9 +437,9 @@ void OpenTxSimulator::rotaryEncoderEvent(int steps) } #else int key; - if (keysGetSupported() & ((1 << KEY_UP) | (1 << KEY_DOWN))) { + if (keyIsSupported(KEY_UP) | keyIsSupported(KEY_DOWN)) { key = steps > 0 ? KEY_DOWN : KEY_UP; - } else if (keysGetSupported() & ((1 << KEY_PLUS) | (1 << KEY_MINUS))) { + } else if (keyIsSupported(KEY_PLUS) | keyIsSupported(KEY_MINUS)) { key = steps > 0 ? KEY_MINUS : KEY_PLUS; } else { return; // not supposed to happen??? From 898b080ee83b0f75a19371d7e60f9512b864c9a6 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Mon, 28 Jul 2025 15:01:42 +0200 Subject: [PATCH 20/49] Fix hardware data model after switch refactor Switches can now have a `pin` defined without a `gpio`. --- radio/util/hw_defs/models.py | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/radio/util/hw_defs/models.py b/radio/util/hw_defs/models.py index 58f6864bdc0..0210bb02fc1 100644 --- a/radio/util/hw_defs/models.py +++ b/radio/util/hw_defs/models.py @@ -240,13 +240,13 @@ class Switch(BaseModel): display: Optional[SwitchDisplayType] = None def _uses_single_gpio(self: "Switch") -> bool: - return bool(self.gpio or self.pin) + return bool(self.pin) def _uses_two_gpios(self: "Switch") -> bool: - return bool(self.gpio_high or self.pin_high or self.gpio_low or self.pin_low) + return bool(self.pin_high or self.pin_low) def _uses_gpio(self: "Switch") -> bool: - return self._uses_single_gpio() or self._uses_two_gpios() + return bool(self.gpio_high or self.gpio_low or self.gpio) @model_validator(mode="after") def check_hardware(self: "Switch") -> "Switch": @@ -264,11 +264,6 @@ def check_hardware(self: "Switch") -> "Switch": ) if self._uses_single_gpio(): - if not self.gpio or not self.pin: - raise PydanticCustomError( - "SwitchHardwareError", - "Switch missing either 'gpio' or 'pin'", - ) if str(self.type) not in ["2POS", "FSWITCH"]: raise PydanticCustomError( "SwitchHardwareError", @@ -277,15 +272,10 @@ def check_hardware(self: "Switch") -> "Switch": # TODO: check 'default' as well? if self._uses_two_gpios(): - if ( - not self.gpio_high - or not self.pin_high - or not self.gpio_low - or not self.pin_low - ): + if not self.pin_high or not self.pin_low: raise PydanticCustomError( "SwitchHardwareError", - "Switch missing 'gpio_high' or 'pin_high' or 'gpio_low' or 'pin_low'", + "Switch missing 'pin_high' or 'pin_low'", ) if str(self.type) != "3POS": raise PydanticCustomError( From 382814ee7e746e89818011777d253a578d9319b4 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Mon, 28 Jul 2025 15:59:47 +0200 Subject: [PATCH 21/49] Enable LTO for `board_bl` to prevent bootloader overflow --- radio/src/bootloader/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/radio/src/bootloader/CMakeLists.txt b/radio/src/bootloader/CMakeLists.txt index b79c4cd9d15..36995f159fb 100644 --- a/radio/src/bootloader/CMakeLists.txt +++ b/radio/src/bootloader/CMakeLists.txt @@ -52,6 +52,7 @@ if(NOT NO_LTO) target_compile_options(stm32_drivers PRIVATE -flto) target_compile_options(stm32_drivers_w_dbg_fw PRIVATE -flto) target_compile_options(stm32_drivers_w_dbg_bl PRIVATE -flto) + target_compile_options(board_bl PRIVATE -flto) endif() add_executable(bootloader EXCLUDE_FROM_ALL ${BOOTLOADER_SRC}) From c433a595d67c545dfe6f1586dadeedf904fc47cf Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Mon, 28 Jul 2025 16:28:33 +0200 Subject: [PATCH 22/49] Fix NB4P bootloader --- radio/src/boards/generic_stm32/analog_inputs.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/radio/src/boards/generic_stm32/analog_inputs.cpp b/radio/src/boards/generic_stm32/analog_inputs.cpp index d3d1da12aeb..e18fc13ec3a 100644 --- a/radio/src/boards/generic_stm32/analog_inputs.cpp +++ b/radio/src/boards/generic_stm32/analog_inputs.cpp @@ -40,7 +40,6 @@ // generated files #include "stm32_adc_inputs.inc" -#include "stm32_pwm_inputs.inc" #if !defined(BOOT) #include "hal_adc_inputs.inc" #endif @@ -101,8 +100,10 @@ const etx_hal_adc_driver_t _adc_driver = { .get_input_mask = stm32_hal_get_inputs_mask, }; +#if !defined(BOOT) #if defined(PWM_STICKS) #include "stm32_gpio.h" +#include "stm32_pwm_inputs.inc" static const stick_pwm_timer_t _sticks_timer = { .GPIOx = PWM_GPIO, @@ -151,3 +152,4 @@ void gimbalsDetect() detected = gimbal_drivers[idx++](); } } +#endif // !BOOT From 29832cb5fc9b557beee48f375a06865b6ec7df67 Mon Sep 17 00:00:00 2001 From: philmoz Date: Thu, 17 Jul 2025 14:21:47 +1000 Subject: [PATCH 23/49] Cleanup B&W navigation definitions. --- radio/src/gui/navigation/navigation.h | 20 +++++++------------- radio/src/targets/taranis/CMakeLists.txt | 9 +++++++++ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/radio/src/gui/navigation/navigation.h b/radio/src/gui/navigation/navigation.h index 46cc593b4ca..3650fea13f6 100644 --- a/radio/src/gui/navigation/navigation.h +++ b/radio/src/gui/navigation/navigation.h @@ -21,18 +21,12 @@ #pragma once -// Define navigation type based on available keys -#if LCD_W == 212 - #define NAVIGATION_X9D -#elif defined(KEYS_GPIO_REG_SHIFT) - #define NAVIGATION_XLITE -#elif defined(KEYS_GPIO_REG_LEFT) - #define NAVIGATION_9X -#elif defined(KEYS_GPIO_REG_PAGEUP) && defined(KEYS_GPIO_REG_TELE) - #define NAVIGATION_X7 - #define NAVIGATION_X7_TX12 -#else +// Define navigation type if not defined already +#if !defined(NAVIGATION_XLITE) && !defined(NAVIGATION_9X) && !defined(NAVIGATION_X9D) #define NAVIGATION_X7 + #if defined(MANUFACTURER_RADIOMASTER) && !defined(RADIO_T8) + #define NAVIGATION_X7_RM + #endif #endif #if defined(NAVIGATION_X7) || defined(NAVIGATION_X9D) @@ -55,7 +49,7 @@ #define EVT_KEY_MODEL_MENU EVT_KEY_BREAK(KEY_MODEL) #define EVT_KEY_GENERAL_MENU EVT_KEY_BREAK(KEY_SYS) #define EVT_KEY_TELEMETRY EVT_KEY_LONG(KEY_PAGEUP) -#elif defined(NAVIGATION_X7_TX12) +#elif defined(NAVIGATION_X7_RM) #define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_PAGEUP) #define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGEDN) #define EVT_KEY_NEXT_PAGE EVT_ROTARY_RIGHT @@ -86,7 +80,7 @@ #if defined(NAVIGATION_XLITE) #define EVT_KEY_PREVIOUS_TELEM_VIEW(evt) (evt == EVT_KEY_LONG(KEY_LEFT) && keysGetState(KEY_SHIFT)) #define EVT_KEY_NEXT_TELEM_VIEW(evt) (evt == EVT_KEY_LONG(KEY_RIGHT) && keysGetState(KEY_SHIFT)) -#elif defined(KEYS_GPIO_REG_PAGEUP) +#elif defined(NAVIGATION_X7_RM) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define EVT_KEY_PREVIOUS_TELEM_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_PAGEUP)) #define EVT_KEY_NEXT_TELEM_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_PAGEDN)) #elif defined(NAVIGATION_X7) || defined(NAVIGATION_X9D) diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 4ceec6dc045..2dfad1db310 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -26,6 +26,7 @@ if(PCB STREQUAL X9E) set(CPU_TYPE_FULL STM32F407xE) set(HAPTIC YES) set(FLAVOUR x9e) + add_definitions(-DNAVIGATION_X9D) add_definitions(-DPCBX9E -DPCBX9) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(FIRMWARE_TARGET_SRC @@ -61,6 +62,7 @@ elseif(PCB STREQUAL X9D+) if (${PCBREV} STREQUAL 2019) set(DEFAULT_INTERNAL_MODULE ISRM_PXX2 CACHE STRING "Default internal module") set(FLAVOUR x9d+2019) + add_definitions(-DNAVIGATION_X9D) set(CPU_TYPE_FULL STM32F407xE) set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") add_definitions(-DRADIO_X9DP2019) @@ -76,6 +78,7 @@ elseif(PCB STREQUAL X9D+) else() set(DEFAULT_INTERNAL_MODULE XJT_PXX1 CACHE STRING "Default internal module") set(FLAVOUR x9d+) + add_definitions(-DNAVIGATION_X9D) set(CPU_TYPE_FULL STM32F205xE) set(AUX_SERIAL ON) set(STATUS_LEDS NO) @@ -84,6 +87,7 @@ elseif(PCB STREQUAL X9D+) elseif(PCB STREQUAL X9D) set(DEFAULT_INTERNAL_MODULE XJT_PXX1 CACHE STRING "Default internal module") set(FLAVOUR x9d) + add_definitions(-DNAVIGATION_X9D) set(CPU_TYPE_FULL STM32F205xE) option(HAPTIC "Haptic support" ON) # While the X9D doesn't have haptic OOTB, it can be added add_definitions(-DPCBX9D -DPCBX9) @@ -112,6 +116,7 @@ elseif(PCB STREQUAL X7) set(INTERNAL_MODULE_SERIAL YES) set(MODULE_SIZE_STD YES) set(FLAVOUR t12) + add_definitions(-DNAVIGATION_9X) set(CPU_TYPE_FULL STM32F205xE) add_definitions(-DRADIO_T12) add_definitions(-DRADIO_FAMILY_JUMPER_T12) @@ -217,6 +222,7 @@ elseif(PCB STREQUAL X7) set(INTERNAL_MODULE_SERIAL YES) set(MODULE_SIZE_SML YES) set(FLAVOUR tlite) + add_definitions(-DNAVIGATION_9X) set(CPU_TYPE_FULL STM32F205xE) add_definitions(-DRADIO_TLITE) add_definitions(-DRADIO_FAMILY_JUMPER_T12) @@ -237,6 +243,7 @@ elseif(PCB STREQUAL X7) set(INTERNAL_MODULE_SERIAL YES) set(MODULE_SIZE_SML YES) set(FLAVOUR lr3pro) + add_definitions(-DNAVIGATION_9X) set(CPU_TYPE_FULL STM32F205xE) add_definitions(-DRADIO_LR3PRO) add_definitions(-DRADIO_FAMILY_JUMPER_T12) @@ -498,6 +505,7 @@ elseif(PCB STREQUAL XLITE) set(CPU_TYPE_FULL STM32F205xE) set(HAPTIC YES) set(FLAVOUR xlite) + add_definitions(-DNAVIGATION_XLITE) add_definitions(-DPCBXLITE -DSOFTWARE_VOLUME) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(PXX2 ON) @@ -518,6 +526,7 @@ elseif(PCB STREQUAL XLITES) set(CPU_TYPE_FULL STM32F205xE) set(HAPTIC YES) set(FLAVOUR xlites) + add_definitions(-DNAVIGATION_XLITE) add_definitions(-DPCBXLITES -DPCBXLITE -DSOFTWARE_VOLUME -DHARDWARE_POWER_MANAGEMENT_UNIT) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(GUI_DIR 128x64) From 2e5c7e616a99ea8ddbfdcfea587e8e3fee5348ee Mon Sep 17 00:00:00 2001 From: philmoz Date: Thu, 17 Jul 2025 18:09:23 +1000 Subject: [PATCH 24/49] Define RADIO_xxx automatically. Use radio type to set B&W navigation style. Remove unused TLiteF4 variant. --- radio/src/CMakeLists.txt | 6 ++++ radio/src/gui/navigation/navigation.h | 8 ++++- radio/src/targets/horus/CMakeLists.txt | 8 ----- radio/src/targets/pa01/CMakeLists.txt | 1 - radio/src/targets/pl18/CMakeLists.txt | 11 +++--- radio/src/targets/st16/CMakeLists.txt | 1 - radio/src/targets/taranis/CMakeLists.txt | 44 ------------------------ radio/src/targets/tx15/CMakeLists.txt | 1 - radio/util/hw_defs/legacy_names.py | 2 +- tools/build-common.sh | 3 -- tools/build-jumper.py | 5 --- 11 files changed, 19 insertions(+), 71 deletions(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 9358725d00e..ffa6b3d44b0 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -100,6 +100,12 @@ else() message(FATAL_ERROR "Unknown PCB '${PCB}'") endif() +# Add RADIO_xxx definition +string(TOUPPER ${FLAVOUR} RADIO_NAME) +string(REPLACE "+" "P" RADIO_NAME ${RADIO_NAME}) +string(CONCAT RADIO_NAME "RADIO_" ${RADIO_NAME}) +add_definitions(-D${RADIO_NAME}) + set(HW_DESC_JSON ${FLAVOUR}.json) AddHardwareDefTarget(${HW_DESC_JSON}) diff --git a/radio/src/gui/navigation/navigation.h b/radio/src/gui/navigation/navigation.h index 3650fea13f6..454501d4638 100644 --- a/radio/src/gui/navigation/navigation.h +++ b/radio/src/gui/navigation/navigation.h @@ -22,7 +22,13 @@ #pragma once // Define navigation type if not defined already -#if !defined(NAVIGATION_XLITE) && !defined(NAVIGATION_9X) && !defined(NAVIGATION_X9D) +#if defined(RADIO_XLITE) || defined(RADIO_XLITES) + #define NAVIGATION_XLITE +#elif defined(RADIO_LR3PRO) || defined(RADIO_T12) || defined(RADIO_TLITE) + #define NAVIGATION_9X +#elif defined(RADIO_X9D) || defined(RADIO_X9DP) || defined(RADIO_X9DP2019) || defined(RADIO_X9E) + #define NAVIGATION_X9D +#else #define NAVIGATION_X7 #if defined(MANUFACTURER_RADIOMASTER) && !defined(RADIO_T8) #define NAVIGATION_X7_RM diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index cae18358fc6..866b71632d3 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -54,11 +54,9 @@ if (PCB STREQUAL X10) set(BLUETOOTH ON) set(AUX_SERIAL OFF) add_definitions(-DHARDWARE_POWER_MANAGEMENT_UNIT) - add_definitions(-DRADIO_X10E) add_definitions(-DMANUFACTURER_FRSKY) elseif (PCBREV STREQUAL T15) set(FLAVOUR t15) - add_definitions(-DRADIO_T15) add_definitions(-DRADIO_FAMILY_T16) set(FUNCTION_SWITCHES ON) set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module") @@ -75,7 +73,6 @@ if (PCB STREQUAL X10) set(LCD_DRIVER lcd_st7796s_driver.cpp) elseif (PCBREV STREQUAL T16) set(FLAVOUR t16) - add_definitions(-DRADIO_T16) add_definitions(-DRADIO_FAMILY_T16) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") option(BLUETOOTH "Support for bluetooth module" OFF) @@ -86,7 +83,6 @@ if (PCB STREQUAL X10) set(FLYSKY_GIMBAL ON) elseif (PCBREV STREQUAL TX16S) set(FLAVOUR tx16s) - add_definitions(-DRADIO_TX16S) add_definitions(-DRADIO_FAMILY_T16) # Uncomment the line below to enable bootloader support for SPI flash @@ -104,7 +100,6 @@ if (PCB STREQUAL X10) set(FLEXSW "2" CACHE STRING "Max flex inputs usable as switches") elseif (PCBREV STREQUAL F16) set(FLAVOUR f16) - add_definitions(-DRADIO_F16) add_definitions(-DRADIO_FAMILY_T16) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") option(BLUETOOTH "Support for bluetooth module" OFF) @@ -113,7 +108,6 @@ if (PCB STREQUAL X10) 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) @@ -128,7 +122,6 @@ if (PCB STREQUAL X10) endif() elseif (PCBREV STREQUAL T18) set(FLAVOUR t18) - add_definitions(-DRADIO_T18) add_definitions(-DRADIO_FAMILY_T16) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") option(BLUETOOTH "Support for bluetooth module" OFF) @@ -141,7 +134,6 @@ if (PCB STREQUAL X10) set(FLAVOUR x10) set(DEFAULT_INTERNAL_MODULE XJT_PXX1 CACHE STRING "Default internal module") set(BLUETOOTH ON) - add_definitions(-DRADIO_X10) add_definitions(-DMANUFACTURER_FRSKY) endif() elseif (PCB STREQUAL X12S) diff --git a/radio/src/targets/pa01/CMakeLists.txt b/radio/src/targets/pa01/CMakeLists.txt index d60283e57db..a3a0675a846 100644 --- a/radio/src/targets/pa01/CMakeLists.txt +++ b/radio/src/targets/pa01/CMakeLists.txt @@ -47,7 +47,6 @@ add_definitions(-DFIRMWARE_FORMAT_UF2) add_definitions(-DUSE_CUSTOM_EXTI_IRQ) set(FLAVOUR pa01) -add_definitions(-DRADIO_PA01) # Defines internal modules for PL18 via UART7 set(INTERNAL_MODULES AFHDS3;CRSF CACHE STRING "Internal modules") diff --git a/radio/src/targets/pl18/CMakeLists.txt b/radio/src/targets/pl18/CMakeLists.txt index 000fbe5a13d..e729b506ea9 100644 --- a/radio/src/targets/pl18/CMakeLists.txt +++ b/radio/src/targets/pl18/CMakeLists.txt @@ -44,7 +44,6 @@ add_definitions(-DSTM32_SUPPORT_32BIT_TIMERS) if(PCBREV STREQUAL PL18U) set(FLAVOUR pl18u) - add_definitions(-DRADIO_PL18U) set(DISK_CACHE ON) set(WIRELESS_CHARGER YES) set(FLYSKY_GIMBAL ON) @@ -57,7 +56,7 @@ if(PCBREV STREQUAL PL18U) set(DEFAULT_INTERNAL_MODULE FLYSKY_AFHDS3 CACHE STRING "Default internal module") elseif (PCBREV STREQUAL EL18) set(FLAVOUR el18) - add_definitions(-DRADIO_EL18 -DRADIO_NV14_FAMILY -DPCBNV14 -DUSE_HATS_AS_KEYS) + add_definitions(-DRADIO_NV14_FAMILY -DPCBNV14 -DUSE_HATS_AS_KEYS) set(DISK_CACHE ON) set(FLYSKY_GIMBAL ON) set(USE_VS1053B ON) @@ -68,7 +67,7 @@ elseif (PCBREV STREQUAL EL18) set(DEFAULT_INTERNAL_MODULE FLYSKY_AFHDS3 CACHE STRING "Default internal module") elseif(PCBREV STREQUAL NV14) set(FLAVOUR nv14) - add_definitions(-DRADIO_NV14 -DRADIO_NV14_FAMILY -DPCBNV14) + add_definitions(-DRADIO_NV14_FAMILY -DPCBNV14) add_definitions(-DUSE_HATS_AS_KEYS -DAFHDS2_BAUDRATE=${PCB_RF_BAUD}) set(DISK_CACHE ON) set(FLYSKY_GIMBAL ON) @@ -81,7 +80,7 @@ elseif(PCBREV STREQUAL NV14) set(DEFAULT_INTERNAL_MODULE FLYSKY_AFHDS2A CACHE STRING "Default internal module") elseif(PCBREV STREQUAL NB4P) set(FLAVOUR nb4p) - add_definitions(-DRADIO_NB4P -DSPI_FLASH) + add_definitions(-DSPI_FLASH) set(ROTARY_ENCODER YES) set(LED_STRIP ON) set(AFHDS3 ON) @@ -92,7 +91,7 @@ elseif(PCBREV STREQUAL NB4P) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") elseif(PCBREV STREQUAL PL18EV) set(FLAVOUR pl18ev) - add_definitions(-DRADIO_PL18EV -DSPI_FLASH -DUSE_HATS_AS_KEYS) + add_definitions(-DSPI_FLASH -DUSE_HATS_AS_KEYS) set(WIRELESS_CHARGER YES) set(FLYSKY_GIMBAL ON) set(LED_STRIP ON) @@ -100,7 +99,7 @@ elseif(PCBREV STREQUAL PL18EV) set(KEY_DRIVER key_driver.cpp) else() set(FLAVOUR pl18) - add_definitions(-DRADIO_PL18 -DSPI_FLASH -DUSE_HATS_AS_KEYS) + add_definitions(-DSPI_FLASH -DUSE_HATS_AS_KEYS) set(WIRELESS_CHARGER YES) set(FLYSKY_GIMBAL ON) set(LED_STRIP ON) diff --git a/radio/src/targets/st16/CMakeLists.txt b/radio/src/targets/st16/CMakeLists.txt index d31133800cc..c764f197269 100644 --- a/radio/src/targets/st16/CMakeLists.txt +++ b/radio/src/targets/st16/CMakeLists.txt @@ -48,7 +48,6 @@ add_definitions(-DFIRMWARE_FORMAT_UF2) add_definitions(-DUSE_CUSTOM_EXTI_IRQ) set(FLAVOUR st16) -add_definitions(-DRADIO_ST16) # Defines internal modules for PL18 via UART7 # set(INTERNAL_MODULES MULTI CACHE STRING "Internal modules") diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 2dfad1db310..495b32d62c4 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -26,7 +26,6 @@ if(PCB STREQUAL X9E) set(CPU_TYPE_FULL STM32F407xE) set(HAPTIC YES) set(FLAVOUR x9e) - add_definitions(-DNAVIGATION_X9D) add_definitions(-DPCBX9E -DPCBX9) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(FIRMWARE_TARGET_SRC @@ -62,10 +61,8 @@ elseif(PCB STREQUAL X9D+) if (${PCBREV} STREQUAL 2019) set(DEFAULT_INTERNAL_MODULE ISRM_PXX2 CACHE STRING "Default internal module") set(FLAVOUR x9d+2019) - add_definitions(-DNAVIGATION_X9D) set(CPU_TYPE_FULL STM32F407xE) set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") - add_definitions(-DRADIO_X9DP2019) add_definitions(-DSOFTWARE_VOLUME -DPWR_BUTTON_${PWR_BUTTON} -DHARDWARE_POWER_MANAGEMENT_UNIT) set(STATUS_LEDS YES) set(PXX2 ON) @@ -78,7 +75,6 @@ elseif(PCB STREQUAL X9D+) else() set(DEFAULT_INTERNAL_MODULE XJT_PXX1 CACHE STRING "Default internal module") set(FLAVOUR x9d+) - add_definitions(-DNAVIGATION_X9D) set(CPU_TYPE_FULL STM32F205xE) set(AUX_SERIAL ON) set(STATUS_LEDS NO) @@ -87,7 +83,6 @@ elseif(PCB STREQUAL X9D+) elseif(PCB STREQUAL X9D) set(DEFAULT_INTERNAL_MODULE XJT_PXX1 CACHE STRING "Default internal module") set(FLAVOUR x9d) - add_definitions(-DNAVIGATION_X9D) set(CPU_TYPE_FULL STM32F205xE) option(HAPTIC "Haptic support" ON) # While the X9D doesn't have haptic OOTB, it can be added add_definitions(-DPCBX9D -DPCBX9) @@ -116,9 +111,7 @@ elseif(PCB STREQUAL X7) set(INTERNAL_MODULE_SERIAL YES) set(MODULE_SIZE_STD YES) set(FLAVOUR t12) - add_definitions(-DNAVIGATION_9X) set(CPU_TYPE_FULL STM32F205xE) - add_definitions(-DRADIO_T12) add_definitions(-DRADIO_FAMILY_JUMPER_T12) add_definitions(-DMANUFACTURER_JUMPER) elseif(PCBREV STREQUAL TPRO) @@ -129,7 +122,6 @@ elseif(PCB STREQUAL X7) set(ROTARY_ENCODER YES) set(CPU_TYPE_FULL STM32F205xE) set(FUNCTION_SWITCHES ON) - add_definitions(-DRADIO_TPRO) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") elseif(PCBREV STREQUAL TPROV2) @@ -140,7 +132,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xE) set(ROTARY_ENCODER YES) set(FUNCTION_SWITCHES ON) - add_definitions(-DRADIO_TPROV2) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") elseif(PCBREV STREQUAL TPROS) @@ -151,7 +142,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(USB_CHARGE_LED YES) - add_definitions(-DRADIO_TPROS) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") elseif(PCBREV STREQUAL BUMBLEBEE) @@ -163,7 +153,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(FUNCTION_SWITCHES YES) - add_definitions(-DRADIO_BUMBLEBEE) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") set(AUX_SERIAL ON) @@ -176,7 +165,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(PXX2 ON) set(USB_CHARGE_LED YES) - add_definitions(-DRADIO_T14) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") elseif (PCBREV STREQUAL T12MAX) @@ -187,7 +175,6 @@ elseif(PCB STREQUAL X7) set(ROTARY_ENCODER YES) set(USB_CHARGE_LED YES) set(CPU_TYPE_FULL STM32F407xG) - add_definitions(-DRADIO_T12MAX) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") elseif(PCBREV STREQUAL T20) @@ -199,7 +186,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xE) set(FLYSKY_GIMBAL ON) set(FUNCTION_SWITCHES ON) - add_definitions(-DRADIO_T20) add_definitions(-DRADIO_FAMILY_T20) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -213,7 +199,6 @@ elseif(PCB STREQUAL X7) set(FLYSKY_GIMBAL ON) set(PXX2 ON) set(FUNCTION_SWITCHES ON) - add_definitions(-DRADIO_T20V2) add_definitions(-DRADIO_FAMILY_T20) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -222,19 +207,7 @@ elseif(PCB STREQUAL X7) set(INTERNAL_MODULE_SERIAL YES) set(MODULE_SIZE_SML YES) set(FLAVOUR tlite) - add_definitions(-DNAVIGATION_9X) set(CPU_TYPE_FULL STM32F205xE) - add_definitions(-DRADIO_TLITE) - add_definitions(-DRADIO_FAMILY_JUMPER_T12) - add_definitions(-DMANUFACTURER_JUMPER) - set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") - elseif(PCBREV STREQUAL TLITEF4) - set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") - set(INTERNAL_MODULE_SERIAL YES) - set(MODULE_SIZE_SML YES) - set(FLAVOUR tlitef4) - set(CPU_TYPE_FULL STM32F407xE) # for size report - add_definitions(-DRADIO_TLITE) add_definitions(-DRADIO_FAMILY_JUMPER_T12) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -243,9 +216,7 @@ elseif(PCB STREQUAL X7) set(INTERNAL_MODULE_SERIAL YES) set(MODULE_SIZE_SML YES) set(FLAVOUR lr3pro) - add_definitions(-DNAVIGATION_9X) set(CPU_TYPE_FULL STM32F205xE) - add_definitions(-DRADIO_LR3PRO) add_definitions(-DRADIO_FAMILY_JUMPER_T12) add_definitions(-DMANUFACTURER_BETAFPV) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -258,7 +229,6 @@ elseif(PCB STREQUAL X7) set(ROTARY_ENCODER YES) set(BLUETOOTH NO) set(USB_CHARGER YES) - add_definitions(-DRADIO_TX12) add_definitions(-DMANUFACTURER_RADIOMASTER) elseif(PCBREV STREQUAL TX12MK2) set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module") @@ -271,7 +241,6 @@ elseif(PCB STREQUAL X7) if (NOT BLUETOOTH) set(AUX_SERIAL ON) endif() - add_definitions(-DRADIO_TX12MK2) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -285,7 +254,6 @@ elseif(PCB STREQUAL X7) set(BLUETOOTH NO) set(USB_CHARGER YES) set(HELI NO) - add_definitions(-DRADIO_MT12) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -302,7 +270,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_BOXER) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -319,7 +286,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_GX12) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -338,7 +304,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xE) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_ZORRO) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -353,7 +318,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xE) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_POCKET) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -371,7 +335,6 @@ elseif(PCB STREQUAL X7) if(RADIOMASTER_RELEASE) set(BIND_KEY YES) endif() - add_definitions(-DRADIO_T8) add_definitions(-DMANUFACTURER_RADIOMASTER) elseif(PCBREV STREQUAL COMMANDO8) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") @@ -383,7 +346,6 @@ elseif(PCB STREQUAL X7) set(ROTARY_ENCODER NO) set(BLUETOOTH NO) set(USE_RTC_CLOCK NO) - add_definitions(-DRADIO_COMMANDO8) add_definitions(-DMUTUALLY_EXCLUSIVE_MODULES) add_definitions(-DMANUFACTURER_IFLIGHT) elseif(PCBREV STREQUAL ACCESS) @@ -392,7 +354,6 @@ elseif(PCB STREQUAL X7) set(MODULE_SIZE_STD YES) set(FLAVOUR x7access) set(CPU_TYPE_FULL STM32F407xE) - add_definitions(-DRADIO_X7ACCESS) add_definitions(-DPCBREV=${PCBREV}) add_definitions(-DPCBX7ACCESS) add_definitions(-DHARDWARE_POWER_MANAGEMENT_UNIT) @@ -409,7 +370,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_V12) add_definitions(-DSTM32_SUPPORT_32BIT_TIMERS) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -425,7 +385,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_V14) add_definitions(-DSTM32_SUPPORT_32BIT_TIMERS) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -438,7 +397,6 @@ elseif(PCB STREQUAL X7) set(DEFAULT_INTERNAL_MODULE XJT_PXX1 CACHE STRING "Default internal module") set(FLAVOUR x7) set(CPU_TYPE_FULL STM32F205xE) - add_definitions(-DRADIO_X7) set(BLUETOOTH YES) add_definitions(-DBLUETOOTH_PROBE) set(ROTARY_ENCODER YES) @@ -505,7 +463,6 @@ elseif(PCB STREQUAL XLITE) set(CPU_TYPE_FULL STM32F205xE) set(HAPTIC YES) set(FLAVOUR xlite) - add_definitions(-DNAVIGATION_XLITE) add_definitions(-DPCBXLITE -DSOFTWARE_VOLUME) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(PXX2 ON) @@ -526,7 +483,6 @@ elseif(PCB STREQUAL XLITES) set(CPU_TYPE_FULL STM32F205xE) set(HAPTIC YES) set(FLAVOUR xlites) - add_definitions(-DNAVIGATION_XLITE) add_definitions(-DPCBXLITES -DPCBXLITE -DSOFTWARE_VOLUME -DHARDWARE_POWER_MANAGEMENT_UNIT) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(GUI_DIR 128x64) diff --git a/radio/src/targets/tx15/CMakeLists.txt b/radio/src/targets/tx15/CMakeLists.txt index 8a31b9d8559..e98c8f7221e 100644 --- a/radio/src/targets/tx15/CMakeLists.txt +++ b/radio/src/targets/tx15/CMakeLists.txt @@ -49,7 +49,6 @@ add_definitions(-DUSE_CUSTOM_EXTI_IRQ) add_definitions(-DUSB_CHARGER) set(FLAVOUR tx15) -add_definitions(-DRADIO_TX15) add_definitions(-DMANUFACTURER_RADIOMASTER) # defines existing internal modules diff --git a/radio/util/hw_defs/legacy_names.py b/radio/util/hw_defs/legacy_names.py index d9ee464da12..04dfd2dae45 100644 --- a/radio/util/hw_defs/legacy_names.py +++ b/radio/util/hw_defs/legacy_names.py @@ -484,7 +484,7 @@ "lr3pro", "nv14", "el18", "t8", "t12", - "tlite", "tlitef4", "tpro", "tprov2", "tpros", "bumblebee", + "tlite", "tpro", "tprov2", "tpros", "bumblebee", "tx12", "tx12mk2", "x7", "x7access", "xlite", "xlites", diff --git a/tools/build-common.sh b/tools/build-common.sh index 40d2d088ea6..1039405e10f 100644 --- a/tools/build-common.sh +++ b/tools/build-common.sh @@ -44,9 +44,6 @@ get_target_build_options() { tlite) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TLITE" ;; - tlitef4) - BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TLITEF4" - ;; tpro) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TPRO" ;; diff --git a/tools/build-jumper.py b/tools/build-jumper.py index fa6c0bd05bd..9801b8e055b 100755 --- a/tools/build-jumper.py +++ b/tools/build-jumper.py @@ -14,11 +14,6 @@ "PCBREV": "TLITE", "DEFAULT_MODE": "2", }, - "TLITEF4": { - "PCB": "X7", - "PCBREV": "TLITEF4", - "DEFAULT_MODE": "2", - }, "TPRO": { "PCB": "X7", "PCBREV": "TPRO", From 6f621d02d8afaaf81b18580ba365917abd20f52a Mon Sep 17 00:00:00 2001 From: philmoz Date: Thu, 17 Jul 2025 20:56:11 +1000 Subject: [PATCH 25/49] Create CMake variable for radio type. --- radio/src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index ffa6b3d44b0..923fd2b3038 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -105,6 +105,7 @@ string(TOUPPER ${FLAVOUR} RADIO_NAME) string(REPLACE "+" "P" RADIO_NAME ${RADIO_NAME}) string(CONCAT RADIO_NAME "RADIO_" ${RADIO_NAME}) add_definitions(-D${RADIO_NAME}) +set(${RADIO_NAME} YES) set(HW_DESC_JSON ${FLAVOUR}.json) AddHardwareDefTarget(${HW_DESC_JSON}) From d3f3d25ab0a0a8acd0837b06a5f1414b29f9f213 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 08:40:11 +0200 Subject: [PATCH 26/49] Remove PCB/FLAVOUR refs from Companion CMakeLists.txt --- companion/src/CMakeLists.txt | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 2ddeb354fe6..72de9d98ca0 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -301,22 +301,6 @@ add_subdirectory(tests) ############# Install #################### -# the current flavour is not automatically added if build in the current cmake iteration, so always -# add its library name to be sure -string(TOLOWER ${PCB} FLAVOUR) - -if(PCBREV) - if(PCB STREQUAL X7 AND PCBREV STREQUAL ACCESS) - set(FLAVOUR x7access) - elseif(PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019) - set(FLAVOUR x9d+2019) - elseif(PCB STREQUAL X10 AND PCBREV STREQUAL EXPRESS) - set(FLAVOUR x10express) - else() - string(TOLOWER ${PCBREV} FLAVOUR) - endif() -endif(PCBREV) - set(COMPANION_TARGETS_DIR_ROOT "${COMPANION_SRC_DIRECTORY}/../targets") if(CMAKE_SYSTEM_NAME STREQUAL "Linux") From bcbfa40c71305ac12de029ba03f2e30edac2fccb Mon Sep 17 00:00:00 2001 From: raphaelcoeffic Date: Mon, 2 Oct 2023 06:49:15 +0200 Subject: [PATCH 27/49] WiP: WASI # Conflicts: # radio/src/audio.cpp # radio/src/targets/simu/CMakeLists.txt # radio/src/targets/simu/simulib.cpp # radio/src/tests/CMakeLists.txt --- CMakeLists.txt | 38 +++- cmake/FetchWasiSDK.cmake | 41 ++++ cmake/FindWasiSDK.cmake | 47 +++++ cmake/NativeTargets.cmake | 8 +- companion/src/simulation/simulatorinterface.h | 1 - companion/src/simulation/simulatorwidget.cpp | 1 - radio/src/CMakeLists.txt | 12 +- radio/src/audio.cpp | 7 - radio/src/edgetx.h | 5 - radio/src/gps_nmea.cpp | 4 +- radio/src/gps_ubx.cpp | 4 +- radio/src/gui/colorlcd/libui/bitmapbuffer.cpp | 6 + radio/src/gui/colorlcd/libui/bitmapbuffer.h | 7 +- radio/src/gui/colorlcd/libui/dialog.cpp | 4 +- radio/src/gui/common/stdlcd/menus.cpp | 5 +- radio/src/mixer.cpp | 1 - .../targets/common/arm/stm32/board_common.h | 5 - radio/src/targets/simu/CMakeLists.txt | 175 +++++++----------- radio/src/targets/simu/adc_driver.cpp | 17 +- radio/src/targets/simu/audio_driver.cpp | 2 +- radio/src/targets/simu/html/simu.html | 52 ++++++ radio/src/targets/simu/interface.md | 47 +++++ radio/src/targets/simu/opentxsimulator.cpp | 19 +- radio/src/targets/simu/opentxsimulator.h | 1 - radio/src/targets/simu/sdl_simu.cpp | 25 ++- radio/src/targets/simu/simpgmspace.h | 69 ------- radio/src/targets/simu/simuaudio.cpp | 1 + radio/src/targets/simu/simuaudio.h | 3 - .../simu/{simpgmspace.cpp => simulib.cpp} | 27 +-- radio/src/targets/simu/simulib.h | 70 +++++++ radio/src/targets/simu/switch_driver.cpp | 2 + radio/src/tests/gtests.h | 1 + radio/src/thirdparty/Lua/src/luaconf.h | 4 + 33 files changed, 434 insertions(+), 277 deletions(-) create mode 100644 cmake/FetchWasiSDK.cmake create mode 100644 cmake/FindWasiSDK.cmake create mode 100644 radio/src/targets/simu/html/simu.html create mode 100644 radio/src/targets/simu/interface.md delete mode 100644 radio/src/targets/simu/simpgmspace.h rename radio/src/targets/simu/{simpgmspace.cpp => simulib.cpp} (94%) create mode 100644 radio/src/targets/simu/simulib.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bf1e6705cf..e77bb11086b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,8 @@ set(VERSION_REVISION "0") set(CODENAME "dev") string(TIMESTAMP BUILD_YEAR "%Y") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") + if(MINGW OR WIN32) set(CMAKE_OBJECT_PATH_MAX 200) endif() @@ -75,6 +77,28 @@ if(EdgeTX_SUPERBUILD) EXCLUDE_FROM_ALL TRUE ) + # Webasm targets + if(ENABLE_WASM) + include(FetchWasiSDK) + find_package(WasiSDK REQUIRED) + + ExternalProject_Add(wasm + SOURCE_DIR ${CMAKE_SOURCE_DIR} + BINARY_DIR ${CMAKE_BINARY_DIR}/wasm + CMAKE_ARGS + ${CMAKE_ARGS} + -Wno-dev + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_TOOLCHAIN_FILE=${WASI_SDK_PATH}/share/cmake/wasi-sdk-pthread.cmake + CMAKE_CACHE_ARGS + -DEdgeTX_SUPERBUILD:BOOL=0 + -DNATIVE_BUILD:BOOL=1 + -DDISABLE_COMPANION:BOOL=1 + INSTALL_COMMAND "" + EXCLUDE_FROM_ALL TRUE + ) + endif() + add_custom_target(configure DEPENDS native-configure arm-none-eabi-configure) @@ -93,6 +117,13 @@ if(EdgeTX_SUPERBUILD) DEPENDS native-configure ) + if(ENABLE_WASM) + add_custom_target(wasi-module + COMMAND ${CMAKE_COMMAND} --build wasm --target wasi-module --parallel + DEPENDS wasm-configure + ) + endif() + add_custom_target(companion COMMAND ${CMAKE_COMMAND} --build native --target companion --parallel DEPENDS native-configure @@ -127,8 +158,6 @@ if(EdgeTX_SUPERBUILD) return() endif() -enable_language(ASM) - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) include(GenericDefinitions) @@ -138,11 +167,14 @@ else() message(STATUS "EdgeTX ${VERSION}-${VERSION_SUFFIX} @ ${GIT_STR}") endif() -if(NATIVE_BUILD) +if(NATIVE_BUILD AND NOT WASI) include(NativeTargets) else() # Prevent CMake warnings set(IGNORE "${LIBUSB1_ROOT_DIR}" "${OPENSSL_ROOT_DIR}") endif() +# Prevent CMake warnings +set(IGNORE "${ENABLE_WASM}") + add_subdirectory(${RADIO_SRC_DIR}) diff --git a/cmake/FetchWasiSDK.cmake b/cmake/FetchWasiSDK.cmake new file mode 100644 index 00000000000..5c54a73154d --- /dev/null +++ b/cmake/FetchWasiSDK.cmake @@ -0,0 +1,41 @@ +cmake_minimum_required(VERSION 3.14) + +set(WASI_SDK_VERSION "25") +set(WASI_SDK_FULL_VERSION "${WASI_SDK_VERSION}.0") + +# Determine platform and architecture +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + set(WASI_SDK_PLATFORM "linux") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") + set(WASI_SDK_PLATFORM "macos") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + set(WASI_SDK_PLATFORM "windows") +else() + message(FATAL_ERROR "Unsupported platform: ${CMAKE_HOST_SYSTEM_NAME}") +endif() + +if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64") + set(WASI_SDK_ARCH "x86_64") +elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64|arm64") + set(WASI_SDK_ARCH "arm64") +else() + message(FATAL_ERROR "Unsupported Linux architecture: ${CMAKE_HOST_SYSTEM_PROCESSOR}") +endif() + +set(WASI_SDK_BASE_URL "https://github.com/WebAssembly/wasi-sdk/releases/download") +set(WASI_SDK_FILENAME "wasi-sdk-${WASI_SDK_VERSION}.0-${WASI_SDK_ARCH}-${WASI_SDK_PLATFORM}") +set(WASI_SDK_URL "${WASI_SDK_BASE_URL}/wasi-sdk-${WASI_SDK_VERSION}/${WASI_SDK_FILENAME}.tar.gz") + +set(FETCHCONTENT_QUIET FALSE) + +include(FetchContent) +FetchContent_Declare( + WasiSDK + URL ${WASI_SDK_URL} + DOWNLOAD_EXTRACT_TIMESTAMP true + FIND_PACKAGE_ARGS +) + +FetchContent_MakeAvailable(WasiSDK) + +set(WASI_SDK_PATH ${wasisdk_SOURCE_DIR}) diff --git a/cmake/FindWasiSDK.cmake b/cmake/FindWasiSDK.cmake new file mode 100644 index 00000000000..e7cebdeafe1 --- /dev/null +++ b/cmake/FindWasiSDK.cmake @@ -0,0 +1,47 @@ +# FindWasiSDK.cmake +# Module to find WASI SDK installation +# +# This module defines the following variables: +# WasiSDK_FOUND - True if WASI SDK is found +# WasiSDK_ROOT_DIR - Root directory of WASI SDK installation +# +# Usage: +# set(WASI_SDK_PATH "/path/to/wasi-sdk") +# find_package(WasiSDK REQUIRED) + +cmake_minimum_required(VERSION 3.10) + +# Use WASI_SDK_PATH if provided, otherwise try to find it +if(WASI_SDK_PATH) + set(_wasi_sdk_search_paths "${WASI_SDK_PATH}") +else() + # Default search paths for common WASI SDK installations + set(_wasi_sdk_search_paths + "$ENV{WASI_SDK_PATH}" + "/opt/wasi-sdk" + ) +endif() + +# Find the WASI SDK root directory by looking for the toolchain file +find_path(WasiSDK_ROOT_DIR + NAMES share/cmake/wasi-sdk.cmake + PATHS ${_wasi_sdk_search_paths} + DOC "WASI SDK root directory" + NO_DEFAULT_PATH +) + +# Handle find_package arguments +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(WasiSDK + DEFAULT_MSG + WasiSDK_ROOT_DIR +) + +# Mark variables as advanced +mark_as_advanced( + WasiSDK_ROOT_DIR +) + +if(WasiSDK_FOUND) + set(WASI_SDK_PATH ${WasiSDK_ROOT_DIR}) +endif() diff --git a/cmake/NativeTargets.cmake b/cmake/NativeTargets.cmake index 30b653a5511..f44dfd05c5e 100644 --- a/cmake/NativeTargets.cmake +++ b/cmake/NativeTargets.cmake @@ -51,24 +51,24 @@ include(FetchGtest) add_custom_target(tests-radio COMMAND ${CMAKE_CURRENT_BINARY_DIR}/gtests-radio DEPENDS gtests-radio - ) +) if(Qt6Core_FOUND AND NOT DISABLE_COMPANION) add_subdirectory(${COMPANION_SRC_DIRECTORY}) add_custom_target(tests-companion COMMAND ${CMAKE_CURRENT_BINARY_DIR}/gtests-companion DEPENDS gtests-companion - ) + ) add_custom_target(gtests DEPENDS gtests-radio gtests-companion - ) + ) add_custom_target(tests DEPENDS tests-radio tests-companion ) else() add_custom_target(gtests DEPENDS gtests-radio - ) + ) add_custom_target(tests DEPENDS tests-radio ) diff --git a/companion/src/simulation/simulatorinterface.h b/companion/src/simulation/simulatorinterface.h index 2d9850eed0f..5e1bc4ac528 100644 --- a/companion/src/simulation/simulatorinterface.h +++ b/companion/src/simulation/simulatorinterface.h @@ -177,7 +177,6 @@ class SimulatorInterface : public QObject void started(); void stopped(); void heartbeat(qint32 loops, qint64 timestamp); - void runtimeError(const QString & error); void lcdChange(bool backlightEnable); void phaseChanged(qint8 phase, const QString & name); void channelOutValueChange(quint8 index, qint32 value, qint32 limit); diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp index b4e3e26865e..3c8092357ca 100644 --- a/companion/src/simulation/simulatorwidget.cpp +++ b/companion/src/simulation/simulatorwidget.cpp @@ -104,7 +104,6 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato connect(simulator, &SimulatorInterface::started, this, &SimulatorWidget::onSimulatorStarted); connect(simulator, &SimulatorInterface::heartbeat, this, &SimulatorWidget::onSimulatorHeartbeat); - connect(simulator, &SimulatorInterface::runtimeError, this, &SimulatorWidget::onSimulatorError); connect(simulator, &SimulatorInterface::phaseChanged, this, &SimulatorWidget::onPhaseChanged); connect((SimulatorMainWindow *)parent, &SimulatorMainWindow::txBatteryVoltageChanged, this, &SimulatorWidget::onTxBatteryVoltageChanged); diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 923fd2b3038..c82b3210d86 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -34,7 +34,6 @@ option(SIMU_LUA_COMPILER "Pre-compile and save Lua scripts in simulator." ON) option(FAS_PROTOTYPE "Support of old FAS prototypes (different resistors)" OFF) option(RAS "RAS (SWR) enabled" ON) option(TEMPLATES "Model templates menu" OFF) -option(TRACE_SIMPGMSPACE "Turn on traces in simpgmspace.cpp" ON) option(TRACE_LUA_INTERNALS "Turn on traces for Lua internals" OFF) option(TRACE_AUDIO "Traces audio enabled" OFF) option(DEBUG_SEGGER_RTT "Debug output to Segger RTT" OFF) @@ -517,8 +516,15 @@ if(NATIVE_BUILD) add_dependencies(radiolib_native ${RADIO_DEPENDENCIES}) set_property(TARGET radiolib_native PROPERTY POSITION_INDEPENDENT_CODE ON) + if(EMSCRIPTEN) + target_compile_options(radiolib_native PUBLIC -pthread -g) + endif() + add_subdirectory(targets/simu) - add_subdirectory(tests) + + if(NOT WASI) + add_subdirectory(tests) + endif() endif() set(SRC ${SRC} ${FIRMWARE_SRC}) @@ -538,6 +544,8 @@ if(NOT USE_UNSUPPORTED_TOOLCHAIN AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_EQUA message(FATAL_ERROR "Only Arm GNU Toolchain version 14.2.rel1 is supported!!") endif() +enable_language(ASM) + set(CMAKE_C_FLAGS "${FIRMWARE_C_FLAGS}") set(CMAKE_C_FLAGS_DEBUG "${FIRMWARE_C_FLAGS_DEBUG}") set(CMAKE_C_FLAGS_RELEASE "${FIRMWARE_C_FLAGS}") diff --git a/radio/src/audio.cpp b/radio/src/audio.cpp index 5a082e286ab..29aa2da35af 100644 --- a/radio/src/audio.cpp +++ b/radio/src/audio.cpp @@ -730,13 +730,6 @@ void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t f void AudioQueue::playFile(const char * filename, uint8_t flags, uint8_t id, int8_t fragmentVolume) { -#if defined(SIMU) - TRACE("playFile(\"%s\", flags=%x, id=%d fragmentVolume=%d ee_general=%d)", filename, flags, id, fragmentVolume, g_eeGeneral.wavVolume); - if (strlen(filename) > AUDIO_FILENAME_MAXLEN) { - TRACE("file name too long! maximum length is %d characters", AUDIO_FILENAME_MAXLEN); - } -#endif - if (!sdMounted()) return; diff --git a/radio/src/edgetx.h b/radio/src/edgetx.h index 2b8b05586c7..50ae83e1e98 100644 --- a/radio/src/edgetx.h +++ b/radio/src/edgetx.h @@ -27,11 +27,6 @@ #include "edgetx_helpers.h" #include "touch.h" #include "switches.h" - -#if defined(SIMU) -#include "targets/simu/simpgmspace.h" -#endif - #include "board.h" #if !defined(SIMU) diff --git a/radio/src/gps_nmea.cpp b/radio/src/gps_nmea.cpp index 00fa047b2e7..b7f5033a530 100644 --- a/radio/src/gps_nmea.cpp +++ b/radio/src/gps_nmea.cpp @@ -256,11 +256,11 @@ bool gpsNewFrameNMEA(char c) gpsData.numSat = gps_Msg.numSat; gpsData.hdop = gps_Msg.hdop; if (gps_Msg.fix) { - __disable_irq(); // do the atomic update of lat/lon + // __disable_irq(); // do the atomic update of lat/lon gpsData.latitude = gps_Msg.latitude; gpsData.longitude = gps_Msg.longitude; gpsData.altitude = gps_Msg.altitude; - __enable_irq(); + // __enable_irq(); } break; case FRAME_RMC: diff --git a/radio/src/gps_ubx.cpp b/radio/src/gps_ubx.cpp index 90ee23c3cf2..babf2025157 100644 --- a/radio/src/gps_ubx.cpp +++ b/radio/src/gps_ubx.cpp @@ -158,11 +158,11 @@ static void gpsProcessMessage(uint16_t msg_type, uint16_t msg_len, gpsData.speed = pvt->gSpeed / 100; // speed in 0.1m/s gpsData.groundCourse = pvt->headMot / 10000; // degrees * 10 if (gpsData.fix) { - __disable_irq(); // do the atomic update of lat/lon + // __disable_irq(); // do the atomic update of lat/lon gpsData.longitude = pvt->lon / 10; // degrees * 1.000.000 gpsData.latitude = pvt->lat / 10; // degrees * 1.000.000 gpsData.altitude = pvt->hMSL / 100; // altitude in 0.1m - __enable_irq(); + // __enable_irq(); } #if defined(RTCLOCK) diff --git a/radio/src/gui/colorlcd/libui/bitmapbuffer.cpp b/radio/src/gui/colorlcd/libui/bitmapbuffer.cpp index 13707fce04a..0d6531390e8 100644 --- a/radio/src/gui/colorlcd/libui/bitmapbuffer.cpp +++ b/radio/src/gui/colorlcd/libui/bitmapbuffer.cpp @@ -529,6 +529,12 @@ coord_t BitmapBuffer::drawSizedText(coord_t x, coord_t y, const char *s, return ((flags & RIGHT) ? orig_pos : pos) - offsetX; } +coord_t BitmapBuffer::drawText(coord_t x, coord_t y, const char* s, LcdFlags flags) +{ + if (!s) return x; + return drawSizedText(x, y, s, strlen(s), flags); +} + // Resize and convert to LVGL image data format with alpha blending to // background color void BitmapBuffer::resizeToLVGL(coord_t w, coord_t h) diff --git a/radio/src/gui/colorlcd/libui/bitmapbuffer.h b/radio/src/gui/colorlcd/libui/bitmapbuffer.h index 0d9f2ca083c..a9a1b0cc483 100644 --- a/radio/src/gui/colorlcd/libui/bitmapbuffer.h +++ b/radio/src/gui/colorlcd/libui/bitmapbuffer.h @@ -19,6 +19,7 @@ #pragma once #include "libopenui_defines.h" +#include struct MaskBitmap; class TelemetryItem; @@ -128,11 +129,7 @@ class BitmapBuffer coord_t drawSizedText(coord_t x, coord_t y, const char* s, uint8_t len, LcdFlags flags = 0); - coord_t drawText(coord_t x, coord_t y, const char* s, LcdFlags flags = 0) - { - if (!s) return x; - return drawSizedText(x, y, s, strlen(s), flags); - } + coord_t drawText(coord_t x, coord_t y, const char* s, LcdFlags flags = 0); void drawBitmap(coord_t x, coord_t y, const BitmapBuffer* bmp, coord_t srcx = 0, coord_t srcy = 0, coord_t srcw = 0, diff --git a/radio/src/gui/colorlcd/libui/dialog.cpp b/radio/src/gui/colorlcd/libui/dialog.cpp index 29f3863de73..9ac13ab5656 100644 --- a/radio/src/gui/colorlcd/libui/dialog.cpp +++ b/radio/src/gui/colorlcd/libui/dialog.cpp @@ -174,9 +174,7 @@ LabelDialog::LabelDialog(const char *label, int length, const char* title, std::function _saveHandler) : ModalWindow(false), saveHandler(std::move(_saveHandler)) { - assert(length <= MAX_LABEL_LENGTH); - - strncpy(this->label, label, length); + strncpy(this->label, label, std::min(length, MAX_LABEL_LENGTH)); this->label[length] = '\0'; auto form = new Window(this, rect_t{}); diff --git a/radio/src/gui/common/stdlcd/menus.cpp b/radio/src/gui/common/stdlcd/menus.cpp index f185a902e27..75630e71c6f 100644 --- a/radio/src/gui/common/stdlcd/menus.cpp +++ b/radio/src/gui/common/stdlcd/menus.cpp @@ -30,8 +30,8 @@ uint8_t menuLevel = 0; void popMenu() { killEvents(KEY_EXIT); + if (menuLevel == 0) return; - assert(menuLevel > 0); menuLevel = menuLevel - 1; menuEvent = EVT_ENTRY_UP; // TODO ? AUDIO_KEY_PRESS(); @@ -57,6 +57,7 @@ void chainMenu(MenuHandlerFunc newMenu) void pushMenu(MenuHandlerFunc newMenu) { killAllEvents(); + if (menuLevel == DIM(menuHandlers) - 1) return; if (menuLevel == 0) { if (newMenu == menuTabGeneral[0].menuFunc) @@ -71,8 +72,6 @@ void pushMenu(MenuHandlerFunc newMenu) menuLevel++; - assert(menuLevel < DIM(menuHandlers)); - menuHandlers[menuLevel] = newMenu; menuEvent = EVT_ENTRY; // ? AUDIO_KEY_PRESS(); diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index 3e255f3058e..658baa99c08 100644 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -1180,7 +1180,6 @@ void evalMixes(uint8_t tick10ms) weight += fp_act[p]; } } - assert(weight); mixerCurrentFlightMode = fm; } else { diff --git a/radio/src/targets/common/arm/stm32/board_common.h b/radio/src/targets/common/arm/stm32/board_common.h index f4e9067c4b6..ea64638dcb1 100644 --- a/radio/src/targets/common/arm/stm32/board_common.h +++ b/radio/src/targets/common/arm/stm32/board_common.h @@ -38,9 +38,4 @@ #endif #endif - -#if defined(SIMU) -#include "../simu/simpgmspace.h" -#endif - #include "delays_driver.h" diff --git a/radio/src/targets/simu/CMakeLists.txt b/radio/src/targets/simu/CMakeLists.txt index cd601777ac8..d7924ce30d0 100644 --- a/radio/src/targets/simu/CMakeLists.txt +++ b/radio/src/targets/simu/CMakeLists.txt @@ -5,8 +5,27 @@ if(NOT SIMU_TARGET) return() endif() +if(MINGW) + # struct packing breaks on MinGW w/out -mno-ms-bitfields: + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 + # http://stackoverflow.com/questions/24015852/struct-packing-and-alignment-with-mingw + # + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields") +endif() + +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0") + +if(ASAN AND NOT WASI) + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address") +endif() + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}") + set(SIMU_DRIVERS - simpgmspace.cpp + simulib.cpp simufatfs.cpp simudisk.cpp simulcd.cpp @@ -20,7 +39,7 @@ set(SIMU_DRIVERS bt_driver.cpp timers_driver.cpp abnormal_reboot.cpp - ) +) set(HW_DESC_JSON ${FLAVOUR}.json) # AddHardwareDefTarget(${HW_DESC_JSON}) @@ -32,35 +51,22 @@ set(SIMU_DRIVERS ${SIMU_DRIVERS} ${CMAKE_CURRENT_BINARY_DIR}/simu_keys.inc ${CMAKE_CURRENT_BINARY_DIR}/simu_switches.inc ${CMAKE_CURRENT_BINARY_DIR}/hal_adc_inputs.inc - ${RADIO_SRC_DIR}/boards/hw_defs/${HW_DESC_JSON} + ${CMAKE_CURRENT_BINARY_DIR}/${HW_DESC_JSON} ) -include_directories(${CMAKE_CURRENT_BINARY_DIR}) - -if(SIMU_LUA_COMPILER) - add_definitions(-DLUA_COMPILER) -endif() -if(SIMU_BOOTLOADER) - add_definitions(-DSIMU_BOOTLOADER) - set(SIMU_DRIVERS ${SIMU_DRIVERS} - ../../bootloader/bin_files.cpp - ../../bootloader/boot.cpp - # TODO - how to handle this for B&W (not currently used)? - ../../gui/colorlcd/boot_menu.cpp - ../../thirdparty/lz4/lz4.c - ) -endif() +include_directories(${CMAKE_CURRENT_BINARY_DIR}) # Pack all simu driver sources into an object lib add_library(simu_drivers OBJECT EXCLUDE_FROM_ALL - ${SIMU_DRIVERS}) + ${SIMU_DRIVERS} +) get_property(SIMU_SRC_OPTIONS TARGET radiolib_native - PROPERTY INTERFACE_COMPILE_OPTIONS) + PROPERTY INTERFACE_COMPILE_OPTIONS +) target_compile_options(simu_drivers PRIVATE ${SIMU_SRC_OPTIONS}) - set_property(TARGET simu_drivers PROPERTY POSITION_INDEPENDENT_CODE ON) if(SIMU_AUX) @@ -71,101 +77,47 @@ endif() set(SIMU_SRC $ $ - ) +) set(SIMU_SRC ${SIMU_SRC} PARENT_SCOPE) # Set the options as well in parent scope to be used by unit tests set(SIMU_SRC_OPTIONS ${SIMU_SRC_OPTIONS} PARENT_SCOPE) -if(Qt6Widgets_FOUND) - set(SIMULATOR_FLAVOUR edgetx-${FLAVOUR}) - set(SIMULATOR_TARGET ${SIMULATOR_FLAVOUR}-simulator) +if(WASI) + set(WASI_COMPILE_OPTIONS + -Os + -fno-exceptions + -fno-rtti + -ffunction-sections + -fdata-sections + # setjmp / longjmp handling + -mllvm -wasm-enable-sjlj + ) - add_definitions(-DSIMULATOR_FLAVOUR="${SIMULATOR_FLAVOUR}") - include_directories(${COMPANION_SRC_DIRECTORY} ${COMPANION_SRC_DIRECTORY}/simulation) + target_compile_options(radiolib_native PUBLIC ${WASI_COMPILE_OPTIONS}) + target_compile_options(simu_drivers PUBLIC ${WASI_COMPILE_OPTIONS}) - qt_wrap_cpp(SIMULATOR_SRC - ${COMPANION_SRC_DIRECTORY}/simulation/simulatorinterface.h - opentxsimulator.h + add_executable(wasi-module EXCLUDE_FROM_ALL + ${SIMU_SRC} ) - list(APPEND SIMULATOR_SRC ${SIMU_SRC} opentxsimulator.cpp) - - add_library(${SIMULATOR_TARGET} SHARED ${SIMULATOR_SRC}) - set_target_properties(${SIMULATOR_TARGET} PROPERTIES PREFIX "lib") - - if(TARGET SDL2::SDL2) - set(SDL2_LIBRARIES SDL2::SDL2) - target_sources(${SIMULATOR_TARGET} PRIVATE simuaudio.cpp) - else() - target_sources(${SIMULATOR_TARGET} PRIVATE no_audio.cpp) - endif() - - target_compile_options(${SIMULATOR_TARGET} PRIVATE ${SIMU_SRC_OPTIONS}) - target_compile_definitions(${SIMULATOR_TARGET} PUBLIC ${APP_COMMON_DEFINES}) - target_link_libraries(${SIMULATOR_TARGET} ${SDL2_LIBRARIES} Qt::Core Qt::SerialPort) - - # Remove debug symbols on release builds - if("${CMAKE_BUILD_TYPE}" STREQUAL "Release") - add_custom_command(TARGET ${SIMULATOR_TARGET} POST_BUILD - COMMAND ${CMAKE_STRIP} -x $) - endif() - - add_custom_command( - TARGET ${SIMULATOR_TARGET} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/plugins/ - COMMAND ${CMAKE_COMMAND} -E copy - $ ${CMAKE_BINARY_DIR}/plugins/ + set_target_properties(wasi-module PROPERTIES SUFFIX ".wasm") + + target_compile_options(wasi-module PUBLIC ${WASI_COMPILE_OPTIONS}) + target_link_options(wasi-module PRIVATE + -Wl,--import-memory + -Wl,--export-memory + -Wl,--max-memory=2147483648 + -Wl,--gc-sections + # enable runtime to check stack / heap + -Wl,--export=__heap_base,--export=__data_end + -Wl,--export=malloc -Wl,--export=free + # no main() + -mexec-model=reactor + # setjmp / longjmp + -Wl,-mllvm,-wasm-enable-sjlj + -lsetjmp ) - - # Introduced at 2.5 - TODO replace with a code change - # When compiled shared simulators using libopenui and Companion have classes named MainWindow - # When the simulator is launched from Companion the runtime dynamic linking can result in Companion overiding the simulator - # and crashing the simulator under some OSes - # The flag forces the runtime linker to always look for references in the simulator first - if (NOT CLANG) - target_link_options(${SIMULATOR_TARGET} PRIVATE "LINKER:-Bsymbolic") - endif() - # - add_custom_target(libsimulator DEPENDS ${SIMULATOR_TARGET}) - - # Prepare the "all-simu-libs" target to build simulator libraries for *every* supported PCB type (PCB_TYPES list) - # (a fast build machine or corresponding amount of patience is recommended for this target). - if(${CMAKE_GENERATOR} MATCHES ".*Unix Makefiles$") - # Ensure parallel builds with GCC make (try with MAKEFLAGS but this seems to be getting clobbered somewhere). - # otherwise 'make' may complain: "warning: jobserver unavailable: using -j1..." and build single-threaded. (Ninja always rocks this.) - set(mkflags "$ENV{MAKEFLAGS}") - if (mkflags STREQUAL "") - set(mkflags "-j") - endif() - endif() - set(all_libs_cmd ${CMAKE_COMMAND} -E echo "Building all simulator libraries") - foreach(pcb ${PCB_TYPES}) - set(pcbrev "") - if(pcb STREQUAL X12S) - set(pcbrev "-DPCBREV=13") - endif() - set(all_libs_cmd ${all_libs_cmd} && ${CMAKE_COMMAND} -DPCB=${pcb} ${pcbrev} -Wno-dev ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} && ${CMAKE_COMMAND} --build . --target libsimulator -- ${mkflags}) - endforeach() - add_custom_target(all-simu-libs COMMAND ${all_libs_cmd} USES_TERMINAL WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) -endif() - -if(MINGW) - # struct packing breaks on MinGW w/out -mno-ms-bitfields: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 & http://stackoverflow.com/questions/24015852/struct-packing-and-alignment-with-mingw - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields") -endif() - -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0") - -if(ASAN) - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address") -endif() - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}") - -if(TARGET SDL2::SDL2) +else() add_executable(simu EXCLUDE_FROM_ALL ${SIMU_SRC} @@ -177,15 +129,16 @@ if(TARGET SDL2::SDL2) sdl_simu.cpp ) - include(FetchImgui) target_compile_options(simu PUBLIC -DSIMU) add_png_target(image_assets "assets/images/*.png") add_dependencies(simu image_assets) + # STB set(STB_DIR ${RADIO_SRC_DIR}/thirdparty/stb) target_include_directories(simu PUBLIC ${STB_DIR}) - target_link_libraries(simu PUBLIC imgui) -endif() -PrintTargetReport("simu/libsimulator") + # ImGui + include(FetchImgui) + target_link_libraries(simu PRIVATE imgui) +endif() diff --git a/radio/src/targets/simu/adc_driver.cpp b/radio/src/targets/simu/adc_driver.cpp index dfb14291fbf..33c54162fff 100644 --- a/radio/src/targets/simu/adc_driver.cpp +++ b/radio/src/targets/simu/adc_driver.cpp @@ -19,15 +19,14 @@ * GNU General Public License for more details. */ +#include "simulib.h" #include "hal/adc_driver.h" -#include "definitions.h" +#include "definitions.h" #include "myeeprom.h" -#include "translations.h" +#include "translations.h" #include "hal_adc_inputs.inc" -#include "board.h" -#include "edgetx.h" void enableVBatBridge(){} void disableVBatBridge(){} @@ -44,19 +43,23 @@ uint16_t getRTCBatteryVoltage() return 300; } -extern uint16_t simu_get_analog(uint8_t idx); +extern uint16_t simuGetAnalog(uint8_t idx); static bool simu_start_conversion() { int max_input = adcGetInputOffset(ADC_INPUT_VBAT); for (int i = 0; i < max_input; i++) { - setAnalogValue(i, simu_get_analog(i)); + setAnalogValue(i, simuGetAnalog(i)); } // set batteries default voltages int i = adcGetInputOffset(ADC_INPUT_VBAT); if (i > 0) { - uint16_t volts = (uint16_t)((g_eeGeneral.vBatWarn > 0 ? g_eeGeneral.vBatWarn : BATTERY_WARN) + 5) * 10; // +0.5V and prec2 + // +0.5V and prec2 + uint16_t volts = (uint16_t)((g_eeGeneral.vBatWarn > 0 ? g_eeGeneral.vBatWarn + : BATTERY_WARN) + + 5) * + 10; setAnalogValue(i, volts * 2); } diff --git a/radio/src/targets/simu/audio_driver.cpp b/radio/src/targets/simu/audio_driver.cpp index 05e5be2fe2c..26e1b177a31 100644 --- a/radio/src/targets/simu/audio_driver.cpp +++ b/radio/src/targets/simu/audio_driver.cpp @@ -20,7 +20,7 @@ */ #include "audio.h" -#include "simuaudio.h" +#include "simulib.h" #if !defined(SOFTWARE_VOLUME) static int _simu_volume = 0; diff --git a/radio/src/targets/simu/html/simu.html b/radio/src/targets/simu/html/simu.html new file mode 100644 index 00000000000..0838a6a8c17 --- /dev/null +++ b/radio/src/targets/simu/html/simu.html @@ -0,0 +1,52 @@ + + + + +
+ +
+ + + diff --git a/radio/src/targets/simu/interface.md b/radio/src/targets/simu/interface.md new file mode 100644 index 00000000000..0f7cd82782f --- /dev/null +++ b/radio/src/targets/simu/interface.md @@ -0,0 +1,47 @@ +# Simulator Plugin Interface + +## Methods + +```c + +/** + * Simu module functions + */ + +/* Simulator plugin name */ +const char* simu_get_name(); + +/* Start/stop */ +void simuInit(); +void simuStop(); // should be async but isn't +bool simuIsRunning(); + +/* Live data */ +unsigned int simu_get_num_outputs(); +const int16_t* simu_get_outputs(); + +unsigned int simu_get_num_channels(); +const int16_t* simu_get_channels(); + +unsigned int simu_get_num_logical_switches(); +uint32_t* simu_get_logical_switches(); + +uint8_t simu_get_flight_mode(); +uint8_t simu_get_trim_value(uint8_t flight_mode, uint8_t axis); + +uint8_t simu_get_stick_mode(); +uint16_t simu_get_trim_range(); + +void simu_get_flight_mode_name(uint8_t flight_mode, char* buffer, int buflen); + +// TODO: get GVar definitions + values + +/** + * Callbacks / native functions + */ +void simu_read_analogs(uint16_t* analogs, int num_analogs); +uint32_t simu_read_keys(); +uint32_t simu_read_trims(); +void simu_flush_display(bool backlight, uint8_t* buffer, int buflen); +``` + diff --git a/radio/src/targets/simu/opentxsimulator.cpp b/radio/src/targets/simu/opentxsimulator.cpp index f4b97fe7f49..201564c9d98 100644 --- a/radio/src/targets/simu/opentxsimulator.cpp +++ b/radio/src/targets/simu/opentxsimulator.cpp @@ -284,8 +284,9 @@ void OpenTxSimulator::start(const char * filename, bool tests) QMutexLocker lckr(&m_mtxSimuMain); QMutexLocker slckr(&m_mtxSettings); simuAudioInit(); - simuStart(tests, simuSdDirectory.toLatin1().constData(), - simuSettingsDirectory.toLatin1().constData()); + simuFatfsSetPaths(simuSdDirectory.toLatin1().constData(), + simuSettingsDirectory.toLatin1().constData()); + simuStart(tests); emit started(); QTimer::singleShot(0, this, SLOT(run())); // old style for Qt < 5.4 @@ -743,12 +744,9 @@ void OpenTxSimulator::run() if (!loops) ts.start(); - if (isStopRequested()) { - return; - } + if (isStopRequested()) return; + if (!isRunning()) { - QString err(getError()); - emit runtimeError(err); emit stopped(); return; } @@ -882,6 +880,7 @@ uint8_t OpenTxSimulator::getStickMode() return limit(0, g_eeGeneral.stickMode, 3); } +// TODO: remove this const char * OpenTxSimulator::getPhaseName(unsigned int phase) { static char buff[LEN_FLIGHT_MODE_NAME+1]; @@ -898,12 +897,6 @@ const QString OpenTxSimulator::getCurrentPhaseName() return name; } -const char * OpenTxSimulator::getError() -{ - return main_thread_error; -} - - /* * OpenTxSimulatorFactory */ diff --git a/radio/src/targets/simu/opentxsimulator.h b/radio/src/targets/simu/opentxsimulator.h index 4936d32129d..53a52a5b9c8 100644 --- a/radio/src/targets/simu/opentxsimulator.h +++ b/radio/src/targets/simu/opentxsimulator.h @@ -106,7 +106,6 @@ class DLLEXPORT OpenTxSimulator : public SimulatorInterface uint8_t getStickMode(); const char * getPhaseName(unsigned int phase); const QString getCurrentPhaseName(); - const char * getError(); QString simuSdDirectory; QString simuSettingsDirectory; diff --git a/radio/src/targets/simu/sdl_simu.cpp b/radio/src/targets/simu/sdl_simu.cpp index feb4fe02d81..c63fc864fb1 100644 --- a/radio/src/targets/simu/sdl_simu.cpp +++ b/radio/src/targets/simu/sdl_simu.cpp @@ -38,6 +38,10 @@ #include "hal/rotary_encoder.h" #include "hal/switch_driver.h" +#ifdef __EMSCRIPTEN__ +#include +#endif + #if !SDL_VERSION_ATLEAST(2,0,19) #error This backend requires SDL 2.0.19+ because of SDL_RenderGeometryRaw() function #endif @@ -62,7 +66,7 @@ #include "display.h" #include "simuaudio.h" -#include "simpgmspace.h" +#include "simulib.h" #include "hal/key_driver.h" #include "hal/switch_driver.h" @@ -83,9 +87,11 @@ static SDL_Texture* screen_frame_buffer; static GimbalState stick_left = {{0.5f, 0.5f}, false}; static GimbalState stick_right = {{0.5f, 0.5f}, false}; +#if !defined(__EMSCRIPTEN__) static const unsigned char _icon_png[] = { #include "icon.lbm" }; +#endif #if defined(ROTARY_ENCODER_NAVIGATION) extern volatile rotenc_t rotencValue; @@ -292,7 +298,6 @@ static SDL_Texture* LoadTexture(SDL_Renderer* renderer, const unsigned char* pix return texture; } - static float switches_width() { const int max_sw_line = MAX_SWITCHES / 2; @@ -731,10 +736,12 @@ int main(int argc, char* argv[]) SDL_GetRendererInfo(renderer, &info); SDL_Log("Current SDL_Renderer: %s", info.name); +#if !defined(__EMSCRIPTEN__) SDL_Surface* icon = LoadImage(_icon_png, sizeof(_icon_png)); if (window && icon) { SDL_SetWindowIcon(window, icon); } +#endif // Setup Dear ImGui context IMGUI_CHECKVERSION(); @@ -779,9 +786,9 @@ int main(int argc, char* argv[]) // Init simulation simuInit(); - simuStart(true, args.getStoragePath().c_str(), - args.getSettingsPath().c_str()); - + simuFatfsSetPaths(storage_path.c_str(), settings_path.c_str()); + simuStart(); + // Main loop SDL_SetEventFilter([](void*, SDL_Event* event){ if (event->type == SDL_WINDOWEVENT && @@ -792,6 +799,9 @@ int main(int argc, char* argv[]) return 1; }, NULL); +#if defined(__EMSCRIPTEN__) + emscripten_set_main_loop([]() { handleEvents(); }, 0, true); +#else do { Uint64 start_ts = SDL_GetPerformanceCounter(); if (!handleEvents()) break; @@ -804,6 +814,7 @@ int main(int argc, char* argv[]) SDL_Delay(std::max(0,(int32_t)floor(16.666f - elapsedMS))); } while(true); +#endif // App cleanup simuStop(); @@ -816,14 +827,16 @@ int main(int argc, char* argv[]) SDL_DestroyTexture(screen_frame_buffer); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); +#if !defined(__EMSCRIPTEN__) SDL_FreeSurface(icon); +#endif SDL_CloseAudio(); SDL_Quit(); return 0; } -uint16_t simu_get_analog(uint8_t idx) +uint16_t simuGetAnalog(uint8_t idx) { auto max_sticks = adcGetMaxInputs(ADC_INPUT_MAIN); if (idx < max_sticks) { diff --git a/radio/src/targets/simu/simpgmspace.h b/radio/src/targets/simu/simpgmspace.h deleted file mode 100644 index ac17f9caa56..00000000000 --- a/radio/src/targets/simu/simpgmspace.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include -#include - -#include - -#define __disable_irq() -#define __enable_irq() - -extern char * main_thread_error; - -uint64_t simuTimerMicros(void); - -void simuSetKey(uint8_t key, bool state); -void simuSetTrim(uint8_t trim, bool state); -void simuSetSwitch(uint8_t swtch, int8_t state); - -#if defined(__cplusplus) -void simuInit(); -void simuStart(bool tests = true, const char * sdPath = nullptr, const char * settingsPath = nullptr); -void simuStop(); -bool simuIsRunning(); -void startEepromThread(const char * filename = "eeprom.bin"); -void stopEepromThread(); -#endif - -void simuMain(); - -void simuFatfsSetPaths(const char * sdPath, const char * settingsPath); - -std::string simuFatfsGetCurrentPath(); -std::string simuFatfsGetRealPath(const std::string &p); - -#if defined(TRACE_SIMPGMSPACE) - #undef TRACE_SIMPGMSPACE - #define TRACE_SIMPGMSPACE TRACE -#else - #define TRACE_SIMPGMSPACE(...) -#endif - -#if defined(HARDWARE_TOUCH) - extern struct TouchState simTouchState; - extern bool simTouchOccured; -#endif diff --git a/radio/src/targets/simu/simuaudio.cpp b/radio/src/targets/simu/simuaudio.cpp index 2503697aa34..6e4c84e9359 100644 --- a/radio/src/targets/simu/simuaudio.cpp +++ b/radio/src/targets/simu/simuaudio.cpp @@ -21,6 +21,7 @@ #include "audio.h" #include "simuaudio.h" +#include "simulib.h" #include #include diff --git a/radio/src/targets/simu/simuaudio.h b/radio/src/targets/simu/simuaudio.h index fa0b1c4f4d1..a1b0408c297 100644 --- a/radio/src/targets/simu/simuaudio.h +++ b/radio/src/targets/simu/simuaudio.h @@ -21,9 +21,6 @@ #pragma once -#include - bool simuAudioInit(); void simuAudioDeInit(); -void simuQueueAudio(const uint8_t* data, uint32_t len); int simuAudioGetVolume(); diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simulib.cpp similarity index 94% rename from radio/src/targets/simu/simpgmspace.cpp rename to radio/src/targets/simu/simulib.cpp index 22b49c7a779..8e7f003f195 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simulib.cpp @@ -19,29 +19,20 @@ * GNU General Public License for more details. */ -#include "board.h" -#define SIMPGMSPC_USE_QT 0 - -#include "edgetx.h" +#include "simulib.h" #include "simulcd.h" #include "hal/adc_driver.h" #include "hal/rotary_encoder.h" #include "hal/usb_driver.h" -#include "hal/audio_driver.h" #include "os/sleep.h" #include "os/task.h" -#include "os/timer_native_impl.h" -#include -#include -#include +#include "edgetx.h" -#if !defined (_MSC_VER) || defined (__GNUC__) - #include - #include -#endif +#include +#include int g_snapshot_idx = 0; @@ -61,8 +52,6 @@ rotenc_t rotaryEncoderGetValue() return rotencValue / ROTARY_ENCODER_GRANULARITY; } -// TODO: remove all STM32 defs - extern const etx_hal_adc_driver_t simu_adc_driver; void lcdCopy(void * dest, void * src); @@ -103,7 +92,6 @@ void simuInit() bool keysStates[MAX_KEYS] = { false }; void simuSetKey(uint8_t key, bool state) { - // TRACE("simuSetKey(%d, %d)", key, state); assert(key < DIM(keysStates)); keysStates[key] = state; } @@ -111,7 +99,6 @@ void simuSetKey(uint8_t key, bool state) bool trimsStates[MAX_TRIMS * 2] = { false }; void simuSetTrim(uint8_t trim, bool state) { - // TRACE("simuSetTrim(%d, %d)", trim, state); assert(trim < DIM(trimsStates)); trimsStates[trim] = state; } @@ -125,7 +112,7 @@ static void* bootloaderThread(void*) } #endif -void simuStart(bool tests, const char * sdPath, const char * settingsPath) +void simuStart(bool tests) { if (simu_running) return; @@ -137,8 +124,6 @@ void simuStart(bool tests, const char * sdPath, const char * settingsPath) startOptions = (tests ? 0 : OPENTX_START_NO_SPLASH | OPENTX_START_NO_CALIBRATION | OPENTX_START_NO_CHECKS); simu_shutdown = false; - simuFatfsSetPaths(sdPath, settingsPath); - /* g_tmr10ms must be non-zero otherwise some SF functions (that use this timer as a marker when it was last executed) will be executed twice on startup. Normal radio does not see this issue because g_tmr10ms is already a big number @@ -274,7 +259,6 @@ uint32_t readKeys() for (int i = 0; i < MAX_KEYS; i++) { if (keysStates[i]) { - // TRACE("key pressed %d", i); result |= 1 << i; } } @@ -288,7 +272,6 @@ uint32_t readTrims() for (int i = 0; i < keysGetMaxTrims() * 2; i++) { if (trimsStates[i]) { - // TRACE("trim pressed %d", i); trims |= 1 << i; } } diff --git a/radio/src/targets/simu/simulib.h b/radio/src/targets/simu/simulib.h new file mode 100644 index 00000000000..b128cff41d3 --- /dev/null +++ b/radio/src/targets/simu/simulib.h @@ -0,0 +1,70 @@ +/* + * 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 + +#include +#include +#include + +#if __wasm__ +#define WASM_EXPORT_AS(name) __attribute__((export_name(name))) +#define WASM_EXPORT(symbol) WASM_EXPORT_AS(#symbol) symbol +#define WASM_IMPORT_AS(name) __attribute__((import_name(name))) +#define WASM_IMPORT(symbol) WASM_IMPORT_AS(#symbol) symbol +#else +#define WASM_EXPORT_AS(name) +#define WASM_EXPORT(symbol) symbol +#define WASM_IMPORT_AS(name) +#define WASM_IMPORT(symbol) symbol +#endif + +// exports +void WASM_EXPORT(simuInit)(); +void WASM_EXPORT(simuStart)(bool tests = true); +void WASM_EXPORT(simuStop)(); +bool WASM_EXPORT(simuIsRunning)(); +void WASM_EXPORT(simuSetKey)(uint8_t key, bool state); +void WASM_EXPORT(simuSetTrim)(uint8_t trim, bool state); +void WASM_EXPORT(simuSetSwitch)(uint8_t swtch, int8_t state); + +// callbacks +uint16_t WASM_IMPORT(simuGetAnalog)(uint8_t idx); +void WASM_IMPORT(simuQueueAudio)(const uint8_t* buf, uint32_t len); + +void simuMain(); + +uint64_t simuTimerMicros(); + +#if !defined(SIMU_DISKIO) + #define SIMU_USE_SDCARD +#endif + +#if defined(SIMU_USE_SDCARD) + void simuFatfsSetPaths(const char * sdPath, const char * settingsPath); +#else + #define simuFatfsSetPaths(...) +#endif + +#if defined(HARDWARE_TOUCH) + extern struct TouchState simTouchState; + extern bool simTouchOccured; +#endif diff --git a/radio/src/targets/simu/switch_driver.cpp b/radio/src/targets/simu/switch_driver.cpp index b1a03134d33..f8bdbf20c68 100644 --- a/radio/src/targets/simu/switch_driver.cpp +++ b/radio/src/targets/simu/switch_driver.cpp @@ -19,6 +19,8 @@ * GNU General Public License for more details. */ +#include "simulib.h" + #include "hal/switch_driver.h" #include "definitions.h" #include "myeeprom.h" diff --git a/radio/src/tests/gtests.h b/radio/src/tests/gtests.h index af213581bed..74f3bb74d40 100644 --- a/radio/src/tests/gtests.h +++ b/radio/src/tests/gtests.h @@ -25,6 +25,7 @@ #include #include "edgetx.h" +#include "simulib.h" #include "model_init.h" #include "switches.h" #include "hal/switch_driver.h" diff --git a/radio/src/thirdparty/Lua/src/luaconf.h b/radio/src/thirdparty/Lua/src/luaconf.h index 158f6408106..4f679b03237 100644 --- a/radio/src/thirdparty/Lua/src/luaconf.h +++ b/radio/src/thirdparty/Lua/src/luaconf.h @@ -20,6 +20,10 @@ // #include "user_config.h" +#if __wasm__ + #define l_signalT long +#endif + // prevent localeconv() #define getlocaledecpoint() ('.') From 6ee553e55ef555a6cc24910c8aee5633af10dd83 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Fri, 11 Jul 2025 17:03:12 +0200 Subject: [PATCH 28/49] fix: disable libsimulator builds --- tools/commit-tests.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/commit-tests.sh b/tools/commit-tests.sh index c5ce23576c0..05c3dd6d110 100755 --- a/tools/commit-tests.sh +++ b/tools/commit-tests.sh @@ -83,7 +83,6 @@ do cmake --build arm-none-eabi -j"${CORES}" --target ${FIRMARE_TARGET} cmake --build . --target native-configure - cmake --build native -j"${CORES}" --target libsimulator cmake --build native -j"${CORES}" --target tests-radio rm -f CMakeCache.txt native/CMakeCache.txt arm-none-eabi/CMakeCache.txt From b58e40144fe906687b67c1e263e750337be50150 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sat, 12 Jul 2025 16:08:10 +0200 Subject: [PATCH 29/49] feat: support hardware volume --- radio/src/targets/simu/audio_driver.cpp | 2 -- radio/src/targets/simu/simulib.h | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/radio/src/targets/simu/audio_driver.cpp b/radio/src/targets/simu/audio_driver.cpp index 26e1b177a31..550f19f5f01 100644 --- a/radio/src/targets/simu/audio_driver.cpp +++ b/radio/src/targets/simu/audio_driver.cpp @@ -40,8 +40,6 @@ int simuAudioGetVolume() #endif } -void simuQueueAudio(const uint8_t* data, uint32_t len); - void audioConsumeCurrentBuffer() { auto& fifo = audioQueue.buffersFifo; diff --git a/radio/src/targets/simu/simulib.h b/radio/src/targets/simu/simulib.h index b128cff41d3..6c091c687e9 100644 --- a/radio/src/targets/simu/simulib.h +++ b/radio/src/targets/simu/simulib.h @@ -45,6 +45,7 @@ bool WASM_EXPORT(simuIsRunning)(); void WASM_EXPORT(simuSetKey)(uint8_t key, bool state); void WASM_EXPORT(simuSetTrim)(uint8_t trim, bool state); void WASM_EXPORT(simuSetSwitch)(uint8_t swtch, int8_t state); +int WASM_EXPORT(simuAudioGetVolume)(); // callbacks uint16_t WASM_IMPORT(simuGetAnalog)(uint8_t idx); From d923968b0d737457f23f7e3b68c1d67588611a64 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Sun, 20 Jul 2025 17:42:14 +0200 Subject: [PATCH 30/49] chores: remove EMSCRIPTEN --- radio/src/CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index c82b3210d86..0a72f282642 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -516,10 +516,6 @@ if(NATIVE_BUILD) add_dependencies(radiolib_native ${RADIO_DEPENDENCIES}) set_property(TARGET radiolib_native PROPERTY POSITION_INDEPENDENT_CODE ON) - if(EMSCRIPTEN) - target_compile_options(radiolib_native PUBLIC -pthread -g) - endif() - add_subdirectory(targets/simu) if(NOT WASI) From c966e8eb40d206977c3ae8378e9c6dfc431273ae Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Mon, 21 Jul 2025 08:17:49 +0200 Subject: [PATCH 31/49] chores: remove simuTimerMicros() --- radio/src/functions.cpp | 10 +++++----- radio/src/gui/colorlcd/libui/mainwindow.cpp | 9 ++++----- radio/src/os/time_native.cpp | 7 ++++--- radio/src/targets/simu/opentxsimulator.cpp | 4 ++-- radio/src/targets/simu/simulib.cpp | 22 --------------------- radio/src/targets/simu/simulib.h | 14 +++---------- 6 files changed, 18 insertions(+), 48 deletions(-) diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index 66b9862a4f1..c3319f9b0e8 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -23,8 +23,7 @@ #include "switches.h" #include "hal/audio_driver.h" - -#include "boards/generic_stm32/rgb_leds.h" +#include "os/time.h" #if defined(COLORLCD) void setRequestedMainView(uint8_t view); @@ -385,9 +384,10 @@ void evalFunctions(CustomFunctionData * functions, CustomFunctionsContext & func case FUNC_PUSH_CUST_SWITCH: if (CFN_PARAM(cfn)) { // Duration is set if (! CFN_VAL2(cfn) ) { // Duration not started yet - CFN_VAL2(cfn) = timersGetMsTick() + CFN_PARAM(cfn) * 100; + CFN_VAL2(cfn) = time_get_ms() + CFN_PARAM(cfn) * 100; g_model.cfsSetSFState(CFN_CS_INDEX(cfn), 1); - } else if (timersGetMsTick() < (uint32_t)CFN_VAL2(cfn) ) { // Still within push duration + } + else if (time_get_ms() < (uint32_t)CFN_VAL2(cfn) ) { // Still within push duration g_model.cfsSetSFState(CFN_CS_INDEX(cfn), 1); } } else { // No duration set @@ -471,7 +471,7 @@ void evalFunctions(CustomFunctionData * functions, CustomFunctionsContext & func #if defined(FUNCTION_SWITCHES) if (CFN_FUNC(cfn) == FUNC_PUSH_CUST_SWITCH) { // Handling duration after function is active - if (timersGetMsTick() < (uint32_t)CFN_VAL2(cfn)) { + if (time_get_ms() < (uint32_t)CFN_VAL2(cfn)) { g_model.cfsSetSFState(CFN_CS_INDEX(cfn), 1); } else { diff --git a/radio/src/gui/colorlcd/libui/mainwindow.cpp b/radio/src/gui/colorlcd/libui/mainwindow.cpp index e4103d6a3a9..ec9b2fee784 100644 --- a/radio/src/gui/colorlcd/libui/mainwindow.cpp +++ b/radio/src/gui/colorlcd/libui/mainwindow.cpp @@ -22,10 +22,9 @@ #include "keyboard_base.h" #include "layout.h" #include "etx_lv_theme.h" -#include "sdcard.h" -// timers_driver.h -uint32_t timersGetMsTick(); +#include "os/time.h" +#include "sdcard.h" MainWindow* MainWindow::_instance = nullptr; @@ -55,7 +54,7 @@ void MainWindow::emptyTrash() void MainWindow::run(bool trash) { - auto start = timersGetMsTick(); + auto start = time_get_ms(); auto opaque = Layer::getFirstOpaque(); if (opaque) { @@ -71,7 +70,7 @@ void MainWindow::run(bool trash) if (trash) emptyTrash(); - auto delta = timersGetMsTick() - start; + auto delta = time_get_ms() - start; if (delta > 10) { TRACE_WINDOWS("MainWindow::run took %dms", delta); } diff --git a/radio/src/os/time_native.cpp b/radio/src/os/time_native.cpp index 59f0ad370f9..30961d67996 100644 --- a/radio/src/os/time_native.cpp +++ b/radio/src/os/time_native.cpp @@ -23,11 +23,12 @@ #include -extern uint64_t simuTimerMicros(void); - uint32_t time_get_ms() { - return simuTimerMicros() / 1000; + static auto _start = std::chrono::steady_clock::now();; + auto now = std::chrono::steady_clock::now(); + auto duration = std::chrono::duration_cast(now - _start); + return duration.count(); } time_point_t time_point_now() diff --git a/radio/src/targets/simu/opentxsimulator.cpp b/radio/src/targets/simu/opentxsimulator.cpp index 201564c9d98..c4116bfb5bc 100644 --- a/radio/src/targets/simu/opentxsimulator.cpp +++ b/radio/src/targets/simu/opentxsimulator.cpp @@ -41,7 +41,7 @@ #define GET_SWITCH_BOOL(sw__) getSwitch((sw__), 0); -#define ETXS_DBG qDebug() << "(" << simuTimerMicros() << "us)" +#define ETXS_DBG qDebug() << "(" << time_get_ms() << "us)" int16_t g_anas[MAX_ANALOG_INPUTS]; QVector OpenTxSimulator::tracebackDevices; @@ -761,7 +761,7 @@ void OpenTxSimulator::run() } if (!(loops % (SIMULATOR_INTERFACE_HEARTBEAT_PERIOD / 10))) { - emit heartbeat(loops, simuTimerMicros() / 1000); + emit heartbeat(loops, time_get_ms()); } } diff --git a/radio/src/targets/simu/simulib.cpp b/radio/src/targets/simu/simulib.cpp index 8e7f003f195..d4a6b1f95d0 100644 --- a/radio/src/targets/simu/simulib.cpp +++ b/radio/src/targets/simu/simulib.cpp @@ -32,7 +32,6 @@ #include "edgetx.h" #include -#include int g_snapshot_idx = 0; @@ -56,27 +55,6 @@ extern const etx_hal_adc_driver_t simu_adc_driver; void lcdCopy(void * dest, void * src); -uint64_t simuTimerMicros(void) -{ - auto now = std::chrono::steady_clock::now(); - return (uint64_t) std::chrono::duration_cast(now.time_since_epoch()).count(); -} - -uint16_t getTmr16KHz() -{ - return simuTimerMicros() * 2 / 125; -} - -uint16_t getTmr2MHz() -{ - return simuTimerMicros() * 2; -} - -uint32_t timersGetMsTick(void) -{ - return simuTimerMicros() / 1000; -} - void simuInit() { #if defined(ROTARY_ENCODER_NAVIGATION) diff --git a/radio/src/targets/simu/simulib.h b/radio/src/targets/simu/simulib.h index 6c091c687e9..7e1c4b00c07 100644 --- a/radio/src/targets/simu/simulib.h +++ b/radio/src/targets/simu/simulib.h @@ -53,17 +53,9 @@ void WASM_IMPORT(simuQueueAudio)(const uint8_t* buf, uint32_t len); void simuMain(); -uint64_t simuTimerMicros(); - -#if !defined(SIMU_DISKIO) - #define SIMU_USE_SDCARD -#endif - -#if defined(SIMU_USE_SDCARD) - void simuFatfsSetPaths(const char * sdPath, const char * settingsPath); -#else - #define simuFatfsSetPaths(...) -#endif +void simuFatfsSetPaths(const char * sdPath, const char * settingsPath); +std::string simuFatfsGetCurrentPath(); +std::string simuFatfsGetRealPath(const std::string& p); #if defined(HARDWARE_TOUCH) extern struct TouchState simTouchState; From f4bb4d111af9332436dfd9daebd9a86c9945a1f3 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Fri, 25 Jul 2025 11:13:38 +0200 Subject: [PATCH 32/49] Remove exceptions in simufatfs --- radio/src/targets/simu/simufatfs.cpp | 85 ++++++++++++---------------- 1 file changed, 36 insertions(+), 49 deletions(-) diff --git a/radio/src/targets/simu/simufatfs.cpp b/radio/src/targets/simu/simufatfs.cpp index 04782c5e3d5..df0a5d5adf4 100644 --- a/radio/src/targets/simu/simufatfs.cpp +++ b/radio/src/targets/simu/simufatfs.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include namespace fs = std::filesystem; @@ -200,22 +201,17 @@ FRESULT file_stat(const std::string& realPath, FILINFO* fno) // Get last write time auto ftime = fs::last_write_time(fsPath, ec); if (!ec) { - try { - auto systime = ftime_to_systime(ftime); - auto time_t_val = std::chrono::system_clock::to_time_t(systime); - struct tm* ltime = localtime(&time_t_val); - - if (ltime) { - // Convert to FatFs format - fno->fdate = ((ltime->tm_year - 80) << 9) | - ((ltime->tm_mon + 1) << 5) | ltime->tm_mday; - fno->ftime = (ltime->tm_hour << 11) | (ltime->tm_min << 5) | - (ltime->tm_sec / 2); - } else { - fno->fdate = 0; - fno->ftime = 0; - } - } catch (...) { + auto systime = ftime_to_systime(ftime); + auto time_t_val = std::chrono::system_clock::to_time_t(systime); + struct tm* ltime = localtime(&time_t_val); + + if (ltime) { + // Convert to FatFs format + fno->fdate = ((ltime->tm_year - 80) << 9) | ((ltime->tm_mon + 1) << 5) | + ltime->tm_mday; + fno->ftime = + (ltime->tm_hour << 11) | (ltime->tm_min << 5) | (ltime->tm_sec / 2); + } else { fno->fdate = 0; fno->ftime = 0; } @@ -286,16 +282,12 @@ FRESULT f_open(FIL* fil, const TCHAR* name, BYTE flag) } } - try { - auto simuFil = new _simu_FIL(realPath, mode); - if (simuFil->stream->is_open()) { - fil->obj.fs = reinterpret_cast(simuFil); - return FR_OK; - } else { - delete simuFil; - return FR_INVALID_NAME; - } - } catch (...) { + auto simuFil = new _simu_FIL(realPath, mode); + if (simuFil->stream->is_open()) { + fil->obj.fs = reinterpret_cast(simuFil); + return FR_OK; + } else { + delete simuFil; return FR_INVALID_NAME; } } @@ -426,10 +418,10 @@ struct _simu_DIR { public: bool hasNext() const { return iter != end_iter; } - fs::directory_entry getNext() + std::optional getNext() { if (iter == end_iter) { - throw std::runtime_error("No more entries"); + return std::nullopt; } auto current = *iter; @@ -451,13 +443,8 @@ FRESULT f_opendir(DIR* rep, const TCHAR* name) return FR_NO_PATH; } - try { - rep->obj.fs = reinterpret_cast(new _simu_DIR(path)); - return FR_OK; - } catch (...) { - rep->obj.fs = nullptr; - return FR_NO_PATH; - } + rep->obj.fs = reinterpret_cast(new _simu_DIR(path)); + return FR_OK; } FRESULT f_closedir(DIR* rep) @@ -478,24 +465,24 @@ FRESULT f_readdir(DIR* rep, FILINFO* fil) return FR_NO_FILE; } - try { - auto entry = sd->getNext(); - - if (fil != nullptr) { - memset(fil->fname, 0, FF_MAX_LFN); + auto maybe_entry = sd->getNext(); + if (!maybe_entry.has_value()) { + return FR_NO_FILE; + } - std::string filename = entry.path().filename().string(); - size_t copyLen = std::min(filename.length(), size_t(FF_MAX_LFN - 1)); - strncpy(fil->fname, filename.c_str(), copyLen); + auto entry = maybe_entry.value(); + if (fil != nullptr) { + memset(fil->fname, 0, FF_MAX_LFN); - std::string fullPath = entry.path().string(); - return file_stat(fullPath, fil); - } + std::string filename = entry.path().filename().string(); + size_t copyLen = std::min(filename.length(), size_t(FF_MAX_LFN - 1)); + strncpy(fil->fname, filename.c_str(), copyLen); - return FR_OK; - } catch (...) { - return FR_NO_FILE; + std::string fullPath = entry.path().string(); + return file_stat(fullPath, fil); } + + return FR_OK; } FRESULT f_mkfs(const TCHAR* path, BYTE opt, DWORD au, void* work, UINT len) From 26119c547f6a398ac519d49fb484a7239aa0e4ba Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Fri, 25 Jul 2025 11:15:01 +0200 Subject: [PATCH 33/49] Remove useless code --- radio/src/targets/simu/simufatfs.cpp | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/radio/src/targets/simu/simufatfs.cpp b/radio/src/targets/simu/simufatfs.cpp index df0a5d5adf4..88ad37ad18b 100644 --- a/radio/src/targets/simu/simufatfs.cpp +++ b/radio/src/targets/simu/simufatfs.cpp @@ -399,20 +399,6 @@ struct _simu_DIR { if (ec) { iter = end_iter; // Set to end if error } - skipDotEntries(); // TODO: check if necessary - } - - private: - void skipDotEntries() - { - while (iter != end_iter) { - std::string filename = iter->path().filename().string(); - if (filename != "." && filename != "..") { - break; - } - std::error_code ec; - ++iter; - } } public: @@ -427,7 +413,6 @@ struct _simu_DIR { auto current = *iter; std::error_code ec; ++iter; - skipDotEntries(); return current; } From 85f59f07ce8c7e5867bbaa4354bd187ce6501e50 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 09:48:51 +0200 Subject: [PATCH 34/49] WiP: fixes --- radio/src/targets/simu/CMakeLists.txt | 2 -- radio/src/targets/simu/sdl_simu.cpp | 5 +++-- radio/src/targets/simu/simufatfs.cpp | 2 +- radio/src/targets/simu/simulib.h | 2 ++ radio/src/tests/gtests.cpp | 17 ++++------------- radio/src/tests/lcd.cpp | 2 +- radio/src/tests/lcd_480x272.cpp | 2 +- 7 files changed, 12 insertions(+), 20 deletions(-) diff --git a/radio/src/targets/simu/CMakeLists.txt b/radio/src/targets/simu/CMakeLists.txt index d7924ce30d0..f4af41393e6 100644 --- a/radio/src/targets/simu/CMakeLists.txt +++ b/radio/src/targets/simu/CMakeLists.txt @@ -42,7 +42,6 @@ set(SIMU_DRIVERS ) set(HW_DESC_JSON ${FLAVOUR}.json) -# AddHardwareDefTarget(${HW_DESC_JSON}) AddHWGenTarget(${HW_DESC_JSON} simu_keys simu_keys.inc) AddHWGenTarget(${HW_DESC_JSON} simu_switches simu_switches.inc) AddHWGenTarget(${HW_DESC_JSON} hal_adc_inputs hal_adc_inputs.inc) @@ -51,7 +50,6 @@ set(SIMU_DRIVERS ${SIMU_DRIVERS} ${CMAKE_CURRENT_BINARY_DIR}/simu_keys.inc ${CMAKE_CURRENT_BINARY_DIR}/simu_switches.inc ${CMAKE_CURRENT_BINARY_DIR}/hal_adc_inputs.inc - ${CMAKE_CURRENT_BINARY_DIR}/${HW_DESC_JSON} ) include_directories(${CMAKE_CURRENT_BINARY_DIR}) diff --git a/radio/src/targets/simu/sdl_simu.cpp b/radio/src/targets/simu/sdl_simu.cpp index c63fc864fb1..e347ccf3510 100644 --- a/radio/src/targets/simu/sdl_simu.cpp +++ b/radio/src/targets/simu/sdl_simu.cpp @@ -786,9 +786,10 @@ int main(int argc, char* argv[]) // Init simulation simuInit(); - simuFatfsSetPaths(storage_path.c_str(), settings_path.c_str()); + simuFatfsSetPaths(args.getStoragePath().c_str(), + args.getSettingsPath().c_str()); simuStart(); - + // Main loop SDL_SetEventFilter([](void*, SDL_Event* event){ if (event->type == SDL_WINDOWEVENT && diff --git a/radio/src/targets/simu/simufatfs.cpp b/radio/src/targets/simu/simufatfs.cpp index 88ad37ad18b..330f75724b6 100644 --- a/radio/src/targets/simu/simufatfs.cpp +++ b/radio/src/targets/simu/simufatfs.cpp @@ -19,7 +19,7 @@ * GNU General Public License for more details. */ -#include "simpgmspace.h" +#include "simulib.h" #if !defined(SIMU_DISKIO) diff --git a/radio/src/targets/simu/simulib.h b/radio/src/targets/simu/simulib.h index 7e1c4b00c07..487ee6f2593 100644 --- a/radio/src/targets/simu/simulib.h +++ b/radio/src/targets/simu/simulib.h @@ -25,6 +25,8 @@ #include #include +#include + #if __wasm__ #define WASM_EXPORT_AS(name) __attribute__((export_name(name))) #define WASM_EXPORT(symbol) WASM_EXPORT_AS(#symbol) symbol diff --git a/radio/src/tests/gtests.cpp b/radio/src/tests/gtests.cpp index 5f53be78b0f..b5c652747dc 100644 --- a/radio/src/tests/gtests.cpp +++ b/radio/src/tests/gtests.cpp @@ -122,20 +122,11 @@ class TersePrinter : public EmptyTestEventListener { int32_t lastAct = 0; -uint16_t simu_get_analog(uint8_t idx) -{ - return 0; -} - -void simuQueueAudio(const uint8_t*, uint32_t) {} - -void fsLedOn(uint8_t idx) -{ -} +uint16_t simuGetAnalog(uint8_t) { return 0; } +void simuQueueAudio(const uint8_t *, uint32_t) {} -void fsLedOff(uint8_t idx) -{ -} +void fsLedOn(uint8_t idx) {} +void fsLedOff(uint8_t idx) {} static char _stringResult[200]; diff --git a/radio/src/tests/lcd.cpp b/radio/src/tests/lcd.cpp index 03a96092cb7..5bb577ad8b0 100644 --- a/radio/src/tests/lcd.cpp +++ b/radio/src/tests/lcd.cpp @@ -25,7 +25,7 @@ #include #if !defined(COLORLCD) -#include "simpgmspace.h" +#include "simulib.h" #include "simulcd.h" #include "common/stdlcd/draw_functions.h" diff --git a/radio/src/tests/lcd_480x272.cpp b/radio/src/tests/lcd_480x272.cpp index 880699bc3b0..5ada643b8cc 100644 --- a/radio/src/tests/lcd_480x272.cpp +++ b/radio/src/tests/lcd_480x272.cpp @@ -24,7 +24,7 @@ #if defined(COLORLCD) -#include "simpgmspace.h" +#include "simulib.h" #include "bitmaps.h" #define STB_IMAGE_WRITE_IMPLEMENTATION From 9cd037a2e688737c696c5d1afc6684d911001d1e Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 10:06:07 +0200 Subject: [PATCH 35/49] Disable libsimulator plugins --- tools/build-companion.sh | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/tools/build-companion.sh b/tools/build-companion.sh index 10bb1892d62..936789b44f5 100755 --- a/tools/build-companion.sh +++ b/tools/build-companion.sh @@ -14,17 +14,21 @@ if [[ -z ${OUTDIR} ]]; then OUTDIR="$(pwd)/output" fi +if [[ ! -d "${OUTDIR}" ]]; then + mkdir -p "${OUTDIR}" +fi + QUIET_FLAGS="" if [[ "$CMAKE_GENERATOR" == "Ninja" ]]; then - QUIET_FLAGS="-- --quiet" + QUIET_FLAGS="-- --quiet" else - # Assume Makefile generator for non-Ninja builds - COMMON_OPTIONS="-DCMAKE_RULE_MESSAGES=OFF" + # Assume Makefile generator for non-Ninja builds + COMMON_OPTIONS="-DCMAKE_RULE_MESSAGES=OFF" fi -COMMON_OPTIONS="${COMMON_OPTIONS} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MESSAGE_LOG_LEVEL=WARNING -Wno-dev -DGVARS=YES -DHELI=YES -DLUA=YES" +COMMON_OPTIONS="${COMMON_OPTIONS} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MESSAGE_LOG_LEVEL=WARNING -Wno-dev" if [ "$(uname)" = "Darwin" ]; then - COMMON_OPTIONS="${COMMON_OPTIONS} -DCMAKE_OSX_DEPLOYMENT_TARGET='10.15'" + COMMON_OPTIONS="${COMMON_OPTIONS} -DCMAKE_OSX_DEPLOYMENT_TARGET='10.15'" fi # Generate EDGETX_VERSION_SUFFIX if not already set @@ -104,7 +108,9 @@ run_pipeline() { fi ;; "final") - if ! execute_with_output "🔧 Final config" "cmake --build . --target native-configure ${cmake_opts}" "$log_file" "$show_details"; then + BUILD_OPTIONS="${COMMON_OPTIONS} -DEdgeTX_SUPERBUILD:BOOL=0 -DNATIVE_BUILD:BOOL=1" + clean_build && mkdir -p native/plugins + if ! execute_with_output "🔧 Final config" "cmake -S ${SRCDIR} -B native --toolchain cmake/toolchain/native.cmake ${BUILD_OPTIONS}" "$log_file" "$show_details"; then output_error_log "$log_file" "Final Configuration" return 1 fi @@ -203,16 +209,16 @@ build_plugin() { } declare -a simulator_plugins=( - x9lite x9lites x9d x9dp x9dp2019 x9e - x7 x7access - t8 t12 t12max tx12 tx12mk2 t15 t16 t18 t20 t20v2 - xlite xlites - x10 x10express x12s - zorro tx16s tx15 - commando8 boxer pocket mt12 gx12 - tlite tpro tprov2 tpros bumblebee lr3pro t14 - nv14 el18 pl18 pl18ev pl18u st16 pa01 - f16 v14 v16 + # x9lite x9lites x9d x9dp x9dp2019 x9e + # x7 x7access + # t8 t12 t12max tx12 tx12mk2 t15 t16 t18 t20 t20v2 + # xlite xlites + # x10 x10express x12s + # zorro tx16s tx15 + # commando8 boxer pocket mt12 gx12 + # tlite tpro tprov2 tpros bumblebee lr3pro t14 + # nv14 el18 pl18 pl18ev pl18u st16 pa01 + # f16 v14 v16 ) get_platform_config From e9b0b3ee09bff57043da9a289482b20742bd482e Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 13:21:17 +0200 Subject: [PATCH 36/49] Fix plugins build --- radio/src/gui/colorlcd/module/pxx1_settings.cpp | 2 ++ radio/src/targets/simu/led_driver.cpp | 10 ++++++++++ radio/src/targets/simu/opentxsimulator.cpp | 10 ---------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/radio/src/gui/colorlcd/module/pxx1_settings.cpp b/radio/src/gui/colorlcd/module/pxx1_settings.cpp index 04783728167..8e00cf1f818 100644 --- a/radio/src/gui/colorlcd/module/pxx1_settings.cpp +++ b/radio/src/gui/colorlcd/module/pxx1_settings.cpp @@ -26,6 +26,7 @@ #define SET_DIRTY() storageDirty(EE_MODEL) +#if defined(EXTERNAL_ANTENNA) PXX1AntennaSettings::PXX1AntennaSettings(Window* parent, const FlexGridLayout& g, uint8_t moduleIdx) : @@ -61,3 +62,4 @@ PXX1AntennaSettings::PXX1AntennaSettings(Window* parent, antennaChoice->setAvailableHandler( [=](int8_t mode) { return mode != ANTENNA_MODE_PER_MODEL; }); } +#endif diff --git a/radio/src/targets/simu/led_driver.cpp b/radio/src/targets/simu/led_driver.cpp index 4201222da5d..645515182a4 100644 --- a/radio/src/targets/simu/led_driver.cpp +++ b/radio/src/targets/simu/led_driver.cpp @@ -83,3 +83,13 @@ uint32_t fsGetLedRGB(uint8_t index) { return rgbGetLedColor(index); } + +void fsLedOn(uint8_t idx) +{ + rgbSetLedColor(idx, 0xFF, 0xFF, 0xFF); +} + +void fsLedOff(uint8_t idx) +{ + rgbSetLedColor(idx, 0, 0, 0); +} diff --git a/radio/src/targets/simu/opentxsimulator.cpp b/radio/src/targets/simu/opentxsimulator.cpp index c4116bfb5bc..3288f12e046 100644 --- a/radio/src/targets/simu/opentxsimulator.cpp +++ b/radio/src/targets/simu/opentxsimulator.cpp @@ -91,16 +91,6 @@ void firmwareTraceCb(const char * text) } } -void fsLedOn(uint8_t idx) -{ - rgbSetLedColor(idx, 0xFF, 0xFF, 0xFF); -} - -void fsLedOff(uint8_t idx) -{ - rgbSetLedColor(idx, 0, 0, 0); -} - // Serial port handling needs to know about OpenTxSimulator, so we we // need to update what's in simpgmspace.cpp when we have a simulator // to point at. From 80898c07a18eec59b862495c5617ebf22bc9624c Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 14:32:44 +0200 Subject: [PATCH 37/49] Start unifying Companion workflows --- .github/workflows/companion.yml | 175 +++++++++++++++++++++++++++++++ .github/workflows/linux_cpn.yml | 58 ---------- .github/workflows/macosx_cpn.yml | 97 ----------------- .github/workflows/win_cpn-32.yml | 100 ------------------ .github/workflows/win_cpn-64.yml | 132 ----------------------- 5 files changed, 175 insertions(+), 387 deletions(-) create mode 100644 .github/workflows/companion.yml delete mode 100644 .github/workflows/linux_cpn.yml delete mode 100644 .github/workflows/macosx_cpn.yml delete mode 100644 .github/workflows/win_cpn-32.yml delete mode 100644 .github/workflows/win_cpn-64.yml diff --git a/.github/workflows/companion.yml b/.github/workflows/companion.yml new file mode 100644 index 00000000000..9195925b338 --- /dev/null +++ b/.github/workflows/companion.yml @@ -0,0 +1,175 @@ +name: Companion + +on: + push: + branches: + - 'main' + tags: + - v* + paths: + - '.github/workflows/companion.yml' + - 'companion/**' + - 'tools/build-companion.sh' + + pull_request: + branches: + - 'main' + paths: + - '.github/workflows/companion.yml' + - 'companion/**' + - 'tools/build-companion.sh' + + workflow_dispatch: + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + CMAKE_BUILD_TYPE: Release + QT_VERSION: '6.9.0' + SDL_VERSION: '2.32.8' + +jobs: + build-linux: + name: Linux Companion + runs-on: ubuntu-latest + + container: + image: ghcr.io/edgetx/edgetx-dev:latest + volumes: + - ${{ github.workspace }}:/src + + steps: + - name: Check out the repo + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Build + working-directory: ${{github.workspace}} + shell: bash + run: | + mkdir output && \ + tools/build-companion.sh "$(pwd)" "$(pwd)/output/" + + - name: Compose release filename + run: echo "artifact_name=edgetx-cpn-linux-${GITHUB_REF##*/}" >> $GITHUB_ENV + + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + with: + name: "${{ env.artifact_name }}" + path: ${{github.workspace}}/output + retention-days: 15 + + build-macos: + name: macOS Companion + runs-on: macos-13 + + env: + CMAKE_OSX_ARCHITECTURES: 'x86_64' + CMAKE_OSX_DEPLOYMENT_TARGET: '10.15' + QT_ARCH: 'clang_64' + + steps: + - name: Check out the repo + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Qt + uses: jdpurcell/install-qt-action@v5 + env: + AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini + with: + version: ${{ env.QT_VERSION }} + modules: 'qtmultimedia qtserialport' + arch: ${{ env.QT_ARCH }} + cache: true + cache-key-prefix: 'install-qt-action-${{ env.QT_ARCH }}' + + - name: Setup SDL2 + id: setup-sdl2 + uses: libsdl-org/setup-sdl@v1 + with: + version: ${{ env.SDL_VERSION }} + build-type: "Release" + + - name: Install Python Dependencies + run: python3 -m pip install clang jinja2 lz4 pillow pydantic + + - name: Build + run: | + mkdir output && \ + CMAKE_PREFIX_PATH="$QT_ROOT_DIR;$SDL2_ROOT" \ + tools/build-companion.sh "$(pwd)" "$(pwd)/output/" + + - name: Compose release filename + run: echo "artifact_name=edgetx-cpn-osx-${GITHUB_REF##*/}" >> $GITHUB_ENV + + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + with: + name: "${{ env.artifact_name }}" + path: ${{github.workspace}}/output + retention-days: 15 + + build-win64: + name: Windows Companion + runs-on: windows-2022 + + env: + CMAKE_GENERATOR: 'Ninja' + QT_ARCH: 'win64_msvc2022_64' + CXX: 'clang++' + CC: 'clang' + + defaults: + run: + shell: bash + + steps: + - name: Check out the repo + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Qt + uses: jdpurcell/install-qt-action@v5 + env: + AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini + with: + version: ${{ env.QT_VERSION }} + modules: 'qtmultimedia qtserialport' + arch: ${{ env.QT_ARCH }} + cache: true + cache-key-prefix: 'install-qt-action-${{ env.QT_ARCH }}' + + - name: Setup SDL2 + id: setup-sdl2 + uses: libsdl-org/setup-sdl@v1 + with: + version: ${{ env.SDL_VERSION }} + build-type: "Release" + + - name: Install Python Dependencies + run: | + echo $PATH + $Python3_ROOT_DIR/python3.exe -m pip install clang jinja2 lz4 pillow pydantic + + - name: Setup MSVC + uses: ilammy/msvc-dev-cmd@v1 + + - name: Build + run: | + mkdir output && \ + CMAKE_PREFIX_PATH="$QT_ROOT_DIR;$SDL2_ROOT" \ + tools/build-companion.sh "$(pwd)" "$(pwd)/output/" + + - name: Compose release filename + run: echo "artifact_name=edgetx-cpn-win64-${GITHUB_REF##*/}" >> $GITHUB_ENV + + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + with: + name: "${{ env.artifact_name }}" + path: ${{github.workspace}}/output + retention-days: 15 diff --git a/.github/workflows/linux_cpn.yml b/.github/workflows/linux_cpn.yml deleted file mode 100644 index c282a5274ed..00000000000 --- a/.github/workflows/linux_cpn.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Linux Companion - -on: - push: - branches: - - 'main' - tags: - - v* - paths: - - '.github/workflows/linux_cpn.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - pull_request: - branches: - - 'main' - paths: - - '.github/workflows/linux_cpn.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - workflow_dispatch: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - -jobs: - build: - runs-on: ubuntu-latest - container: - image: ghcr.io/edgetx/edgetx-dev:latest - volumes: - - ${{ github.workspace }}:/src - - steps: - - name: Check out the repo - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Build - working-directory: ${{github.workspace}} - shell: bash - run: | - mkdir output && \ - tools/build-companion.sh "$(pwd)" "$(pwd)/output/" - - - name: Compose release filename - # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - run: echo "artifact_name=edgetx-cpn-linux-${GITHUB_REF##*/}" >> $GITHUB_ENV - - - name: Archive production artifacts - uses: actions/upload-artifact@v4 - with: - name: "${{ env.artifact_name }}" - path: ${{github.workspace}}/output - retention-days: 15 diff --git a/.github/workflows/macosx_cpn.yml b/.github/workflows/macosx_cpn.yml deleted file mode 100644 index 324d2c33f65..00000000000 --- a/.github/workflows/macosx_cpn.yml +++ /dev/null @@ -1,97 +0,0 @@ -name: MacOSX Companion - -on: - push: - branches: - - 'main' - tags: - - v* - paths: - - '.github/workflows/macosx_cpn.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - pull_request: - branches: - - 'main' - paths: - - '.github/workflows/macosx_cpn.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - workflow_dispatch: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - QT_VERSION: "6.9.0" - -jobs: - build: - # The CMake configure and build commands are platform agnostic and should work equally - # well on Windows or Mac. You can convert this to a matrix build if you need - # cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: macos-13 - - steps: - - name: Select XCode version - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: '14.1.0' - - - name: Check out the repo - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Setup Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: '3.12' - - - name: Create Build Environment - # Some projects don't allow in-source building, so create a separate build directory - # We'll use this as our working directory for all subsequent commands - run: cmake -E make_directory ${{github.workspace}}/build - - - name: Install Qt - uses: jdpurcell/install-qt-action@v5 - env: - AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini - with: - version: ${{ env.QT_VERSION }} - modules: 'qtmultimedia qtserialport' - setup-python: 'false' - cache: true - cache-key-prefix: 'install-qt-action-macOS' - - - name: Install dependencies - run: python3 -m pip install --upgrade pip Pillow lz4 clang jinja2 pydantic - - - name: Install libusb - run: brew install libusb - - - name: Install dfu-util - run: brew install dfu-util - - - name: Install SDL2 - run: brew install SDL2 - - - name: Build - working-directory: ${{github.workspace}} - shell: bash - run: | - mkdir output && \ - tools/build-companion.sh "$(pwd)" "$(pwd)/output/" - - - name: Compose release filename - # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - run: echo "artifact_name=edgetx-cpn-osx-${GITHUB_REF##*/}" >> $GITHUB_ENV - - - name: Archive production artifacts - uses: actions/upload-artifact@v4 - with: - name: "${{ env.artifact_name }}" - path: ${{github.workspace}}/output - retention-days: 15 diff --git a/.github/workflows/win_cpn-32.yml b/.github/workflows/win_cpn-32.yml deleted file mode 100644 index 1fb67e40199..00000000000 --- a/.github/workflows/win_cpn-32.yml +++ /dev/null @@ -1,100 +0,0 @@ -name: Windows Companion 32-bit - -on: - push: - branches: - - 'main' - tags: - - v* - paths: - - '.github/workflows/win_cpn-32.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - workflow_dispatch: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - CMAKE_GENERATOR: "MSYS Makefiles" - QT_VERSION: "5.15.2" - MINGW_VERSION: "win32_mingw81" - MINGW_PATH: "mingw81_32" - -jobs: - build: - # The CMake configure and build commands are platform agnostic and should work equally - # well on Windows or Mac. You can convert this to a matrix build if you need - # cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: windows-latest - defaults: - run: - shell: msys2 {0} - - steps: - - uses: msys2/setup-msys2@v2 - with: - msystem: MINGW32 - update: true - install: git make curl tar mingw-w64-i686-toolchain - - - name: Install Dependencies - run: | - pacman -S --noconfirm mingw-w64-i686-cmake \ - mingw-w64-i686-python-pip \ - mingw-w64-i686-python-pillow \ - mingw-w64-i686-libjpeg-turbo \ - mingw-w64-i686-zlib \ - mingw-w64-i686-libtiff \ - mingw-w64-i686-freetype \ - mingw-w64-i686-lcms2 \ - mingw-w64-i686-libwebp \ - mingw-w64-i686-openjpeg2 \ - mingw-w64-i686-libimagequant \ - mingw-w64-i686-libraqm \ - mingw-w64-i686-SDL2 \ - mingw-w64-i686-clang \ - mingw-w64-i686-nsis \ - mingw-w64-i686-openssl - SETUPTOOLS_USE_DISTUTILS=stdlib pip install lz4 - python -m pip install clang jinja2 lz4 - - - name: Download and unpack dfu-util - run: | - curl -LO https://dfu-util.sourceforge.net/releases/dfu-util-0.11-binaries.tar.xz && \ - tar -xf dfu-util-0.11-binaries.tar.xz - cp dfu-util-0.11-binaries/win32/dfu-util-static.exe /mingw32/bin/dfu-util.exe - cp dfu-util-0.11-binaries/win32/libusb-1.0.dll /mingw32/bin/libusb-1.0.dll - cp dfu-util-0.11-binaries/win32/libusb-1.0.dll.a /mingw32/bin/libusb-1.0.dll.a - - - name: Install Qt - uses: jurplel/install-qt-action@v3 - with: - cache: true - cache-key-prefix: 'install-qt-action-win32' - version: ${{ env.QT_VERSION }} - arch: ${{ env.MINGW_VERSION }} - - - name: Check out the repo - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Build - working-directory: ${{github.workspace}} - # Execute the build. You can specify a specific target with "--target " - run: | - mkdir output && \ - CMAKE_PREFIX_PATH=$RUNNER_WORKSPACE/Qt/$QT_VERSION/$MINGW_PATH \ - tools/build-companion.sh "$(pwd)" "$(pwd)/output/" - - name: Compose release filename - # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - run: echo "artifact_name=edgetx-cpn-win32-${GITHUB_REF##*/}" >> $GITHUB_ENV - - - name: Archive production artifacts - uses: actions/upload-artifact@v4 - with: - name: "${{ env.artifact_name }}" - path: ${{github.workspace}}/output - retention-days: 15 diff --git a/.github/workflows/win_cpn-64.yml b/.github/workflows/win_cpn-64.yml deleted file mode 100644 index ed67e98fb77..00000000000 --- a/.github/workflows/win_cpn-64.yml +++ /dev/null @@ -1,132 +0,0 @@ -name: Windows Companion 64-bit - -on: - push: - branches: - - 'main' - tags: - - v* - paths: - - '.github/workflows/win_cpn-64.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - pull_request: - branches: - - 'main' - paths: - - '.github/workflows/win_cpn-64.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - workflow_dispatch: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - CMAKE_BUILD_TYPE: "Release" - CMAKE_GENERATOR: "Ninja" - QT_VERSION: "6.9.0" - QT_ARCH: "win64_msvc2022_64" - SDL_VERSION: "2.32.8" - CXX: "clang++" - CC: "clang" - -jobs: - build: - # The CMake configure and build commands are platform agnostic and should work equally - # well on Windows or Mac. You can convert this to a matrix build if you need - # cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: windows-latest - defaults: - run: - shell: bash - - steps: - - name: Check out the repo - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Install Qt - uses: jdpurcell/install-qt-action@v5 - env: - AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini - with: - cache: true - cache-key-prefix: 'install-qt-action-${{ env.QT_ARCH }}' - version: ${{ env.QT_VERSION }} - arch: ${{ env.QT_ARCH }} - modules: 'qtmultimedia qtserialport' - - - name: Setup SDL2 - id: setup-sdl2 - uses: libsdl-org/setup-sdl@v1 - with: - version: ${{ env.SDL_VERSION }} - build-type: "Release" - - - name: Install Python Dependencies - run: | - echo $PATH - $Python3_ROOT_DIR/python3.exe -m pip install clang jinja2 lz4 pillow pydantic - - - name: Setup dfu-util and libusb - run: | - #!/bin/bash - set -e - - echo "Setting up dfu-util and libusb..." - - # Create target directory - mkdir -p dfu-util-0.11 - - # Download and extract dfu-util - echo "Downloading dfu-util binaries..." - curl -LO https://dfu-util.sourceforge.net/releases/dfu-util-0.11-binaries.tar.xz - tar -xf dfu-util-0.11-binaries.tar.xz - cp dfu-util-0.11-binaries/win64/dfu-util.exe dfu-util-0.11/ - - # Install 7zip if not available - if ! command -v 7z &> /dev/null; then - echo "Installing 7zip..." - sudo apt-get update -qq - sudo apt-get install -y p7zip-full - fi - - # Download and extract libusb - echo "Downloading libusb..." - curl -LO https://github.com/libusb/libusb/releases/download/v1.0.29/libusb-1.0.29.7z - 7z x -olibusb-1.0.29 libusb-1.0.29.7z > /dev/null - cp libusb-1.0.29/VS2022/MS64/dll/* dfu-util-0.11/ - - # Clean up temporary files - rm -f dfu-util-0.11-binaries.tar.xz libusb-1.0.29.7z - rm -rf dfu-util-0.11-binaries libusb-1.0.29 - - echo "Setup complete. Contents of dfu-util-0.11:" - ls -la dfu-util-0.11/ - - echo "LIBUSB1_ROOT_DIR=$(pwd)/dfu-util-0.11" >> $GITHUB_ENV - echo "DFU_UTIL_ROOT_DIR=$(pwd)/dfu-util-0.11" >> $GITHUB_ENV - - - - name: Setup MSVC - uses: ilammy/msvc-dev-cmd@v1 - - - name: Build - run: | - mkdir output && \ - CMAKE_PREFIX_PATH="$QT_ROOT_DIR;$SDL2_ROOT" \ - tools/build-companion.sh "$(pwd)" "$(pwd)/output/" - - - name: Compose release filename - # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - run: echo "artifact_name=edgetx-cpn-win64-${GITHUB_REF##*/}" >> $GITHUB_ENV - - - name: Archive production artifacts - uses: actions/upload-artifact@v4 - with: - name: "${{ env.artifact_name }}" - path: ${{github.workspace}}/output - retention-days: 15 From fda357e1152c3c1cb19ea375afac081bbbada8a9 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 14:42:27 +0200 Subject: [PATCH 38/49] Remove fsLedOn/fsLedOff from gtests --- radio/src/tests/gtests.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/radio/src/tests/gtests.cpp b/radio/src/tests/gtests.cpp index b5c652747dc..f646e361453 100644 --- a/radio/src/tests/gtests.cpp +++ b/radio/src/tests/gtests.cpp @@ -125,9 +125,6 @@ int32_t lastAct = 0; uint16_t simuGetAnalog(uint8_t) { return 0; } void simuQueueAudio(const uint8_t *, uint32_t) {} -void fsLedOn(uint8_t idx) {} -void fsLedOff(uint8_t idx) {} - static char _stringResult[200]; const char * nchar2string(const char * string, int size) From abf0b8d3fafe76ad0ab41982660f468fe9b1ce78 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 15:43:16 +0200 Subject: [PATCH 39/49] Build with composite action --- .github/actions/build_companion/action.yml | 62 ++++++++++++ .github/workflows/companion.yml | 109 +++------------------ 2 files changed, 73 insertions(+), 98 deletions(-) create mode 100644 .github/actions/build_companion/action.yml diff --git a/.github/actions/build_companion/action.yml b/.github/actions/build_companion/action.yml new file mode 100644 index 00000000000..c382a6a6c3c --- /dev/null +++ b/.github/actions/build_companion/action.yml @@ -0,0 +1,62 @@ +name: 'Build Companion' +inputs: + os: + description: 'OS / Architecture' + required: true + qt-version: + description: 'Qt version' + default: '6.9.0' + qt-arch: + description: 'Qt architecture' + required: runner.os != 'Linux' + sdl2-version: + description: 'SDL2 version' + default: '2.32.8' + +runs: + using: "composite" + steps: + + - name: Install Qt + if: runner.os != 'Linux' + uses: jdpurcell/install-qt-action@v5 + env: + AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini + with: + version: ${{ inputs.qt-version }} + modules: 'qtmultimedia qtserialport' + arch: ${{ inputs.qt-arch }} + cache: true + cache-key-prefix: 'install-qt-action-${{ inputs.qt-arch }}' + + - name: Setup SDL2 + if: runner.os != 'Linux' + id: setup-sdl2 + uses: libsdl-org/setup-sdl@v1 + with: + version: ${{ inputs.sdl2-version }} + build-type: "Release" + + - name: Setup MSVC + if: runner.os == 'Windows' + uses: ilammy/msvc-dev-cmd@v1 + + - name: Build + shell: bash + env: + CMAKE_BUILD_TYPE: 'Release' + run: | + mkdir output && \ + CMAKE_PREFIX_PATH="$QT_ROOT_DIR;$SDL2_ROOT" \ + tools/build-companion.sh "$(pwd)" "$(pwd)/output/" + + - name: Compose release filename + run: echo "artifact_name=edgetx-cpn-${{ inputs.os }}-${GITHUB_REF##*/}" >> $GITHUB_ENV + shell: bash + + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + with: + name: "${{ env.artifact_name }}" + path: ${{github.workspace}}/output + retention-days: 15 diff --git a/.github/workflows/companion.yml b/.github/workflows/companion.yml index 9195925b338..257e6f7a7d7 100644 --- a/.github/workflows/companion.yml +++ b/.github/workflows/companion.yml @@ -21,12 +21,6 @@ on: workflow_dispatch: -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - CMAKE_BUILD_TYPE: Release - QT_VERSION: '6.9.0' - SDL_VERSION: '2.32.8' - jobs: build-linux: name: Linux Companion @@ -43,22 +37,10 @@ jobs: with: submodules: recursive - - name: Build - working-directory: ${{github.workspace}} - shell: bash - run: | - mkdir output && \ - tools/build-companion.sh "$(pwd)" "$(pwd)/output/" - - - name: Compose release filename - run: echo "artifact_name=edgetx-cpn-linux-${GITHUB_REF##*/}" >> $GITHUB_ENV - - - name: Archive production artifacts - uses: actions/upload-artifact@v4 + - name: Setup and Build + uses: ./.github/actions/build_companion with: - name: "${{ env.artifact_name }}" - path: ${{github.workspace}}/output - retention-days: 15 + os: 'linux' build-macos: name: macOS Companion @@ -67,7 +49,6 @@ jobs: env: CMAKE_OSX_ARCHITECTURES: 'x86_64' CMAKE_OSX_DEPLOYMENT_TARGET: '10.15' - QT_ARCH: 'clang_64' steps: - name: Check out the repo @@ -75,42 +56,11 @@ jobs: with: submodules: recursive - - name: Install Qt - uses: jdpurcell/install-qt-action@v5 - env: - AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini - with: - version: ${{ env.QT_VERSION }} - modules: 'qtmultimedia qtserialport' - arch: ${{ env.QT_ARCH }} - cache: true - cache-key-prefix: 'install-qt-action-${{ env.QT_ARCH }}' - - - name: Setup SDL2 - id: setup-sdl2 - uses: libsdl-org/setup-sdl@v1 + - name: Setup and Build + uses: ./.github/actions/build_companion with: - version: ${{ env.SDL_VERSION }} - build-type: "Release" - - - name: Install Python Dependencies - run: python3 -m pip install clang jinja2 lz4 pillow pydantic - - - name: Build - run: | - mkdir output && \ - CMAKE_PREFIX_PATH="$QT_ROOT_DIR;$SDL2_ROOT" \ - tools/build-companion.sh "$(pwd)" "$(pwd)/output/" - - - name: Compose release filename - run: echo "artifact_name=edgetx-cpn-osx-${GITHUB_REF##*/}" >> $GITHUB_ENV - - - name: Archive production artifacts - uses: actions/upload-artifact@v4 - with: - name: "${{ env.artifact_name }}" - path: ${{github.workspace}}/output - retention-days: 15 + os: 'macos' + qt-arch: 'clang_64' build-win64: name: Windows Companion @@ -118,7 +68,6 @@ jobs: env: CMAKE_GENERATOR: 'Ninja' - QT_ARCH: 'win64_msvc2022_64' CXX: 'clang++' CC: 'clang' @@ -132,44 +81,8 @@ jobs: with: submodules: recursive - - name: Install Qt - uses: jdpurcell/install-qt-action@v5 - env: - AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini - with: - version: ${{ env.QT_VERSION }} - modules: 'qtmultimedia qtserialport' - arch: ${{ env.QT_ARCH }} - cache: true - cache-key-prefix: 'install-qt-action-${{ env.QT_ARCH }}' - - - name: Setup SDL2 - id: setup-sdl2 - uses: libsdl-org/setup-sdl@v1 - with: - version: ${{ env.SDL_VERSION }} - build-type: "Release" - - - name: Install Python Dependencies - run: | - echo $PATH - $Python3_ROOT_DIR/python3.exe -m pip install clang jinja2 lz4 pillow pydantic - - - name: Setup MSVC - uses: ilammy/msvc-dev-cmd@v1 - - - name: Build - run: | - mkdir output && \ - CMAKE_PREFIX_PATH="$QT_ROOT_DIR;$SDL2_ROOT" \ - tools/build-companion.sh "$(pwd)" "$(pwd)/output/" - - - name: Compose release filename - run: echo "artifact_name=edgetx-cpn-win64-${GITHUB_REF##*/}" >> $GITHUB_ENV - - - name: Archive production artifacts - uses: actions/upload-artifact@v4 + - name: Setup and Build + uses: ./.github/actions/build_companion with: - name: "${{ env.artifact_name }}" - path: ${{github.workspace}}/output - retention-days: 15 + os: 'win64' + qt-arch: 'win64_msvc2022_64' From 79172a1a69c6c55da68547124fb11374ad317fba Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 16:27:24 +0200 Subject: [PATCH 40/49] Try macos-14 --- .github/workflows/companion.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/companion.yml b/.github/workflows/companion.yml index 257e6f7a7d7..29fc41a31d9 100644 --- a/.github/workflows/companion.yml +++ b/.github/workflows/companion.yml @@ -44,7 +44,7 @@ jobs: build-macos: name: macOS Companion - runs-on: macos-13 + runs-on: macos-14 env: CMAKE_OSX_ARCHITECTURES: 'x86_64' From 51d96109ba62fe82fae26fd8722cce98e5ed0439 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 16:59:11 +0200 Subject: [PATCH 41/49] Limit jobs on windows and macos as well --- tools/build-companion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/build-companion.sh b/tools/build-companion.sh index 936789b44f5..ec8c5f22bb7 100755 --- a/tools/build-companion.sh +++ b/tools/build-companion.sh @@ -49,7 +49,7 @@ if [[ -z ${EDGETX_VERSION_SUFFIX} ]]; then fi fi -if [ "$(uname)" = "Linux" ] && [ -n "$GITHUB_ACTIONS" ]; then +if [ -n "$GITHUB_ACTIONS" ]; then MAX_JOBS=3 fi From 929014f35e315a09502ee2ff52dc6933ad30cb56 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:37:07 +0200 Subject: [PATCH 42/49] Build modules --- .github/workflows/companion.yml | 34 +++++ tools/build-wasm-modules.sh | 232 ++++++++++++++++++++++++++++++++ 2 files changed, 266 insertions(+) create mode 100755 tools/build-wasm-modules.sh diff --git a/.github/workflows/companion.yml b/.github/workflows/companion.yml index 29fc41a31d9..a4ac12858a8 100644 --- a/.github/workflows/companion.yml +++ b/.github/workflows/companion.yml @@ -22,6 +22,40 @@ on: workflow_dispatch: jobs: + build-modules: + name: WASM Modules + runs-on: ubuntu-latest + + container: + image: ghcr.io/edgetx/edgetx-wasi:pr-37 + volumes: + - ${{ github.workspace }}:/src + + steps: + - name: Check out the repo + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Build modules + shell: bash + env: + CMAKE_BUILD_TYPE: 'Release' + run: | + mkdir output && \ + tools/build-wasm-modules.sh "$(pwd)" "$(pwd)/output/" + + - name: Compose artifact name + run: echo "artifact_name=edgetx-modules-${GITHUB_REF##*/}" >> $GITHUB_ENV + shell: bash + + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + with: + name: "${{ env.artifact_name }}" + path: ${{github.workspace}}/output + retention-days: 15 + build-linux: name: Linux Companion runs-on: ubuntu-latest diff --git a/tools/build-wasm-modules.sh b/tools/build-wasm-modules.sh new file mode 100755 index 00000000000..36eed2d25d2 --- /dev/null +++ b/tools/build-wasm-modules.sh @@ -0,0 +1,232 @@ +#!/bin/bash + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +. "$SCRIPT_DIR/build-common.sh" + +SRCDIR=$1 +OUTDIR=$2 + +if [[ -z ${SRCDIR} ]]; then + SRCDIR="$(pwd)" +fi + +if [[ -z ${OUTDIR} ]]; then + OUTDIR="$(pwd)/output" +fi + +if [[ ! -d "${OUTDIR}" ]]; then + mkdir -p "${OUTDIR}" +fi + +QUIET_FLAGS="" +if [[ "$CMAKE_GENERATOR" == "Ninja" ]]; then + QUIET_FLAGS="-- --quiet" +else + # Assume Makefile generator for non-Ninja builds + COMMON_OPTIONS="-DCMAKE_RULE_MESSAGES=OFF" +fi + +COMMON_OPTIONS+=" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MESSAGE_LOG_LEVEL=WARNING -Wno-dev" +COMMON_OPTIONS+=" -DCMAKE_MODULE_PATH=/opt/wasi-sdk/share/cmake/" +COMMON_OPTIONS+=" -DEdgeTX_SUPERBUILD:BOOL=0 -DNATIVE_BUILD:BOOL=1 -DDISABLE_COMPANION:BOOL=1" + +# Generate EDGETX_VERSION_SUFFIX if not already set +if [[ -z ${EDGETX_VERSION_SUFFIX} ]]; then + gh_type=$(echo "$GITHUB_REF" | awk -F / '{print $2}') #heads|tags|pull + if [[ $gh_type = "tags" ]]; then + # tags: refs/tags/ + gh_tag=${GITHUB_REF##*/} + export EDGETX_VERSION_TAG=$gh_tag + elif [[ $gh_type = "pull" ]]; then + # pull: refs/pull//merge + gh_pull_number=PR$(echo "$GITHUB_REF" | awk -F / '{print $3}') + export EDGETX_VERSION_SUFFIX=$gh_pull_number + elif [[ $gh_type = "heads" ]]; then + # heads: refs/heads/ + gh_branch=${GITHUB_REF##*/} + export EDGETX_VERSION_SUFFIX=$gh_branch + fi +fi + +if [ "$(uname)" = "Linux" ] && [ -n "$GITHUB_ACTIONS" ]; then + MAX_JOBS=3 +fi + +rm -rf build && mkdir build && cd build + +# Function to output error logs (works in both GitHub Actions and terminal) +output_error_log() { + local log_file="$1" + local context="$2" + + if [[ -f "$log_file" ]]; then + echo "------------------------------------------" + echo " Full error output from $log_file:" + echo "------------------------------------------" + cat "$log_file" + else + echo "⚠️ Warning: Log file $log_file not found for $context" + fi +} + +# Function to show last N lines of a log file for warnings +show_log_summary() { + local log_file="$1" + local lines="${2:-50}" + local context="$3" + + if [[ -f "$log_file" ]]; then + echo "------------------------------------------" + echo "Last $lines lines from $log_file:" + echo "------------------------------------------" + tail -n "$lines" "$log_file" + fi +} + +run_pipeline() { + local log_file="${1:-/dev/null}" + local context="$2" + local show_details="${3:-false}" + local cmake_opts="--parallel ${MAX_JOBS} ${QUIET_FLAGS}" + local wasi_toolchain="/opt/wasi-sdk/share/cmake/wasi-sdk-pthread.cmake" + + clean_build + if ! execute_with_output "🔧 Final config" "cmake -S ${SRCDIR} -B wasm --toolchain ${wasi_toolchain} ${BUILD_OPTIONS}" "$log_file" "$show_details"; then + output_error_log "$log_file" "$context (Configuration)" + return 1 + fi + if ! execute_with_output "📦 Building WASM module" "cmake --build wasm --target wasi-module ${cmake_opts}" "$log_file" "$show_details"; then + output_error_log "$log_file" "$context (Library Build)" + return 1 + fi + + return 0 +} + +execute_with_output() { + local description="$1" + local command="$2" + local log_file="$3" + local show_output="${4:-false}" + + if [[ "$show_output" == "true" && "$log_file" != "/dev/null" ]]; then + echo " $description..." + fi + + eval "$command" >> "$log_file" 2>&1 +} + +clean_build() { + rm -f CMakeCache.txt native/CMakeCache.txt +} + +# Enhanced plugin builder with better error handling +build_plugin() { + local plugin="$1" + local log_file="build_${plugin}.log" + local verbose="${2:-false}" + + BUILD_OPTIONS="${COMMON_OPTIONS} " + + if ! get_target_build_options "$plugin" >> "$log_file" 2>&1; then + if [[ -n "$GITHUB_ACTIONS" ]]; then + echo "::error::Failed to get build options for $plugin" + fi + output_error_log "$log_file" "$plugin (Build Options)" + return 1 + fi + + # Only show detailed output in GitHub Actions or if verbose is requested + local show_details="false" + if [[ -n "$GITHUB_ACTIONS" || "$verbose" == "true" ]]; then + show_details="true" + fi + + if ! run_pipeline "$log_file" "$plugin" "$show_details"; then + return 1 + fi + + if [[ -f "wasm/wasi-module.wasm" ]]; then + cp "wasm/wasi-module.wasm" "${OUTDIR}/${plugin}.wasm" 2>/dev/null + fi + + # Check for warnings and show summary if found + if grep -q -i "warning" "$log_file"; then + echo " ⚠️ $plugin completed with warnings" + if [[ "$show_details" == "true" ]]; then + show_log_summary "$log_file" 50 "$plugin (Warnings)" + fi + return 0 + fi + + echo " ✅ $plugin completed successfully" + return 0 +} + +declare -a simulator_plugins=( + # x9lite x9lites x9d x9dp x9dp2019 x9e + # x7 x7access + # t8 t12 t12max tx12 tx12mk2 t15 t16 t18 t20 t20v2 + xlite xlites + x10 x10express x12s + zorro tx16s tx15 + commando8 boxer pocket mt12 gx12 + tlite tpro tprov2 tpros bumblebee lr3pro t14 + nv14 el18 pl18 pl18ev pl18u st16 pa01 + f16 v14 v16 +) + +TOTAL=${#simulator_plugins[@]} +FAILED_PLUGINS=() + +echo "🔨 Building $TOTAL Plugins for $PACKAGE_NAME" + +for i in "${!simulator_plugins[@]}"; do + plugin="${simulator_plugins[$i]}" + current=$((i + 1)) + percent=$((current * 100 / TOTAL)) + + # For terminal output, put each plugin on its own line for cleaner display + if [[ -n "$GITHUB_ACTIONS" ]]; then + printf "::group::📦 %-12s [%2d/%2d] %3d%%\n" "$plugin" "$current" "$TOTAL" "$percent" + else + echo "🔨 [$current/$TOTAL] ($percent%) Building $plugin..." + fi + + error_status=0 + if ! build_plugin "$plugin"; then + FAILED_PLUGINS+=("$plugin") + error_status=1 + fi + + if [[ -n "$GITHUB_ACTIONS" ]]; then + echo "::endgroup::" + fi + + if [ $error_status -ne 0 ]; then + # TODO: if not '--build-all' used + exit 1 + fi +done + +# Show summary of any failures (if using continue-on-error approach) +if [ ${#FAILED_PLUGINS[@]} -gt 0 ]; then + if [[ -n "$GITHUB_ACTIONS" ]]; then + echo "::group::❌ Build Failures Summary" + else + echo "❌ Build Failures Summary" + echo "==========================================" + fi + + echo "The following plugins failed to build:" + for failed_plugin in "${FAILED_PLUGINS[@]}"; do + echo " ❌ $failed_plugin" + done + + if [[ -n "$GITHUB_ACTIONS" ]]; then + echo "::endgroup::" + else + echo "==========================================" + fi + exit 1 +fi From ae5c598d02bf0ee270fd6f0194f3f87534126200 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 19:42:30 +0200 Subject: [PATCH 43/49] Build all modules --- tools/build-companion.sh | 4 ++-- tools/build-wasm-modules.sh | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/build-companion.sh b/tools/build-companion.sh index ec8c5f22bb7..62d49905746 100755 --- a/tools/build-companion.sh +++ b/tools/build-companion.sh @@ -98,7 +98,7 @@ run_pipeline() { output_error_log "$log_file" "$context (Configuration)" return 1 fi - if ! execute_with_output "🔧 Native config" "cmake --build . --target native-configure ${cmake_opts}" "$log_file" "$show_details"; then + if ! execute_with_output "🔧 CMake config" "cmake --build . --target native-configure ${cmake_opts}" "$log_file" "$show_details"; then output_error_log "$log_file" "$context (Native Configure)" return 1 fi @@ -110,7 +110,7 @@ run_pipeline() { "final") BUILD_OPTIONS="${COMMON_OPTIONS} -DEdgeTX_SUPERBUILD:BOOL=0 -DNATIVE_BUILD:BOOL=1" clean_build && mkdir -p native/plugins - if ! execute_with_output "🔧 Final config" "cmake -S ${SRCDIR} -B native --toolchain cmake/toolchain/native.cmake ${BUILD_OPTIONS}" "$log_file" "$show_details"; then + if ! execute_with_output "🔧 CMake config" "cmake -S ${SRCDIR} -B native --toolchain cmake/toolchain/native.cmake ${BUILD_OPTIONS}" "$log_file" "$show_details"; then output_error_log "$log_file" "Final Configuration" return 1 fi diff --git a/tools/build-wasm-modules.sh b/tools/build-wasm-modules.sh index 36eed2d25d2..f9e4fe454a2 100755 --- a/tools/build-wasm-modules.sh +++ b/tools/build-wasm-modules.sh @@ -28,7 +28,7 @@ fi COMMON_OPTIONS+=" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MESSAGE_LOG_LEVEL=WARNING -Wno-dev" COMMON_OPTIONS+=" -DCMAKE_MODULE_PATH=/opt/wasi-sdk/share/cmake/" -COMMON_OPTIONS+=" -DEdgeTX_SUPERBUILD:BOOL=0 -DNATIVE_BUILD:BOOL=1 -DDISABLE_COMPANION:BOOL=1" +COMMON_OPTIONS+=" -DEdgeTX_SUPERBUILD:BOOL=0 -DNATIVE_BUILD:BOOL=1" # Generate EDGETX_VERSION_SUFFIX if not already set if [[ -z ${EDGETX_VERSION_SUFFIX} ]]; then @@ -48,7 +48,7 @@ if [[ -z ${EDGETX_VERSION_SUFFIX} ]]; then fi fi -if [ "$(uname)" = "Linux" ] && [ -n "$GITHUB_ACTIONS" ]; then +if [ -n "$GITHUB_ACTIONS" ]; then MAX_JOBS=3 fi @@ -91,7 +91,7 @@ run_pipeline() { local wasi_toolchain="/opt/wasi-sdk/share/cmake/wasi-sdk-pthread.cmake" clean_build - if ! execute_with_output "🔧 Final config" "cmake -S ${SRCDIR} -B wasm --toolchain ${wasi_toolchain} ${BUILD_OPTIONS}" "$log_file" "$show_details"; then + if ! execute_with_output "🔧 CMake config" "cmake -S ${SRCDIR} -B wasm --toolchain ${wasi_toolchain} ${BUILD_OPTIONS}" "$log_file" "$show_details"; then output_error_log "$log_file" "$context (Configuration)" return 1 fi @@ -164,9 +164,9 @@ build_plugin() { } declare -a simulator_plugins=( - # x9lite x9lites x9d x9dp x9dp2019 x9e - # x7 x7access - # t8 t12 t12max tx12 tx12mk2 t15 t16 t18 t20 t20v2 + x9lite x9lites x9d x9dp x9dp2019 x9e + x7 x7access + t8 t12 t12max tx12 tx12mk2 t15 t16 t18 t20 t20v2 xlite xlites x10 x10express x12s zorro tx16s tx15 From 71f676772752b90b0b52f43e7f3620f8cf51be70 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Thu, 21 Aug 2025 21:58:26 +0200 Subject: [PATCH 44/49] Remove debug info on release builds --- radio/src/targets/simu/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/radio/src/targets/simu/CMakeLists.txt b/radio/src/targets/simu/CMakeLists.txt index f4af41393e6..75b95c64eb7 100644 --- a/radio/src/targets/simu/CMakeLists.txt +++ b/radio/src/targets/simu/CMakeLists.txt @@ -95,6 +95,8 @@ if(WASI) target_compile_options(radiolib_native PUBLIC ${WASI_COMPILE_OPTIONS}) target_compile_options(simu_drivers PUBLIC ${WASI_COMPILE_OPTIONS}) + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -Wl,--strip-debug") + add_executable(wasi-module EXCLUDE_FROM_ALL ${SIMU_SRC} ) From 7f46e8c67cf159b25b4f8fae6764ea26d4d7492a Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Fri, 22 Aug 2025 07:09:42 +0200 Subject: [PATCH 45/49] Allow overriding MAX_JOBS --- tools/build-companion.sh | 4 ++-- tools/build-wasm-modules.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/build-companion.sh b/tools/build-companion.sh index 62d49905746..068c93e33e7 100755 --- a/tools/build-companion.sh +++ b/tools/build-companion.sh @@ -49,8 +49,8 @@ if [[ -z ${EDGETX_VERSION_SUFFIX} ]]; then fi fi -if [ -n "$GITHUB_ACTIONS" ]; then - MAX_JOBS=3 +if [[ -n "$GITHUB_ACTIONS" ]]; then + MAX_JOBS=${MAX_JOBS:-3} fi rm -rf build && mkdir build && cd build diff --git a/tools/build-wasm-modules.sh b/tools/build-wasm-modules.sh index f9e4fe454a2..28b5b5e6f39 100755 --- a/tools/build-wasm-modules.sh +++ b/tools/build-wasm-modules.sh @@ -48,8 +48,8 @@ if [[ -z ${EDGETX_VERSION_SUFFIX} ]]; then fi fi -if [ -n "$GITHUB_ACTIONS" ]; then - MAX_JOBS=3 +if [[ -n "$GITHUB_ACTIONS" ]]; then + MAX_JOBS=${MAX_JOBS:-3} fi rm -rf build && mkdir build && cd build From 665f65ce938229bf8b0c484bec2d462cdca6ae33 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Fri, 22 Aug 2025 08:34:46 +0200 Subject: [PATCH 46/49] fix: script labels --- tools/build-companion.sh | 6 +++--- tools/build-wasm-modules.sh | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/build-companion.sh b/tools/build-companion.sh index 068c93e33e7..b374862e1aa 100755 --- a/tools/build-companion.sh +++ b/tools/build-companion.sh @@ -111,15 +111,15 @@ run_pipeline() { BUILD_OPTIONS="${COMMON_OPTIONS} -DEdgeTX_SUPERBUILD:BOOL=0 -DNATIVE_BUILD:BOOL=1" clean_build && mkdir -p native/plugins if ! execute_with_output "🔧 CMake config" "cmake -S ${SRCDIR} -B native --toolchain cmake/toolchain/native.cmake ${BUILD_OPTIONS}" "$log_file" "$show_details"; then - output_error_log "$log_file" "Final Configuration" + output_error_log "$log_file" "CMake Configuration" return 1 fi if ! execute_with_output "📦 Building companion" "cmake --build native --target companion ${cmake_opts}" "$log_file" "$show_details"; then - output_error_log "$log_file" "$context (Companion Build)" + output_error_log "$log_file" "Companion Build" return 1 fi if ! execute_with_output "📦 Packaging" "cmake --build native --target ${PACKAGE_TARGET}" "$log_file" "true"; then - output_error_log "$log_file" "Final Packaging" + output_error_log "$log_file" "Packaging" return 1 fi ;; diff --git a/tools/build-wasm-modules.sh b/tools/build-wasm-modules.sh index 28b5b5e6f39..5039c7cbb5d 100755 --- a/tools/build-wasm-modules.sh +++ b/tools/build-wasm-modules.sh @@ -179,7 +179,7 @@ declare -a simulator_plugins=( TOTAL=${#simulator_plugins[@]} FAILED_PLUGINS=() -echo "🔨 Building $TOTAL Plugins for $PACKAGE_NAME" +echo "🔨 Building $TOTAL Plugins" for i in "${!simulator_plugins[@]}"; do plugin="${simulator_plugins[$i]}" From 74b65fb27cf37d32ee707c124035756c01912807 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Fri, 22 Aug 2025 10:11:36 +0200 Subject: [PATCH 47/49] Try to build modules with macOS --- .github/workflows/companion.yml | 31 +++++++++++++++++++++++++------ requirements.txt | 5 +++++ 2 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 requirements.txt diff --git a/.github/workflows/companion.yml b/.github/workflows/companion.yml index a4ac12858a8..9653234fd5b 100644 --- a/.github/workflows/companion.yml +++ b/.github/workflows/companion.yml @@ -24,12 +24,7 @@ on: jobs: build-modules: name: WASM Modules - runs-on: ubuntu-latest - - container: - image: ghcr.io/edgetx/edgetx-wasi:pr-37 - volumes: - - ${{ github.workspace }}:/src + runs-on: macos-14 steps: - name: Check out the repo @@ -37,6 +32,27 @@ jobs: with: submodules: recursive + - uses: actions/setup-python@v5 + with: + python-version: '3.13' + cache: 'pip' # caching pip dependencies + + - run: python3 -m pip install -r requirements.txt + + - name: Cache WASI SDK + id: cache-wasi-sdk + uses: actions/cache@v4 + with: + path: /opt/wasi-sdk + key: wasi-sdk-25.0-arm64-macos + + - name: Install WASI SDK + if: steps.cache-wasi-sdk.outputs.cache-hit != 'true' + run: | + curl -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-25/wasi-sdk-25.0-arm64-macos.tar.gz -o wasi-sdk.tar.gz + tar -xzf wasi-sdk.tar.gz + sudo mv wasi-sdk-25.0-arm64-macos /opt/wasi-sdk + - name: Build modules shell: bash env: @@ -59,6 +75,7 @@ jobs: build-linux: name: Linux Companion runs-on: ubuntu-latest + if: false container: image: ghcr.io/edgetx/edgetx-dev:latest @@ -79,6 +96,7 @@ jobs: build-macos: name: macOS Companion runs-on: macos-14 + if: false env: CMAKE_OSX_ARCHITECTURES: 'x86_64' @@ -99,6 +117,7 @@ jobs: build-win64: name: Windows Companion runs-on: windows-2022 + if: false env: CMAKE_GENERATOR: 'Ninja' diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000000..92612f89787 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +clang +jinja2 +pillow +lz4 +pydantic From bde9f1f8ede1c9e0512e456660969ebf26156ea6 Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Fri, 22 Aug 2025 12:38:47 +0200 Subject: [PATCH 48/49] Composite action and removed F2 radios --- .../actions/python_dependencies/action.yml | 17 ++++++++++++ .github/actions/wasi_sdk/action.yml | 27 +++++++++++++++++++ .github/workflows/companion.yml | 23 +++------------- radio/src/targets/simu/CMakeLists.txt | 16 +++++++++-- tools/build-wasm-modules.sh | 8 +++--- 5 files changed, 65 insertions(+), 26 deletions(-) create mode 100644 .github/actions/python_dependencies/action.yml create mode 100644 .github/actions/wasi_sdk/action.yml diff --git a/.github/actions/python_dependencies/action.yml b/.github/actions/python_dependencies/action.yml new file mode 100644 index 00000000000..0071668610c --- /dev/null +++ b/.github/actions/python_dependencies/action.yml @@ -0,0 +1,17 @@ +name: 'Setup WASI SDK' +inputs: + python-version: + description: 'Python version' + default: '3.13' + +runs: + using: "composite" + steps: + + - uses: actions/setup-python@v5 + with: + python-version: ${{ inputs.python-version }} + cache: 'pip' # caching pip dependencies + + - run: python3 -m pip install -r requirements.txt + shell: bash diff --git a/.github/actions/wasi_sdk/action.yml b/.github/actions/wasi_sdk/action.yml new file mode 100644 index 00000000000..a64ea35c992 --- /dev/null +++ b/.github/actions/wasi_sdk/action.yml @@ -0,0 +1,27 @@ +name: 'Setup WASI SDK' +inputs: + arch: + description: 'OS / Architecture (ex: arm64-macos)' + default: 'arm64-macos' + version: + description: 'SDK version' + default: '25' + +runs: + using: "composite" + steps: + + - name: Cache WASI SDK + id: cache-wasi-sdk + uses: actions/cache@v4 + with: + path: /opt/wasi-sdk + key: 'wasi-sdk-${{ inputs.version }}-${{ inputs.arch }}' + + - name: Install WASI SDK + if: steps.cache-wasi-sdk.outputs.cache-hit != 'true' + shell: bash + run: | + mkdir /tmp/wasi-sdk + curl -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${{ inputs.version }}/wasi-sdk-${{ inputs.version }}.0-${{ inputs.arch }}.tar.gz | tar xz --strip-components 1 -C /tmp/wasi-sdk + sudo mv /tmp/wasi-sdk /opt/wasi-sdk diff --git a/.github/workflows/companion.yml b/.github/workflows/companion.yml index 9653234fd5b..4d284e8c300 100644 --- a/.github/workflows/companion.yml +++ b/.github/workflows/companion.yml @@ -32,26 +32,11 @@ jobs: with: submodules: recursive - - uses: actions/setup-python@v5 - with: - python-version: '3.13' - cache: 'pip' # caching pip dependencies - - - run: python3 -m pip install -r requirements.txt + - name: Setup Python Dependencies + uses: ./.github/actions/python_dependencies - - name: Cache WASI SDK - id: cache-wasi-sdk - uses: actions/cache@v4 - with: - path: /opt/wasi-sdk - key: wasi-sdk-25.0-arm64-macos - - - name: Install WASI SDK - if: steps.cache-wasi-sdk.outputs.cache-hit != 'true' - run: | - curl -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-25/wasi-sdk-25.0-arm64-macos.tar.gz -o wasi-sdk.tar.gz - tar -xzf wasi-sdk.tar.gz - sudo mv wasi-sdk-25.0-arm64-macos /opt/wasi-sdk + - name: Setup WASI SDK + uses: ./.github/actions/wasi_sdk - name: Build modules shell: bash diff --git a/radio/src/targets/simu/CMakeLists.txt b/radio/src/targets/simu/CMakeLists.txt index 75b95c64eb7..35408687bcf 100644 --- a/radio/src/targets/simu/CMakeLists.txt +++ b/radio/src/targets/simu/CMakeLists.txt @@ -82,6 +82,11 @@ set(SIMU_SRC ${SIMU_SRC} PARENT_SCOPE) set(SIMU_SRC_OPTIONS ${SIMU_SRC_OPTIONS} PARENT_SCOPE) if(WASI) + # strip debug info in Release builds + list(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE + -Wl,--strip-debug + ) + set(WASI_COMPILE_OPTIONS -Os -fno-exceptions @@ -92,17 +97,20 @@ if(WASI) -mllvm -wasm-enable-sjlj ) + if(USE_LTO) + list(APPEND WASI_COMPILE_OPTIONS -flto=thin) + endif() + target_compile_options(radiolib_native PUBLIC ${WASI_COMPILE_OPTIONS}) target_compile_options(simu_drivers PUBLIC ${WASI_COMPILE_OPTIONS}) - set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -Wl,--strip-debug") - add_executable(wasi-module EXCLUDE_FROM_ALL ${SIMU_SRC} ) set_target_properties(wasi-module PROPERTIES SUFFIX ".wasm") target_compile_options(wasi-module PUBLIC ${WASI_COMPILE_OPTIONS}) + target_link_options(wasi-module PRIVATE -Wl,--import-memory -Wl,--export-memory @@ -117,6 +125,10 @@ if(WASI) -Wl,-mllvm,-wasm-enable-sjlj -lsetjmp ) + + if(USE_LTO) + target_link_options(wasi-module PRIVATE -Wl,--thinlto-jobs=all) + endif() else() add_executable(simu EXCLUDE_FROM_ALL diff --git a/tools/build-wasm-modules.sh b/tools/build-wasm-modules.sh index 5039c7cbb5d..341513781da 100755 --- a/tools/build-wasm-modules.sh +++ b/tools/build-wasm-modules.sh @@ -164,14 +164,12 @@ build_plugin() { } declare -a simulator_plugins=( - x9lite x9lites x9d x9dp x9dp2019 x9e - x7 x7access - t8 t12 t12max tx12 tx12mk2 t15 t16 t18 t20 t20v2 - xlite xlites + x7access x9dp2019 x9e + t12max tx12mk2 t15 t16 t18 t20 t20v2 x10 x10express x12s zorro tx16s tx15 commando8 boxer pocket mt12 gx12 - tlite tpro tprov2 tpros bumblebee lr3pro t14 + tprov2 tpros bumblebee t14 nv14 el18 pl18 pl18ev pl18u st16 pa01 f16 v14 v16 ) From 0d2fedf5fcfd46203fc4cd00a821d5e93e42270a Mon Sep 17 00:00:00 2001 From: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Date: Fri, 22 Aug 2025 14:28:31 +0200 Subject: [PATCH 49/49] Improve build --- .github/actions/wasi_sdk/action.yml | 7 ---- .github/workflows/actions.yml | 55 +++++++++-------------------- .github/workflows/companion.yml | 39 ++++++++++++++------ tools/build-wasm-modules.sh | 41 +++++++++++++-------- tools/commit-tests.sh | 6 +--- 5 files changed, 73 insertions(+), 75 deletions(-) diff --git a/.github/actions/wasi_sdk/action.yml b/.github/actions/wasi_sdk/action.yml index a64ea35c992..c3d7da30e6c 100644 --- a/.github/actions/wasi_sdk/action.yml +++ b/.github/actions/wasi_sdk/action.yml @@ -11,13 +11,6 @@ runs: using: "composite" steps: - - name: Cache WASI SDK - id: cache-wasi-sdk - uses: actions/cache@v4 - with: - path: /opt/wasi-sdk - key: 'wasi-sdk-${{ inputs.version }}-${{ inputs.arch }}' - - name: Install WASI SDK if: steps.cache-wasi-sdk.outputs.cache-hit != 'true' shell: bash diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index ac236b2dc25..10b965ab9f2 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -10,10 +10,7 @@ on: - '**.md' - '.github/ISSUE_TEMPLATE/**' - '.github/workflows/nightly.yml' - - '.github/workflows/linux_cpn.yml' - - '.github/workflows/macosx_cpn.yml' - - '.github/workflows/win-cpn-32.yml' - - '.github/workflows/win_cpn-64.yml' + - '.github/workflows/companion.yml' - '.github/workflows/validate_fw_json.yml' - 'companion/**' - '.gitpod.yml' @@ -26,10 +23,7 @@ on: - '**.md' - '.github/ISSUE_TEMPLATE/**' - '.github/workflows/nightly.yml' - - '.github/workflows/linux_cpn.yml' - - '.github/workflows/macosx_cpn.yml' - - '.github/workflows/win-cpn-32.yml' - - '.github/workflows/win_cpn-64.yml' + - '.github/workflows/companion.yml' - '.github/workflows/validate_fw_json.yml' - 'companion/**' - '.gitpod.yml' @@ -44,27 +38,21 @@ jobs: strategy: matrix: target: - - x9dp2019 + - x9dp2019;x9e - tx15 - tx16s - nv14 - el18 - pl18 - pl18ev - - t12max + - t12max;t14 - t15 - t16 - t18 - - tlite #STM32F2 - - t20 - - t14 - - t20v2 - - tx12 #STM32F2 + - t20;t20v2 - x10 - x12s - - x9e - - mt12 - - gx12 + - mt12;gx12 - nb4p - st16 container: @@ -76,7 +64,6 @@ jobs: uses: actions/checkout@v4 with: submodules: recursive - # fetch-depth: 0 # https://github.com/actions/checkout#Fetch-all-history-for-all-tags-and-branches - name: Test ${{ matrix.target }} env: @@ -85,7 +72,6 @@ jobs: echo "Running commit tests" ./tools/commit-tests.sh - build: name: Run builds needs: test @@ -94,26 +80,20 @@ jobs: matrix: target: - nv14;el18 - - pl18;pl18ev;pl18u - - pa01 - - t12max - - t15;t16;t18 - - zorro;pocket;mt12;commando8 + - pl18;pl18ev + - pl18u;pa01 + - t15;t16 + - t14;t18;mt12 + - zorro;pocket;commando8 - tprov2;tpros;bumblebee - - t20;t20v2;t14 - - tx12mk2;boxer;gx12 - - tx15 - - tx16s - - f16 + - mt12;gx12;t20;t20v2 + - t12max;tx12mk2;boxer + - tx15;tx16s + - x12s;f16 - v12;v14;v16 - x10;x10express - - x12s - - x7access - - x9dp2019 - - x9e;x9e-hall - - mt12;gx12 - - nb4p - - st16 + - x7access;x9dp2019;x9e;x9e-hall + - nb4p;st16 container: image: ghcr.io/edgetx/edgetx-dev:latest volumes: @@ -149,7 +129,6 @@ jobs: runs-on: ubuntu-latest steps: - name: Compose release filename - # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions run: echo "artifact_name=edgetx-firmware-${GITHUB_REF##*/}" >> $GITHUB_ENV - name: Merge firmware artifact packages diff --git a/.github/workflows/companion.yml b/.github/workflows/companion.yml index 4d284e8c300..58a1881ec57 100644 --- a/.github/workflows/companion.yml +++ b/.github/workflows/companion.yml @@ -22,15 +22,34 @@ on: workflow_dispatch: jobs: - build-modules: - name: WASM Modules + modules: + name: WASM Modules (${{ matrix.group.id }}) runs-on: macos-14 + strategy: + matrix: + group: + - id: color-1 + target: [nv14, el18, pl18, pl18ev] + - id: color-2 + target: [pl18u, t15, t16, t18] + - id: bw-1 + target: [zorro, pocket, mt12, commando8, tprov2, tpros, bumblebee, t14] + - id: bw-2 + target: [mt12, gx12, t20, t20v2, t12max, tx12mk2, boxer] + - id: color-3 + target: [tx15, tx16s, x12s, f16] + - id: mixed-1 + target: [v12, v14, v16, x10, x10express] + - id: bw-3 + target: [x7access, x9dp2019, x9e, x9e-hall] + - id: color-4 + target: [nb4p, st16, pa01] steps: - name: Check out the repo uses: actions/checkout@v4 with: - submodules: recursive + submodules: true - name: Setup Python Dependencies uses: ./.github/actions/python_dependencies @@ -41,26 +60,24 @@ jobs: - name: Build modules shell: bash env: + FLAVOR: ${{ join(matrix.group.target, ';') }} CMAKE_BUILD_TYPE: 'Release' run: | mkdir output && \ tools/build-wasm-modules.sh "$(pwd)" "$(pwd)/output/" - - name: Compose artifact name - run: echo "artifact_name=edgetx-modules-${GITHUB_REF##*/}" >> $GITHUB_ENV - shell: bash - - name: Archive production artifacts uses: actions/upload-artifact@v4 with: - name: "${{ env.artifact_name }}" + name: wasm-modules-${{ matrix.group.id }} path: ${{github.workspace}}/output + if-no-files-found: error retention-days: 15 build-linux: name: Linux Companion runs-on: ubuntu-latest - if: false + needs: modules container: image: ghcr.io/edgetx/edgetx-dev:latest @@ -81,7 +98,7 @@ jobs: build-macos: name: macOS Companion runs-on: macos-14 - if: false + needs: modules env: CMAKE_OSX_ARCHITECTURES: 'x86_64' @@ -102,7 +119,7 @@ jobs: build-win64: name: Windows Companion runs-on: windows-2022 - if: false + needs: modules env: CMAKE_GENERATOR: 'Ninja' diff --git a/tools/build-wasm-modules.sh b/tools/build-wasm-modules.sh index 341513781da..750e7a3758d 100755 --- a/tools/build-wasm-modules.sh +++ b/tools/build-wasm-modules.sh @@ -163,24 +163,37 @@ build_plugin() { return 0 } -declare -a simulator_plugins=( - x7access x9dp2019 x9e - t12max tx12mk2 t15 t16 t18 t20 t20v2 - x10 x10express x12s - zorro tx16s tx15 - commando8 boxer pocket mt12 gx12 - tprov2 tpros bumblebee t14 - nv14 el18 pl18 pl18ev pl18u st16 pa01 - f16 v14 v16 -) - -TOTAL=${#simulator_plugins[@]} +if [[ -n "$FLAVOR" ]]; then + # Convert semicolon-separated string to array + IFS=';' read -ra temp_array <<< "$FLAVOR" + plugins=() + for item in "${temp_array[@]}"; do + plugins+=($(echo "$item" | tr '[:upper:]' '[:lower:]')) + done +else + declare -a plugins=( + # monochrom + boxer bumblebee commando8 + gx12 mt12 pocket t12max + t14 t20 t20v2 tpros tprov2 + tx12mk2 zorro v14 + x7access x9dp2019 x9e + # colour + el18 nv14 st16 pa01 + pl18 pl18ev pl18u + t15 t16 t18 + tx15 tx16s f16 v16 + x10 x10express x12s + ) +fi + +TOTAL=${#plugins[@]} FAILED_PLUGINS=() echo "🔨 Building $TOTAL Plugins" -for i in "${!simulator_plugins[@]}"; do - plugin="${simulator_plugins[$i]}" +for i in "${!plugins[@]}"; do + plugin="${plugins[$i]}" current=$((i + 1)) percent=$((current * 100 / TOTAL)) diff --git a/tools/commit-tests.sh b/tools/commit-tests.sh index 05c3dd6d110..305f95dc7c0 100755 --- a/tools/commit-tests.sh +++ b/tools/commit-tests.sh @@ -78,12 +78,8 @@ do fi cmake ${BUILD_OPTIONS} "${SRCDIR}" - - cmake --build . --target arm-none-eabi-configure - cmake --build arm-none-eabi -j"${CORES}" --target ${FIRMARE_TARGET} - cmake --build . --target native-configure cmake --build native -j"${CORES}" --target tests-radio - rm -f CMakeCache.txt native/CMakeCache.txt arm-none-eabi/CMakeCache.txt + rm -f CMakeCache.txt native/CMakeCache.txt done