├── .github ├── FUNDING.yml └── workflows │ └── main.yml ├── BootLoaders ├── AtmegaEmptyBoot │ └── AtmegaMultiEmpty.hex ├── AtmegaMultiBoot │ ├── AtmegaMultiBoot.hex │ └── Source │ │ ├── Makefile │ │ ├── boot.h │ │ ├── optiboot.c │ │ ├── pin_defs.h │ │ └── stk500.h ├── Boards │ ├── Linux │ │ └── 45-maple.rules │ └── Windows │ │ ├── install_drivers.bat │ │ └── wdi-simple.exe ├── OrangeMultiBoot │ ├── OrangeMultiBoot.hex │ └── Source │ │ ├── Makefile │ │ ├── optiboot.c │ │ ├── pin_defs.h │ │ └── stk500.h ├── README.md ├── StmMultiBoot │ ├── README.md │ └── StmMultiBoot.bin ├── StmMultiUSB │ ├── README.md │ └── StmMultiUSB.bin └── package_multi_4in1_board_index.json ├── LICENSE ├── Lua_scripts ├── DSM FwdPrg_55_MIN.lua ├── DSM FwdPrg_56_Color.lua ├── DSM FwdPrg_56_MIN.lua ├── DSM FwdPrg_56_STUP.lua ├── DSMLIB │ ├── DsmFwPrgLib.lua │ ├── DsmLogLib.lua │ ├── DsmMIN_P1.lua │ ├── DsmMIN_P2.lua │ ├── DsmMainMenuLib.lua │ ├── DsmMenuLib.lua │ ├── DsmModelLib.lua │ ├── DsmSetupMenuLib.lua │ ├── DsmSimMenuLib.lua │ ├── MIN_msg_fwdp_en.txt │ ├── img │ │ ├── h_rx_pos_1.png │ │ ├── h_rx_pos_2.png │ │ ├── h_rx_pos_3.png │ │ ├── h_rx_pos_4.png │ │ ├── h_rx_pos_5.png │ │ ├── h_rx_pos_6.png │ │ ├── h_rx_pos_7.png │ │ ├── h_rx_pos_8.png │ │ ├── h_swp_3_120.png │ │ ├── h_swp_3_120inv.png │ │ ├── h_swp_3_135.png │ │ ├── h_swp_3_135inv.png │ │ ├── h_swp_3_140.png │ │ ├── h_swp_3_140inv.png │ │ ├── h_swp_3_90.png │ │ ├── h_swp_3_90inv.png │ │ ├── h_swp_norm.png │ │ ├── rx_pos_1.png │ │ ├── rx_pos_10.png │ │ ├── rx_pos_11.png │ │ ├── rx_pos_12.png │ │ ├── rx_pos_13.png │ │ ├── rx_pos_14.png │ │ ├── rx_pos_15.png │ │ ├── rx_pos_16.png │ │ ├── rx_pos_17.png │ │ ├── rx_pos_18.png │ │ ├── rx_pos_19.png │ │ ├── rx_pos_2.png │ │ ├── rx_pos_20.png │ │ ├── rx_pos_21.png │ │ ├── rx_pos_22.png │ │ ├── rx_pos_23.png │ │ ├── rx_pos_24.png │ │ ├── rx_pos_25.png │ │ ├── rx_pos_3.png │ │ ├── rx_pos_4.png │ │ ├── rx_pos_5.png │ │ ├── rx_pos_6.png │ │ ├── rx_pos_7.png │ │ ├── rx_pos_8.png │ │ ├── rx_pos_9.png │ │ ├── tt_1rud.png │ │ ├── tt_1rud_1ele.png │ │ ├── tt_1rud_2ele.png │ │ ├── tt_2rud_1ele.png │ │ ├── tt_2rud_2ele.png │ │ ├── tt_taileron.png │ │ ├── tt_taileron2.png │ │ ├── tt_vtail.png │ │ ├── wt_1ail.png │ │ ├── wt_1ail_1flp.png │ │ ├── wt_2ail.png │ │ ├── wt_2ail_1flp.png │ │ ├── wt_2ail_2flp.png │ │ ├── wt_elevon.png │ │ └── wt_flaperon.png │ ├── msg_fwdp_en.txt │ ├── readme.md │ ├── readme_bw.md │ └── readme_color.md ├── DSM_AR636_Tel.lua ├── DSM_SmartRX_Tel.lua ├── Graupner HoTT Model Locator.lua ├── Graupner HoTT.lua ├── MultiChan.txt ├── MultiChannelsUpdater.lua ├── MultiConfig.lua ├── MultiLOLI.lua ├── README.md └── pidDsm.lua ├── Multiprotocol ├── A7105_SPI.ino ├── AFHDS2A_Rx_a7105.ino ├── AFHDS2A_a7105.ino ├── ASSAN_nrf24l01.ino ├── Arduino.ino ├── BUGSMINI_nrf24l01.ino ├── BUMBLEB_ccnrf.ino ├── Bayang_Rx_nrf24l01.ino ├── Bayang_nrf24l01.ino ├── Binary_Signature.ino ├── Bluefly_ccnrf.ino ├── Bugs_a7105.ino ├── CABELL_nrf224l01.ino ├── CC2500_SPI.ino ├── CFlie_nrf24l01.ino ├── CG023_nrf24l01.ino ├── CX10_nrf24l01.ino ├── CYRF6936_SPI.ino ├── Convert.ino ├── Corona_cc2500.ino ├── DM002_nrf24l01.ino ├── DSM.ino ├── DSM_Rx_cyrf6936.ino ├── DSM_cyrf6936.ino ├── Devo_cyrf6936.ino ├── E010R5_cyrf6936.ino ├── E016HV2_cc2500.ino ├── E016H_nrf24l01.ino ├── E01X_cyrf6936.ino ├── E129_cyrf6936.ino ├── ESky150_nrf24l01.ino ├── ESky150v2_cc2500.ino ├── ESky_nrf24l01.ino ├── EazyRC_nrf24l01.ino ├── FQ777_nrf24l01.ino ├── FX_nrf24l01.ino ├── FY326_nrf24l01.ino ├── Fake_nrf24l01.ino ├── FlySky_a7105.ino ├── FrSkyDVX_common.ino ├── FrSkyD_cc2500.ino ├── FrSkyL_cc2500.ino ├── FrSkyR9_sx1276.ino ├── FrSkyV_cc2500.ino ├── FrSkyX_cc2500.ino ├── FrSky_Rx_cc2500.ino ├── Futaba_cc2500.ino ├── GD00X_ccnrf.ino ├── GW008_nrf24l01.ino ├── H36_nrf24l01.ino ├── H8_3D_nrf24l01.ino ├── HOTT_cc2500.ino ├── HS6200_EMU.ino ├── Height_a7105.ino ├── Hisky_nrf24l01.ino ├── Hitec_cc2500.ino ├── Hontai_nrf24l01.ino ├── Hubsan_a7105.ino ├── IKEA_Ansluta_cc2500.ino ├── J6Pro_cyrf6936.ino ├── JIABAILE_nrf24l01.ino ├── JJRC345_nrf24l01.ino ├── Joysway_a7105.ino ├── KF606_ccnrf.ino ├── KN_nrf24l01.ino ├── Kamtom_nrf24l01.ino ├── Kyosho2_nrf24l01.ino ├── Kyosho3_cyrf6936.ino ├── Kyosho_a7105.ino ├── LOLI_nrf24l01.ino ├── Losi_cyrf6936.ino ├── MJXQ_ccnrf.ino ├── MLINK_cyrf6936.ino ├── MT99xx_ccnrf.ino ├── MouldKg_nrf24l01.ino ├── Multi.txt ├── MultiOrange.h ├── Multi_Config.ino ├── Multi_Protos.ino ├── Multiprotocol.h ├── Multiprotocol.ino ├── NCC1701_nrf24l01.ino ├── NRF24l01_SPI.ino ├── NRF250K_EMU.ino ├── NanoRF_nrf24l01.ino ├── OMP_ccnrf.ino ├── POTENSIC_nrf24l01.ino ├── Pelikan_a7105.ino ├── Pins.h ├── Propel_nrf24l01.ino ├── Q303_ccnrf.ino ├── Q90C_ccnrf.ino ├── REALACC_nrf24l01.ino ├── RF2500_EMU.ino ├── RadioLink_cc2500.ino ├── Redpine_cc2500.ino ├── SGF22_nrf24l01.ino ├── SHENQI2_nrf24l01.ino ├── SHENQI_nrf24l01.ino ├── SLT_ccnrf.ino ├── SPI.ino ├── SX1276_SPI.ino ├── Scanner_cc2500.ino ├── Scorpio_cyrf6936.ino ├── Skyartec_cc2500.ino ├── Symax_nrf24l01.ino ├── TEST_cc2500.ino ├── TRAXXAS_cyrf6936.ino ├── TX_Def.h ├── Telemetry.ino ├── UDIRC_ccnrf.ino ├── V2X2_nrf24l01.ino ├── V761_nrf24l01.ino ├── V911S_ccnrf.ino ├── Validate.h ├── WFLY2_a7105.ino ├── WFLY_cyrf6936.ino ├── WK2x01_cyrf6936.ino ├── WL91X_ccnrf.ino ├── XERALL_nrf24l01.ino ├── XK2_ccnrf.ino ├── XK_ccnrf.ino ├── XN297Dump_nrf24l01.ino ├── XN297_EMU.ino ├── YD717_nrf24l01.ino ├── Yuxiang_nrf24l01.ino ├── ZSX_nrf24l01.ino ├── _Config.h ├── _MyConfig.h.example ├── iface_a7105.h ├── iface_cc2500.h ├── iface_cyrf6936.h ├── iface_hs6200.h ├── iface_nrf24l01.h ├── iface_nrf250k.h ├── iface_rf2500.h ├── iface_sx1276.h └── iface_xn297.h ├── PCB v2.3d ├── Multipro-txV2-3d-cache.lib ├── Multipro-txV2-3d.cmp ├── Multipro-txV2-3d.kicad_pcb ├── Multipro-txV2-3d.net ├── Multipro-txV2-3d.pro ├── Multipro-txV2-3d.sch ├── PCB_v2.3d.jpg ├── Readme.txt └── Schematic_v2.3d.jpg ├── Protocols_Details.md ├── README.md ├── STM32 PCB ├── Flysky PL18 │ ├── Casing │ │ ├── MPM-BF.stl │ │ ├── MPM-TF.stl │ │ └── MPM.blend │ ├── PL18_multiprotocol │ │ ├── Multi.kicad_sym │ │ ├── Multi.pretty │ │ │ ├── DS-B01F-A-S2.kicad_mod │ │ │ └── MULTIRF4IN1-SMT.kicad_mod │ │ ├── PL18_multiprotocol.kicad_pcb │ │ ├── PL18_multiprotocol.kicad_prl │ │ ├── PL18_multiprotocol.kicad_pro │ │ ├── PL18_multiprotocol.kicad_sch │ │ ├── fp-info-cache │ │ ├── fp-lib-table │ │ └── sym-lib-table │ └── README.md ├── Multiprotocol_STM32_MB_v1.0_t.brd ├── Multiprotocol_STM32_MB_v1.0_t.sch ├── Schematic_Multiprotocol_STM32_MB_v1.0_t.jpg ├── V0.8t │ ├── Multi_STM32_V0.8_t.brd │ └── Multi_STM32_V0.8_t.sch ├── V1.1 │ ├── Multiprotocol_STM32_MB_1.1_t.brd │ └── Multiprotocol_STM32_MB_1.1_t.sch └── v0.1 │ ├── Multi_STM32_V0.1.brd │ ├── Multi_STM32_V0.1.sch │ └── Schematic_Multiprotocol_STM32_MB_v0.1.png ├── _travis.yml ├── buildroot └── bin │ ├── buildFunctions │ ├── build_release_avr_noboot │ ├── build_release_avr_optiboot │ ├── build_release_orx │ ├── build_release_scripts │ ├── build_release_stm32f1_4in1_native_debug │ ├── build_release_stm32f1_4in1_no_debug │ ├── build_release_stm32f1_4in1_serial_debug │ ├── build_release_stm32f1_5in1 │ ├── build_release_stm32f1_cc2500_128k │ ├── build_release_stm32f1_cc2500_64k │ ├── build_release_stm32f1_t18int │ ├── build_release_stm32f1_tlite │ ├── opt_add │ ├── opt_disable │ ├── opt_enable │ ├── opt_remove │ ├── opt_replace │ └── opt_set └── docs ├── Advanced_ATmega_Serial_Uploader.md ├── Advanced_Bluetooth_Telemetry.md ├── Advanced_Debug.md ├── Advanced_Manually_Setting_ATmega328_Fuses.md ├── Advanced_Topics.md ├── Advanced_XN297Ldump.md ├── Arduino_IDE_Boards.md ├── BOM_DIY_ATmega.md ├── BOM_DIY_STM32 & Schematic.md ├── Bind_Timing.md ├── CPPM_HW_Mod.md ├── Channel_Order.md ├── Compiling.md ├── Compiling_OrangeTx.md ├── Compiling_STM32.md ├── DIY Multiprotocol Module Overview.png ├── Documentation_To_Do_List.md ├── Donations.md ├── EEPROM.md ├── Flash_from_Tx.md ├── Frequency_Tuning.md ├── Hardware.md ├── Models.md ├── Module_BG_4-in-1.md ├── Module_Build_From_Scratch.md ├── Module_Build_yourself_PCB.md ├── Module_OrangeRx.md ├── PPM_Setup.md ├── Protocol_Details_old.md ├── README-old.md ├── Transmitters.md ├── Troubleshooting.md ├── Tx-FlyskyTH9X.md ├── Tx-NewTrasmitter.md ├── Tx-Taranis.md ├── Tx-erSky9X.md ├── erase.hex └── images ├── 10pin_2_6pin.JPG ├── 4-in-1_Module_BG.jpeg ├── 4-in-1_Module_BG.png ├── 4-in-1_Module_Case_BG.jpeg ├── 4-in-1_Module_PPM_Controls.jpg ├── 4-pin-1mm.jpg ├── 4-pin-header.jpg ├── 5-pin-125mm.jpg ├── 6pin_header.jpg ├── 9XR_module.jpg ├── 9XR_module_connector.jpg ├── 9xr-case-1.jpg ├── 9xr-case-2.jpg ├── 9xr-case-3.jpg ├── AVR8BurnOMat-fuses.png ├── AVR8BurnOMat-main.png ├── AVR8BurnOMat-settings.png ├── Arduino.png ├── Arduino_check.jpg ├── Board_PCB_STM32.jpeg ├── Board_PCB_STM32_USB-1.png ├── Board_PCB_STM32_USB-2.png ├── Board_PCB_STM32_USB_V1.1-1.png ├── Board_PCB_STM32_USB_V1.1-2.png ├── Board_PCB_STM32_with_serial.jpg ├── Bootloader.jpg ├── CPPM_BG_IRX4_Jack.jpg ├── CPPM_BG_IRX4_Mark.jpg ├── CPPM_BG_IRX4_Soldered.jpg ├── CPPM_JP4IN1_Jack.jpg ├── CPPM_JP4IN1_Mark.jpg ├── CPPM_JP4IN1_Soldered.jpg ├── CPPM_JP4IN1_Soldered2.jpg ├── DIY Multiprotocol Module Overview.png ├── DIY_Mulitprotocol_Module_Schematic.jpeg ├── DSM_RX_Output.JPG ├── Debug1.png ├── FTDI_Adapter.jpeg ├── FTDI_Cable.jpeg ├── FlashMulti.jpg ├── ISP_header.png ├── Inductrix_Aileron_Expo.png ├── Inductrix_Inputs.png ├── Inductrix_Mixer.png ├── Inductrix_Throttle_Setup.png ├── Jumper-ch340g.jpg ├── Jumper-serial.jpg ├── MPTM_PCB_2.3d_ISP.png ├── MPTM_PCB_3.2d.png ├── MPTM_with_RF_modules.jpeg ├── MULTI_Module_Overview.png ├── Module_perfboard1.jpeg ├── Module_perfboard2.jpeg ├── Multi_4-in-1_RF_module.jpg ├── Multi_STM32 module.JPG ├── Multi_STM32_ flashing.jpg ├── Multi_STM32_V0.8_t_1.png ├── Multi_STM32_V0.8_t_2.png ├── Multiprotocol_3.2.jpeg ├── OpenTx_Multi_Menu.jpg ├── OrangeRx_Module.jpg ├── PPM.png ├── ProMini_ISP.png ├── STM32_Board_V1.0_Jumper.png ├── Serial_Monitor_1.png ├── Serial_Monitor_2.png ├── T16-internal-connection.png ├── T16-internal-connector.png ├── USBasp_Programmer.jpeg ├── USBasp_Programmer_jumper.png ├── V1_Serial_Enable.jpeg ├── V2a_Serial_Enable.jpeg ├── V2a_zoom_Serial_Enable.jpeg ├── V2b_ISP.jpeg ├── V2b_Serial_Enable.jpeg ├── V2c_Serial_Enable.jpeg ├── WordPad_Admin.jpg ├── X7-bind.png ├── X7-no-telemetry.png ├── X7-protocol-invalid.png ├── bg-case.jpg ├── bg-multi-stm32-serial.jpg ├── bg-stm32-boot0.jpg ├── bg-stm32-ch340g.jpg ├── bg-stm32-module.jpg ├── boards-menu.jpg ├── ch340g.jpg ├── cx20.jpg ├── diy-ch340g.jpg ├── donate_button.png ├── er9X_Multi_Menu.jpg ├── flash-multi.jpg ├── ide-prefs.jpg ├── irx4-boot0.jpg ├── irx4-ch340g.jpg ├── irx4-lite-boot0.jpg ├── irx4-lite-cabling.jpg ├── irx4-lite.jpg ├── irx4-plus.jpg ├── irx4.jpg ├── irx4plus-boot0.jpg ├── irx4plus-serial.jpg ├── jp4in1.jpg ├── maple-dfu.jpg ├── maple-serial-port-select.jpg ├── maple-serial.jpg ├── mpm1n.jpg ├── mpmlite-boot0.jpg ├── mpmlite-serial.jpg ├── multi-boards.jpg ├── multi-case-1.jpg ├── multi-case-2.jpg ├── multi-case-3.jpg ├── multi.png ├── opentx-config-multi.png ├── settings-horus.png ├── settings-taranis.png ├── test ├── v1.2.jpg ├── v1.2_ISP.jpg └── warning.png /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [pascallanger] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=VF2K9T23DRY56&lc=US&item_name=DIY%20Multiprotocol¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHosted 13 | -------------------------------------------------------------------------------- /BootLoaders/AtmegaEmptyBoot/AtmegaMultiEmpty.hex: -------------------------------------------------------------------------------- 1 | :02000000FFFF00 2 | :00000001FF 3 | -------------------------------------------------------------------------------- /BootLoaders/AtmegaMultiBoot/AtmegaMultiBoot.hex: -------------------------------------------------------------------------------- 1 | :107E0000112484B714BE9FEF9BB99CE395B991E010 2 | :107E100098B98370A9F08AEF80938500109284004E 3 | :107E200085E08093810096BBB09BFECF10928100CD 4 | :107E300093B186B181709C73892B8D3109F0B3D0D9 5 | :107E400082E08093C00088E18093C10086E0809347 6 | :107E5000C20081E28093C400259AC0E0D0E093E0A4 7 | :107E6000F92EEE24E39425E0D22E31E1C32EA9D0E1 8 | :107E7000813481F4A6D08EBBABD08EB3823811F49E 9 | :107E800085E006C08EB3813811F484E001C083E040 10 | :107E900091D086C0823411F484E103C0853419F492 11 | :107EA00085E09DD07DC0853541F48BD0C82F89D029 12 | :107EB000D0E0D82BCC0FDD1F72C0863521F484E0D2 13 | :107EC0008ED080E0E5CF843609F03DC07AD079D0FD 14 | :107ED000B82E77D0C11520E7D20718F000E011E0E6 15 | :107EE00004C0FE01F7BEE895F9CF6BD0F80181938D 16 | :107EF0008F01BE12FACFCE01905781159E4018F423 17 | :107F0000FE01F7BEE89564D0C115FEE7DF0708F073 18 | :107F100047C007B600FCFDCFFE01A0E0B1E08D91A7 19 | :107F20009D910C01E7BEE89511243296A03821E01E 20 | :107F3000B207A9F7FE01D7BEE89507B600FCFDCF52 21 | :107F4000C7BEE8952DC08437B1F43BD03AD0B82EE7 22 | :107F500038D03ED0FE01AC2EAB0C8F010F5F1F4F0F 23 | :107F6000849128D0A01205C02196BA94CB0DD11DC2 24 | :107F700017C0F801F2CF853739F42AD08EE11AD034 25 | :107F800085E918D08FE084CF813549F421D080E194 26 | :107F900011D08091C00086FFFCCF05D001C018D061 27 | :107FA00080E108D064CFE0E0F0E084918F3F09F0F9 28 | :107FB000099408959091C00095FFFCCF8093C6006E 29 | :107FC00008958091C00087FFFCCF8091C60008957E 30 | :107FD000F8DF803211F085E1EDDF84E1EBCFCF9364 31 | :107FE000C82FEFDFC150E9F7CF91F2CFA8950895E0 32 | :0C7FF000E0E6F0E098E1908380830895C3 33 | :0400000300007E007B 34 | :00000001FF 35 | -------------------------------------------------------------------------------- /BootLoaders/AtmegaMultiBoot/Source/pin_defs.h: -------------------------------------------------------------------------------- 1 | #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega88) || defined(__AVR_ATmega8__) || defined(__AVR_ATmega88__) 2 | /* Onboard LED is connected to pin PB5 in Arduino NG, Diecimila, and Duemilanove */ 3 | #define LED_DDR DDRB 4 | #define LED_PORT PORTB 5 | #define LED_PIN PINB 6 | #define LED PINB5 7 | 8 | /* Ports for soft UART */ 9 | #ifdef SOFT_UART 10 | #define UART_PORT PORTD 11 | #define UART_PIN PIND 12 | #define UART_DDR DDRD 13 | #define UART_TX_BIT 1 14 | #define UART_RX_BIT 0 15 | #endif 16 | #endif 17 | 18 | #if defined(__AVR_ATmega8__) 19 | //Name conversion R.Wiersma 20 | #define UCSR0A UCSRA 21 | #define UDR0 UDR 22 | #define UDRE0 UDRE 23 | #define RXC0 RXC 24 | #define FE0 FE 25 | #define TIFR1 TIFR 26 | #define WDTCSR WDTCR 27 | #endif 28 | 29 | /* Luminet support */ 30 | #if defined(__AVR_ATtiny84__) 31 | /* Red LED is connected to pin PA4 */ 32 | #define LED_DDR DDRA 33 | #define LED_PORT PORTA 34 | #define LED_PIN PINA 35 | #define LED PINA4 36 | /* Ports for soft UART - left port only for now. TX/RX on PA2/PA3 */ 37 | #ifdef SOFT_UART 38 | #define UART_PORT PORTA 39 | #define UART_PIN PINA 40 | #define UART_DDR DDRA 41 | #define UART_TX_BIT 2 42 | #define UART_RX_BIT 3 43 | #endif 44 | #endif 45 | 46 | /* Sanguino support */ 47 | #if defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__) 48 | /* Onboard LED is connected to pin PB0 on Sanguino */ 49 | #define LED_DDR DDRB 50 | #define LED_PORT PORTB 51 | #define LED_PIN PINB 52 | #define LED PINB0 53 | 54 | /* Ports for soft UART */ 55 | #ifdef SOFT_UART 56 | #define UART_PORT PORTD 57 | #define UART_PIN PIND 58 | #define UART_DDR DDRD 59 | #define UART_TX_BIT 1 60 | #define UART_RX_BIT 0 61 | #endif 62 | #endif 63 | 64 | /* Mega support */ 65 | #if defined(__AVR_ATmega1280__) 66 | /* Onboard LED is connected to pin PB7 on Arduino Mega */ 67 | #define LED_DDR DDRB 68 | #define LED_PORT PORTB 69 | #define LED_PIN PINB 70 | #define LED PINB7 71 | 72 | /* Ports for soft UART */ 73 | #ifdef SOFT_UART 74 | #define UART_PORT PORTE 75 | #define UART_PIN PINE 76 | #define UART_DDR DDRE 77 | #define UART_TX_BIT 1 78 | #define UART_RX_BIT 0 79 | #endif 80 | #endif 81 | -------------------------------------------------------------------------------- /BootLoaders/AtmegaMultiBoot/Source/stk500.h: -------------------------------------------------------------------------------- 1 | /* STK500 constants list, from AVRDUDE */ 2 | #define STK_OK 0x10 3 | #define STK_FAILED 0x11 // Not used 4 | #define STK_UNKNOWN 0x12 // Not used 5 | #define STK_NODEVICE 0x13 // Not used 6 | #define STK_INSYNC 0x14 // ' ' 7 | #define STK_NOSYNC 0x15 // Not used 8 | #define ADC_CHANNEL_ERROR 0x16 // Not used 9 | #define ADC_MEASURE_OK 0x17 // Not used 10 | #define PWM_CHANNEL_ERROR 0x18 // Not used 11 | #define PWM_ADJUST_OK 0x19 // Not used 12 | #define CRC_EOP 0x20 // 'SPACE' 13 | #define STK_GET_SYNC 0x30 // '0' 14 | #define STK_GET_SIGN_ON 0x31 // '1' 15 | #define STK_SET_PARAMETER 0x40 // '@' 16 | #define STK_GET_PARAMETER 0x41 // 'A' 17 | #define STK_SET_DEVICE 0x42 // 'B' 18 | #define STK_SET_DEVICE_EXT 0x45 // 'E' 19 | #define STK_ENTER_PROGMODE 0x50 // 'P' 20 | #define STK_LEAVE_PROGMODE 0x51 // 'Q' 21 | #define STK_CHIP_ERASE 0x52 // 'R' 22 | #define STK_CHECK_AUTOINC 0x53 // 'S' 23 | #define STK_LOAD_ADDRESS 0x55 // 'U' 24 | #define STK_UNIVERSAL 0x56 // 'V' 25 | #define STK_PROG_FLASH 0x60 // '`' 26 | #define STK_PROG_DATA 0x61 // 'a' 27 | #define STK_PROG_FUSE 0x62 // 'b' 28 | #define STK_PROG_LOCK 0x63 // 'c' 29 | #define STK_PROG_PAGE 0x64 // 'd' 30 | #define STK_PROG_FUSE_EXT 0x65 // 'e' 31 | #define STK_READ_FLASH 0x70 // 'p' 32 | #define STK_READ_DATA 0x71 // 'q' 33 | #define STK_READ_FUSE 0x72 // 'r' 34 | #define STK_READ_LOCK 0x73 // 's' 35 | #define STK_READ_PAGE 0x74 // 't' 36 | #define STK_READ_SIGN 0x75 // 'u' 37 | #define STK_READ_OSCCAL 0x76 // 'v' 38 | #define STK_READ_FUSE_EXT 0x77 // 'w' 39 | #define STK_READ_OSCCAL_EXT 0x78 // 'x' 40 | -------------------------------------------------------------------------------- /BootLoaders/Boards/Linux/45-maple.rules: -------------------------------------------------------------------------------- 1 | ATTRS{idProduct}=="1001", ATTRS{idVendor}=="0110", MODE="664", GROUP="plugdev" 2 | ATTRS{idProduct}=="1002", ATTRS{idVendor}=="0110", MODE="664", GROUP="plugdev" 3 | ATTRS{idProduct}=="0003", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="plugdev" SYMLINK+="maple", ENV{ID_MM_DEVICE_IGNORE}="1" 4 | ATTRS{idProduct}=="0004", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="plugdev" SYMLINK+="maple", ENV{ID_MM_DEVICE_IGNORE}="1" 5 | 6 | -------------------------------------------------------------------------------- /BootLoaders/Boards/Windows/install_drivers.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | echo Installing MULTI-Module DFU Bootloader Driver... 4 | "%~dp0wdi-simple" --vid 0x1EAF --pid 0x0003 --type 2 --name "MULTI-Module DFU Bootloader" --dest "%~dp0MULTI-DFU-Bootloader" -b 5 | echo. 6 | 7 | echo Installing MULTI-Module USB Serial Driver... 8 | "%~dp0wdi-simple" --vid 0x1EAF --pid 0x0004 --type 3 --name "MULTI-Module USB Serial" --dest "%~dp0MULTI-USB-Serial" -b 9 | echo. 10 | 11 | pause 12 | -------------------------------------------------------------------------------- /BootLoaders/Boards/Windows/wdi-simple.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/BootLoaders/Boards/Windows/wdi-simple.exe -------------------------------------------------------------------------------- /BootLoaders/OrangeMultiBoot/OrangeMultiBoot.hex: -------------------------------------------------------------------------------- 1 | :108000001F92CDB7DEB7CFD01124809178009FEFBB 2 | :1080100090937800837099F088EA91E680936808DD 3 | :108020009093690880E180934C0880914C0884FF0C 4 | :10803000FCCF109240088091680682FD8FD082E0CC 5 | :1080400080936106C12CD12C97D0813479F494D0DF 6 | :10805000898399D08981823811F485E005C08138FF 7 | :1080600011F484E001C083E080D075C0823411F443 8 | :1080700084E103C0853419F485E08CD06CC085356B 9 | :1080800059F47AD0C82E78D0D12CD82A8D2D881FBB 10 | :108090008827881F8BBF5EC0863521F484E07AD0A4 11 | :1080A00080E0E2CF843641F567D066D0F82E64D008 12 | :1080B000C601DCD000E010E25FD0F80181938F01AF 13 | :1080C000FE12FACF60D0D7FC46C0CBD0C601DAD0C2 14 | :1080D000760100E010E2F801619171918F01C70112 15 | :1080E000DBD0F2E0EF0EF11C011581E2180799F7E1 16 | :1080F000C601E0D0B6D02FC08437C1F43DD03CD00B 17 | :10810000F82E3AD040D0F601EC2CEF0C8F010F5F27 18 | :108110001F4F84912AD0E01207C0EFEFCE1ADE0A7B 19 | :10812000FA94CF0CD11C17C0F801F0CF853739F481 20 | :108130002AD08EE11AD085E918D082E495CF813516 21 | :1081400049F421D080E111D08091A10886FFFCCFB5 22 | :1081500005D001C018D080E108D076CFE0E0F0E093 23 | :1081600084918F3F09F0099408959091A10895FF9B 24 | :10817000FCCF8093A00808958091A10887FFFCCFD1 25 | :108180008091A0080895F8DF803211F085E1EDDFDD 26 | :1081900084E1EBCFCF93C82FEFDFC150E9F7CF9148 27 | :1081A000F2CFA895089583EC8093520080915000FF 28 | :1081B0008860809350008091510083FFFCCF82EC57 29 | :1081C0008093550080915000806180935000809191 30 | :1081D000510084FFFCCF88ED84BF1092400084BF23 31 | :1081E00024E02093400087E08093A20087E88093FA 32 | :1081F0008301109241081092420810924308109295 33 | :10820000440810924608109247088FEF9FEF809322 34 | :1082100066089093670810926008109261088BE0DE 35 | :1082200080934008209365062093620688E180933E 36 | :10823000720698E0909345069093410692E29093DF 37 | :10824000A6081092A7088093A4088091A3088F7CA9 38 | :1082500080618093A30883E08093A5088091A008A3 39 | :1082600008958091CF0187FDFCCF08958F939F9350 40 | :1082700082E2E0ECF1E08287FF91EF918DE984BF2B 41 | :10828000E8950895FC0186E28093CA0188ED84BFD9 42 | :1082900081E08093CB0108950F921F92FC01062E7E 43 | :1082A000172E83E28093CA018DE984BFE8951F9061 44 | :1082B0000F900895FC018EE28093CA018DE984BF7E 45 | :0482C000E8950895A0 46 | :040000030000800079 47 | :00000001FF 48 | -------------------------------------------------------------------------------- /BootLoaders/OrangeMultiBoot/Source/pin_defs.h: -------------------------------------------------------------------------------- 1 | #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega88) || defined(__AVR_ATmega8__) || defined(__AVR_ATmega88__) 2 | /* Onboard LED is connected to pin PB5 in Arduino NG, Diecimila, and Duemilanove */ 3 | #define LED_DDR DDRB 4 | #define LED_PORT PORTB 5 | #define LED_PIN PINB 6 | #define LED PINB5 7 | 8 | /* Ports for soft UART */ 9 | #ifdef SOFT_UART 10 | #define UART_PORT PORTD 11 | #define UART_PIN PIND 12 | #define UART_DDR DDRD 13 | #define UART_TX_BIT 1 14 | #define UART_RX_BIT 0 15 | #endif 16 | #endif 17 | 18 | #if defined(__AVR_ATmega8__) 19 | //Name conversion R.Wiersma 20 | #define UCSR0A UCSRA 21 | #define UDR0 UDR 22 | #define UDRE0 UDRE 23 | #define RXC0 RXC 24 | #define FE0 FE 25 | #define TIFR1 TIFR 26 | #define WDTCSR WDTCR 27 | #endif 28 | 29 | /* Luminet support */ 30 | #if defined(__AVR_ATtiny84__) 31 | /* Red LED is connected to pin PA4 */ 32 | #define LED_DDR DDRA 33 | #define LED_PORT PORTA 34 | #define LED_PIN PINA 35 | #define LED PINA4 36 | /* Ports for soft UART - left port only for now. TX/RX on PA2/PA3 */ 37 | #ifdef SOFT_UART 38 | #define UART_PORT PORTA 39 | #define UART_PIN PINA 40 | #define UART_DDR DDRA 41 | #define UART_TX_BIT 2 42 | #define UART_RX_BIT 3 43 | #endif 44 | #endif 45 | 46 | /* Sanguino support */ 47 | #if defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__) 48 | /* Onboard LED is connected to pin PB0 on Sanguino */ 49 | #define LED_DDR DDRB 50 | #define LED_PORT PORTB 51 | #define LED_PIN PINB 52 | #define LED PINB0 53 | 54 | /* Ports for soft UART */ 55 | #ifdef SOFT_UART 56 | #define UART_PORT PORTD 57 | #define UART_PIN PIND 58 | #define UART_DDR DDRD 59 | #define UART_TX_BIT 1 60 | #define UART_RX_BIT 0 61 | #endif 62 | #endif 63 | 64 | /* Mega support */ 65 | #if defined(__AVR_ATmega1280__) 66 | /* Onboard LED is connected to pin PB7 on Arduino Mega */ 67 | #define LED_DDR DDRB 68 | #define LED_PORT PORTB 69 | #define LED_PIN PINB 70 | #define LED PINB7 71 | 72 | /* Ports for soft UART */ 73 | #ifdef SOFT_UART 74 | #define UART_PORT PORTE 75 | #define UART_PIN PINE 76 | #define UART_DDR DDRE 77 | #define UART_TX_BIT 1 78 | #define UART_RX_BIT 0 79 | #endif 80 | #endif 81 | -------------------------------------------------------------------------------- /BootLoaders/OrangeMultiBoot/Source/stk500.h: -------------------------------------------------------------------------------- 1 | /* STK500 constants list, from AVRDUDE */ 2 | #define STK_OK 0x10 3 | #define STK_FAILED 0x11 // Not used 4 | #define STK_UNKNOWN 0x12 // Not used 5 | #define STK_NODEVICE 0x13 // Not used 6 | #define STK_INSYNC 0x14 // ' ' 7 | #define STK_NOSYNC 0x15 // Not used 8 | #define ADC_CHANNEL_ERROR 0x16 // Not used 9 | #define ADC_MEASURE_OK 0x17 // Not used 10 | #define PWM_CHANNEL_ERROR 0x18 // Not used 11 | #define PWM_ADJUST_OK 0x19 // Not used 12 | #define CRC_EOP 0x20 // 'SPACE' 13 | #define STK_GET_SYNC 0x30 // '0' 14 | #define STK_GET_SIGN_ON 0x31 // '1' 15 | #define STK_SET_PARAMETER 0x40 // '@' 16 | #define STK_GET_PARAMETER 0x41 // 'A' 17 | #define STK_SET_DEVICE 0x42 // 'B' 18 | #define STK_SET_DEVICE_EXT 0x45 // 'E' 19 | #define STK_ENTER_PROGMODE 0x50 // 'P' 20 | #define STK_LEAVE_PROGMODE 0x51 // 'Q' 21 | #define STK_CHIP_ERASE 0x52 // 'R' 22 | #define STK_CHECK_AUTOINC 0x53 // 'S' 23 | #define STK_LOAD_ADDRESS 0x55 // 'U' 24 | #define STK_UNIVERSAL 0x56 // 'V' 25 | #define STK_PROG_FLASH 0x60 // '`' 26 | #define STK_PROG_DATA 0x61 // 'a' 27 | #define STK_PROG_FUSE 0x62 // 'b' 28 | #define STK_PROG_LOCK 0x63 // 'c' 29 | #define STK_PROG_PAGE 0x64 // 'd' 30 | #define STK_PROG_FUSE_EXT 0x65 // 'e' 31 | #define STK_READ_FLASH 0x70 // 'p' 32 | #define STK_READ_DATA 0x71 // 'q' 33 | #define STK_READ_FUSE 0x72 // 'r' 34 | #define STK_READ_LOCK 0x73 // 's' 35 | #define STK_READ_PAGE 0x74 // 't' 36 | #define STK_READ_SIGN 0x75 // 'u' 37 | #define STK_READ_OSCCAL 0x76 // 'v' 38 | #define STK_READ_FUSE_EXT 0x77 // 'w' 39 | #define STK_READ_OSCCAL_EXT 0x78 // 'x' 40 | -------------------------------------------------------------------------------- /BootLoaders/README.md: -------------------------------------------------------------------------------- 1 | ## Page Moved 2 | Moved to [/docs/Arduino_IDE_Boards.md](/docs/Arduino_IDE_Boards.md). 3 | -------------------------------------------------------------------------------- /BootLoaders/StmMultiBoot/README.md: -------------------------------------------------------------------------------- 1 | [Source for the StmMultiBooloader](https://github.com/MikeBland/StmMultiBoot) 2 | -------------------------------------------------------------------------------- /BootLoaders/StmMultiBoot/StmMultiBoot.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/BootLoaders/StmMultiBoot/StmMultiBoot.bin -------------------------------------------------------------------------------- /BootLoaders/StmMultiUSB/README.md: -------------------------------------------------------------------------------- 1 | [Source for the StmMultiUSB=STM32duino-bootloader](https://github.com/rogerclarkmelbourne/STM32duino-bootloader) 2 | If you want the latest version, you should look for the file generic_boot20_pa1.bin. -------------------------------------------------------------------------------- /BootLoaders/StmMultiUSB/StmMultiUSB.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/BootLoaders/StmMultiUSB/StmMultiUSB.bin -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/DsmLogLib.lua: -------------------------------------------------------------------------------- 1 | local LogLib = { } 2 | 3 | local LOG_FILE = "/LOGS/dsm_log.txt" 4 | local logFile = nil 5 | local logCount=0 6 | 7 | function LogLib.LOG_open() 8 | logFile = io.open(LOG_FILE, "w") -- Truncate Log File 9 | end 10 | 11 | function LogLib.LOG_write(...) 12 | if (logFile==nil) then LogLib.LOG_open() end 13 | local str = string.format(...) 14 | 15 | if (str==nil) then return end 16 | 17 | io.write(logFile, str) 18 | 19 | str = string.gsub(str,"\n"," ") -- Elimitate return from line, since print will do it 20 | print(str) 21 | 22 | if (logCount > 10) then -- Close an re-open the file 23 | io.close(logFile) 24 | logFile = io.open(LOG_FILE, "a") 25 | logCount =0 26 | end 27 | end 28 | 29 | function LogLib.LOG_close() 30 | if (logFile~=nil) then io.close(logFile) end 31 | end 32 | 33 | return LogLib 34 | -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/DsmMainMenuLib.lua: -------------------------------------------------------------------------------- 1 | local Log, menuLib, modelLib, DEBUG_ON, SIMULATION_ON = ... -- Get DebugON from parameters 2 | local MAIN_MENU_LIB_VERSION = "0.56" 3 | local MODEL = modelLib.MODEL 4 | 5 | local PHASE = menuLib.PHASE 6 | local LINE_TYPE = menuLib.LINE_TYPE 7 | 8 | local lastGoodMenu=0 9 | 10 | -- Creates the menus to Render with the GUI 11 | local function ST_LoadMenu(menuId) 12 | local ctx = menuLib.DSM_Context 13 | menuLib.clearMenuLines() 14 | 15 | if (menuId==0x1000) then -- MAIN MENU 16 | ctx.Menu = { MenuId = 0x1000, Text = "Main Menu ("..MODEL.modelName..")", PrevId = 0, NextId = 0, BackId = 0, TextId=0 } 17 | ctx.MenuLines[0] = { Type = LINE_TYPE.MENU, Text = "Model Setup", ValId = 0xFFF3,TextId=0 } 18 | 19 | if (SIMULATION_ON) then 20 | ctx.MenuLines[4] = { Type = LINE_TYPE.MENU, Text = "RX Simulator (GUI dev only)", ValId = 0xFFF1, TextId=0 } -- Menu 0xFFF2 to SIMULATOR 21 | end 22 | ctx.MenuLines[6] = { Type = LINE_TYPE.MENU, Text = "Forward Programming RX", ValId = 0xFFF2, TextId=0 } -- Menu 0xFFF2 to Real RX 23 | ctx.SelLine = 6 24 | 25 | lastGoodMenu = menuId 26 | else 27 | --print("NOT IMPLEMENTED") 28 | ctx.Menu = { MenuId = 0x0002, Text = "NOT IMPLEMENTED", TextId = 0, PrevId = 0, NextId = 0, BackId = lastGoodMenu } 29 | ctx.SelLine = menuLib.BACK_BUTTON 30 | end 31 | 32 | menuLib.PostProcessMenu() 33 | end 34 | 35 | local function Main_Send_Receive() 36 | local ctx = menuLib.DSM_Context 37 | 38 | if ctx.Phase == PHASE.RX_VERSION then -- Just Init RX Version 39 | ctx.RX.Name = "Main Menu" 40 | ctx.RX.Version = MAIN_MENU_LIB_VERSION 41 | ctx.Phase = PHASE.MENU_TITLE 42 | ctx.Menu.MenuId = 0 43 | 44 | ctx.Refresh_Display = true 45 | elseif ctx.Phase == PHASE.WAIT_CMD then 46 | 47 | elseif ctx.Phase == PHASE.MENU_TITLE then -- request menu title 48 | if ctx.Menu.MenuId == 0 then -- First time loading a menu ? 49 | ST_LoadMenu(0x01000) 50 | else 51 | ST_LoadMenu(ctx.Menu.MenuId) 52 | end 53 | ctx.Phase = PHASE.WAIT_CMD 54 | ctx.Refresh_Display = true 55 | 56 | elseif ctx.Phase == PHASE.VALUE_CHANGING then -- send value 57 | local line = ctx.MenuLines[ctx.SelLine] -- Updated Value of SELECTED line 58 | --if (DEBUG_ON) then Log.LOG_write("%3.3f %s: ", menuLib.getElapsedTime(), menuLib.phase2String(ctx.Phase)) end 59 | --if (DEBUG_ON) then Log.LOG_write("SEND SIM_updateMenuValue(ValueId=0x%X Text=\"%s\" Value=%s)\n", line.ValId, line.Text, menuLib.lineValue2String(line)) end 60 | ctx.Phase = PHASE.VALUE_CHANGING_WAIT 61 | 62 | elseif ctx.Phase == PHASE.VALUE_CHANGING_WAIT then 63 | local line = ctx.MenuLines[ctx.SelLine] 64 | 65 | elseif ctx.Phase == PHASE.VALUE_CHANGE_END then -- send value 66 | local line = ctx.MenuLines[ctx.SelLine] -- Updated Value of SELECTED line 67 | --if (DEBUG_ON) then Log.LOG_write("%3.3f %s: ", menuLib.getElapsedTime(), menuLib.phase2String(ctx.Phase)) end 68 | --if (DEBUG_ON) then Log.LOG_write("SEND SIM_updateMenuValue(ValueId=0x%X Text=\"%s\" Value=%s)\n", line.ValId, line.Text, menuLib.lineValue2String(line)) end 69 | --if (DEBUG_ON) then Log.LOG_write("SEND SIM_validateMenuValue(ValueId=0x%X Text=\"%s\" Value=%s)\n", line.ValId, line.Text, menuLib.lineValue2String(line)) end 70 | ctx.Phase = PHASE.WAIT_CMD 71 | 72 | elseif ctx.Phase == PHASE.EXIT then 73 | ctx.Phase=PHASE.EXIT_DONE 74 | return 1 75 | end 76 | 77 | return 0 78 | end 79 | 80 | local function Main_Init() 81 | local ctx = menuLib.DSM_Context 82 | ctx.Phase = PHASE.RX_VERSION 83 | end 84 | 85 | local function Main_Done() 86 | local ctx = menuLib.DSM_Context 87 | ctx.Phase = PHASE.EXIT_DONE 88 | end 89 | 90 | return { init=Main_Init, run=Main_Send_Receive, done=Main_Done } -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/MIN_msg_fwdp_en.txt: -------------------------------------------------------------------------------- 1 | -- OVERRIDES Messges for MIN 128x64 screns 2 | -- FORMAT || 3 | -- Line Type: Text for Menus (T), List_Text Options (LT), List_Text_Image (LI), Flight Mode (FM), RX Name (RX) 4 | -- IMPORTANT: NO EMPTY LINES 5 | -- 6 | T |0x0097|DONT USE: Factory Reset 7 | T |0x0098|DONT USE: Factory Reset 8 | T |0x00A5|DONT USE: First Time Setup 9 | T |0x0190|DONT USE: Relearn Servo Settings 10 | T |0x020D|DONT USE: First Time SAFE Setup 11 | -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_rx_pos_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_rx_pos_1.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_rx_pos_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_rx_pos_2.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_rx_pos_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_rx_pos_3.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_rx_pos_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_rx_pos_4.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_rx_pos_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_rx_pos_5.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_rx_pos_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_rx_pos_6.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_rx_pos_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_rx_pos_7.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_rx_pos_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_rx_pos_8.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_swp_3_120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_swp_3_120.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_swp_3_120inv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_swp_3_120inv.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_swp_3_135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_swp_3_135.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_swp_3_135inv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_swp_3_135inv.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_swp_3_140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_swp_3_140.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_swp_3_140inv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_swp_3_140inv.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_swp_3_90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_swp_3_90.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_swp_3_90inv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_swp_3_90inv.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/h_swp_norm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/h_swp_norm.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_1.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_10.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_11.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_12.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_13.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_14.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_15.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_16.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_17.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_18.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_19.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_2.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_20.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_21.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_22.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_23.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_24.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_25.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_3.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_4.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_5.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_6.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_7.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_8.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/rx_pos_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/rx_pos_9.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/tt_1rud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/tt_1rud.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/tt_1rud_1ele.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/tt_1rud_1ele.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/tt_1rud_2ele.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/tt_1rud_2ele.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/tt_2rud_1ele.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/tt_2rud_1ele.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/tt_2rud_2ele.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/tt_2rud_2ele.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/tt_taileron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/tt_taileron.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/tt_taileron2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/tt_taileron2.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/tt_vtail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/tt_vtail.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/wt_1ail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/wt_1ail.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/wt_1ail_1flp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/wt_1ail_1flp.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/wt_2ail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/wt_2ail.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/wt_2ail_1flp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/wt_2ail_1flp.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/wt_2ail_2flp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/wt_2ail_2flp.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/wt_elevon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/wt_elevon.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/img/wt_flaperon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/Lua_scripts/DSMLIB/img/wt_flaperon.png -------------------------------------------------------------------------------- /Lua_scripts/DSMLIB/readme.md: -------------------------------------------------------------------------------- 1 | # Credits 2 | Code is based on the code/work by: Pascal Langer (Author of the Multi-Module) 3 | Rewrite/Enhancements by: Francisco Arzu 4 | 5 | Thanks to all the people volunteered to test it. 6 | 7 | Release Notes for 8 | 9 | ## COLOR Radios 10 | Read more [Color radios](./readme_color.md) 11 | 12 | ![main-menu](https://user-images.githubusercontent.com/32604366/230751340-dd118f36-1884-405b-b12b-81cba16c7321.png) 13 | ![flight-mode-setup](https://user-images.githubusercontent.com/32604366/230751281-0c71ff4a-179f-41fd-9290-302a6e0fe821.png) 14 | 15 | ## Black & White Radios (Small Screens) 16 | Read more [black & whire radios](./readme_bw.md) 17 | 18 | ![image](https://github.com/frankiearzu/DSMTools/assets/32604366/be03ad40-3e2f-45e1-8f50-d231c3931169) 19 | ![image](https://github.com/frankiearzu/DSMTools/assets/32604366/5010a361-1234-4c83-97b2-2eb6ae0d1061) 20 | ![image](https://github.com/frankiearzu/DSMTools/assets/32604366/0d4e04dc-90d7-4322-9ad1-f57cbde49029) 21 | ![IMG_3024](https://user-images.githubusercontent.com/32604366/230123260-614f4e5e-9546-4439-9196-db885894083f.jpg) 22 | 23 | -------------------------------------------------------------------------------- /Lua_scripts/pidDsm.lua: -------------------------------------------------------------------------------- 1 | -- 2 | -- This telemetry script displays the Flight Log Gain 3 | -- Parameters streamed from the Blade 150S Spektrum AR6335A 4 | -- Flybarless Controller. 5 | 6 | -- The script facilitates the setting of the FBL's 7 | -- Gain Parameters including PID for both 8 | -- cyclic and tail. It is similar to the Telemetry Based 9 | -- Text Generator available on Spektrum transmitters. 10 | 11 | -- Supporting similar Blade micros such as the Fusion 180 12 | -- would possibly require minor modifications to this script. 13 | 14 | -- This script reads telemetry data from the Spektrum 15 | -- receiver and thus functionality relies on data being 16 | -- captured by the OpenTX transmitter. A DSM 17 | -- telemetry-ready module is required. Please see the 18 | -- MULTI-Module project at https://www.multi-module.org/. 19 | 20 | -- The only supported display is the Taranis'. It may work 21 | -- with higher res screens. 22 | -- 23 | 24 | 25 | -- Sensor names 26 | local PSensor = "FdeA" 27 | local ISensor = "FdeB" 28 | local DSensor = "FdeL" 29 | local RSensor = "FdeR" 30 | local ActiveParamSensor = "Hold" 31 | 32 | local tags = {"P", "I", "D"} 33 | 34 | 35 | local function getPage(iParam) 36 | -- get page from 0-based index 37 | -- {0,1,2,3}: cyclic (1), {4,5,6,7}: tail (2) 38 | local res = (math.floor(iParam/4)==0) and 1 or 2 39 | return res 40 | end 41 | 42 | function round(v) 43 | -- round float 44 | local factor = 100 45 | return math.floor(v * factor + 0.5) / factor 46 | end 47 | 48 | 49 | local function readValue(sensor) 50 | -- read from sensor, round and return 51 | local v = getValue(sensor) 52 | v = round(v) 53 | return v 54 | end 55 | 56 | local function readActiveParamValue(sensor) 57 | -- read and return a validated active parameter value 58 | local v = getValue(sensor) 59 | if (v<1 or v>8) then 60 | return nil 61 | end 62 | return v 63 | end 64 | 65 | local function readParameters() 66 | -- read and return parameters 67 | local p = readValue(PSensor) 68 | local i = readValue(ISensor) 69 | local d = readValue(DSensor) 70 | local r = readValue(RSensor) 71 | local a = readActiveParamValue(ActiveParamSensor) 72 | return {p,i,d,r,a} 73 | end 74 | 75 | local function drawParameters() 76 | -- draw labels and params on screen 77 | local params = readParameters() 78 | local activeParam = params[5] 79 | 80 | -- if active gain does not validate then assume 81 | -- Gain Adjustment Mode is disabled 82 | if not activeParam then 83 | lcd.clear() 84 | lcd.drawText(20,30,"Please enter Gain Adjustment Mode") 85 | return 86 | end 87 | 88 | local activePage = getPage(activeParam-1) 89 | for iParam=0,7 do 90 | -- highlight selected parameter 91 | local attr = (activeParam==iParam+1) and 2 or 0 92 | -- circular index (per page) 93 | local perPageIndx = iParam % 4 + 1 94 | -- check if displaying cyclic params. 95 | local isCyclicPage = (getPage(iParam)==1) 96 | -- set y draw coord 97 | local y = perPageIndx*10+2 98 | 99 | -- labels 100 | local x = isCyclicPage and 6 or 120 101 | -- labels are P,I,D for both pages except for last param 102 | local val = iParam==3 and "Response" or 103 | (iParam==7 and "Filtering" or tags[perPageIndx]) 104 | lcd.drawText (x, y, val, attr) 105 | 106 | -- gains 107 | -- set all params for non-active page to '--' rather than 'last value' 108 | val = (getPage(iParam)==activePage) and params[perPageIndx] or '--' 109 | x = isCyclicPage and 70 or 180 110 | lcd.drawText (x, y, val, attr) 111 | end 112 | end 113 | 114 | 115 | local function run_func(event) 116 | -- TODO: calling clear() on every function call redrawing all labels is not ideal 117 | lcd.clear() 118 | lcd.drawText (8, 2, "Cyclic (0...200)") 119 | lcd.drawText (114, 2, "Tail (0...200)") 120 | drawParameters() 121 | end 122 | 123 | local function init_func() end 124 | local function bg_func() end 125 | 126 | 127 | return { run=run_func, background=bg_func, init=init_func } 128 | -------------------------------------------------------------------------------- /Multiprotocol/Bluefly_ccnrf.ino: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | // compatible with BLUEFLY HP100 16 | 17 | #if defined(BLUEFLY_CCNRF_INO) 18 | 19 | #include "iface_nrf250k.h" 20 | 21 | #define BLUEFLY_PACKET_PERIOD 6000 22 | #define BLUEFLY_PACKET_SIZE 12 23 | #define BLUEFLY_RF_BIND_CHANNEL 81 24 | #define BLUEFLY_NUM_RF_CHANNELS 15 25 | #define BLUEFLY_BIND_COUNT 800 26 | #define BLUEFLY_TXID_SIZE 5 27 | 28 | static void __attribute__((unused)) BLUEFLY_send_packet() 29 | { 30 | if(IS_BIND_IN_PROGRESS) 31 | { 32 | memset(packet, 0x55, BLUEFLY_PACKET_SIZE); 33 | memcpy(packet, rx_tx_addr, BLUEFLY_TXID_SIZE); 34 | packet[5] = hopping_frequency[0]; 35 | } 36 | else 37 | { 38 | NRF250K_Hopping(hopping_frequency_no); 39 | hopping_frequency_no++; 40 | if(hopping_frequency_no >= BLUEFLY_NUM_RF_CHANNELS); 41 | hopping_frequency_no = 0; 42 | 43 | packet[8] = packet[9] = 0; 44 | for(uint8_t i=0; i<8 ; i++) 45 | { 46 | uint16_t ch = convert_channel_16b_limit(CH_AETR[i], 0, 1000); 47 | packet[ i] = ch; 48 | ch &= 0x300; 49 | ch >>= 2; 50 | packet[8 + (i>3?0:1)] = (packet[8 + (i>3?0:1)] >> 2) | ch; 51 | } 52 | // Checksum 53 | uint8_t l, h, t; 54 | l = h = 0xff; 55 | for (uint8_t i=0; i<10; ++i) 56 | { 57 | h ^= packet[i]; 58 | h ^= h >> 4; 59 | t = h; 60 | h = l; 61 | l = t; 62 | t = (l<<4) | (l>>4); 63 | h ^= ((t<<2) | (t>>6)) & 0x1f; 64 | h ^= t & 0xf0; 65 | l ^= ((t<<1) | (t>>7)) & 0xe0; 66 | } 67 | packet[10] = h; 68 | packet[11] = l; 69 | } 70 | 71 | NRF250K_WritePayload(packet, BLUEFLY_PACKET_SIZE); 72 | NRF250K_SetPower(); // Set tx_power 73 | NRF250K_SetFreqOffset(); // Set frequency offset 74 | } 75 | 76 | static void __attribute__((unused)) BLUEFLY_RF_init() 77 | { 78 | NRF250K_Init(); 79 | NRF250K_SetTXAddr((uint8_t *)"\x32\xAA\x45\x45\x78", BLUEFLY_TXID_SIZE); // BLUEFLY Bind address 80 | NRF250K_HoppingCalib(BLUEFLY_NUM_RF_CHANNELS); // Calibrate all channels 81 | NRF250K_RFChannel(BLUEFLY_RF_BIND_CHANNEL); // Set bind channel 82 | } 83 | 84 | static void __attribute__((unused)) BLUEFLY_initialize_txid() 85 | { 86 | uint8_t start = (rx_tx_addr[3] % 47) + 2; 87 | for(uint8_t i=0;i. 14 | */ 15 | 16 | #if defined(FAKE_NRF24L01_INO) 17 | 18 | #include "iface_nrf250k.h" 19 | 20 | static void __attribute__((unused)) FAKE_send_packet() 21 | { 22 | for(uint8_t i=0;i<5;i++) 23 | packet[i]=i; 24 | NRF24L01_WriteReg(NRF24L01_07_STATUS, (_BV(NRF24L01_07_RX_DR) | _BV(NRF24L01_07_TX_DS) | _BV(NRF24L01_07_MAX_RT))); 25 | NRF24L01_FlushTx(); 26 | NRF24L01_WritePayload(packet, 5); 27 | } 28 | 29 | static void __attribute__((unused)) FAKE_init() 30 | { 31 | // BIND_IN_PROGRESS; 32 | 33 | //CC2500 34 | option=1; 35 | XN297L_Init(); 36 | CC2500_WriteReg(CC2500_07_PKTCTRL1, 0x01); // Packet Automation Control 37 | CC2500_WriteReg(CC2500_08_PKTCTRL0, 0x00); // Packet Automation Control 38 | CC2500_WriteReg(CC2500_12_MDMCFG2, 0x12); // Modem Configuration 39 | CC2500_WriteReg(CC2500_13_MDMCFG1, 0x13); // Modem Configuration 40 | CC2500_WriteReg(CC2500_04_SYNC1, 0x11); 41 | CC2500_WriteReg(CC2500_05_SYNC0, 0x33); 42 | CC2500_WriteReg(CC2500_09_ADDR, 0x99); 43 | CC2500_WriteReg(CC2500_06_PKTLEN, 10); 44 | 45 | CC2500_SetTxRxMode(RX_EN); 46 | CC2500_Strobe(CC2500_SIDLE); 47 | CC2500_Strobe(CC2500_SRX); 48 | //CC2500_SetTxRxMode(TX_EN); 49 | XN297L_RFChannel(0); 50 | 51 | //NRF 52 | /* option=0; 53 | PE1_on; //NRF24L01 antenna RF3 by default 54 | PE2_off; //NRF24L01 antenna RF3 by default 55 | NRF24L01_Initialize(); 56 | NRF24L01_WriteReg(NRF24L01_00_CONFIG, 0x7f); 57 | NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x00);//0x3f); // AA on all pipes 58 | NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x3f); // Enable all pipes 59 | NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x03); // 5-byte address 60 | NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x36); // retransmit 1ms, 6 times 61 | NRF24L01_SetBitrate(NRF24L01_BR_250K); // 1Mbps 62 | NRF24L01_SetPower(); 63 | NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, (uint8_t *)"\x99\x33\x11\xAA\xAA", 5); //Bind address 64 | NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, (uint8_t *)"\x99\x33\x11\xAA\xAA", 5); //Bind address 65 | NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0); 66 | NRF24L01_Activate(0x73); // Activate feature register 67 | NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f); // Enable dynamic payload length 68 | NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); // Enable all features 69 | */ 70 | /*NRF24L01_FlushTx(); 71 | NRF24L01_SetTxRxMode(TX_EN);*/ 72 | } 73 | 74 | uint16_t FAKE_callback() 75 | { 76 | len = CC2500_ReadReg(CC2500_3B_RXBYTES | CC2500_READ_BURST) & 0x7F; 77 | if(len) debug("L=%d, ",len); 78 | if(len && len < sizeof(packet_in)) 79 | { 80 | CC2500_ReadData(packet_in, len); 81 | debug("P:"); 82 | for(uint8_t i=0;i. 14 | */ 15 | #if defined(H36_NRF24L01_INO) 16 | 17 | #include "iface_xn297.h" 18 | 19 | //#define FORCE_H36_ORIGINAL_ID 20 | 21 | #define H36_PAYLOAD_SIZE 13 22 | #define H36_RF_NUM_CHANNELS 4 23 | #define H36_BIND_PACKET_PERIOD 10285 24 | #define H36_BIND_COUNT 648 //3sec 25 | 26 | enum { 27 | H36_DATA1=0, 28 | H36_DATA2, 29 | H36_DATA3, 30 | H36_DATA4, 31 | }; 32 | 33 | static void __attribute__((unused)) H36_send_packet() 34 | { 35 | if(IS_BIND_DONE && phase == H36_DATA1) 36 | { 37 | hopping_frequency_no++; 38 | hopping_frequency_no&=3; 39 | XN297_Hopping(hopping_frequency_no); 40 | } 41 | 42 | packet[0] = 0x2E; // constant? 43 | memcpy(&packet[2],rx_tx_addr,3); 44 | if(IS_BIND_IN_PROGRESS) 45 | {//Bind 46 | memcpy(&packet[5],hopping_frequency,4); 47 | memset(&packet[9], 0x00, 3); 48 | packet[12] = 0xED; // constant? 49 | bind_counter--; 50 | if(bind_counter == 0) 51 | BIND_DONE; 52 | } 53 | else 54 | {//Normal 55 | packet[5] = convert_channel_8b(THROTTLE); 56 | packet[6] = convert_channel_8b(RUDDER); 57 | packet[7] = convert_channel_8b(ELEVATOR); 58 | packet[8] = convert_channel_8b(AILERON); 59 | packet[9] = GET_FLAG(CH6_SW, 0x02) //Headless 60 | |GET_FLAG(CH7_SW, 0x04); //RTH(temporary) 61 | packet[10] = 0x20; //Trim A centered(0x20) 62 | packet[11] = CH5_SW?0x60:0x20; //Flip(0x40)|Trim E centered(0x20) 63 | packet[12] = 0xA0; //High(0x80)/Low(0x40) rates|Trim R centered(0x20)? 64 | } 65 | //crc 66 | packet[1]=0xAA; 67 | for(uint8_t i=5;i<12;i++) 68 | packet[1] ^= packet[i]; 69 | //Send 70 | XN297_SetPower(); 71 | XN297_SetTxRxMode(TX_EN); 72 | XN297_WritePayload(packet, H36_PAYLOAD_SIZE); 73 | #ifdef DEBUG_SERIAL 74 | debug("H%d P",hopping_frequency_no); 75 | for(uint8_t i=0; i < H36_PAYLOAD_SIZE; i++) 76 | debug(" %02X", packet[i]); 77 | debugln(); 78 | #endif 79 | } 80 | 81 | static void __attribute__((unused)) H36_initialize_txid() 82 | { 83 | rx_tx_addr[0] = rx_tx_addr[3]; 84 | calc_fh_channels(4); 85 | #ifdef FORCE_H36_ORIGINAL_ID 86 | if(!RX_num) 87 | { 88 | memcpy(rx_tx_addr,(uint8_t *)"\x00\x11\x00",3); 89 | memcpy(hopping_frequency,(uint8_t *)"\x36\x3A\x31\x2B",4); //54, 58, 49, 43 90 | } 91 | #endif 92 | } 93 | 94 | static void __attribute__((unused)) H36_RF_init() 95 | { 96 | XN297_Configure(XN297_CRCEN, XN297_SCRAMBLED, XN297_1M); 97 | XN297_SetTXAddr((uint8_t*)"\xCC\x6C\x47\x90\x53", 5); 98 | XN297_RFChannel(50); //Bind channel 99 | } 100 | 101 | uint16_t H36_callback() 102 | { 103 | H36_send_packet(); 104 | switch(phase) 105 | { 106 | case H36_DATA1: 107 | phase++; 108 | return 1830; 109 | case H36_DATA2: 110 | case H36_DATA3: 111 | phase++; 112 | return 3085; 113 | default://DATA4 114 | #ifdef MULTI_SYNC 115 | telemetry_set_input_sync(18500); 116 | #endif 117 | phase = H36_DATA1; 118 | break; 119 | } 120 | return 10500; 121 | } 122 | 123 | void H36_init() 124 | { 125 | BIND_IN_PROGRESS; // Autobind protocol 126 | H36_initialize_txid(); 127 | H36_RF_init(); 128 | phase = H36_DATA1; 129 | hopping_frequency_no = 0; 130 | bind_counter = H36_BIND_COUNT; 131 | } 132 | #endif 133 | -------------------------------------------------------------------------------- /Multiprotocol/HS6200_EMU.ino: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | #ifdef CYRF6936_INSTALLED 16 | #include "iface_hs6200.h" 17 | 18 | static bool HS6200_crc; 19 | static uint16_t HS6200_crc_init; 20 | static uint8_t HS6200_address_length, HS6200_tx_addr[5]; 21 | 22 | static void __attribute__((unused)) HS6200_Init(bool crc_en) 23 | { 24 | CYRF_GFSK1M_Init(32, 1); //Dummy number of bytes for now 25 | HS6200_crc = crc_en; 26 | } 27 | 28 | static void __attribute__((unused)) HS6200_SetTXAddr(const uint8_t* addr, uint8_t addr_len) 29 | { 30 | // precompute address crc 31 | crc = 0xffff; 32 | for(uint8_t i=0; i 0) 49 | crc16_update(msg[pos+1], 1); 50 | return crc; 51 | } 52 | 53 | static void __attribute__((unused)) HS6200_SendPayload(uint8_t* msg, uint8_t len) 54 | { 55 | static const uint8_t HS6200_scramble[] = { 0x80,0xf5,0x3b,0x0d,0x6d,0x2a,0xf9,0xbc,0x51,0x8e,0x4c,0xfd,0xc1,0x65,0xd0 }; // todo: find all 32 bytes ... 56 | uint8_t payload[32]; 57 | const uint8_t no_ack = 1; // never ask for an ack 58 | static uint8_t pid; 59 | uint8_t pos = 0; 60 | 61 | if(len > sizeof(HS6200_scramble)) 62 | len = sizeof(HS6200_scramble); 63 | 64 | // address 65 | for(int8_t i=HS6200_address_length-1; i>=0; i--) 66 | payload[pos++] = HS6200_tx_addr[i]; 67 | 68 | // guard bytes 69 | payload[pos++] = HS6200_tx_addr[0]; 70 | payload[pos++] = HS6200_tx_addr[0]; 71 | 72 | // packet control field 73 | payload[pos++] = ((len & 0x3f) << 2) | (pid & 0x03); 74 | payload[pos] = (no_ack & 0x01) << 7; 75 | pid++; 76 | 77 | // scrambled payload 78 | if(len > 0) 79 | { 80 | payload[pos++] |= (msg[0] ^ HS6200_scramble[0]) >> 1; 81 | for(uint8_t i=1; i> 1); 83 | payload[pos] = (msg[len-1] ^ HS6200_scramble[len-1]) << 7; 84 | } 85 | 86 | // crc 87 | if(HS6200_crc) 88 | { 89 | uint16_t crc = HS6200_calc_crc(&payload[HS6200_address_length+2], len+2); 90 | uint8_t hcrc = crc >> 8; 91 | uint8_t lcrc = crc & 0xff; 92 | payload[pos++] |= (hcrc >> 1); 93 | payload[pos++] = (hcrc << 7) | (lcrc >> 1); 94 | payload[pos++] = lcrc << 7; 95 | } 96 | 97 | #if 0 98 | debug("E:"); 99 | for(uint8_t i=0; i. 14 | */ 15 | // Compatible with FZ-410 TX 16 | 17 | #if defined(HEIGHT_A7105_INO) 18 | 19 | #include "iface_a7105.h" 20 | 21 | //#define HEIGHT_FORCEID 22 | 23 | #define HEIGHT_BIND_COUNT 220 // 5 sec 24 | #define HEIGHT_BIND_CH 0x18 // TX, RX for bind end is 0x17 25 | 26 | static void __attribute__((unused)) HEIGHT_build_packet() 27 | { 28 | packet[0] = 0xA5; 29 | packet[1] = rx_tx_addr[2]; 30 | packet[2] = rx_tx_addr[3]; 31 | packet[3] = convert_channel_8b(AILERON); //00..80..FF 32 | packet[4] = convert_channel_8b(ELEVATOR); //00..80..FF 33 | packet[5] = convert_channel_8b(THROTTLE); //00..FF 34 | packet[6] = convert_channel_8b(RUDDER); //00..80..FF 35 | packet[7] = convert_channel_8b(CH5); //00..80..FF 36 | if(sub_protocol == HEIGHT_8CH) 37 | { 38 | packet[8] = convert_channel_8b(CH6); //00..80..FF 39 | packet[9] = convert_channel_8b(CH7); //00..80..FF 40 | packet[10] = convert_channel_8b(CH8); //00..80..FF 41 | } 42 | } 43 | 44 | uint16_t HEIGHT_callback() 45 | { 46 | #ifndef FORCE_HEIGHT_TUNING 47 | A7105_AdjustLOBaseFreq(1); 48 | #endif 49 | if(IS_BIND_IN_PROGRESS) 50 | { 51 | packet[0] = 0x1B; 52 | packet[1] = rx_tx_addr[2]; 53 | packet[2] = rx_tx_addr[3]; 54 | A7105_WriteData(3, HEIGHT_BIND_CH); 55 | if (bind_counter--==0) 56 | BIND_DONE; 57 | return 22700; 58 | } 59 | else 60 | { 61 | if(phase>19) 62 | { 63 | phase=0; 64 | #ifdef MULTI_SYNC 65 | telemetry_set_input_sync(20*1500); 66 | #endif 67 | HEIGHT_build_packet(); 68 | A7105_WriteData(sub_protocol?11:8, hopping_frequency[0]); 69 | A7105_SetPower(); 70 | } 71 | else 72 | { 73 | A7105_WriteReg(A7105_0F_PLL_I, hopping_frequency[(phase&0x02)>>1]); 74 | A7105_Strobe(A7105_TX); 75 | } 76 | phase++; 77 | } 78 | return 1500; 79 | } 80 | 81 | void HEIGHT_init() 82 | { 83 | A7105_Init(); 84 | 85 | hopping_frequency[0]=((random(0xfefefefe) & 0x0F)+2)<<2; 86 | hopping_frequency[1]=hopping_frequency[0]+0x50; 87 | 88 | #ifdef HEIGHT_FORCEID 89 | rx_tx_addr[2]=0x35; 90 | rx_tx_addr[3]=0xD0; 91 | hopping_frequency[0]=0x18; 92 | hopping_frequency[1]=0x68; 93 | #endif 94 | 95 | phase=255; 96 | bind_counter = HEIGHT_BIND_COUNT; 97 | } 98 | #endif 99 | // Normal packet is 8 bytes: 0xA5 0xAF 0x59 0x84 0x7A 0x00 0x80 0xFF 100 | // Protocol is using AETR channel order, 1 byte per channel 00..80..FF including trim. Channels are in packet [3,4,5,6]. 101 | // packet[0,1,2,7] values are constant in normal mode. 102 | // packet[0]=0xA5 -> normal mode 103 | // packet[1,2] ->ID 104 | // packet[7]=0xFF -> ??? 105 | // Channel values are updated every 30ms which is quite slow, slower than PPM... 106 | // Packets are sent every 1500µs on 2 different channels. 2 times on first channel, 2 times on second channel and restart. The channels are changing between the files 0x08, 0x58 and 0x18, 0x68. 107 | // 108 | // Bind is sending 3 bytes on channel 0x18: 0x1B 0x35 0xD0 every 22.7ms 109 | // packet[0]=0x1B -> bind mode 110 | // packet[1,2] ->ID 111 | // It listens for the model on channel 0x17 and recieves 0x1B 0x35 0xD0 when the plane accepts bind. -------------------------------------------------------------------------------- /Multiprotocol/Joysway_a7105.ino: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | 16 | #if defined(JOYSWAY_A7105_INO) 17 | 18 | #include "iface_a7105.h" 19 | 20 | //#define JOYSWAY_FORCE_ID 21 | 22 | static void __attribute__((unused)) JOYSWAY_send_packet() 23 | { 24 | static uint8_t next_ch = 0x30; 25 | 26 | //RF frequency 27 | if (packet_count == 254) 28 | { 29 | packet_count = 0; 30 | A7105_WriteID(0x5475c52a); 31 | rf_ch_num = 0x0a; 32 | } 33 | else if (packet_count == 2) 34 | { 35 | A7105_WriteID(MProtocol_id); 36 | rf_ch_num = 0x30; 37 | } 38 | else 39 | { 40 | if (packet_count & 0x01) 41 | rf_ch_num = 0x30; 42 | else 43 | rf_ch_num = next_ch; 44 | } 45 | if (! (packet_count & 0x01)) 46 | { 47 | next_ch++; 48 | if (next_ch >= 0x45) 49 | next_ch = 0x30; 50 | } 51 | 52 | //Payload 53 | packet[0] = packet_count == 0 ? 0xdd : 0xff; 54 | //ID 55 | packet[1] = rx_tx_addr[0]; 56 | packet[2] = rx_tx_addr[1]; 57 | packet[3] = rx_tx_addr[2]; 58 | packet[4] = rx_tx_addr[3]; 59 | packet[5] = 0x00; 60 | //Channels 61 | for (uint8_t i = 0; i < 4; i++) 62 | packet[ 6 + (i & 0x01) + ((i & 0x02)<<1)] = convert_channel_16b_limit(i, 0x00, 0xCC); 63 | packet[8] = 0x64; 64 | packet[9] = 0x64; 65 | packet[12] = 0x64; 66 | packet[13] = 0x64; 67 | packet[14] = packet_count == 0 ? 0x30 : 0xaa; 68 | //Check 69 | uint8_t value = 0; 70 | for (uint8_t i = 0; i < 15; i++) 71 | value += packet[i]; 72 | packet[15] = value; 73 | 74 | //Send 75 | #if 0 76 | debug("ch=%02X P=",rf_ch_num); 77 | for(uint8_t i=0; i<16; i++) 78 | debug("%02X ", packet[i]); 79 | debugln(""); 80 | #endif 81 | A7105_WriteData(16, rf_ch_num); 82 | A7105_SetPower(); 83 | packet_count++; 84 | } 85 | 86 | uint16_t JOYSWAY_callback() 87 | { 88 | #ifdef MULTI_SYNC 89 | telemetry_set_input_sync(6000); 90 | #endif 91 | #ifndef FORCE_JOYSWAY_TUNING 92 | A7105_AdjustLOBaseFreq(1); 93 | #endif 94 | 95 | JOYSWAY_send_packet(); 96 | return 6000; 97 | } 98 | 99 | void JOYSWAY_init() 100 | { 101 | BIND_DONE; // not a bind protocol 102 | 103 | MProtocol_id &= 0x00FFFFFF; 104 | MProtocol_id |= 0xF8000000; 105 | #ifdef JOYSWAY_FORCE_ID 106 | MProtocol_id = 0xf82dcaa0; 107 | #endif 108 | 109 | set_rx_tx_addr(MProtocol_id); 110 | 111 | A7105_Init(); 112 | 113 | packet_count = 2; 114 | } 115 | #endif 116 | -------------------------------------------------------------------------------- /Multiprotocol/Kyosho3_cyrf6936.ino: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | 16 | #if defined(KYOSHO3_CYRF6936_INO) 17 | 18 | #include "iface_cyrf6936.h" 19 | 20 | //#define KYOSHO3_FORCE_ID 21 | //#define KYOSHO3_DEBUG 22 | 23 | #define KYOSHO3_BIND_PACKET_SIZE 4 24 | #define KYOSHO3_PACKET_SIZE 9 25 | 26 | const uint8_t PROGMEM KYOSHO3_init_vals[][2] = { 27 | //Init from dump 28 | {CYRF_0B_PWR_CTRL, 0x00}, // PMU 29 | {CYRF_32_AUTO_CAL_TIME, 0x3C}, // Default init value 30 | {CYRF_35_AUTOCAL_OFFSET, 0x14}, // Default init value 31 | {CYRF_03_TX_CFG, 0x28 | CYRF_BIND_POWER}, // 8DR Mode, 64 chip codes 32 | {CYRF_10_FRAMING_CFG, 0xA4}, // SOP and LEN enable 33 | {CYRF_1F_TX_OVERRIDE, 0x05}, // Disable CRC, Data invert 34 | {CYRF_1E_RX_OVERRIDE, 0x04}, // CRC check disabled 35 | //{CYRF_11_DATA32_THOLD, 0x04}, // ???Using 64 chip... 36 | {CYRF_12_DATA64_THOLD, 0x0E}, // Default 37 | {CYRF_06_RX_CFG, 0x52}, // AGC disabled, LNA enabled, override enabled 38 | }; 39 | 40 | static uint16_t __attribute__((unused)) KYOSHO3_send_packet() 41 | { 42 | CYRF_SetPower(0x28); 43 | if(IS_BIND_IN_PROGRESS) 44 | { 45 | if(--bind_counter==0) 46 | BIND_DONE; 47 | packet[0] = 0xAA; 48 | //ID 49 | memcpy(&packet[1],&rx_tx_addr[1],3); 50 | CYRF_WriteDataPacketLen(packet, KYOSHO3_BIND_PACKET_SIZE); 51 | #ifdef KYOSHO3_DEBUG 52 | debug("P:"); 53 | for(uint8_t i=0;i>= 2; 67 | packet[3] |= Channel_data[i]<<6; 68 | packet[4+i] = Channel_data[i]>>3; 69 | } 70 | //Checksum 71 | packet[8] = packet[3]; 72 | for(uint8_t i=4;i<8;i++) 73 | packet[8] += packet[i]; 74 | //Timing 75 | phase ^= 0x01; 76 | CYRF_WriteDataPacketLen(packet, KYOSHO3_PACKET_SIZE); 77 | #ifdef KYOSHO3_DEBUG 78 | debug("P:"); 79 | for(uint8_t i=0;i 6 | #include 7 | #include 8 | 9 | #define yield() 10 | 11 | #define clockCyclesPerMicrosecond() ( F_CPU / 1000000L ) 12 | #define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() ) 13 | 14 | // the prescaler is set so that timer0 ticks every 64 clock cycles, and the 15 | // the overflow handler is called every 256 ticks. 16 | #define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(64 * 256)) 17 | 18 | // the whole number of milliseconds per timer0 overflow 19 | #define MILLIS_INC (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000) 20 | 21 | // the fractional number of milliseconds per timer0 overflow. we shift right 22 | // by three to fit these numbers into a byte. (for the clock speeds we care 23 | // about - 8 and 16 MHz - this doesn't lose precision.) 24 | #define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3) 25 | #define FRACT_MAX (1000 >> 3) 26 | 27 | #ifndef cbi 28 | #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) 29 | #endif 30 | #ifndef sbi 31 | #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) 32 | #endif 33 | 34 | 35 | void init() 36 | { 37 | // this needs to be called before setup() or some functions won't 38 | // work there 39 | 40 | // Enable external oscillator (16MHz) 41 | OSC.XOSCCTRL = OSC_FRQRANGE_12TO16_gc | OSC_XOSCSEL_XTAL_256CLK_gc ; 42 | OSC.CTRL |= OSC_XOSCEN_bm ; 43 | while( ( OSC.STATUS & OSC_XOSCRDY_bm ) == 0 ) 44 | /* wait */ ; 45 | // Enable PLL (*2 = 32MHz) 46 | OSC.PLLCTRL = OSC_PLLSRC_XOSC_gc | 2 ; 47 | OSC.CTRL |= OSC_PLLEN_bm ; 48 | while( ( OSC.STATUS & OSC_PLLRDY_bm ) == 0 ) 49 | /* wait */ ; 50 | // Switch to PLL clock 51 | CPU_CCP = 0xD8 ; 52 | CLK.CTRL = CLK_SCLKSEL_RC2M_gc ; 53 | CPU_CCP = 0xD8 ; 54 | CLK.CTRL = CLK_SCLKSEL_PLL_gc ; 55 | 56 | PMIC.CTRL = 7 ; // Enable all interrupt levels 57 | sei(); 58 | 59 | #if defined(ADCSRA) 60 | // set a2d prescale factor to 128 61 | // 16 MHz / 128 = 125 KHz, inside the desired 50-200 KHz range. 62 | // XXX: this will not work properly for other clock speeds, and 63 | // this code should use F_CPU to determine the prescale factor. 64 | sbi(ADCSRA, ADPS2); 65 | sbi(ADCSRA, ADPS1); 66 | sbi(ADCSRA, ADPS0); 67 | 68 | // enable a2d conversions 69 | sbi(ADCSRA, ADEN); 70 | #endif 71 | 72 | // the bootloader connects pins 0 and 1 to the USART; disconnect them 73 | // here so they can be used as normal digital i/o; they will be 74 | // reconnected in Serial.begin() 75 | #if defined(UCSRB) 76 | UCSRB = 0; 77 | #elif defined(UCSR0B) 78 | UCSR0B = 0; 79 | #endif 80 | 81 | // Dip Switch inputs 82 | PORTA.DIRCLR = 0xFF ; 83 | PORTA.PIN0CTRL = 0x18 ; 84 | PORTA.PIN1CTRL = 0x18 ; 85 | PORTA.PIN2CTRL = 0x18 ; 86 | PORTA.PIN3CTRL = 0x18 ; 87 | PORTA.PIN4CTRL = 0x18 ; 88 | PORTA.PIN5CTRL = 0x18 ; 89 | PORTA.PIN6CTRL = 0x18 ; 90 | PORTA.PIN7CTRL = 0x18 ; 91 | } 92 | -------------------------------------------------------------------------------- /Multiprotocol/NRF250K_EMU.ino: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | #if defined(CC2500_INSTALLED) || defined(NRF24L01_INSTALLED) 16 | 17 | #include "iface_nrf250k.h" 18 | 19 | uint8_t cc2500_nrf_tx_addr[5], cc2500_nrf_addr_len; 20 | 21 | static void __attribute__((unused)) NRF250K_SetTXAddr(uint8_t* addr, uint8_t len) 22 | { 23 | if (len > 5) len = 5; 24 | if (len < 3) len = 3; 25 | #if defined(CC2500_INSTALLED) 26 | cc2500_nrf_addr_len = len; 27 | memcpy(cc2500_nrf_tx_addr, addr, len); 28 | #elif defined(NRF24L01_INSTALLED) 29 | NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, len-2); 30 | NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, addr, len); 31 | #endif 32 | } 33 | 34 | static void __attribute__((unused)) NRF250K_WritePayload(uint8_t* msg, uint8_t len) 35 | { 36 | #if defined(CC2500_INSTALLED) 37 | #if defined(ESKY150V2_CC2500_INO) 38 | uint8_t buf[158]; 39 | #else 40 | uint8_t buf[35]; 41 | #endif 42 | uint8_t last = 0; 43 | uint8_t i; 44 | 45 | //nrf preamble 46 | if(cc2500_nrf_tx_addr[cc2500_nrf_addr_len - 1] & 0x80) 47 | buf[0]=0xAA; 48 | else 49 | buf[0]=0x55; 50 | last++; 51 | // address 52 | for (i = 0; i < cc2500_nrf_addr_len; ++i) 53 | buf[last++] = cc2500_nrf_tx_addr[cc2500_nrf_addr_len - i - 1]; 54 | // payload 55 | for (i = 0; i < len; ++i) 56 | buf[last++] = msg[i]; 57 | 58 | // crc 59 | crc = 0xffff; 60 | for (uint8_t i = 1; i < last; ++i) 61 | crc16_update( buf[i], 8); 62 | buf[last++] = crc >> 8; 63 | buf[last++] = crc & 0xff; 64 | buf[last++] = 0; 65 | 66 | //for(uint8_t i=0;i63) 79 | { 80 | CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, 63); 81 | CC2500_Strobe(CC2500_STX); 82 | last-=63; 83 | buff+=63; 84 | while(last) 85 | {//Loop until all the data is sent 86 | do 87 | {// Wait for the FIFO to become available 88 | status=CC2500_ReadReg(CC2500_3A_TXBYTES | CC2500_READ_BURST); 89 | } 90 | while((status&0x7F)>31 && (status&0x80)==0); 91 | if(last>31) 92 | {//Send 31 bytes 93 | CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, 31); 94 | last-=31; 95 | buff+=31; 96 | } 97 | else 98 | {//Send last bytes 99 | CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, last); 100 | last=0; 101 | } 102 | } 103 | } 104 | else 105 | {//Send packet 106 | CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, last); 107 | CC2500_Strobe(CC2500_STX); 108 | } 109 | #elif defined(NRF24L01_INSTALLED) 110 | if(len<=32) 111 | { 112 | NRF24L01_FlushTx(); 113 | NRF24L01_WriteReg(NRF24L01_07_STATUS, _BV(NRF24L01_07_TX_DS) | _BV(NRF24L01_07_RX_DR) | _BV(NRF24L01_07_MAX_RT)); 114 | NRF24L01_WritePayload(msg, len); 115 | } 116 | #endif 117 | } 118 | 119 | #endif 120 | -------------------------------------------------------------------------------- /Multiprotocol/NanoRF_nrf24l01.ino: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | 16 | #if defined(NANORF_NRF24L01_INO) 17 | 18 | #include "iface_nrf24l01.h" 19 | 20 | #define NANORF_PACKET_PERIOD 40000 21 | #define NANORF_INITIAL_WAIT 500 22 | #define NANORF_RF_CHANNEL 40 23 | #define NANORF_PAYLOADSIZE 7 24 | 25 | static void __attribute__((unused)) NANORF_send_packet() 26 | { 27 | packet[0] = convert_channel_8b(AILERON); 28 | packet[1] = convert_channel_8b(ELEVATOR); 29 | packet[2] = convert_channel_8b(THROTTLE); 30 | packet[3] = convert_channel_8b(RUDDER); 31 | packet[4] = convert_channel_8b(CH5); 32 | packet[5] = convert_channel_8b(CH6); 33 | packet[6] = 0; 34 | for (uint8_t i=0; i < NANORF_PAYLOADSIZE-1; i++) 35 | packet[6] += packet[i]; 36 | packet[6] += 0x55; 37 | 38 | // clear packet status bits and TX FIFO 39 | NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); 40 | NRF24L01_FlushTx(); 41 | NRF24L01_WritePayload(packet, NANORF_PAYLOADSIZE); 42 | 43 | } 44 | 45 | static void __attribute__((unused)) NANORF_RF_init() 46 | { 47 | NRF24L01_Initialize(); 48 | 49 | NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR , (uint8_t *)"Nano1",5); 50 | NRF24L01_WriteReg(NRF24L01_05_RF_CH, NANORF_RF_CHANNEL); 51 | } 52 | 53 | uint16_t NANORF_callback() 54 | { 55 | NANORF_send_packet(); 56 | return NANORF_PACKET_PERIOD; 57 | } 58 | 59 | void NANORF_init() 60 | { 61 | BIND_DONE; 62 | NANORF_RF_init(); 63 | } 64 | 65 | #endif 66 | -------------------------------------------------------------------------------- /Multiprotocol/POTENSIC_nrf24l01.ino: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | Multiprotocol is distributed in the hope that it will be useful, 7 | but WITHOUT ANY WARRANTY; without even the implied warranty of 8 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 9 | GNU General Public License for more details. 10 | You should have received a copy of the GNU General Public License 11 | along with Multiprotocol. If not, see . 12 | */ 13 | 14 | #if defined(POTENSIC_NRF24L01_INO) 15 | 16 | #include "iface_xn297.h" 17 | 18 | //#define FORCE_POTENSIC_ORIGINAL_ID 19 | 20 | #define POTENSIC_PACKET_PERIOD 4100 // Timeout for callback in uSec 21 | #define POTENSIC_INITIAL_WAIT 500 22 | #define POTENSIC_PACKET_SIZE 10 23 | #define POTENSIC_BIND_COUNT 400 24 | #define POTENSIC_RF_NUM_CHANNELS 4 25 | 26 | static void __attribute__((unused)) POTENSIC_set_checksum() 27 | { 28 | uint8_t checksum = packet[1]; 29 | for(uint8_t i=2; i>3; 50 | packet[2] = ((255-convert_channel_8b(RUDDER))&0xF8)|(elevator>>2); 51 | packet[3] = (elevator<<6)|(((255-convert_channel_8b(AILERON))>>2)&0xFE); 52 | packet[4] = 0x20; // Trim 53 | packet[5] = 0x20 // Trim 54 | | GET_FLAG(CH7_SW, 0x80); // High: +100% 55 | packet[6] = 0x20; // Trim 56 | packet[7] = 0x40 // Low: -100% 57 | | GET_FLAG((Channel_data[CH7] > CHANNEL_MIN_COMMAND && !CH7_SW), 0x80) // Medium: 0% 58 | | GET_FLAG((CH5_SW||CH6_SW), 0x02) // Momentary Take off/Landing + Emergency 59 | | GET_FLAG(CH8_SW, 0x04); // Headless: -100%=off,+100%=on 60 | packet[8] = GET_FLAG(CH6_SW, 0x80); // Emergency 61 | } 62 | POTENSIC_set_checksum(); 63 | packet[9] = hopping_frequency_no; 64 | 65 | //RF channel 66 | XN297_Hopping(hopping_frequency_no&0x03); 67 | hopping_frequency_no++; 68 | 69 | // Send 70 | XN297_SetPower(); 71 | XN297_SetTxRxMode(TX_EN); 72 | XN297_WritePayload(packet, POTENSIC_PACKET_SIZE); 73 | } 74 | 75 | static void __attribute__((unused)) POTENSIC_RF_init() 76 | { 77 | XN297_Configure(XN297_CRCEN, XN297_SCRAMBLED, XN297_1M); 78 | 79 | if(IS_BIND_IN_PROGRESS) 80 | XN297_SetTXAddr((uint8_t*)"\x01\x01\x01\x01\x06", 5); // Bind address 81 | else 82 | XN297_SetTXAddr(rx_tx_addr,5); // Normal address 83 | } 84 | 85 | static void __attribute__((unused)) POTENSIC_initialize_txid() 86 | { 87 | #ifdef FORCE_POTENSIC_ORIGINAL_ID 88 | memcpy(rx_tx_addr,(uint8_t *)"\xF6\xE0\x20\x00\x0E",5); 89 | #endif 90 | memcpy(hopping_frequency,(uint8_t *)"\x32\x3E\x3A\x36",POTENSIC_RF_NUM_CHANNELS); //50, 62, 58, 54 91 | } 92 | 93 | uint16_t POTENSIC_callback() 94 | { 95 | #ifdef MULTI_SYNC 96 | telemetry_set_input_sync(POTENSIC_PACKET_PERIOD); 97 | #endif 98 | if(bind_counter) 99 | if(--bind_counter==0) 100 | { 101 | BIND_DONE; 102 | XN297_SetTXAddr(rx_tx_addr,5); 103 | } 104 | POTENSIC_send_packet(); 105 | return POTENSIC_PACKET_PERIOD; 106 | } 107 | 108 | void POTENSIC_init(void) 109 | { 110 | bind_counter = POTENSIC_BIND_COUNT; 111 | POTENSIC_initialize_txid(); 112 | POTENSIC_RF_init(); 113 | hopping_frequency_no = 0; 114 | } 115 | 116 | #endif 117 | -------------------------------------------------------------------------------- /Multiprotocol/RF2500_EMU.ino: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | #ifdef CYRF6936_INSTALLED 16 | #include "iface_rf2500.h" 17 | 18 | #define RF2500_ADDR_LENGTH 4 19 | 20 | uint8_t RF2500_payload_length, RF2500_tx_addr[RF2500_ADDR_LENGTH], RF2500_buf[100]; 21 | bool RF2500_scramble_enabled; 22 | 23 | static void __attribute__((unused)) RF2500_Init(uint8_t payload_length, bool scramble) 24 | { 25 | CYRF_GFSK1M_Init( RF2500_ADDR_LENGTH + 2 + (payload_length+2)*4, 2 ); // full payload length with CRC + address + 5 + FEC 26 | 27 | RF2500_payload_length=payload_length; 28 | RF2500_scramble_enabled=scramble; 29 | } 30 | 31 | static void __attribute__((unused)) RF2500_SetTXAddr(const uint8_t* addr) 32 | { 33 | memcpy(RF2500_tx_addr, addr, RF2500_ADDR_LENGTH); 34 | } 35 | 36 | static void __attribute__((unused)) RF2500_BuildPayload(uint8_t* buffer) 37 | { 38 | const uint8_t RF2500_scramble[] = { 0xD0, 0x9E, 0x53, 0x33, 0xD8, 0xBA, 0x98, 0x08, 0x24, 0xCB, 0x3B, 0xFC, 0x71, 0xA3, 0xF4, 0x55, 0x68, 0x4F, 0xA9 }; //0x4F: unsure 39 | uint16_t RF2500_crc_xorout_scramble; 40 | if(RF2500_payload_length == 16) 41 | RF2500_crc_xorout_scramble = 0xAEE4; 42 | else //19 43 | RF2500_crc_xorout_scramble = 0xE7C5; 44 | 45 | #if 0 46 | for(uint8_t i=0; i>8); 59 | buffer[RF2500_payload_length+1] = bit_reverse(crc); 60 | 61 | #if 0 62 | debugln("C:%02X %02X",buffer[RF2500_payload_length ], buffer[RF2500_payload_length+1]); 63 | #endif 64 | 65 | if(RF2500_scramble_enabled) 66 | { 67 | buffer[RF2500_payload_length ] ^= RF2500_crc_xorout_scramble>>8; 68 | buffer[RF2500_payload_length+1] ^= RF2500_crc_xorout_scramble; 69 | } 70 | 71 | #if 0 72 | debug("B:"); 73 | for(uint8_t i=0; i>1); 91 | RF2500_buf[offset] <<= 4; 92 | if( (buffer[i]>>j) & 0x01 ) 93 | RF2500_buf[offset] |= 0x0C; 94 | else 95 | RF2500_buf[offset] |= 0x03; 96 | } 97 | } 98 | 99 | #if 0 100 | debug("E:"); 101 | for(uint8_t i=0; i. 14 | */ 15 | 16 | #if defined(SHENQI_NRF24L01_INO) 17 | 18 | #include "iface_nrf24l01.h" 19 | 20 | const uint8_t PROGMEM SHENQI_Freq[] = { 21 | 50,50,20,60,30,40, 22 | 10,30,40,20,60,10, 23 | 50,20,50,40,10,60, 24 | 30,30,60,10,40,50, 25 | 20,10,60,20,50,30, 26 | 40,40,30,50,20,60, 27 | 10,10,20,30,40,50, 28 | 60,60,50,40,30,20, 29 | 10,60,10,50,30,40, 30 | 20,10,40,30,60,20 }; 31 | 32 | void SHENQI_RF_init() 33 | { 34 | NRF24L01_Initialize(); 35 | 36 | LT8900_Config(4, 8, _BV(LT8900_CRC_ON)|_BV(LT8900_PACKET_LENGTH_EN), 0xAA); 37 | LT8900_SetChannel(2); 38 | LT8900_SetAddress((uint8_t *)"\x9A\x9A\x9A\x9A",4); 39 | LT8900_SetTxRxMode(RX_EN); 40 | } 41 | 42 | void SHENQI_send_packet() 43 | { 44 | packet[0]=0x00; 45 | if(packet_count==0) 46 | { 47 | uint8_t bind_addr[4]; 48 | bind_addr[0]=rx_tx_addr[0]; 49 | bind_addr[1]=rx_tx_addr[1]; 50 | bind_addr[2]=0x9A; 51 | bind_addr[3]=0x9A; 52 | LT8900_SetAddress(bind_addr,4); 53 | LT8900_SetChannel(2); 54 | packet[1]=rx_tx_addr[2]; 55 | packet[2]=rx_tx_addr[3]; 56 | packet_period=2508; 57 | } 58 | else 59 | { 60 | #ifdef MULTI_SYNC 61 | if(packet_count==1) 62 | telemetry_set_input_sync(3000+2508+6*1750); 63 | #endif 64 | LT8900_SetAddress(rx_tx_addr,4); 65 | packet[1]=255-convert_channel_8b(RUDDER); 66 | packet[2]=255-convert_channel_16b_limit(THROTTLE,0x60,0xA0); 67 | uint8_t freq=pgm_read_byte_near(&SHENQI_Freq[hopping_frequency_no])+(rx_tx_addr[2]&0x0F); 68 | LT8900_SetChannel(freq); 69 | hopping_frequency_no++; 70 | if(hopping_frequency_no==60) 71 | hopping_frequency_no=0; 72 | packet_period=1750; 73 | } 74 | // Send packet + 1 retransmit - not sure why but needed (not present on original TX...) 75 | LT8900_WritePayload(packet,3); 76 | while(NRF24L01_packet_ack()!=PKT_ACKED); 77 | LT8900_WritePayload(packet,3); 78 | 79 | packet_count++; 80 | if(packet_count==7) 81 | { 82 | packet_count=0; 83 | packet_period=3000; 84 | } 85 | // Set power 86 | NRF24L01_SetPower(); 87 | } 88 | 89 | uint16_t SHENQI_callback() 90 | { 91 | if(IS_BIND_DONE) 92 | { 93 | SHENQI_send_packet(); 94 | } 95 | else 96 | { 97 | if( NRF24L01_ReadReg(NRF24L01_07_STATUS) & _BV(NRF24L01_07_RX_DR)) 98 | { 99 | if(LT8900_ReadPayload(packet, 3)) 100 | { 101 | BIND_DONE; 102 | rx_tx_addr[0]=packet[1]; 103 | rx_tx_addr[1]=packet[2]; 104 | LT8900_SetTxRxMode(TX_EN); 105 | packet_period=14000; 106 | } 107 | NRF24L01_FlushRx(); 108 | } 109 | } 110 | return packet_period; 111 | } 112 | 113 | void SHENQI_init() 114 | { 115 | BIND_IN_PROGRESS; // autobind protocol 116 | SHENQI_RF_init(); 117 | hopping_frequency_no = 0; 118 | packet_count=0; 119 | packet_period=500; 120 | } 121 | 122 | #endif -------------------------------------------------------------------------------- /Multiprotocol/TEST_cc2500.ino: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | 16 | #if defined(TEST_CC2500_INO) 17 | 18 | #include "iface_nrf250k.h" 19 | 20 | #define TEST_INITIAL_WAIT 500 21 | #define TEST_PACKET_PERIOD 10000 22 | #define TEST_PAYLOAD_SIZE 10 23 | #define TEST_RF_NUM_CHANNELS 3 24 | 25 | uint16_t TEST_callback() 26 | { 27 | option=1; 28 | if(phase) 29 | XN297L_WritePayload(packet, TEST_PAYLOAD_SIZE); 30 | else 31 | { 32 | if(Channel_data[CH5]CHANNEL_MAX_COMMAND) 35 | hopping_frequency_no=2; 36 | else 37 | hopping_frequency_no=1; 38 | XN297L_Hopping(hopping_frequency_no); 39 | CC2500_WriteReg(CC2500_3E_PATABLE,convert_channel_8b(CH6)); 40 | debugln("CH:%d, PWR:%d",hopping_frequency_no,convert_channel_8b(CH6)); 41 | } 42 | phase ^= 1; 43 | return TEST_PACKET_PERIOD>>1; 44 | } 45 | 46 | void TEST_init() 47 | { 48 | option=1; 49 | 50 | hopping_frequency[0]=0; 51 | hopping_frequency[1]=40; 52 | hopping_frequency[2]=80; 53 | XN297L_Init(); 54 | XN297L_HoppingCalib(TEST_RF_NUM_CHANNELS); // Calibrate all channels 55 | XN297L_SetTXAddr((uint8_t*)"RADIO", 5); 56 | hopping_frequency_no = 0; 57 | phase=0; 58 | for(uint8_t i=0; i. 14 | */ 15 | 16 | #if defined(WL91X_CCNRF_INO) 17 | 18 | #include "iface_xn297.h" 19 | 20 | //#define FORCE_WL91X_ORIGINAL_ID 21 | 22 | #define WL91X_PAYLOAD_SIZE 9 23 | #define WL91X_RF_NUM_CHANNELS 3 24 | #define WL91X_PACKET_PERIOD 2594 25 | 26 | static void __attribute__((unused)) WL91X_send_packet() 27 | { 28 | uint8_t val; 29 | 30 | //RF freq 31 | XN297_Hopping(hopping_frequency_no++); 32 | hopping_frequency_no %= WL91X_RF_NUM_CHANNELS; 33 | 34 | //Sticks 35 | val = convert_channel_16b_limit(CH2,0x21,0xE0); //THR forward 00..5F, backward 80..DF 36 | if(val < 128) val = 127 - val; 37 | packet[0] = val - 0x80; 38 | val = convert_channel_s8b(CH1); //ST right 00..7F, left 80..FF 39 | packet[1] = val - 0x80; 40 | //Trims 41 | val = convert_channel_s8b(CH3); //ST_Trim centered=80, increment/decrement=4, right 04..7C, left 84..FC 42 | packet[2] = val - 0x80; 43 | packet[3] = convert_channel_16b_limit(CH4,0x00,0x70); //TH_Trim increment/decrement=3, 00..39..6F 44 | //TX_ID 45 | memcpy(&packet[4], rx_tx_addr, 4); 46 | //Checksum 47 | val = 0; 48 | for(uint8_t i=0; i. 14 | */ 15 | // Compatible with JJRC ZSX-280 plane. 16 | 17 | #if defined(ZSX_NRF24L01_INO) 18 | 19 | #include "iface_xn297.h" 20 | 21 | //#define FORCE_ZSX_ORIGINAL_ID 22 | 23 | #define ZSX_INITIAL_WAIT 500 24 | #define ZSX_PACKET_PERIOD 10093 25 | #define ZSX_RF_BIND_CHANNEL 7 26 | #define ZSX_PAYLOAD_SIZE 6 27 | #define ZSX_BIND_COUNT 50 28 | #define ZSX_RF_NUM_CHANNELS 1 29 | 30 | static void __attribute__((unused)) ZSX_send_packet() 31 | { 32 | memcpy(&packet[1],rx_tx_addr,3); 33 | if(IS_BIND_IN_PROGRESS) 34 | { 35 | packet[0] = 0xAA; 36 | packet[4] = 0x00; 37 | packet[5] = 0x00; 38 | } 39 | else 40 | { 41 | packet[0]= 0x55; 42 | packet[4]= 0xFF-convert_channel_8b(RUDDER); // FF..80..01 43 | packet[5]= convert_channel_8b(THROTTLE)>>1 // 0..7F 44 | | GET_FLAG(CH5_SW, 0x80); // Light 45 | } 46 | 47 | // Send 48 | XN297_SetPower(); 49 | XN297_SetTxRxMode(TX_EN); 50 | XN297_WritePayload(packet, ZSX_PAYLOAD_SIZE); 51 | } 52 | 53 | static void __attribute__((unused)) ZSX_initialize_txid() 54 | { 55 | rx_tx_addr[0]=rx_tx_addr[3]; // Use RX_num; 56 | #ifdef FORCE_ZSX_ORIGINAL_ID 57 | //TX1 58 | rx_tx_addr[0]=0x03; 59 | rx_tx_addr[1]=0x01; 60 | rx_tx_addr[2]=0xC3; 61 | #endif 62 | } 63 | 64 | static void __attribute__((unused)) ZSX_RF_init() 65 | { 66 | XN297_Configure(XN297_CRCEN, XN297_SCRAMBLED, XN297_1M); 67 | XN297_SetTXAddr((uint8_t*)"\xc1\xc2\xc3", 3); 68 | XN297_RFChannel(ZSX_RF_BIND_CHANNEL); // Set bind channel 69 | } 70 | 71 | uint16_t ZSX_callback() 72 | { 73 | #ifdef MULTI_SYNC 74 | telemetry_set_input_sync(ZSX_PACKET_PERIOD); 75 | #endif 76 | if(bind_counter) 77 | if(--bind_counter==0) 78 | { 79 | BIND_DONE; 80 | XN297_SetTXAddr(rx_tx_addr, 3); 81 | XN297_RFChannel(0x00); 82 | } 83 | ZSX_send_packet(); 84 | return ZSX_PACKET_PERIOD; 85 | } 86 | 87 | void ZSX_init() 88 | { 89 | BIND_IN_PROGRESS; // autobind protocol 90 | ZSX_initialize_txid(); 91 | ZSX_RF_init(); 92 | bind_counter=ZSX_BIND_COUNT; 93 | } 94 | 95 | #endif 96 | 97 | // XN297 speed 1Mb, scrambled 98 | // Bind 99 | // channel 7 100 | // address: C1 C2 C3 101 | // P(6)= AA 03 01 C3 00 00 102 | // 03 01 C3 <- normal address 103 | // Normal 104 | // channel 0 and seems to be fixed 105 | // address: 03 01 C3 106 | // P(6)= 55 03 01 C3 80 00 107 | // 03 01 C3 <- normal address 108 | // 80 <- rudder FF..80..01 109 | // 00 <- throttle 00..7F, light flag 0x80 -------------------------------------------------------------------------------- /Multiprotocol/_MyConfig.h.example: -------------------------------------------------------------------------------- 1 | /* 2 | This file is meant to keep your settings after an upgrade of the multi source. 3 | If you know parameters you want for sure to be enabled or disabled in future 4 | then just force their values here. 5 | To enable a setting use #define 6 | To disable a setting use #undef 7 | */ 8 | 9 | // For example you can also define multiple module configurations, uncomment the one you want to compile for: 10 | #define Module_1 11 | //#define Module_2 12 | //#define Module_3 13 | 14 | //Example on how to force the "Flash from TX" feature for all modules 15 | #define CHECK_FOR_BOOTLOADER 16 | 17 | //Example on how to force the same ID for all modules: be carefull this is really if you want to be able to use one or another radio but not both! 18 | //#define FORCE_GLOBAL_ID 0x12345678 19 | 20 | #if defined Module_1 21 | //Example on how to remove unwanted protocols to fit in flash for Atmega 328 modules 22 | #undef AFHDS2A_A7105_INO 23 | 24 | #undef DEVO_CYRF6936_INO 25 | #undef J6PRO_CYRF6936_INO 26 | #undef WK2x01_CYRF6936_INO 27 | 28 | #undef FRSKYV_CC2500_INO 29 | #undef FRSKYX_CC2500_INO 30 | 31 | #undef KN_NRF24L01_INO 32 | #undef SLT_CCNRF_INO 33 | 34 | #undef FY326_NRF24L01_INO 35 | #undef FQ777_NRF24L01_INO 36 | #undef ASSAN_NRF24L01_INO 37 | #undef HONTAI_NRF24L01_INO 38 | #undef Q303_CCNRF_INO 39 | #undef GW008_NRF24L01_INO 40 | #undef DM002_NRF24L01_INO 41 | #undef CABELL_NRF24L01_INO 42 | #undef ESKY150_NRF24L01_INO 43 | #undef H8_3D_NRF24L01_INO 44 | 45 | #elif defined Module_2 46 | //Example of a module which doesn't need the telemetry signal to be inverted 47 | #undef INVERT_TELEMETRY 48 | 49 | #elif defined Module_3 50 | //Example of a module which will be PPM only with a different protocol table 51 | #undef ENABLE_SERIAL 52 | #undef NBR_BANKS 53 | #define NBR_BANKS 1 // redefine the number of banks 54 | #define MY_PPM_PROT // Use the bellow protocol list 55 | const PPM_Parameters My_PPM_prot[14*NBR_BANKS]={ 56 | //****************************** BANK 1 ****************************** 57 | // Switch Protocol Sub protocol RX_Num Power Auto Bind Option Chan Order 58 | /* 1 */ {PROTO_KN , WLTOYS , 0 , P_HIGH , NO_AUTOBIND , 0 , 0x00000000 }, 59 | /* 2 */ {PROTO_FLYSKY, Flysky , 0 , P_HIGH , AUTOBIND , 0 , 0x00000000 }, 60 | /* 3 */ {PROTO_AFHDS2A, PWM_IBUS , 1 , P_HIGH , NO_AUTOBIND , 0 , 0x00000000 }, // RX number 1 61 | /* 4 */ {PROTO_AFHDS2A, PWM_IBUS , 2 , P_HIGH , NO_AUTOBIND , 0 , 0x00000000 }, // RX number 2 62 | /* 5 */ {PROTO_AFHDS2A, PWM_IBUS , 3 , P_HIGH , NO_AUTOBIND , 0 , 0x00000000 }, // RX number 3 63 | /* 6 */ {PROTO_AFHDS2A, PWM_IBUS , 2 , P_HIGH , NO_AUTOBIND , 0 , 0x00000000 }, // RX number 4 64 | /* 7 */ {PROTO_AFHDS2A, PWM_IBUS , 3 , P_HIGH , NO_AUTOBIND , 0 , 0x00000000 }, // RX number 5 65 | /* 8 */ {PROTO_HUBSAN, H107 , 0 , P_HIGH , NO_AUTOBIND , 0 , 0x00000000 }, 66 | /* 9 */ {PROTO_FRSKYV, NONE , 0 , P_HIGH , NO_AUTOBIND , 40 , 0x00000000 }, // option=fine freq tuning 67 | /* 10 */ {PROTO_FRSKYD, NONE , 0 , P_HIGH , NO_AUTOBIND , 40 , 0x00000000 }, // option=fine freq tuning 68 | /* 11 */ {PROTO_FRSKYX, CH_16 , 0 , P_HIGH , NO_AUTOBIND , 40 , 0x00000000 }, // option=fine freq tuning 69 | /* 12 */ {PROTO_FRSKYX, EU_16 , 0 , P_HIGH , NO_AUTOBIND , 40 , 0x00000000 }, // option=fine freq tuning 70 | /* 13 */ {PROTO_DEVO , NONE , 0 , P_HIGH , NO_AUTOBIND , 0 , 0x00000000 }, 71 | /* 14 */ {PROTO_WK2x01, WK2801 , 0 , P_HIGH , NO_AUTOBIND , 0 , 0x00000000 }, 72 | }; 73 | #endif 74 | -------------------------------------------------------------------------------- /Multiprotocol/iface_a7105.h: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | 16 | #ifndef _IFACE_A7105_H_ 17 | #define _IFACE_A7105_H_ 18 | 19 | enum A7105_State { 20 | A7105_SLEEP = 0x80, 21 | A7105_IDLE = 0x90, 22 | A7105_STANDBY = 0xA0, 23 | A7105_PLL = 0xB0, 24 | A7105_RX = 0xC0, 25 | A7105_TX = 0xD0, 26 | A7105_RST_WRPTR = 0xE0, 27 | A7105_RST_RDPTR = 0xF0, 28 | }; 29 | 30 | enum { 31 | A7105_00_MODE = 0x00, 32 | A7105_01_MODE_CONTROL = 0x01, 33 | A7105_02_CALC = 0x02, 34 | A7105_03_FIFOI = 0x03, 35 | A7105_04_FIFOII = 0x04, 36 | A7105_05_FIFO_DATA = 0x05, 37 | A7105_06_ID_DATA = 0x06, 38 | A7105_07_RC_OSC_I = 0x07, 39 | A7105_08_RC_OSC_II = 0x08, 40 | A7105_09_RC_OSC_III = 0x09, 41 | A7105_0A_CK0_PIN = 0x0A, 42 | A7105_0B_GPIO1_PIN1 = 0x0B, 43 | A7105_0C_GPIO2_PIN_II = 0x0C, 44 | A7105_0D_CLOCK = 0x0D, 45 | A7105_0E_DATA_RATE = 0x0E, 46 | A7105_0F_PLL_I = 0x0F, 47 | A7105_10_PLL_II = 0x10, 48 | A7105_11_PLL_III = 0x11, 49 | A7105_12_PLL_IV = 0x12, 50 | A7105_13_PLL_V = 0x13, 51 | A7105_14_TX_I = 0x14, 52 | A7105_15_TX_II = 0x15, 53 | A7105_16_DELAY_I = 0x16, 54 | A7105_17_DELAY_II = 0x17, 55 | A7105_18_RX = 0x18, 56 | A7105_19_RX_GAIN_I = 0x19, 57 | A7105_1A_RX_GAIN_II = 0x1A, 58 | A7105_1B_RX_GAIN_III = 0x1B, 59 | A7105_1C_RX_GAIN_IV = 0x1C, 60 | A7105_1D_RSSI_THOLD = 0x1D, 61 | A7105_1E_ADC = 0x1E, 62 | A7105_1F_CODE_I = 0x1F, 63 | A7105_20_CODE_II = 0x20, 64 | A7105_21_CODE_III = 0x21, 65 | A7105_22_IF_CALIB_I = 0x22, 66 | A7105_23_IF_CALIB_II = 0x23, 67 | A7105_24_VCO_CURCAL = 0x24, 68 | A7105_25_VCO_SBCAL_I = 0x25, 69 | A7105_26_VCO_SBCAL_II = 0x26, 70 | A7105_27_BATTERY_DET = 0x27, 71 | A7105_28_TX_TEST = 0x28, 72 | A7105_29_RX_DEM_TEST_I = 0x29, 73 | A7105_2A_RX_DEM_TEST_II = 0x2A, 74 | A7105_2B_CPC = 0x2B, 75 | A7105_2C_XTAL_TEST = 0x2C, 76 | A7105_2D_PLL_TEST = 0x2D, 77 | A7105_2E_VCO_TEST_I = 0x2E, 78 | A7105_2F_VCO_TEST_II = 0x2F, 79 | A7105_30_IFAT = 0x30, 80 | A7105_31_RSCALE = 0x31, 81 | A7105_32_FILTER_TEST = 0x32, 82 | }; 83 | #define A7105_0F_CHANNEL A7105_0F_PLL_I 84 | 85 | enum A7105_MASK { 86 | A7105_MASK_FBCF = 1 << 4, 87 | A7105_MASK_VBCF = 1 << 3, 88 | }; 89 | 90 | #endif -------------------------------------------------------------------------------- /Multiprotocol/iface_cyrf6936.h: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | 16 | #ifndef _IFACE_CYRF6936_H_ 17 | #define _IFACE_CYRF6936_H_ 18 | enum { 19 | CYRF_00_CHANNEL = 0x00, 20 | CYRF_01_TX_LENGTH = 0x01, 21 | CYRF_02_TX_CTRL = 0x02, 22 | CYRF_03_TX_CFG = 0x03, 23 | CYRF_04_TX_IRQ_STATUS = 0x04, 24 | CYRF_05_RX_CTRL = 0x05, 25 | CYRF_06_RX_CFG = 0x06, 26 | CYRF_07_RX_IRQ_STATUS = 0x07, 27 | CYRF_08_RX_STATUS = 0x08, 28 | CYRF_09_RX_COUNT = 0x09, 29 | CYRF_0A_RX_LENGTH = 0x0A, 30 | CYRF_0B_PWR_CTRL = 0x0B, 31 | CYRF_0C_XTAL_CTRL = 0x0C, 32 | CYRF_0D_IO_CFG = 0x0D, 33 | CYRF_0E_GPIO_CTRL = 0x0E, 34 | CYRF_0F_XACT_CFG = 0x0F, 35 | CYRF_10_FRAMING_CFG = 0x10, 36 | CYRF_11_DATA32_THOLD = 0x11, 37 | CYRF_12_DATA64_THOLD = 0x12, 38 | CYRF_13_RSSI = 0x13, 39 | CYRF_14_EOP_CTRL = 0x14, 40 | CYRF_15_CRC_SEED_LSB = 0x15, 41 | CYRF_16_CRC_SEED_MSB = 0x16, 42 | CYRF_17_TX_CRC_LSB = 0x17, 43 | CYRF_18_TX_CRC_MSB = 0x18, 44 | CYRF_19_RX_CRC_LSB = 0x19, 45 | CYRF_1A_RX_CRC_MSB = 0x1A, 46 | CYRF_1B_TX_OFFSET_LSB = 0x1B, 47 | CYRF_1C_TX_OFFSET_MSB = 0x1C, 48 | CYRF_1D_MODE_OVERRIDE = 0x1D, 49 | CYRF_1E_RX_OVERRIDE = 0x1E, 50 | CYRF_1F_TX_OVERRIDE = 0x1F, 51 | /*Register Files */ 52 | CYRF_20_TX_BUFFER = 0x20, 53 | CYRF_21_RX_BUFFER = 0x21, 54 | CYRF_22_SOP_CODE = 0x22, 55 | CYRF_23_DATA_CODE = 0x23, 56 | CYRF_24_PREAMBLE = 0x24, 57 | CYRF_25_MFG_ID = 0x25, 58 | /*****************/ 59 | CYRF_26_XTAL_CFG = 0x26, 60 | CYRF_27_CLK_OVERRIDE = 0x27, 61 | CYRF_28_CLK_EN = 0x28, 62 | CYRF_29_RX_ABORT = 0x29, 63 | CYRF_32_AUTO_CAL_TIME = 0x32, 64 | CYRF_35_AUTOCAL_OFFSET = 0x35, 65 | CYRF_39_ANALOG_CTRL = 0x39, 66 | }; 67 | 68 | enum CYRF_PWR { 69 | CYRF_PWR_100MW, 70 | CYRF_PWR_10MW, 71 | CYRF_PWR_DEFAULT, 72 | }; 73 | 74 | enum FIND_CHANNEL { 75 | FIND_CHANNEL_ANY = 0, 76 | FIND_CHANNEL_EVEN = 1, 77 | FIND_CHANNEL_ODD = 2, 78 | }; 79 | 80 | /* SPI CYRF6936 */ 81 | /* 82 | void CYRF_Initialize(); 83 | int CYRF_Reset(); 84 | void CYRF_GetMfgData(u8 data[]); 85 | 86 | void CYRF_SetTxRxMode(enum TXRX_State); 87 | void CYRF_ConfigRFChannel(u8 ch); 88 | void CYRF_SetPower(u8 power); 89 | void CYRF_ConfigCRCSeed(u16 crc); 90 | static void CYRF_StartReceive(); 91 | void CYRF_ConfigSOPCode(const u8 *sopcodes); 92 | void CYRF_ConfigDataCode(const u8 *datacodes); 93 | static u8 CYRF_ReadRSSI(u32 dodummyread); 94 | static void CYRF_ReadDataPacket(u8 dpbuffer[]); 95 | void CYRF_WriteDataPacket(const u8 dpbuffer[]); 96 | static void CYRF_WriteDataPacketLen(const u8 dpbuffer[], u8 len); 97 | void CYRF_WriteRegister(u8 address, u8 data); 98 | u8 CYRF_ReadRegister(u8 address); 99 | void CYRF_WritePreamble(u32 preamble); 100 | u8 CYRF_MaxPower(); 101 | void CYRF_FindBestChannels(u8 *channels, u8 len, u8 minspace, u8 minchan, u8 maxchan); 102 | */ 103 | #endif 104 | -------------------------------------------------------------------------------- /Multiprotocol/iface_hs6200.h: -------------------------------------------------------------------------------- 1 | #ifndef _IFACE_HS6200_H_ 2 | #define _IFACE_HS6200_H_ 3 | 4 | #include "iface_cyrf6936.h" 5 | 6 | //HS6200 7 | static void __attribute__((unused)) HS6200_Init(bool); 8 | static void __attribute__((unused)) HS6200_SetTXAddr(const uint8_t*, uint8_t); 9 | static void __attribute__((unused)) HS6200_SendPayload(uint8_t*, uint8_t); 10 | #define HS6200_SetPower() CYRF_GFSK1M_SetPower() 11 | #define HS6200_RFChannel(X) CYRF_ConfigRFChannel(X) 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /Multiprotocol/iface_nrf24l01.h: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | 16 | #ifndef _IFACE_NRF24L01_H_ 17 | #define _IFACE_NRF24L01_H_ 18 | // Register map 19 | enum { 20 | NRF24L01_00_CONFIG = 0x00, 21 | NRF24L01_01_EN_AA = 0x01, 22 | NRF24L01_02_EN_RXADDR = 0x02, 23 | NRF24L01_03_SETUP_AW = 0x03, 24 | NRF24L01_04_SETUP_RETR = 0x04, 25 | NRF24L01_05_RF_CH = 0x05, 26 | NRF24L01_06_RF_SETUP = 0x06, 27 | NRF24L01_07_STATUS = 0x07, 28 | NRF24L01_08_OBSERVE_TX = 0x08, 29 | NRF24L01_09_CD = 0x09, 30 | NRF24L01_0A_RX_ADDR_P0 = 0x0A, 31 | NRF24L01_0B_RX_ADDR_P1 = 0x0B, 32 | NRF24L01_0C_RX_ADDR_P2 = 0x0C, 33 | NRF24L01_0D_RX_ADDR_P3 = 0x0D, 34 | NRF24L01_0E_RX_ADDR_P4 = 0x0E, 35 | NRF24L01_0F_RX_ADDR_P5 = 0x0F, 36 | NRF24L01_10_TX_ADDR = 0x10, 37 | NRF24L01_11_RX_PW_P0 = 0x11, 38 | NRF24L01_12_RX_PW_P1 = 0x12, 39 | NRF24L01_13_RX_PW_P2 = 0x13, 40 | NRF24L01_14_RX_PW_P3 = 0x14, 41 | NRF24L01_15_RX_PW_P4 = 0x15, 42 | NRF24L01_16_RX_PW_P5 = 0x16, 43 | NRF24L01_17_FIFO_STATUS = 0x17, 44 | NRF24L01_1C_DYNPD = 0x1C, 45 | NRF24L01_1D_FEATURE = 0x1D, 46 | //Instructions 47 | NRF24L01_61_RX_PAYLOAD = 0x61, 48 | NRF24L01_A0_TX_PAYLOAD = 0xA0, 49 | NRF24L01_E1_FLUSH_TX = 0xE1, 50 | NRF24L01_E2_FLUSH_RX = 0xE2, 51 | NRF24L01_E3_REUSE_TX_PL = 0xE3, 52 | NRF24L01_50_ACTIVATE = 0x50, 53 | NRF24L01_60_R_RX_PL_WID = 0x60, 54 | NRF24L01_B0_TX_PYLD_NOACK = 0xB0, 55 | NRF24L01_FF_NOP = 0xFF, 56 | NRF24L01_A8_W_ACK_PAYLOAD0 = 0xA8, 57 | NRF24L01_A8_W_ACK_PAYLOAD1 = 0xA9, 58 | NRF24L01_A8_W_ACK_PAYLOAD2 = 0xAA, 59 | NRF24L01_A8_W_ACK_PAYLOAD3 = 0xAB, 60 | NRF24L01_A8_W_ACK_PAYLOAD4 = 0xAC, 61 | NRF24L01_A8_W_ACK_PAYLOAD5 = 0xAD, 62 | }; 63 | 64 | // Bit mnemonics 65 | enum { 66 | NRF24L01_00_MASK_RX_DR = 6, 67 | NRF24L01_00_MASK_TX_DS = 5, 68 | NRF24L01_00_MASK_MAX_RT = 4, 69 | NRF24L01_00_EN_CRC = 3, 70 | NRF24L01_00_CRCO = 2, 71 | NRF24L01_00_PWR_UP = 1, 72 | NRF24L01_00_PRIM_RX = 0, 73 | 74 | NRF24L01_07_RX_DR = 6, 75 | NRF24L01_07_TX_DS = 5, 76 | NRF24L01_07_MAX_RT = 4, 77 | 78 | NRF2401_1D_EN_DYN_ACK = 0, 79 | NRF2401_1D_EN_ACK_PAY = 1, 80 | NRF2401_1D_EN_DPL = 2, 81 | }; 82 | 83 | // Bitrates 84 | enum { 85 | NRF24L01_BR_1M = 0, 86 | NRF24L01_BR_2M, 87 | NRF24L01_BR_250K, 88 | NRF24L01_BR_RSVD 89 | }; 90 | 91 | /* Instruction Mnemonics */ 92 | #define R_REGISTER 0x00 93 | #define W_REGISTER 0x20 94 | #define REGISTER_MASK 0x1F 95 | #define ACTIVATE 0x50 96 | #define R_RX_PL_WID 0x60 97 | #define R_RX_PAYLOAD 0x61 98 | #define W_TX_PAYLOAD 0xA0 99 | #define W_ACK_PAYLOAD 0xA8 100 | #define FLUSH_TX 0xE1 101 | #define FLUSH_RX 0xE2 102 | #define REUSE_TX_PL 0xE3 103 | //#define NOP 0xFF 104 | 105 | #endif -------------------------------------------------------------------------------- /Multiprotocol/iface_nrf250k.h: -------------------------------------------------------------------------------- 1 | #ifndef _IFACE_NRF250K_H_ 2 | #define _IFACE_NRF250K_H_ 3 | 4 | #ifdef CC2500_INSTALLED 5 | #include "iface_cc2500.h" 6 | #endif 7 | #ifdef NRF24L01_INSTALLED 8 | #include "iface_nrf24l01.h" 9 | #endif 10 | #include "iface_xn297.h" 11 | 12 | #if defined (CC2500_INSTALLED) || defined (NRF24L01_INSTALLED) 13 | 14 | ////////////// 15 | // Functions 16 | #define NRF250K_Init() XN297_Configure(XN297_CRCEN, XN297_SCRAMBLED, XN297_250K) 17 | #define NRF250K_HoppingCalib(X) XN297_HoppingCalib(X) 18 | #define NRF250K_Hopping(X) XN297_Hopping(X) 19 | #define NRF250K_RFChannel(X) XN297_RFChannel(X) 20 | #define NRF250K_SetPower() XN297_SetPower() 21 | #define NRF250K_SetFreqOffset() XN297_SetFreqOffset() 22 | #define NRF250K_IsPacketSent() XN297_IsPacketSent() 23 | static void __attribute__((unused)) NRF250K_SetTXAddr(uint8_t*, uint8_t); 24 | static void __attribute__((unused)) NRF250K_WritePayload(uint8_t*, uint8_t); 25 | 26 | #endif 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /Multiprotocol/iface_rf2500.h: -------------------------------------------------------------------------------- 1 | #ifndef _IFACE_RF2500_H_ 2 | #define _IFACE_RF2500_H_ 3 | 4 | #include "iface_cyrf6936.h" 5 | 6 | //RF2500 7 | static void __attribute__((unused)) RF2500_Init(uint8_t, bool); 8 | static void __attribute__((unused)) RF2500_SetTXAddr(const uint8_t*); 9 | static void __attribute__((unused)) RF2500_BuildPayload(uint8_t*); 10 | static void __attribute__((unused)) RF2500_SendPayload(); 11 | #define RF2500_SetPower() CYRF_GFSK1M_SetPower() 12 | #define RF2500_RFChannel(X) CYRF_ConfigRFChannel(X) 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /Multiprotocol/iface_sx1276.h: -------------------------------------------------------------------------------- 1 | /* 2 | This project is free software: you can redistribute it and/or modify 3 | it under the terms of the GNU General Public License as published by 4 | the Free Software Foundation, either version 3 of the License, or 5 | (at your option) any later version. 6 | 7 | Multiprotocol is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License 13 | along with Multiprotocol. If not, see . 14 | */ 15 | 16 | #ifndef _IFACE_SX1276_H_ 17 | #define _IFACE_SX1276_H_ 18 | 19 | enum 20 | { 21 | SX1276_00_FIFO = 0x00, 22 | SX1276_01_OPMODE = 0x01, 23 | SX1276_06_FRFMSB = 0x06, 24 | SX1276_09_PACONFIG = 0x09, 25 | SX1276_0B_OCP = 0x0B, 26 | SX1276_0C_LNA = 0x0C, 27 | SX1276_0D_FIFOADDRPTR = 0x0D, 28 | SX1276_0E_FIFOTXBASEADDR = 0x0E, 29 | SX1276_11_IRQFLAGSMASK = 0x11, 30 | SX1276_12_REGIRQFLAGS = 0x12, 31 | SX1276_13_REGRXNBBYTES = 0x13, 32 | SX1276_19_PACKETSNR = 0x19, 33 | SX1276_1A_PACKETRSSI = 0x1A, 34 | SX1276_1D_MODEMCONFIG1 = 0x1D, 35 | SX1276_1E_MODEMCONFIG2 = 0x1E, 36 | SX1276_20_PREAMBLEMSB = 0x20, 37 | SX1276_22_PAYLOAD_LENGTH = 0x22, 38 | SX1276_24_HOPPERIOD = 0x24, 39 | SX1276_26_MODEMCONFIG3 = 0x26, 40 | SX1276_31_DETECTOPTIMIZE = 0x31, 41 | SX1276_37_DETECTIONTHRESHOLD = 0x37, 42 | SX1276_40_DIOMAPPING1 = 0x40, 43 | SX1276_42_VERSION = 0x42, 44 | SX1276_4D_PADAC = 0x4D 45 | }; 46 | 47 | enum 48 | { 49 | SX1276_REGIRQFLAGS_CADDETECTED = 0, 50 | SX1276_REGIRQFLAGS_FHSSCHANGECHANNEL = 1, 51 | SX1276_REGIRQFLAGS_CADDONE = 2, 52 | SX1276_REGIRQFLAGS_TXDONE = 3, 53 | SX1276_REGIRQFLAGS_VALIDHEADER = 4, 54 | SX1276_REGIRQFLAGS_PAYLOADCRCERROR = 5, 55 | SX1276_REGIRQFLAGS_RXDONE = 6, 56 | SX1276_REGIRQFLAGS_RXTIMEOUT = 7, 57 | }; 58 | 59 | enum 60 | { 61 | SX1276_36_LORA_REGHIGHBWOPTIMIZE1 = 0x36, 62 | SX1276_3A_LORA_REGHIGHBWOPTIMIZE2 = 0x3A 63 | }; 64 | 65 | enum 66 | { 67 | SX1276_OPMODE_SLEEP = 0, 68 | SX1276_OPMODE_STDBY, 69 | SX1276_OPMODE_FSTX, 70 | SX1276_OPMODE_TX, 71 | SX1276_OPMODE_FSRX, 72 | SX1276_OPMODE_RXCONTINUOUS, 73 | SX1276_OPMODE_RXSINGLE, 74 | SX1276_OPMODE_CAD 75 | }; 76 | 77 | enum 78 | { 79 | SX1276_DETECT_OPTIMIZE_SF7_TO_SF12 = 0x03, 80 | SX1276_DETECT_OPTIMIZE_SF6 = 0x05 81 | }; 82 | 83 | enum 84 | { 85 | SX1276_MODEM_CONFIG1_BW_7_8KHZ = 0, 86 | SX1276_MODEM_CONFIG1_BW_10_4KHZ, 87 | SX1276_MODEM_CONFIG1_BW_15_6KHZ, 88 | SX1276_MODEM_CONFIG1_BW_20_8KHZ, 89 | SX1276_MODEM_CONFIG1_BW_31_25KHZ, 90 | SX1276_MODEM_CONFIG1_BW_41_7KHZ, 91 | SX1276_MODEM_CONFIG1_BW_62_5KHZ, 92 | SX1276_MODEM_CONFIG1_BW_125KHZ, 93 | SX1276_MODEM_CONFIG1_BW_250KHZ, 94 | SX1276_MODEM_CONFIG1_BW_500KHZ 95 | }; 96 | 97 | enum 98 | { 99 | SX1276_MODEM_CONFIG1_CODING_RATE_4_5 = 1, 100 | SX1276_MODEM_CONFIG1_CODING_RATE_4_6, 101 | SX1276_MODEM_CONFIG1_CODING_RATE_4_7, 102 | SX1276_MODEM_CONFIG1_CODING_RATE_4_8 103 | }; 104 | 105 | enum 106 | { 107 | SX1276_MODEM_DETECTION_THRESHOLD_SF7_TO_SF12 = 0x0A, 108 | SX1276_MODEM_DETECTION_THRESHOLD_SF6 = 0x0C, 109 | 110 | }; 111 | 112 | #endif 113 | -------------------------------------------------------------------------------- /Multiprotocol/iface_xn297.h: -------------------------------------------------------------------------------- 1 | #ifndef _IFACE_XN297_H_ 2 | #define _IFACE_XN297_H_ 3 | 4 | #if defined (CC2500_INSTALLED) 5 | #include "iface_cc2500.h" 6 | #endif 7 | #if defined (NRF24L01_INSTALLED) 8 | #include "iface_nrf24l01.h" 9 | #endif 10 | 11 | #if defined (CC2500_INSTALLED) || defined (NRF24L01_INSTALLED) 12 | 13 | ////////////////// 14 | // Configuration 15 | #define XN297_UNSCRAMBLED false 16 | #define XN297_SCRAMBLED true 17 | #define XN297_CRCDIS false 18 | #define XN297_CRCEN true 19 | #define XN297_1M false 20 | #define XN297_250K true 21 | #define XN297_NRF false 22 | #define XN297_CC2500 true 23 | 24 | ////////////// 25 | // Functions 26 | static bool __attribute__((unused)) XN297_Configure(bool, bool, bool, bool force_nrf=false); 27 | static void __attribute__((unused)) XN297_SetTXAddr(const uint8_t*, uint8_t); 28 | static void __attribute__((unused)) XN297_SetRXAddr(const uint8_t*, uint8_t); 29 | static void __attribute__((unused)) XN297_SetTxRxMode(enum TXRX_State); 30 | static void __attribute__((unused)) XN297_SendPayload(uint8_t*, uint8_t); 31 | static void __attribute__((unused)) XN297_ReSendPayload(); 32 | static void __attribute__((unused)) XN297_WritePayload(uint8_t*, uint8_t); 33 | static void __attribute__((unused)) XN297_WriteEnhancedPayload(uint8_t*, uint8_t, uint8_t); 34 | static bool __attribute__((unused)) XN297_IsRX(); 35 | static void __attribute__((unused)) XN297_ReceivePayload(uint8_t*, uint8_t); 36 | static bool __attribute__((unused)) XN297_ReadPayload(uint8_t*, uint8_t); 37 | static uint8_t __attribute__((unused)) XN297_ReadEnhancedPayload(uint8_t*, uint8_t); 38 | static void __attribute__((unused)) XN297_HoppingCalib(uint8_t); 39 | static void __attribute__((unused)) XN297_Hopping(uint8_t); 40 | static void __attribute__((unused)) XN297_RFChannel(uint8_t); 41 | static void __attribute__((unused)) XN297_SetPower(); 42 | static void __attribute__((unused)) XN297_SetFreqOffset(); 43 | static bool __attribute__((unused)) XN297_IsPacketSent(); 44 | 45 | #endif 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /PCB v2.3d/Multipro-txV2-3d.pro: -------------------------------------------------------------------------------- 1 | update=04/02/2016 18:14:57 2 | last_client=pcbnew 3 | [pcbnew] 4 | version=1 5 | LastNetListRead=Multipro-txV2-3d.net 6 | UseCmpFile=1 7 | PadDrill=0.750000000000 8 | PadDrillOvalY=0.750000000000 9 | PadSizeH=1.250000000000 10 | PadSizeV=1.250000000000 11 | PcbTextSizeV=1.500000000000 12 | PcbTextSizeH=1.500000000000 13 | PcbTextThickness=0.300000000000 14 | ModuleTextSizeV=1.000000000000 15 | ModuleTextSizeH=1.000000000000 16 | ModuleTextSizeThickness=0.150000000000 17 | SolderMaskClearance=0.000000000000 18 | SolderMaskMinWidth=0.000000000000 19 | DrawSegmentWidth=0.400000000000 20 | BoardOutlineThickness=0.100000000000 21 | ModuleOutlineThickness=0.150000000000 22 | [pcbnew/libraries] 23 | LibDir=../Multipro-txV2 24 | LibName1=sockets 25 | LibName2=connect 26 | LibName3=discret 27 | LibName4=pin_array 28 | LibName5=divers 29 | LibName6=smd_capacitors 30 | LibName7=smd_resistors 31 | LibName8=smd_crystal&oscillator 32 | LibName9=smd_dil 33 | LibName10=smd_transistors 34 | LibName11=libcms 35 | LibName12=display 36 | LibName13=led 37 | LibName14=dip_sockets 38 | LibName15=pga_sockets 39 | LibName16=valves 40 | LibName17=Logo 41 | LibName18=LogoBsilk 42 | -------------------------------------------------------------------------------- /PCB v2.3d/PCB_v2.3d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/PCB v2.3d/PCB_v2.3d.jpg -------------------------------------------------------------------------------- /PCB v2.3d/Readme.txt: -------------------------------------------------------------------------------- 1 | These are KiCad files and you are free to do what you will with them. KiCad is a good, free, and fairly 2 | easy to learn. Build your own BOM and gerber files. 3 | 4 | This is a variant of the Multipro V2.3c circuit design. It is basicly the same as the 2.3c board as far 5 | as component placement goes. What's changed is the added resistors for the serial protocol and also 6 | the addition of solder jumpers on the bottom of the board for the various options to connect the TX, RX, and PPM 7 | lines through them. See below for more detail. 8 | 9 | The schematic has been updated to reflect the added components and jumper pads as well as cleaned 10 | up a little. As it sits now, the .net file loads without any complaints and DRC checks pass. 11 | 12 | The jumpers, and how they are used: 13 | 14 | 15 | There are four solder type jumpers on the bottom side of the board near the lower left corner when the 16 | bottom of the board is facing towards you. The silkscreen shows which jumper is which. These four jumpers 17 | enable the board to be configured in several ways as explaned below. 18 | 19 | (J-1) Use (PPM V/V) if the incoming PPM signal is at a higher voltage level, leave open if ~~5V. 20 | 21 | (J-2) Use (Jumper 2) to connect the incomming PPM signal to the RX pin on the processor 22 | 23 | (J-3) Short (TELEM) only if you have done a telemetry mod to your radio, leave open if not needed. When 24 | connected, pin 2 of the two pin header (P3) is also connected. 25 | 26 | (J-4) Use (MOD) only to connect the transmitter pin 2 to pin 1 of the two pin header (P3). 27 | 28 | The direction this project is going, it is most likely J-2 will be the only one needing to be shorted for 29 | the serial method of sending model protocols. 30 | 31 | 32 | These files are submitted without any guarentee of accureacy or suitability for any intended use. I am strictly 33 | an amature with time on his hands. Although I have done all I know to make it correct, things outside of my 34 | knowledge base are beyond my control. Do not use untested equipment around persons not familiar with the hazards 35 | of remote controlled vehicals. -------------------------------------------------------------------------------- /PCB v2.3d/Schematic_v2.3d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/PCB v2.3d/Schematic_v2.3d.jpg -------------------------------------------------------------------------------- /STM32 PCB/Flysky PL18/Casing/MPM-BF.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/STM32 PCB/Flysky PL18/Casing/MPM-BF.stl -------------------------------------------------------------------------------- /STM32 PCB/Flysky PL18/Casing/MPM-TF.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/STM32 PCB/Flysky PL18/Casing/MPM-TF.stl -------------------------------------------------------------------------------- /STM32 PCB/Flysky PL18/Casing/MPM.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/STM32 PCB/Flysky PL18/Casing/MPM.blend -------------------------------------------------------------------------------- /STM32 PCB/Flysky PL18/PL18_multiprotocol/Multi.pretty/DS-B01F-A-S2.kicad_mod: -------------------------------------------------------------------------------- 1 | (footprint "DS-B01F-A-S2" (version 20211014) (generator pcbnew) 2 | (layer "F.Cu") 3 | (tedit 59FED5CC) 4 | (descr "Through hole straight pin header, 1x05, 2.54mm pitch, single row") 5 | (tags "Through hole pin header THT 1x05 2.54mm single row") 6 | (attr through_hole) 7 | (fp_text reference "REF**" (at -0.25 -4.75) (layer "F.SilkS") 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | (tstamp d518c7db-9a4d-4905-902c-7b6d95f659cb) 10 | ) 11 | (fp_text value "DS-B01F-A-S2" (at 0 12.49) (layer "F.Fab") 12 | (effects (font (size 1 1) (thickness 0.15))) 13 | (tstamp 614f538e-5f2b-401d-b0ab-3346d3ff44e4) 14 | ) 15 | (fp_text user "${REFERENCE}" (at 0 5.08 90) (layer "F.Fab") 16 | (effects (font (size 1 1) (thickness 0.15))) 17 | (tstamp 9586cda1-48da-45c7-86f7-751657e7c25a) 18 | ) 19 | (fp_line (start -4.5 13.5) (end 1.25 13.5) (layer "F.SilkS") (width 0.12) (tstamp 05393a00-de07-40a8-8064-67c0a8a1e9ef)) 20 | (fp_line (start 1.25 -3.5) (end 1.25 13.5) (layer "F.SilkS") (width 0.12) (tstamp 09bf1fa9-9ec6-4d5c-bed9-fcd1fe76bd8e)) 21 | (fp_line (start -4.5 -3.5) (end 1.25 -3.5) (layer "F.SilkS") (width 0.12) (tstamp 2f1dd441-3cdc-4eed-9839-dc1fa6a931ba)) 22 | (fp_line (start -4.5 -3.5) (end -4.5 13.5) (layer "F.SilkS") (width 0.12) (tstamp 35bb1bb5-998b-4ce9-a139-e009425d4e40)) 23 | (fp_line (start -4.5 -3.5) (end -4.5 13.5) (layer "F.CrtYd") (width 0.05) (tstamp 346ee0d3-e13a-49f6-8f6c-eb860777d6c4)) 24 | (fp_line (start 1.25 13.5) (end 1.25 -3.5) (layer "F.CrtYd") (width 0.05) (tstamp 93808e54-10fb-4c6c-984b-3a91c36dbafa)) 25 | (fp_line (start 1.25 -3.5) (end -4.5 -3.5) (layer "F.CrtYd") (width 0.05) (tstamp d7a0888c-6be2-4a97-ac01-de345dcd2919)) 26 | (fp_line (start -4.5 13.5) (end 1.25 13.5) (layer "F.CrtYd") (width 0.05) (tstamp ee85719d-9f71-411e-a024-43105a50c262)) 27 | (fp_line (start -1.27 11.43) (end -1.27 -0.635) (layer "F.Fab") (width 0.1) (tstamp 085f4818-84f1-415f-823e-e6076d0e732d)) 28 | (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer "F.Fab") (width 0.1) (tstamp 602c4495-9f5f-4ae3-9800-df18526e3c50)) 29 | (fp_line (start 1.27 -1.27) (end 1.27 11.43) (layer "F.Fab") (width 0.1) (tstamp 73eb4832-b804-463c-ae2b-563755d89978)) 30 | (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer "F.Fab") (width 0.1) (tstamp aed66e63-a453-441e-94eb-3442ef294c72)) 31 | (fp_line (start 1.27 11.43) (end -1.27 11.43) (layer "F.Fab") (width 0.1) (tstamp dde86203-069d-47dc-8693-34fe614da099)) 32 | (pad "1" thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (tstamp 174ecd2f-6484-485c-a83d-71d6a1dc733a)) 33 | (pad "2" thru_hole oval (at 0 2.5) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (tstamp 997a59d1-7e2b-4400-b74b-3cb21ad33038)) 34 | (pad "3" thru_hole oval (at 0 5) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (tstamp 7aa5c04b-5bd3-4c72-bbaf-9ec87c5447e0)) 35 | (pad "4" thru_hole oval (at 0 7.5) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (tstamp 8a6c42bd-bf44-40be-9e58-41dc76d10644)) 36 | (pad "5" thru_hole oval (at 0 10) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (tstamp c1741286-ba0e-4f33-8f37-5fd51504bac5)) 37 | (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x05_P2.54mm_Vertical.wrl" 38 | (offset (xyz 0 0 0)) 39 | (scale (xyz 1 1 1)) 40 | (rotate (xyz 0 0 0)) 41 | ) 42 | ) 43 | -------------------------------------------------------------------------------- /STM32 PCB/Flysky PL18/PL18_multiprotocol/PL18_multiprotocol.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 0, 4 | "active_layer_preset": "All Layers", 5 | "auto_track_width": false, 6 | "hidden_nets": [], 7 | "high_contrast_mode": 0, 8 | "net_color_mode": 1, 9 | "opacity": { 10 | "pads": 1.0, 11 | "tracks": 1.0, 12 | "vias": 1.0, 13 | "zones": 0.6 14 | }, 15 | "ratsnest_display_mode": 0, 16 | "selection_filter": { 17 | "dimensions": true, 18 | "footprints": true, 19 | "graphics": true, 20 | "keepouts": true, 21 | "lockedItems": true, 22 | "otherItems": true, 23 | "pads": true, 24 | "text": true, 25 | "tracks": true, 26 | "vias": true, 27 | "zones": true 28 | }, 29 | "visible_items": [ 30 | 0, 31 | 1, 32 | 2, 33 | 3, 34 | 4, 35 | 5, 36 | 8, 37 | 9, 38 | 10, 39 | 11, 40 | 12, 41 | 13, 42 | 14, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36 64 | ], 65 | "visible_layers": "fffffff_ffffffff", 66 | "zone_display_mode": 0 67 | }, 68 | "meta": { 69 | "filename": "PL18_multiprotocol.kicad_prl", 70 | "version": 3 71 | }, 72 | "project": { 73 | "files": [] 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /STM32 PCB/Flysky PL18/PL18_multiprotocol/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name "Multi")(type "KiCad")(uri "${KIPRJMOD}/Multi.pretty")(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /STM32 PCB/Flysky PL18/PL18_multiprotocol/sym-lib-table: -------------------------------------------------------------------------------- 1 | (sym_lib_table 2 | (lib (name "Multi")(type "KiCad")(uri "${KIPRJMOD}/Multi.kicad_sym")(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /STM32 PCB/Flysky PL18/README.md: -------------------------------------------------------------------------------- 1 | # MPM for Flysky PL18 2 | 3 | The PCB design is located in PL18_multiprotocol folder and is designed using KiCad 6.0. 4 | 5 | The casing is located in Casing folder and is designed using Blender 3.3.1. The model included 2 pieces, T is the top piece and B is the bottom pieces. These 2 pieces is cloned into TF and BF respectively to apply all modifiers and make manifold for 3D printing. I have included the stl files generated for simplity. 6 | -------------------------------------------------------------------------------- /STM32 PCB/Schematic_Multiprotocol_STM32_MB_v1.0_t.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/STM32 PCB/Schematic_Multiprotocol_STM32_MB_v1.0_t.jpg -------------------------------------------------------------------------------- /STM32 PCB/v0.1/Schematic_Multiprotocol_STM32_MB_v0.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/STM32 PCB/v0.1/Schematic_Multiprotocol_STM32_MB_v0.1.png -------------------------------------------------------------------------------- /buildroot/bin/build_release_avr_noboot: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | printf "\e[33;1mBuilding mm-avr-usbasp-aetr-A7105-inv-v$MULTI_VERSION.bin\e[0m\n"; 7 | opt_disable CHECK_FOR_BOOTLOADER; 8 | opt_disable $ALL_PROTOCOLS; 9 | opt_enable $A7105_PROTOCOLS; 10 | buildMulti; 11 | exitcode=$((exitcode+$?)); 12 | mv build/Multiprotocol.ino.bin ./binaries/mm-avr-usbasp-aetr-A7105-inv-v$MULTI_VERSION.bin; 13 | 14 | printf "\e[33;1mBuilding mm-avr-usbasp-aetr-CC2500-inv-v$MULTI_VERSION.bin\e[0m\n"; 15 | opt_disable $ALL_PROTOCOLS; 16 | opt_enable $CC2500_PROTOCOLS; 17 | opt_disable HITEC_CC2500_INO REDPINE_CC2500_INO OMP_CC2500_INO SKYARTEC_CC2500_INO SCANNER_CC2500_INO FRSKYL_CC2500_INO; 18 | buildMulti; 19 | exitcode=$((exitcode+$?)); 20 | mv build/Multiprotocol.ino.bin ./binaries/mm-avr-usbasp-aetr-CC2500-inv-v$MULTI_VERSION.bin; 21 | 22 | printf "\e[33;1mBuilding mm-avr-usbasp-aetr-CYRF6936-inv-v$MULTI_VERSION.bin\e[0m\n"; 23 | opt_disable $ALL_PROTOCOLS; 24 | opt_enable $CYRF6936_PROTOCOLS; 25 | opt_disable E01X_CYRF6936_INO LOSI_CYRF6936_INO 26 | buildMulti; 27 | exitcode=$((exitcode+$?)); 28 | mv build/Multiprotocol.ino.bin ./binaries/mm-avr-usbasp-aetr-CYRF6936-inv-v$MULTI_VERSION.bin; 29 | 30 | exit $exitcode; 31 | -------------------------------------------------------------------------------- /buildroot/bin/build_release_avr_optiboot: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | printf "\e[33;1mBuilding mm-avr-txflash-aetr-A7105-inv-v$MULTI_VERSION.bin\e[0m\n"; 7 | opt_enable CHECK_FOR_BOOTLOADER; 8 | opt_disable $ALL_PROTOCOLS; 9 | opt_enable $A7105_PROTOCOLS; 10 | buildMulti; 11 | exitcode=$((exitcode+$?)); 12 | mv build/Multiprotocol.ino.bin ./binaries/mm-avr-txflash-aetr-A7105-inv-v$MULTI_VERSION.bin; 13 | 14 | printf "\e[33;1mBuilding mm-avr-txflash-aetr-CC2500-inv-v$MULTI_VERSION.bin\e[0m\n"; 15 | opt_disable $ALL_PROTOCOLS; 16 | opt_enable $CC2500_PROTOCOLS; 17 | opt_disable HITEC_CC2500_INO REDPINE_CC2500_INO OMP_CC2500_INO SKYARTEC_CC2500_INO SCANNER_CC2500_INO FRSKYL_CC2500_INO; 18 | buildMulti; 19 | exitcode=$((exitcode+$?)); 20 | mv build/Multiprotocol.ino.bin ./binaries/mm-avr-txflash-aetr-CC2500-inv-v$MULTI_VERSION.bin; 21 | 22 | printf "\e[33;1mBuilding mm-avr-txflash-aetr-CYRF6936-inv-v$MULTI_VERSION.bin\e[0m\n"; 23 | opt_disable $ALL_PROTOCOLS; 24 | opt_enable $CYRF6936_PROTOCOLS; 25 | opt_disable E01X_CYRF6936_INO LOSI_CYRF6936_INO 26 | buildMulti; 27 | exitcode=$((exitcode+$?)); 28 | mv build/Multiprotocol.ino.bin ./binaries/mm-avr-txflash-aetr-CYRF6936-inv-v$MULTI_VERSION.bin; 29 | 30 | exit $exitcode; 31 | -------------------------------------------------------------------------------- /buildroot/bin/build_release_orx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | printf "\e[33;1mBuilding mm-orangerx-aetr-green-inv-v$MULTI_VERSION.bin\e[0m\n"; 7 | opt_enable $ALL_PROTOCOLS; 8 | opt_disable ORANGE_TX_BLUE; 9 | buildMulti; 10 | exitcode=$((exitcode+$?)); 11 | mv build/Multiprotocol.ino.bin ./binaries/mm-orangerx-aetr-green-inv-v$MULTI_VERSION.bin; 12 | 13 | printf "\e[33;1mBuilding mm-orangerx-aetr-blue-inv-v$MULTI_VERSION.bin\e[0m\n"; 14 | opt_enable ORANGE_TX_BLUE; 15 | buildMulti; 16 | exitcode=$((exitcode+$?)); 17 | mv build/Multiprotocol.ino.bin ./binaries/mm-orangerx-aetr-blue-inv-v$MULTI_VERSION.bin; 18 | 19 | exit $exitcode; 20 | -------------------------------------------------------------------------------- /buildroot/bin/build_release_scripts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | printf "\e[33;1mPackaging ancilliary files for v$MULTI_VERSION\e[0m\n"; 7 | cp Multiprotocol/Multi.txt ./binaries/Multi.txt; 8 | 9 | mkdir -p SCRIPTS/TOOLS; 10 | cp -r Lua_scripts/* SCRIPTS/TOOLS/; 11 | find SCRIPTS/TOOLS -type f -name "*.md" -delete 12 | 13 | zip -q -r ./binaries/MultiLuaScripts.zip SCRIPTS/TOOLS/*; 14 | 15 | exit $exitcode; 16 | -------------------------------------------------------------------------------- /buildroot/bin/build_release_stm32f1_4in1_native_debug: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | printf "\e[33;1mBuilding mm-stm-xn297dump-usbdebug-v$MULTI_VERSION.bin\e[0m\n"; 7 | opt_disable $ALL_PROTOCOLS; 8 | opt_add XN297DUMP_NRF24L01_INO; 9 | buildMulti; 10 | exitcode=$((exitcode+$?)); 11 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-xn297dump-usbdebug-v$MULTI_VERSION.bin; 12 | 13 | exit $exitcode; 14 | -------------------------------------------------------------------------------- /buildroot/bin/build_release_stm32f1_4in1_no_debug: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | # Generic 4-in-1 AIR builds 7 | printf "\e[33;1mBuilding mm-stm-serial-aetr-air-v$MULTI_VERSION.bin\e[0m\n"; 8 | opt_add MULTI_AIR 9 | opt_disable ENABLE_PPM; 10 | buildMulti; 11 | exitcode=$((exitcode+$?)); 12 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-aetr-air-v$MULTI_VERSION.bin; 13 | 14 | printf "\e[33;1mBuilding mm-stm-serial-taer-air-v$MULTI_VERSION.bin\e[0m\n"; 15 | opt_replace AETR TAER; 16 | buildMulti; 17 | exitcode=$((exitcode+$?)); 18 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-taer-air-v$MULTI_VERSION.bin; 19 | 20 | printf "\e[33;1mBuilding mm-stm-serial-reta-air-v$MULTI_VERSION.bin\e[0m\n"; 21 | opt_replace TAER RETA; 22 | buildMulti; 23 | exitcode=$((exitcode+$?)); 24 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-reta-air-v$MULTI_VERSION.bin; 25 | 26 | # Generic 4-in-1 SURFACE builds 27 | printf "\e[33;1mBuilding mm-stm-serial-aetr-sfc-v$MULTI_VERSION.bin\e[0m\n"; 28 | opt_replace RETA AETR; 29 | opt_remove MULTI_AIR; 30 | opt_add MULTI_SURFACE; 31 | buildMulti; 32 | exitcode=$((exitcode+$?)); 33 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-aetr-sfc-v$MULTI_VERSION.bin; 34 | 35 | printf "\e[33;1mBuilding mm-stm-serial-taer-sfc-v$MULTI_VERSION.bin\e[0m\n"; 36 | opt_replace AETR TAER; 37 | buildMulti; 38 | exitcode=$((exitcode+$?)); 39 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-taer-sfc-v$MULTI_VERSION.bin; 40 | 41 | printf "\e[33;1mBuilding mm-stm-serial-reta-sfc-v$MULTI_VERSION.bin\e[0m\n"; 42 | opt_replace TAER RETA; 43 | buildMulti; 44 | exitcode=$((exitcode+$?)); 45 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-reta-sfc-v$MULTI_VERSION.bin; 46 | 47 | # Generic 4-in-1 LBT/EU builds 48 | printf "\e[33;1mBuilding mm-stm-serial-aetr-lbt-v$MULTI_VERSION.bin\e[0m\n"; 49 | opt_replace RETA AETR; 50 | opt_remove MULTI_SURFACE; 51 | opt_add MULTI_EU; 52 | buildMulti; 53 | exitcode=$((exitcode+$?)); 54 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-aetr-lbt-v$MULTI_VERSION.bin; 55 | 56 | printf "\e[33;1mBuilding mm-stm-serial-taer-lbt-v$MULTI_VERSION.bin\e[0m\n"; 57 | opt_replace AETR TAER; 58 | buildMulti; 59 | exitcode=$((exitcode+$?)); 60 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-taer-lbt-v$MULTI_VERSION.bin; 61 | 62 | printf "\e[33;1mBuilding mm-stm-serial-reta-lbt-v$MULTI_VERSION.bin\e[0m\n"; 63 | opt_replace TAER RETA; 64 | buildMulti; 65 | exitcode=$((exitcode+$?)); 66 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-serial-reta-lbt-v$MULTI_VERSION.bin; 67 | 68 | # 4-in-1 PPM builds 69 | printf "\e[33;1mBuilding mm-stm-ppm-aetr-v$MULTI_VERSION.bin\e[0m\n"; 70 | opt_add MULTI_AIR; 71 | opt_enable A7105_INSTALLED; 72 | opt_enable CYRF6936_INSTALLED; 73 | opt_enable NRF24L01_INSTALLED; 74 | opt_remove MULTI_EU; 75 | opt_enable ENABLE_PPM; 76 | opt_disable ENABLE_SERIAL; 77 | opt_replace RETA AETR; 78 | opt_disable MULTI_STATUS; 79 | opt_disable MULTI_TELEMETRY; 80 | opt_set NBR_BANKS 5; 81 | buildMulti; 82 | exitcode=$((exitcode+$?)); 83 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-ppm-aetr-v$MULTI_VERSION.bin; 84 | 85 | printf "\e[33;1mBuilding mm-stm-ppm-taer-v$MULTI_VERSION.bin\e[0m\n"; 86 | opt_replace AETR TAER; 87 | buildMulti; 88 | exitcode=$((exitcode+$?)); 89 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-ppm-taer-v$MULTI_VERSION.bin; 90 | 91 | printf "\e[33;1mBuilding mm-stm-ppm-reta-v$MULTI_VERSION.bin\e[0m\n"; 92 | opt_replace TAER RETA; 93 | buildMulti; 94 | exitcode=$((exitcode+$?)); 95 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-ppm-reta-v$MULTI_VERSION.bin; 96 | 97 | exit $exitcode; 98 | -------------------------------------------------------------------------------- /buildroot/bin/build_release_stm32f1_4in1_serial_debug: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | printf "\e[33;1mBuilding mm-stm-xn297dump-ftdidebug-v$MULTI_VERSION.bin\e[0m\n"; 7 | opt_disable $ALL_PROTOCOLS; 8 | opt_add XN297DUMP_NRF24L01_INO; 9 | buildMulti; 10 | exitcode=$((exitcode+$?)); 11 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-xn297dump-ftdidebug-v$MULTI_VERSION.bin; 12 | 13 | exit $exitcode; 14 | -------------------------------------------------------------------------------- /buildroot/bin/build_release_stm32f1_5in1: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | # DIY 5-in-1 AIR builds 7 | printf "\e[33;1mBuilding mm-stm-5in1-aetr-air-v$MULTI_VERSION.bin\e[0m\n"; 8 | opt_add MULTI_AIR; 9 | opt_disable ENABLE_PPM; 10 | opt_disable CFLIE_NRF24L01_INO 11 | opt_enable SX1276_INSTALLED; 12 | buildMulti; 13 | exitcode=$((exitcode+$?)); 14 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-5in1-aetr-air-v$MULTI_VERSION.bin; 15 | 16 | printf "\e[33;1mBuilding mm-stm-5in1-taer-air-v$MULTI_VERSION.bin\e[0m\n"; 17 | opt_replace AETR TAER; 18 | buildMulti; 19 | exitcode=$((exitcode+$?)); 20 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-5in1-taer-air-v$MULTI_VERSION.bin; 21 | 22 | printf "\e[33;1mBuilding mm-stm-5in1-reta-air-v$MULTI_VERSION.bin\e[0m\n"; 23 | opt_replace TAER RETA; 24 | buildMulti; 25 | exitcode=$((exitcode+$?)); 26 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-5in1-reta-air-v$MULTI_VERSION.bin; 27 | 28 | # DIY 5-in-1 SURFACE builds 29 | printf "\e[33;1mBuilding mm-stm-5in1-aetr-sfc-v$MULTI_VERSION.bin\e[0m\n"; 30 | opt_add MULTI_SURFACE; 31 | opt_remove MULTI_AIR; 32 | opt_enable CFLIE_NRF24L01_INO 33 | opt_replace RETA AETR; 34 | buildMulti; 35 | exitcode=$((exitcode+$?)); 36 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-5in1-aetr-sfc-v$MULTI_VERSION.bin; 37 | 38 | printf "\e[33;1mBuilding mm-stm-5in1-taer-sfc-v$MULTI_VERSION.bin\e[0m\n"; 39 | opt_replace AETR TAER; 40 | buildMulti; 41 | exitcode=$((exitcode+$?)); 42 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-5in1-taer-sfc-v$MULTI_VERSION.bin; 43 | 44 | printf "\e[33;1mBuilding mm-stm-5in1-reta-sfc-v$MULTI_VERSION.bin\e[0m\n"; 45 | opt_replace TAER RETA; 46 | buildMulti; 47 | exitcode=$((exitcode+$?)); 48 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-5in1-reta-sfc-v$MULTI_VERSION.bin; 49 | 50 | # DIY 5-in-1 LBT builds 51 | printf "\e[33;1mBuilding mm-stm-5in1-aetr-lbt-v$MULTI_VERSION.bin\e[0m\n"; 52 | opt_remove MULTI_SURFACE; 53 | opt_add MULTI_EU; 54 | opt_replace RETA AETR; 55 | buildMulti; 56 | exitcode=$((exitcode+$?)); 57 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-5in1-aetr-lbt-v$MULTI_VERSION.bin; 58 | 59 | printf "\e[33;1mBuilding mm-stm-5in1-taer-lbt-v$MULTI_VERSION.bin\e[0m\n"; 60 | opt_replace AETR TAER; 61 | buildMulti; 62 | exitcode=$((exitcode+$?)); 63 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-5in1-taer-lbt-v$MULTI_VERSION.bin; 64 | 65 | printf "\e[33;1mBuilding mm-stm-5in1-reta-lbt-v$MULTI_VERSION.bin\e[0m\n"; 66 | opt_replace TAER RETA; 67 | buildMulti; 68 | exitcode=$((exitcode+$?)); 69 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-5in1-reta-lbt-v$MULTI_VERSION.bin; 70 | 71 | exit $exitcode; 72 | -------------------------------------------------------------------------------- /buildroot/bin/build_release_stm32f1_cc2500_128k: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | # CC2500-only FCC builds 7 | printf "\e[33;1mBuilding mm-stm-cc2500-aetr-v$MULTI_VERSION.bin\e[0m\n"; 8 | opt_disable A7105_INSTALLED; 9 | opt_disable CYRF6936_INSTALLED; 10 | opt_disable NRF24L01_INSTALLED; 11 | opt_disable ENABLE_PPM; 12 | opt_disable INVERT_TELEMETRY; 13 | buildMulti; 14 | exitcode=$((exitcode+$?)); 15 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-aetr-v$MULTI_VERSION.bin; 16 | 17 | printf "\e[33;1mBuilding mm-stm-cc2500-taer-v$MULTI_VERSION.bin\e[0m\n"; 18 | opt_replace AETR TAER; 19 | buildMulti; 20 | exitcode=$((exitcode+$?)); 21 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-taer-v$MULTI_VERSION.bin; 22 | 23 | printf "\e[33;1mBuilding mm-stm-cc2500-reta-v$MULTI_VERSION.bin\e[0m\n"; 24 | opt_replace TAER RETA; 25 | buildMulti; 26 | exitcode=$((exitcode+$?)); 27 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-reta-v$MULTI_VERSION.bin; 28 | 29 | # CC2500-only LBT/EU builds 30 | printf "\e[33;1mBuilding mm-stm-cc2500-aetr-lbt-v$MULTI_VERSION.bin\e[0m\n"; 31 | opt_replace RETA AETR; 32 | opt_add MULTI_EU; 33 | buildMulti; 34 | exitcode=$((exitcode+$?)); 35 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-aetr-lbt-v$MULTI_VERSION.bin; 36 | 37 | printf "\e[33;1mBuilding mm-stm-cc2500-taer-lbt-v$MULTI_VERSION.bin\e[0m\n"; 38 | opt_replace AETR TAER; 39 | buildMulti; 40 | exitcode=$((exitcode+$?)); 41 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-taer-lbt-v$MULTI_VERSION.bin; 42 | 43 | printf "\e[33;1mBuilding mm-stm-cc2500-reta-lbt-v$MULTI_VERSION.bin\e[0m\n"; 44 | opt_replace TAER RETA; 45 | buildMulti; 46 | exitcode=$((exitcode+$?)); 47 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-reta-lbt-v$MULTI_VERSION.bin; 48 | 49 | exit $exitcode; 50 | -------------------------------------------------------------------------------- /buildroot/bin/build_release_stm32f1_cc2500_64k: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | # CC2500-only 64Kb FCC builds 7 | printf "\e[33;1mBuilding mm-stm-cc2500-64-aetr-v$MULTI_VERSION.bin\e[0m\n"; 8 | opt_disable SCANNER_CC2500_INO; 9 | opt_disable ENABLE_PPM; 10 | opt_disable A7105_INSTALLED; 11 | opt_disable CYRF6936_INSTALLED; 12 | opt_disable NRF24L01_INSTALLED; 13 | opt_disable INVERT_TELEMETRY; 14 | buildMulti; 15 | exitcode=$((exitcode+$?)); 16 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-64-aetr-v$MULTI_VERSION.bin; 17 | 18 | printf "\e[33;1mBuilding mm-stm-cc2500-64-taer-v$MULTI_VERSION.bin\e[0m\n"; 19 | opt_replace AETR TAER; 20 | buildMulti; 21 | exitcode=$((exitcode+$?)); 22 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-64-taer-v$MULTI_VERSION.bin; 23 | 24 | printf "\e[33;1mBuilding mm-stm-cc2500-64-reta-v$MULTI_VERSION.bin\e[0m\n"; 25 | opt_replace TAER RETA; 26 | buildMulti; 27 | exitcode=$((exitcode+$?)); 28 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-64-reta-v$MULTI_VERSION.bin; 29 | 30 | # CC2500-only 64Kb LBT/EU builds 31 | printf "\e[33;1mBuilding mm-stm-cc2500-64-aetr-lbt-v$MULTI_VERSION.bin\e[0m\n"; 32 | opt_replace RETA AETR; 33 | opt_add MULTI_EU; 34 | buildMulti; 35 | exitcode=$((exitcode+$?)); 36 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-64-aetr-lbt-v$MULTI_VERSION.bin; 37 | 38 | printf "\e[33;1mBuilding mm-stm-cc2500-64-taer-lbt-v$MULTI_VERSION.bin\e[0m\n"; 39 | opt_replace AETR TAER; 40 | buildMulti; 41 | exitcode=$((exitcode+$?)); 42 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-64-taer-lbt-v$MULTI_VERSION.bin; 43 | 44 | printf "\e[33;1mBuilding mm-stm-cc2500-64-reta-lbt-v$MULTI_VERSION.bin\e[0m\n"; 45 | opt_replace TAER RETA; 46 | buildMulti; 47 | exitcode=$((exitcode+$?)); 48 | mv build/Multiprotocol.ino.bin ./binaries/mm-stm-cc2500-64-reta-lbt-v$MULTI_VERSION.bin; 49 | 50 | exit $exitcode; 51 | -------------------------------------------------------------------------------- /buildroot/bin/build_release_stm32f1_t18int: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | # T18 5-in-1 AIR builds 7 | printf "\e[33;1mBuilding mm-t18int-aetr-air-v$MULTI_VERSION.bin\e[0m\n"; 8 | opt_add MULTI_AIR 9 | opt_disable ENABLE_PPM; 10 | opt_disable INVERT_TELEMETRY; 11 | buildMulti; 12 | exitcode=$((exitcode+$?)); 13 | mv build/Multiprotocol.ino.bin ./binaries/mm-t18int-aetr-air-v$MULTI_VERSION.bin; 14 | 15 | printf "\e[33;1mBuilding mm-t18int-taer-air-v$MULTI_VERSION.bin\e[0m\n"; 16 | opt_replace AETR TAER; 17 | buildMulti; 18 | exitcode=$((exitcode+$?)); 19 | mv build/Multiprotocol.ino.bin ./binaries/mm-t18int-taer-air-v$MULTI_VERSION.bin; 20 | 21 | printf "\e[33;1mBuilding mm-t18int-reta-air-v$MULTI_VERSION.bin\e[0m\n"; 22 | opt_replace TAER RETA; 23 | buildMulti; 24 | exitcode=$((exitcode+$?)); 25 | mv build/Multiprotocol.ino.bin ./binaries/mm-t18int-reta-air-v$MULTI_VERSION.bin; 26 | 27 | # T18 5-in-1 SURFACE builds 28 | printf "\e[33;1mBuilding mm-t18int-aetr-sfc-v$MULTI_VERSION.bin\e[0m\n"; 29 | opt_remove MULTI_AIR 30 | opt_add MULTI_SURFACE 31 | buildMulti; 32 | exitcode=$((exitcode+$?)); 33 | mv build/Multiprotocol.ino.bin ./binaries/mm-t18int-aetr-sfc-v$MULTI_VERSION.bin; 34 | 35 | printf "\e[33;1mBuilding mm-t18int-taer-sfc-v$MULTI_VERSION.bin\e[0m\n"; 36 | opt_replace AETR TAER; 37 | buildMulti; 38 | exitcode=$((exitcode+$?)); 39 | mv build/Multiprotocol.ino.bin ./binaries/mm-t18int-taer-sfc-v$MULTI_VERSION.bin; 40 | 41 | printf "\e[33;1mBuilding mm-t18int-reta-sfc-v$MULTI_VERSION.bin\e[0m\n"; 42 | opt_replace TAER RETA; 43 | buildMulti; 44 | exitcode=$((exitcode+$?)); 45 | mv build/Multiprotocol.ino.bin ./binaries/mm-t18int-reta-sfc-v$MULTI_VERSION.bin; 46 | 47 | # T18 5-in-1 LBT/EU builds 48 | printf "\e[33;1mBuilding mm-t18int-aetr-lbt-v$MULTI_VERSION.bin\e[0m\n"; 49 | opt_remove MULTI_SURFACE 50 | opt_add MULTI_EU 51 | buildMulti; 52 | exitcode=$((exitcode+$?)); 53 | mv build/Multiprotocol.ino.bin ./binaries/mm-t18int-aetr-lbt-v$MULTI_VERSION.bin; 54 | 55 | printf "\e[33;1mBuilding mm-t18int-taer-lbt-v$MULTI_VERSION.bin\e[0m\n"; 56 | opt_replace AETR TAER; 57 | buildMulti; 58 | exitcode=$((exitcode+$?)); 59 | mv build/Multiprotocol.ino.bin ./binaries/mm-t18int-taer-lbt-v$MULTI_VERSION.bin; 60 | 61 | printf "\e[33;1mBuilding mm-t18int-reta-lbt-v$MULTI_VERSION.bin\e[0m\n"; 62 | opt_replace TAER RETA; 63 | buildMulti; 64 | exitcode=$((exitcode+$?)); 65 | mv build/Multiprotocol.ino.bin ./binaries/mm-t18int-reta-lbt-v$MULTI_VERSION.bin; 66 | 67 | exit $exitcode; 68 | -------------------------------------------------------------------------------- /buildroot/bin/build_release_stm32f1_tlite: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ./buildroot/bin/buildFunctions; 4 | exitcode=0; 5 | 6 | # T-Lite 5-in-1 AIR builds 7 | printf "\e[33;1mBuilding mm-tlite5in1-aetr-air-v$MULTI_VERSION.bin\e[0m\n"; 8 | opt_add MULTI_AIR; 9 | opt_disable ENABLE_PPM; 10 | opt_disable INVERT_TELEMETRY; 11 | opt_enable "MULTI_5IN1_INTERNAL JP_TLite" 12 | buildMulti; 13 | exitcode=$((exitcode+$?)); 14 | mv build/Multiprotocol.ino.bin ./binaries/mm-tlite5in1-aetr-air-v$MULTI_VERSION.bin; 15 | 16 | printf "\e[33;1mBuilding mm-tlite5in1-taer-air-v$MULTI_VERSION.bin\e[0m\n"; 17 | opt_replace AETR TAER; 18 | buildMulti; 19 | exitcode=$((exitcode+$?)); 20 | mv build/Multiprotocol.ino.bin ./binaries/mm-tlite5in1-taer-air-v$MULTI_VERSION.bin; 21 | 22 | printf "\e[33;1mBuilding mm-tlite5in1-reta-air-v$MULTI_VERSION.bin\e[0m\n"; 23 | opt_replace TAER RETA; 24 | buildMulti; 25 | exitcode=$((exitcode+$?)); 26 | mv build/Multiprotocol.ino.bin ./binaries/mm-tlite5in1-reta-air-v$MULTI_VERSION.bin; 27 | 28 | # T-Lite 5-in-1 SURFACE builds 29 | printf "\e[33;1mBuilding mm-tlite5in1-aetr-sfc-v$MULTI_VERSION.bin\e[0m\n"; 30 | opt_add MULTI_SURFACE; 31 | opt_remove MULTI_AIR; 32 | opt_replace RETA AETR; 33 | buildMulti; 34 | exitcode=$((exitcode+$?)); 35 | mv build/Multiprotocol.ino.bin ./binaries/mm-tlite5in1-aetr-sfc-v$MULTI_VERSION.bin; 36 | 37 | printf "\e[33;1mBuilding mm-tlite5in1-taer-sfc-v$MULTI_VERSION.bin\e[0m\n"; 38 | opt_replace AETR TAER; 39 | buildMulti; 40 | exitcode=$((exitcode+$?)); 41 | mv build/Multiprotocol.ino.bin ./binaries/mm-tlite5in1-taer-sfc-v$MULTI_VERSION.bin; 42 | 43 | printf "\e[33;1mBuilding mm-tlite5in1-reta-sfc-v$MULTI_VERSION.bin\e[0m\n"; 44 | opt_replace TAER RETA; 45 | buildMulti; 46 | exitcode=$((exitcode+$?)); 47 | mv build/Multiprotocol.ino.bin ./binaries/mm-tlite5in1-reta-sfc-v$MULTI_VERSION.bin; 48 | 49 | # T-Lite 5-in-1 SURFACE builds 50 | printf "\e[33;1mBuilding mm-tlite5in1-aetr-lbt-v$MULTI_VERSION.bin\e[0m\n"; 51 | opt_remove MULTI_SURFACE; 52 | opt_add MULTI_EU; 53 | opt_replace RETA AETR; 54 | buildMulti; 55 | exitcode=$((exitcode+$?)); 56 | mv build/Multiprotocol.ino.bin ./binaries/mm-tlite5in1-aetr-lbt-v$MULTI_VERSION.bin; 57 | 58 | printf "\e[33;1mBuilding mm-tlite5in1-taer-lbt-v$MULTI_VERSION.bin\e[0m\n"; 59 | opt_replace AETR TAER; 60 | buildMulti; 61 | exitcode=$((exitcode+$?)); 62 | mv build/Multiprotocol.ino.bin ./binaries/mm-tlite5in1-taer-lbt-v$MULTI_VERSION.bin; 63 | 64 | printf "\e[33;1mBuilding mm-tlite5in1-reta-lbt-v$MULTI_VERSION.bin\e[0m\n"; 65 | opt_replace TAER RETA; 66 | buildMulti; 67 | exitcode=$((exitcode+$?)); 68 | mv build/Multiprotocol.ino.bin ./binaries/mm-tlite5in1-reta-lbt-v$MULTI_VERSION.bin; 69 | 70 | exit $exitcode; 71 | -------------------------------------------------------------------------------- /buildroot/bin/opt_add: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | eval "echo \"#define ${1} ${2}\" >>Multiprotocol/_Config.h" 4 | -------------------------------------------------------------------------------- /buildroot/bin/opt_disable: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SED=$(which gsed || which sed) 4 | 5 | for opt in "$@" ; do 6 | eval "${SED} -i 's/^\([[:blank:]]*\)\(#define[[:blank:]]*\b${opt}\b\)/\1\/\/\2/g' Multiprotocol/_Config.h" 7 | done 8 | -------------------------------------------------------------------------------- /buildroot/bin/opt_enable: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SED=$(which gsed || which sed) 4 | 5 | for opt in "$@" ; do 6 | eval "${SED} -i 's/\/\{2,\}[[:blank:]]*\(#define[[:blank:]]*\b${opt}\b\)/\1/g' Multiprotocol/_Config.h" 7 | done 8 | -------------------------------------------------------------------------------- /buildroot/bin/opt_remove: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SED=$(which gsed || which sed) 4 | 5 | eval "${SED} -i '/#define \b${1}/d' Multiprotocol/_Config.h" 6 | -------------------------------------------------------------------------------- /buildroot/bin/opt_replace: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SED=$(which gsed || which sed) 4 | 5 | eval "${SED} -i 's/#define \b${1}\b$/#define ${2}/g' Multiprotocol/_Config.h" 6 | -------------------------------------------------------------------------------- /buildroot/bin/opt_set: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SED=$(which gsed || which sed) 4 | 5 | eval "${SED} -i 's/\(#define \b${1}\b\).*$/\1 ${2}/g' Multiprotocol/_Config.h" 6 | -------------------------------------------------------------------------------- /docs/Advanced_ATmega_Serial_Uploader.md: -------------------------------------------------------------------------------- 1 | # ATmega Serial Uploader 2 | 3 | Mike Blandford adapted the optiboot bootloader for the 4-in-1 module to allow flashing of the module using a standard Arduino USB to serial adapter or FTDI adapter. No need to open the module case. Once set up is very easy to use: 4 | 5 | 1. plug the serial wires into the module connector, 6 | 2. To activate the bootloader, set the rotary switch to 0 7 | 3. hold the bind button down for 0.5s while connecting the USB end of the serial cable into the computer 8 | 4. Press upload on the Arduino IDE or issue an AVRdude command from the terminal. 9 | 10 | It uses a baudrate of 57600, so is the same as a Pro Mini. 11 | 12 | The Serial / FTDI connections on the Tx module are as follows: 13 | - Top Pin: Programmer Tx 14 | - 2nd Pin: 15 | - 3rd Pin: Programmer V+ 16 | - 4th Pin: Programmer Gnd 17 | - 5th Pin: Programmer Rx 18 | 19 | The bootloader starts up, waits half a second, then checks the rotary switch and the bind button. If they aren't as described above, then the normal application runs. 20 | 21 | While the bootloader is running, if it detects a communication problem, it configures the watchdog to reset in 16mS, then waits forever. 16mS later the board should reset, and then restart the bootloader, dropping back to the application half a second later. 22 | 23 | This bootloader is for reading and writing the flash only, the EEPROM is not supported, neither is reading/writing the fuses, but it only uses 512 bytes of flash. 24 | 25 | ## Install the bootloader 26 | To get the bootloader onto the ATmega you need to connect an flashing tool (like USBasp) to the 6-pin ISP connector on the board. 27 | Simply flash the .hex file to get the bootloader on the chip, and change the high fuse at the same time. 28 | 29 | The bootloader only uses 512 bytes of flash and is avaialble for download [here](http://www.rcgroups.com/forums/showatt.php?attachmentid=9291360&d=1472324155). The orginal rcgroups post is [here](http://www.rcgroups.com/forums/showpost.php?p=35584619&postcount=4867). 30 | 31 | The HIGH fuse needs to be set to 0xD6. (See the section on [Manually Setting the ATmega328 Fuses](Advanced_Manually_Setting_ATmega328_Fuses.md).) 32 | -------------------------------------------------------------------------------- /docs/Advanced_Bluetooth_Telemetry.md: -------------------------------------------------------------------------------- 1 | # Bluetooth Telemetry in PPM Mode 2 | 3 | ## Telemetry 4 | 5 | There are 4 protocols supporting telemetry: Hubsan, DSM, FrSkyD and FrSkyX. 6 | 7 | Hubsan displays the battery voltage and TX RSSI. 8 | 9 | DSM displays TX RSSI and full telemetry. 10 | 11 | FrSkyD displays full telemetry (A0, A1, RX RSSI, TX RSSI and Hub). 12 | 13 | FrSkyX displays full telemetry (A1, A2, RX RSSI, TX RSSI and Hub). 14 | 15 | ## If used in PPM mode 16 | 17 | Telemetry is available as a serial output on the TX pin of the Atmega328p using the FrSky hub format for Hubsan, FrSkyD, FrSkyX and DSM format for DSM2/X. The serial paramets depends on the protocol: 18 | 19 | Protocol|Serial Parameters 20 | --------|----------------- 21 | Hubsan|9600bps 8n1 22 | FrSkyD|9600bps 8n1 23 | FrSkyX|57,600bps 8n1 24 | DSM2/X|125,000bps 8n1 25 | 26 | The serial stream is also available on pin 5 of the Module connector (pins numbered from top to bottom) on the [4-in-1 module](Module_BG_4-in-1.md) and the [V2.3d modules](Module_Build_yourself_PCB.md) provided the Tx jumper has been soldered. See the linked module documentation for what this means. 27 | 28 | 29 | You can connect it to your TX if it is telemetry enabled or use a bluetooth adapter (HC05/HC06) along with an app on your phone/tablet ([app example](https://play.google.com/store/apps/details?id=biz.onomato.frskydash&hl=fr)) to display telemetry information and setup alerts. 30 | 31 | 32 | -------------------------------------------------------------------------------- /docs/Advanced_Debug.md: -------------------------------------------------------------------------------- 1 | # Enable the STM32 module serial debug feature 2 | 3 | To enable serial debug on your module you must know how to buid the firmware from the source code available on this GitHub. To do so follow this page: [Compiling and programming the STM32 module](Compiling_STM32.md). 4 | 5 | Procedure: 6 | 1. Upload the debug firmware to the module: 7 | 8 | 9 | iRangeX+, Banggood and old Jumper 4in1 modules|Recent Jumper 4in1 modules with built-in CP2102|FTDI 10 | ----------------------------------------------|-----------------------------------------------|---- 11 | Use the Debug Option: "Native USB Debugging"|Use the Debug Option: "Serial/FTDI Debugging"|Use the Debug Option: "Serial/FTDI Debugging" 12 | Do not disconnect the USB cable. In case you have to do it, you have to connect the module, close and reopen the Serial Monitor to get the module working otherwise the status LED will do a [Fast double blink](Troubleshooting.md).|Do not disconnect the USB cable. In case you have to do it, you have to power the TX first, then connect the USB cable to the module and relaunch the Serial monitor.|No restrictions apart from relaunching the Serial monitor if you disconnect the FTDI from the PC. 13 | 14 | 2. Power on the TX 15 | 1. Open in the Arduino IDE the Serial Monitor: Tools->Serial Monitor or Ctrl+Shift+M
16 | 1. Make sure the settings at the bottom of the Serial Monitor window are the same as the picture above especially the baud rate set to 115200 baud 17 | 1. The Serial Monitor window should show the module booting, selection of a different protocol and more depending on the protocol currently loaded
18 | 1. At this stage you can test whatever is needed or have been instructed to do. You can easily select text in the window to copy and paste it on the forum or in a text file. 19 | 1. **Important: to use your module normally and before flying you must reupload the firmware as you usually do with the Debug Option set to "None"** 20 | -------------------------------------------------------------------------------- /docs/Advanced_Topics.md: -------------------------------------------------------------------------------- 1 | # Advanced Topics 2 | Warning: the topics on this page are not for the fainthearted. It is strongly recommended that you have some experience in getting up and runnning with your module before you dive in there. On the other hand what is described on this page are some very useful options that could greatly increase the value and the enjoyment of your Multiprotocol module. 3 | 4 | # Enable STM32 module serial debug 5 | This document describes how to enable serial debug for STM32 MULTI-modules. This can be useful in case of issues with a protocol or to reverse a protocol based on the XN297L RF component. See the [MULTI-Module Serial Debug](Advanced_Debug.md) page for more details. 6 | 7 | # XN297L dump feature 8 | This document describes how to dump packets sent from a TX using a XN297L RF compatible component over the air on a STM32 MULTI-modules. This can be useful to get details on a protocol or even fully reverse a protocol as used in many remote controls lately. See the [MULTI-Module XN297L Dump](Advanced_XN297Ldump.md) page for more details. 9 | 10 | # EEPROM Backup and Restore 11 | This document describes how to back up and restore the EEPROM for both Atmega328p and STM32 MULTI-modules. This can be useful if cloning a module, or to preserve settings. See the [MULTI-Module EEPROM](EEPROM.md) page for more details. 12 | 13 | # Telemetry in PPM mode 14 | It is possible to access the telemetry stream coming from the receiver through the MULTI-module. This document describes a simple bluetooth module to stream telemetry information to a mobile device like an Android smartphone or tablet. The method may be generalized to feed telemetry to the transmitter if the transmitter has the capabilities to process the information. This is very useful with modules used in the PPM mode with transmitters that do not support telemetry. See the [Advanced Bluetooth Telemetry](Advanced_Bluetooth_Telemetry.md) page for more details. 15 | 16 | # Manually setting fuses on ATmega328 17 | This document describes a relatively simple process to set the fuses on ATmega328. See the [Advanced Manually Setting ATmega328 Fuses](Advanced_Manually_Setting_ATmega328_Fuses.md) page for more details. 18 | -------------------------------------------------------------------------------- /docs/Advanced_XN297Ldump.md: -------------------------------------------------------------------------------- 1 | # XN297L dump feature 2 | 3 | To get the XN297L dump feature working on your module you must know: 4 | 1. How to buid the firmware from the source code available on this GitHub. To do so follow this page: [Compiling and programming the STM32 module](Compiling_STM32.md). 5 | 1. How to enable serial debug [MULTI-Module Serial Debug](Advanced_Debug.md). 6 | 7 | Procedure to use the XN297L dump feature: 8 | 1. Start the Multi module in serial debug mode with the Arduion IDE Serial Monitor open
9 | 1. Select the protocol XN297DP, 63 or "Custom 63" to enable the XN297L Dump protocol 10 | 1. This protocol parameters are: 11 | * sub_protocol or type or the second number after "Custom 63" is used to set the transmission speed: 0=250Kbps, 1=1Mbps, 2=2Mbps and 3=Auto. 12 | * Auto is the recommended mode since it gives many information like channels, timing, order as well as finding bytes meaning 13 | * RX_num or Receiver number sets the address length 3, 4 or 5 bytes. Any other value will default to an address length of 5 bytes. 14 | * option sets the RF channel number used to receive packets between 0..84 . A value of -1 will automatically scan all channels one by one. Any other value will default to the RF channel 0. 15 | 16 | Examples: 17 | TBC 18 | -------------------------------------------------------------------------------- /docs/BOM_DIY_ATmega.md: -------------------------------------------------------------------------------- 1 | # Bill of Materials DIY ATmega Module 2 | 3 | Here is the bill of materials for the ATmega328 version of the DIY MPTM. 4 | 5 | If you are looking for the BOM for the DIY STM32 version click [here](BOM_DIY_STM32%20&%20Schematic.md). 6 | 7 | Digikey may not be your preferred supplier, but you should find enough information on their page to cross reference parts. 8 | 9 | ## BOM DIY ATmega PCB - V2.3d 10 | This BOM is for the board that looks like this - check carefully: 11 | 12 | 13 | 14 | Qty|Part|Description|Value|Package|Digikey Part Number 15 | ---|----|-----------|-----|-------|------------------- 16 | 2|C4 C5|Ceramic Cap|18pF|0603|[445-1272-1-ND](http://www.digikey.com/product-detail/en/tdk-corporation/C1608C0G1H180J080AA/445-1272-1-ND/567674) 17 | 2|C2 C7|Ceramic Cap|0.1uF|0603|[45-1316-1-ND](http://www.digikey.com/product-detail/en/tdk-corporation/C1608X7R1E104K080AA/445-1316-1-ND/567697) 18 | 3|C1 C3 C6|Cap Tantal|22uF/16V|1206|[478-8254-1-ND](https://www.digikey.com/product-detail/en/avx-corporation/F931C226MAA/478-8254-1-ND/4005702) 19 | 2|LED|Red/Green Led|LED3mm||| 20 | 1|IC1|ATmega328P|||[ATMEGA328P-AURCT-ND](http://www.digikey.com/product-detail/en/atmel/ATMEGA328P-AUR/ATMEGA328P-AURCT-ND/3789455) 21 | 1|JP1 JP2|Pin header|1x3||[S1011EC-40-ND](https://www.digikey.com/product-detail/en/sullins-connector-solutions/PRPC040SAAN-RC/S1011EC-40-ND/2775214) 22 | 1|U4 U6|Pin header|1x10||[S1011EC-40-ND](https://www.digikey.com/product-detail/en/sullins-connector-solutions/PRPC040SAAN-RC/S1011EC-40-ND/2775214) 23 | 1|P1|ISP|2x3||[3M9459-ND](http://www.digikey.com/product-search/en?keywords=3M%20961206-6404-AR) 24 | 1|P2|Receptacle|5-pin||[WM14512-ND](http://www.digikey.com/product-search/en?keywords=Molex%2C%20LLC%200022142054) 25 | 1|R1|Resistor|10k|0603|[P10KGCT-ND](http://www.digikey.com/product-search/en?keywords=P10KGCT-ND) 26 | 2|R2 R5 R7|Resistor|2.2K|0603|[P2.2KGCT-ND](http://www.digikey.com/product-search/en?keywords=P2.2KGCT-ND) 27 | 2|R3 R4 R6|Resistor|1K|0603|[P1.0KGCT-ND](http://www.digikey.com/product-search/en?keywords=P1.0KGCT-ND) 28 | 1|R8|Resistor|470|0603|[P470GCT-ND](https://www.digikey.com/products/en?keywords=P470GCT-ND) 29 | 1|SW1|Hex Switch||4-DIP|[FR01KR16P-W-S-ND](https://www.digikey.com/product-detail/en/nkk-switches/FR01KR16P-W-S/FR01KR16P-W-S-ND/2104098) 30 | 1|Sw2|Momentary Switch||6mm|[ 450-1643-ND](https://www.digikey.com/product-detail/en/te-connectivity-alcoswitch-switches/2-1825910-7/450-1642-ND/1632528) 31 | 1|SW3|Momentary Switch||6mm|[CKN9104CT-ND](http://www.digikey.com/product-search/en?keywords=CKN9104CT-ND) 32 | 1|U1|Voltage reg 5V|AMS1117-50|SOT223|[LM1117MP-5.0/NOPBCT-ND](https://www.digikey.com/product-detail/en/texas-instruments/LM1117MP-5.0-NOPB/LM1117MP-5.0-NOPBCT-ND/363589) 33 | 1|U2|Voltage reg 3.3V|AMS1117-33|SOT223|[LM1117MPX-3.3/NOPBCT-ND](https://www.digikey.com/product-detail/en/texas-instruments/LM1117MPX-3.3-NOPB/LM1117MPX-3.3-NOPBCT-ND/1010516) 34 | 1|X1|16 MHz Crystal|16MHz||[535-10267-1-ND](http://www.digikey.com/product-search/en?keywords=535-10267-1-ND) 35 | 1||2.4GHz Antenna|||[553-1309-ND](http://www.digikey.com/product-search/en?keywords=553-1309-ND) 36 | -------------------------------------------------------------------------------- /docs/Bind_Timing.md: -------------------------------------------------------------------------------- 1 | # Getting your Bind timing right. 2 | On many consumer models it it important for the Tx to send a bind signal in a narrow window once the model has powered up. 3 | 4 | If the bind signal is not recieved during this window, the bind sequence times out. Try this: 5 | 6 | 1. power the transmitter up with the throttle stick high. This will trigger the warning window on the transmitter and put a hold on the transmitter bind process. 7 | 1. turn on the model 8 | 1. while holding the bind button (if in PPM mode), at the right moment bring the throttle down to instantly bring the transmitter into bind mode. 9 | 10 | If you are using Serial Mode it is best to check the Autobind box in the Model Settings menu. This will automatically initiate a bind sequence as soon as the Tx module powers up (Note: the Tx module only powers up when the transmitter passes the Switch/Throttle Warning page). 11 | -------------------------------------------------------------------------------- /docs/CPPM_HW_Mod.md: -------------------------------------------------------------------------------- 1 | # CPPM Multi module hardware modification 2 | 3 | By default Multi uses the telemetry line to send the received channels using a RX protocol (FrSky, DSM, AFHDS2A, Bayang) to the radio. 4 | But this does not work on FrSky radios since the telemetry lines of the internal and external modules are shared. 5 | On a STM32 module and with a simple hardware modification, you can go around this hardware limitation by using CPPM to send the trainer information to the radio. 6 | 7 | There are 2 ways to connect the module CPPM trainer signal available on the STM32 USART1.TX pin (BOOT0 programming TX pin) to the radio: 8 | 1. Use the trainer jack input which is supported by all radios. 9 | 1. Use the heart beat module bay pin 2 which is currently supported by erskyTX but not yet by OpenTX. FrSky ACCESS and X10/X12 radios do not support this mod. 10 | 11 | For the hardware modification you need: 12 | 1. 1K resistor 13 | 1. Wire 14 | 1. Shrink tube to isolate the resistor 15 | 1. For an external trainer, a 3.5mm mono jack plug 16 | 1. Soldering iron and solder 17 | 18 | ## Trainer jack 19 | 20 | ### Here is the modification on a Banggood 4-in-1 or an iRangeX IRX4 / IRX4+: 21 | 22 | ![Image](/docs/images/CPPM_BG_IRX4_Jack.jpg) 23 | 24 | ### Here is the modification on a Jumper 4-in-1: 25 | 26 | ![Image](/docs/images/CPPM_JP4IN1_Jack.jpg) 27 | 28 | ## Heart beat within the module bay 29 | 30 | ### Here is the modification on a Banggood 4-in-1 or an iRangeX IRX4 / IRX4+: 31 | 32 | ![Image](/docs/images/CPPM_BG_IRX4_Mark.jpg) 33 | ![Image](/docs/images/CPPM_BG_IRX4_Soldered.jpg) 34 | 35 | ### Here is the modification on a Jumper 4-in-1: 36 | 37 | ![Image](/docs/images/CPPM_JP4IN1_Mark.jpg) 38 | ![Image](/docs/images/CPPM_JP4IN1_Soldered.jpg) 39 | ![Image](/docs/images/CPPM_JP4IN1_Soldered2.jpg) 40 | -------------------------------------------------------------------------------- /docs/DIY Multiprotocol Module Overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/DIY Multiprotocol Module Overview.png -------------------------------------------------------------------------------- /docs/Documentation_To_Do_List.md: -------------------------------------------------------------------------------- 1 | # Documentation ToDos 2 | - [ ] Documentation on all the FlySky boards: (MikeB?) 3 | - SKY board erSky9x 4 | - AR9X board erSky9x 5 | - 9Xtreme board erSky9x 6 | - AR9X UNI board 7 | - [ ] Add to the troubleshooting page 8 | - [ ] Add how to do custom protocol setup on er9x and OpenTx 9 | - [ ] Document the OrangeRx Transmitter module (Mikeb?) 10 | - [ ] enabling Serial on the DIY PCB page 11 | - [ ] lots of pictures mentioned between the {} markers 12 | - [ ] Someone to add the Build the board from scratch if it is still relevant 13 | - [ ] Move to atmega specific and add ftdi to stm32 AVR ISP programmer like the popular USBASP programming dongle that is 3.3V safe - available from many sellers on ebay. There are reports that some of the cheap programmers are not safe to use with 3.3V units (like this unit). Look for USBAsp programmers with the “LC Technologies” label. {Pascal to confirm these reports are true} Also, you will need a 10-pin to 6-pin connector to connect the USBASP to the board. 14 | -------------------------------------------------------------------------------- /docs/Module_Build_From_Scratch.md: -------------------------------------------------------------------------------- 1 | # Build from stratch 2 | 3 | If you can help to fully document this page, or just add additional detail please let us know on the rcgroups [forum](http://www.rcgroups.com/forums/showthread.php?t=2165676). 4 | 5 | ## Bill of materials 6 | If this is the option you are following, then you must have a pretty good idea of what you are doing. Check the BOM for the DIY PCB version of the hardware as a starting point. You can find the link [here](Module_Build_yourself_PCB.md). 7 | 8 | The Arduino Pro-Mini is available many places online. Check Sparkfun (the original developers of the Pro-Mini) page [here](https://www.sparkfun.com/products/11113) 9 | 10 | A module case that fits your receiver like the one [here](https://www.xtremepowersystems.net/proddetail.php?prod=XPS-J1CASE) 11 | 12 | or you can 3D print your own from a selection on Thingiverse ([Example 1](http://www.thingiverse.com/thing:1852868) [Example 2](http://www.thingiverse.com/thing:1661833)). 13 | [ ](http://www.thingiverse.com/thing:1852868) 14 | For 9XR/9XR Pro, a new 3D printed module is available which makes use of the built in antenna in the handle. This means nothing is getting out of the radio back. You can find all details of this module case on [Thingiverse](http://www.thingiverse.com/thing:2050717). 15 | 16 | 17 | ## Reference Schematic 18 | Here is the schematic you can use to troubleshoot the module 19 | 20 | 21 | ## Compiling and programming 22 | Follow the instruction on the [Compiling and programming page](Compiling.md) 23 | -------------------------------------------------------------------------------- /docs/Module_OrangeRx.md: -------------------------------------------------------------------------------- 1 | # OrangeRx Transmitter module 2 | 3 | The OrangeRx transmitter module uses an Atmel XMega MCU. This requires a PDI programmer to flash firmware, the USBASP programmers do not work. 4 | 5 | If you do not have access to a PDI programmer, Mike explains how you can setup your erSky9x board and program the Xmega through your Tx module port. 6 | 7 | See the openrcforums page [here](http://openrcforums.com/forum/viewtopic.php?f=40&t=8753) 8 | 9 | -------------------------------------------------------------------------------- /docs/Tx-NewTrasmitter.md: -------------------------------------------------------------------------------- 1 | # Transmitter Setup 2 | Describe the transmitters this applies to. 3 | 4 | Describe the firmware required for the transmitters. The transmitters covered here are: 5 | 1. [tx1](###) 6 | 1. [tx2](###) 7 | 8 | Does it work in PPM and/or Serial mode? 9 | 10 | ## PPM Mode 11 | Please refer to the [PPM Setup](PPM_Setup.md) page. 12 | 13 | 14 | ##Serial mode 15 | ###Enabling Serial Mode 16 | To operate in serial mode, you need one of these firmwares: 17 | 1. OpenTx supporting the DIY Multiprotocol mdule (2.18 Multi or 2.2) 18 | 1. erSky9x 19 | 20 | Check and upload a supported firmware. The latest available version at time of writing are: 21 | - OpenTx 2.1.8 Multi and the hex files are available [here](http://plaisthos.de/opentx/) 22 | - erSky9x Revision 218 and the hex files are available [here](http://www.er9x.com). 23 | 24 | Tutorials for uploading new firmware using the SD Card are available [here](http://www.dronetrest.com/t/how-to-upgrade-firmware-for-frsky-taranis-x9d/959) or the CompanionTx software (recommended) are available [here](http://open-txu.org/home/undergraduate-courses/fund-of-opentx/part-2-flashing-opentx/). 25 | 26 | **Note: in the tutorials substitute the shown firmwares with the fimware donwloaded from the links above.** 27 | 28 | First confirm that the DIY Multiprotocol module has the required physical connections between the pins on the back of the Tx and the ATMega328 microprocessor. This may require some soldering and depends on which version of the DIY Multiprotocol module you have. Check out this [Enabling Your Module for Serial] page for details. 29 | 30 | Plug in your DIY Multiprotocol module into the Taranis module bay. If you have a rotary protocol selection switch, turn the switch to position 0 to put the unit into Serial mode. Ensure throttle is down and all switches are in the start position and power up the Taranis. The red LED on the DIY Multiprotocol module should be flashing with a period of about 1s indicating that it has not established a valid serial link with the Tx. This is expected as we have not set up the Tx yet. 31 | 32 | Create a new model (make sure channel order is AETR) and on the first Model Settings page scroll down to disable the internal RF and enable the external RF by selecting MULTI as the external RF. Your Taranis settings should look like this: {insert picture of Taranis screen showing external RF settings} 33 | 34 | The Red LED on the DIY Multiprotocol module should briefly flash and then go off. This confirms that the DIY Multiprotocol module has established serial communication with the Tx. If the red LED on the module continues to flash at a period of about 1s then it signals that serial communication has not been established. Check your settings under the model menu as described above and check that the protocol selection switch on the module is at 0 (zero). If there is still no communication, power down and power up the Tx. Finally check that you have correctly enabled your module for serial as described here [Enabling Your Module for Serial] 35 | ###Protocol Selection in Serial mode 36 | To select the protocol, scroll through the available options under the Model Settings menu. Depending on which protocol you have selected you may be required to select a sup-protocol and options. For example, the DSM protocol has two sub-protocols DSM2 and DSMX. Each of these sub-protocols have options that specify the number of channels and the packet frame rate. 37 | 38 | The following picture shows DSM – DSMX – Option 6 (6 channels and 11ms frame rate). Check out the [Available Protocols] page for detailed information and suggestions regarding the sub-protocols and options. 39 | ###Binding in Serial mode 40 | 1. Switch on the model or put the receiver into bind mode 41 | 1. On the transmitter go to the Model Settings menu and scroll down to the [Bind] menu option. 42 | 43 | 44 | -------------------------------------------------------------------------------- /docs/erase.hex: -------------------------------------------------------------------------------- 1 | :20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 2 | :20002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 3 | :20004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 4 | :20006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 5 | :20008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 6 | :2000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 7 | :2000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 8 | :2000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 9 | :20010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 10 | :20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF 11 | :20014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF 12 | :20016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F 13 | :20018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F 14 | :2001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F 15 | :2001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F 16 | :2001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F 17 | :20020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE 18 | :20022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE 19 | :20024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE 20 | :20026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E 21 | :20028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E 22 | :2002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E 23 | :2002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E 24 | :2002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E 25 | :20030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD 26 | :20032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD 27 | :20034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD 28 | :20036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D 29 | :20038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D 30 | :2003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D 31 | :2003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D 32 | :2003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D 33 | :00000001FF 34 | -------------------------------------------------------------------------------- /docs/images/10pin_2_6pin.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/10pin_2_6pin.JPG -------------------------------------------------------------------------------- /docs/images/4-in-1_Module_BG.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/4-in-1_Module_BG.jpeg -------------------------------------------------------------------------------- /docs/images/4-in-1_Module_BG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/4-in-1_Module_BG.png -------------------------------------------------------------------------------- /docs/images/4-in-1_Module_Case_BG.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/4-in-1_Module_Case_BG.jpeg -------------------------------------------------------------------------------- /docs/images/4-in-1_Module_PPM_Controls.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/4-in-1_Module_PPM_Controls.jpg -------------------------------------------------------------------------------- /docs/images/4-pin-1mm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/4-pin-1mm.jpg -------------------------------------------------------------------------------- /docs/images/4-pin-header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/4-pin-header.jpg -------------------------------------------------------------------------------- /docs/images/5-pin-125mm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/5-pin-125mm.jpg -------------------------------------------------------------------------------- /docs/images/6pin_header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/6pin_header.jpg -------------------------------------------------------------------------------- /docs/images/9XR_module.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/9XR_module.jpg -------------------------------------------------------------------------------- /docs/images/9XR_module_connector.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/9XR_module_connector.jpg -------------------------------------------------------------------------------- /docs/images/9xr-case-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/9xr-case-1.jpg -------------------------------------------------------------------------------- /docs/images/9xr-case-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/9xr-case-2.jpg -------------------------------------------------------------------------------- /docs/images/9xr-case-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/9xr-case-3.jpg -------------------------------------------------------------------------------- /docs/images/AVR8BurnOMat-fuses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/AVR8BurnOMat-fuses.png -------------------------------------------------------------------------------- /docs/images/AVR8BurnOMat-main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/AVR8BurnOMat-main.png -------------------------------------------------------------------------------- /docs/images/AVR8BurnOMat-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/AVR8BurnOMat-settings.png -------------------------------------------------------------------------------- /docs/images/Arduino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Arduino.png -------------------------------------------------------------------------------- /docs/images/Arduino_check.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Arduino_check.jpg -------------------------------------------------------------------------------- /docs/images/Board_PCB_STM32.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Board_PCB_STM32.jpeg -------------------------------------------------------------------------------- /docs/images/Board_PCB_STM32_USB-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Board_PCB_STM32_USB-1.png -------------------------------------------------------------------------------- /docs/images/Board_PCB_STM32_USB-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Board_PCB_STM32_USB-2.png -------------------------------------------------------------------------------- /docs/images/Board_PCB_STM32_USB_V1.1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Board_PCB_STM32_USB_V1.1-1.png -------------------------------------------------------------------------------- /docs/images/Board_PCB_STM32_USB_V1.1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Board_PCB_STM32_USB_V1.1-2.png -------------------------------------------------------------------------------- /docs/images/Board_PCB_STM32_with_serial.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Board_PCB_STM32_with_serial.jpg -------------------------------------------------------------------------------- /docs/images/Bootloader.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Bootloader.jpg -------------------------------------------------------------------------------- /docs/images/CPPM_BG_IRX4_Jack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/CPPM_BG_IRX4_Jack.jpg -------------------------------------------------------------------------------- /docs/images/CPPM_BG_IRX4_Mark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/CPPM_BG_IRX4_Mark.jpg -------------------------------------------------------------------------------- /docs/images/CPPM_BG_IRX4_Soldered.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/CPPM_BG_IRX4_Soldered.jpg -------------------------------------------------------------------------------- /docs/images/CPPM_JP4IN1_Jack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/CPPM_JP4IN1_Jack.jpg -------------------------------------------------------------------------------- /docs/images/CPPM_JP4IN1_Mark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/CPPM_JP4IN1_Mark.jpg -------------------------------------------------------------------------------- /docs/images/CPPM_JP4IN1_Soldered.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/CPPM_JP4IN1_Soldered.jpg -------------------------------------------------------------------------------- /docs/images/CPPM_JP4IN1_Soldered2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/CPPM_JP4IN1_Soldered2.jpg -------------------------------------------------------------------------------- /docs/images/DIY Multiprotocol Module Overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/DIY Multiprotocol Module Overview.png -------------------------------------------------------------------------------- /docs/images/DIY_Mulitprotocol_Module_Schematic.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/DIY_Mulitprotocol_Module_Schematic.jpeg -------------------------------------------------------------------------------- /docs/images/DSM_RX_Output.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/DSM_RX_Output.JPG -------------------------------------------------------------------------------- /docs/images/Debug1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Debug1.png -------------------------------------------------------------------------------- /docs/images/FTDI_Adapter.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/FTDI_Adapter.jpeg -------------------------------------------------------------------------------- /docs/images/FTDI_Cable.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/FTDI_Cable.jpeg -------------------------------------------------------------------------------- /docs/images/FlashMulti.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/FlashMulti.jpg -------------------------------------------------------------------------------- /docs/images/ISP_header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/ISP_header.png -------------------------------------------------------------------------------- /docs/images/Inductrix_Aileron_Expo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Inductrix_Aileron_Expo.png -------------------------------------------------------------------------------- /docs/images/Inductrix_Inputs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Inductrix_Inputs.png -------------------------------------------------------------------------------- /docs/images/Inductrix_Mixer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Inductrix_Mixer.png -------------------------------------------------------------------------------- /docs/images/Inductrix_Throttle_Setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Inductrix_Throttle_Setup.png -------------------------------------------------------------------------------- /docs/images/Jumper-ch340g.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Jumper-ch340g.jpg -------------------------------------------------------------------------------- /docs/images/Jumper-serial.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Jumper-serial.jpg -------------------------------------------------------------------------------- /docs/images/MPTM_PCB_2.3d_ISP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/MPTM_PCB_2.3d_ISP.png -------------------------------------------------------------------------------- /docs/images/MPTM_PCB_3.2d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/MPTM_PCB_3.2d.png -------------------------------------------------------------------------------- /docs/images/MPTM_with_RF_modules.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/MPTM_with_RF_modules.jpeg -------------------------------------------------------------------------------- /docs/images/MULTI_Module_Overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/MULTI_Module_Overview.png -------------------------------------------------------------------------------- /docs/images/Module_perfboard1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Module_perfboard1.jpeg -------------------------------------------------------------------------------- /docs/images/Module_perfboard2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Module_perfboard2.jpeg -------------------------------------------------------------------------------- /docs/images/Multi_4-in-1_RF_module.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Multi_4-in-1_RF_module.jpg -------------------------------------------------------------------------------- /docs/images/Multi_STM32 module.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Multi_STM32 module.JPG -------------------------------------------------------------------------------- /docs/images/Multi_STM32_ flashing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Multi_STM32_ flashing.jpg -------------------------------------------------------------------------------- /docs/images/Multi_STM32_V0.8_t_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Multi_STM32_V0.8_t_1.png -------------------------------------------------------------------------------- /docs/images/Multi_STM32_V0.8_t_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Multi_STM32_V0.8_t_2.png -------------------------------------------------------------------------------- /docs/images/Multiprotocol_3.2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Multiprotocol_3.2.jpeg -------------------------------------------------------------------------------- /docs/images/OpenTx_Multi_Menu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/OpenTx_Multi_Menu.jpg -------------------------------------------------------------------------------- /docs/images/OrangeRx_Module.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/OrangeRx_Module.jpg -------------------------------------------------------------------------------- /docs/images/PPM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/PPM.png -------------------------------------------------------------------------------- /docs/images/ProMini_ISP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/ProMini_ISP.png -------------------------------------------------------------------------------- /docs/images/STM32_Board_V1.0_Jumper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/STM32_Board_V1.0_Jumper.png -------------------------------------------------------------------------------- /docs/images/Serial_Monitor_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Serial_Monitor_1.png -------------------------------------------------------------------------------- /docs/images/Serial_Monitor_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/Serial_Monitor_2.png -------------------------------------------------------------------------------- /docs/images/T16-internal-connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/T16-internal-connection.png -------------------------------------------------------------------------------- /docs/images/T16-internal-connector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/T16-internal-connector.png -------------------------------------------------------------------------------- /docs/images/USBasp_Programmer.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/USBasp_Programmer.jpeg -------------------------------------------------------------------------------- /docs/images/USBasp_Programmer_jumper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/USBasp_Programmer_jumper.png -------------------------------------------------------------------------------- /docs/images/V1_Serial_Enable.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/V1_Serial_Enable.jpeg -------------------------------------------------------------------------------- /docs/images/V2a_Serial_Enable.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/V2a_Serial_Enable.jpeg -------------------------------------------------------------------------------- /docs/images/V2a_zoom_Serial_Enable.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/V2a_zoom_Serial_Enable.jpeg -------------------------------------------------------------------------------- /docs/images/V2b_ISP.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/V2b_ISP.jpeg -------------------------------------------------------------------------------- /docs/images/V2b_Serial_Enable.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/V2b_Serial_Enable.jpeg -------------------------------------------------------------------------------- /docs/images/V2c_Serial_Enable.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/V2c_Serial_Enable.jpeg -------------------------------------------------------------------------------- /docs/images/WordPad_Admin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/WordPad_Admin.jpg -------------------------------------------------------------------------------- /docs/images/X7-bind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/X7-bind.png -------------------------------------------------------------------------------- /docs/images/X7-no-telemetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/X7-no-telemetry.png -------------------------------------------------------------------------------- /docs/images/X7-protocol-invalid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/X7-protocol-invalid.png -------------------------------------------------------------------------------- /docs/images/bg-case.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/bg-case.jpg -------------------------------------------------------------------------------- /docs/images/bg-multi-stm32-serial.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/bg-multi-stm32-serial.jpg -------------------------------------------------------------------------------- /docs/images/bg-stm32-boot0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/bg-stm32-boot0.jpg -------------------------------------------------------------------------------- /docs/images/bg-stm32-ch340g.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/bg-stm32-ch340g.jpg -------------------------------------------------------------------------------- /docs/images/bg-stm32-module.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/bg-stm32-module.jpg -------------------------------------------------------------------------------- /docs/images/boards-menu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/boards-menu.jpg -------------------------------------------------------------------------------- /docs/images/ch340g.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/ch340g.jpg -------------------------------------------------------------------------------- /docs/images/cx20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/cx20.jpg -------------------------------------------------------------------------------- /docs/images/diy-ch340g.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/diy-ch340g.jpg -------------------------------------------------------------------------------- /docs/images/donate_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/donate_button.png -------------------------------------------------------------------------------- /docs/images/er9X_Multi_Menu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/er9X_Multi_Menu.jpg -------------------------------------------------------------------------------- /docs/images/flash-multi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/flash-multi.jpg -------------------------------------------------------------------------------- /docs/images/ide-prefs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/ide-prefs.jpg -------------------------------------------------------------------------------- /docs/images/irx4-boot0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/irx4-boot0.jpg -------------------------------------------------------------------------------- /docs/images/irx4-ch340g.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/irx4-ch340g.jpg -------------------------------------------------------------------------------- /docs/images/irx4-lite-boot0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/irx4-lite-boot0.jpg -------------------------------------------------------------------------------- /docs/images/irx4-lite-cabling.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/irx4-lite-cabling.jpg -------------------------------------------------------------------------------- /docs/images/irx4-lite.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/irx4-lite.jpg -------------------------------------------------------------------------------- /docs/images/irx4-plus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/irx4-plus.jpg -------------------------------------------------------------------------------- /docs/images/irx4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/irx4.jpg -------------------------------------------------------------------------------- /docs/images/irx4plus-boot0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/irx4plus-boot0.jpg -------------------------------------------------------------------------------- /docs/images/irx4plus-serial.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/irx4plus-serial.jpg -------------------------------------------------------------------------------- /docs/images/jp4in1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/jp4in1.jpg -------------------------------------------------------------------------------- /docs/images/maple-dfu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/maple-dfu.jpg -------------------------------------------------------------------------------- /docs/images/maple-serial-port-select.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/maple-serial-port-select.jpg -------------------------------------------------------------------------------- /docs/images/maple-serial.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/maple-serial.jpg -------------------------------------------------------------------------------- /docs/images/mpm1n.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/mpm1n.jpg -------------------------------------------------------------------------------- /docs/images/mpmlite-boot0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/mpmlite-boot0.jpg -------------------------------------------------------------------------------- /docs/images/mpmlite-serial.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/mpmlite-serial.jpg -------------------------------------------------------------------------------- /docs/images/multi-boards.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/multi-boards.jpg -------------------------------------------------------------------------------- /docs/images/multi-case-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/multi-case-1.jpg -------------------------------------------------------------------------------- /docs/images/multi-case-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/multi-case-2.jpg -------------------------------------------------------------------------------- /docs/images/multi-case-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/multi-case-3.jpg -------------------------------------------------------------------------------- /docs/images/multi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/multi.png -------------------------------------------------------------------------------- /docs/images/opentx-config-multi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/opentx-config-multi.png -------------------------------------------------------------------------------- /docs/images/settings-horus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/settings-horus.png -------------------------------------------------------------------------------- /docs/images/settings-taranis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/settings-taranis.png -------------------------------------------------------------------------------- /docs/images/test: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/images/v1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/v1.2.jpg -------------------------------------------------------------------------------- /docs/images/v1.2_ISP.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/v1.2_ISP.jpg -------------------------------------------------------------------------------- /docs/images/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pascallanger/DIY-Multiprotocol-TX-Module/dcbc557bf712dde9eeb50b2ffb54ee6b9155ce9c/docs/images/warning.png --------------------------------------------------------------------------------