From 7f0f1024f83885538da43c01fa552dc338d9aabb Mon Sep 17 00:00:00 2001 From: Local user Date: Sat, 6 Jun 2026 22:37:36 -0600 Subject: [PATCH 1/3] added irc commands for video radio power + freq --- IRCTramp/IRCTramp.cpp | 79 +++++++++++++++++++++++++++++++++++++++++++ IRCTramp/IRCTramp.hpp | 39 +++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 IRCTramp/IRCTramp.cpp create mode 100644 IRCTramp/IRCTramp.hpp diff --git a/IRCTramp/IRCTramp.cpp b/IRCTramp/IRCTramp.cpp new file mode 100644 index 0000000..e1078ae --- /dev/null +++ b/IRCTramp/IRCTramp.cpp @@ -0,0 +1,79 @@ +#include "IRCTramp.hpp" + + +bool IRCTramp::SetVTXFrequency(FREQUENCY freq, UART_HandleTypeDef* uart) { + + uint8_t tx_buffer[16]; + uint8_t checksum = 0; + + for(uint16_t i = 0; i < sizeof(tx_buffer); i++) { + tx_buffer[i] = 0; + } + + uint16_t freqMHz; + switch(freq) { + case FREQ_1258MHZ: + freqMHz = 1258; + break; + case FREQ_1280MHZ: + freqMHz = 1280; + break; + default: + return false; + } + + tx_buffer[0] = 0x0F; // start byte + tx_buffer[1] = 'v'; // v = frequency + tx_buffer[2] = freqMHz & 0xFF; // freq LSB + tx_buffer[3] = (freqMHz >> 8) & 0xFF; // freq MSB + + for (uint8_t i = 1; i < sizeof(tx_buffer)-1; i++) { + checksum += tx_buffer[i]; + } + tx_buffer[15] = checksum; + + return HAL_UART_Transmit(uart, tx_buffer, sizeof(tx_buffer), 1000) == HAL_OK; +} + +bool IRCTramp::SetVTXPower(POWER power, UART_HandleTypeDef* uart) { + uint8_t tx_buffer[16]; + uint8_t checksum = 0; + + for(uint16_t i = 0; i < sizeof(tx_buffer); i++) { + tx_buffer[i] = 0; + } + + uint16_t powerMW; + switch(power) { + case POWER_PIT: + powerMW = 0; + break; + case POWER_25MW: + powerMW = 25; + break; + case POWER_200MW: + powerMW = 200; + break; + case POWER_1W: + powerMW = 1000; + break; + case POWER_4W: + powerMW = 4000; + break; + default: + return false; + } + + tx_buffer[0] = 0x0F; // start byte + tx_buffer[1] = 'p'; // p = power + tx_buffer[2] = powerMW & 0xFF; // power LSB + tx_buffer[3] = (powerMW >> 8) & 0xFF; // power MSB + + for (uint8_t i = 1; i < sizeof(tx_buffer)-1; i++) { + checksum += tx_buffer[i]; + } + tx_buffer[15] = checksum; + + return HAL_UART_Transmit(uart, tx_buffer, sizeof(tx_buffer), 1000) == HAL_OK; +} + diff --git a/IRCTramp/IRCTramp.hpp b/IRCTramp/IRCTramp.hpp new file mode 100644 index 0000000..9609217 --- /dev/null +++ b/IRCTramp/IRCTramp.hpp @@ -0,0 +1,39 @@ +/* + * IRCTramp.hpp + * + * Created on: Jun 6, 2026 + * Author: Local user + */ + +#ifndef IRCTRAMP_IRCTRAMP_HPP_ +#define IRCTRAMP_IRCTRAMP_HPP_ +#include + +#ifdef STM32G491xx +#include "stm32g4xx.h" +#else +#include "stm32h7xx.h" +#endif + +namespace IRCTramp { +enum FREQUENCY { + FREQ_1258MHZ, + FREQ_1280MHZ +}; + +enum POWER { + POWER_PIT, + POWER_25MW, + POWER_200MW, + POWER_1W, + POWER_4W +}; + +bool SetVTXFrequency(FREQUENCY freq, UART_HandleTypeDef* uart); +bool SetVTXPower(POWER power, UART_HandleTypeDef* uart); + +} + + + +#endif /* IRCTRAMP_IRCTRAMP_HPP_ */ From 71592395942b3c479df63631292875e255f1e39e Mon Sep 17 00:00:00 2001 From: Local user Date: Mon, 8 Jun 2026 19:02:08 -0600 Subject: [PATCH 2/3] irc tramp driver --- IRCTramp/IRCTramp.cpp | 19 ++++++++++++++----- IRCTramp/IRCTramp.hpp | 4 ++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/IRCTramp/IRCTramp.cpp b/IRCTramp/IRCTramp.cpp index e1078ae..a913847 100644 --- a/IRCTramp/IRCTramp.cpp +++ b/IRCTramp/IRCTramp.cpp @@ -1,7 +1,7 @@ #include "IRCTramp.hpp" +#include "stm32g4xx_ll_usart.h" - -bool IRCTramp::SetVTXFrequency(FREQUENCY freq, UART_HandleTypeDef* uart) { +bool IRCTramp::SetVTXFrequency(FREQUENCY freq, USART_TypeDef* uart) { uint8_t tx_buffer[16]; uint8_t checksum = 0; @@ -32,10 +32,15 @@ bool IRCTramp::SetVTXFrequency(FREQUENCY freq, UART_HandleTypeDef* uart) { } tx_buffer[15] = checksum; - return HAL_UART_Transmit(uart, tx_buffer, sizeof(tx_buffer), 1000) == HAL_OK; + for(uint8_t i = 0; i < sizeof(tx_buffer); i++) { + LL_USART_TransmitData8(uart, tx_buffer[i]); + while (!LL_USART_IsActiveFlag_TXE(uart)); + } + + return true; } -bool IRCTramp::SetVTXPower(POWER power, UART_HandleTypeDef* uart) { +bool IRCTramp::SetVTXPower(POWER power, USART_TypeDef* uart) { uint8_t tx_buffer[16]; uint8_t checksum = 0; @@ -74,6 +79,10 @@ bool IRCTramp::SetVTXPower(POWER power, UART_HandleTypeDef* uart) { } tx_buffer[15] = checksum; - return HAL_UART_Transmit(uart, tx_buffer, sizeof(tx_buffer), 1000) == HAL_OK; + for(uint8_t i = 0; i < sizeof(tx_buffer); i++) { + LL_USART_TransmitData8(uart, tx_buffer[i]); + while (!LL_USART_IsActiveFlag_TXE(uart)); + } + return true; } diff --git a/IRCTramp/IRCTramp.hpp b/IRCTramp/IRCTramp.hpp index 9609217..90eb60b 100644 --- a/IRCTramp/IRCTramp.hpp +++ b/IRCTramp/IRCTramp.hpp @@ -29,8 +29,8 @@ enum POWER { POWER_4W }; -bool SetVTXFrequency(FREQUENCY freq, UART_HandleTypeDef* uart); -bool SetVTXPower(POWER power, UART_HandleTypeDef* uart); +bool SetVTXFrequency(FREQUENCY freq, USART_TypeDef* uart); +bool SetVTXPower(POWER power, USART_TypeDef* uart); } From f8ed3ba7c6b90ecd2a3c24916e28a4542f567056 Mon Sep 17 00:00:00 2001 From: Local user Date: Mon, 8 Jun 2026 19:10:54 -0600 Subject: [PATCH 3/3] added irc timeout --- IRCTramp/IRCTramp.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/IRCTramp/IRCTramp.cpp b/IRCTramp/IRCTramp.cpp index a913847..75d97bf 100644 --- a/IRCTramp/IRCTramp.cpp +++ b/IRCTramp/IRCTramp.cpp @@ -32,9 +32,15 @@ bool IRCTramp::SetVTXFrequency(FREQUENCY freq, USART_TypeDef* uart) { } tx_buffer[15] = checksum; + uint32_t timeoutstart = HAL_GetTick(); for(uint8_t i = 0; i < sizeof(tx_buffer); i++) { LL_USART_TransmitData8(uart, tx_buffer[i]); - while (!LL_USART_IsActiveFlag_TXE(uart)); + + while (!LL_USART_IsActiveFlag_TXE(uart)) { + if(HAL_GetTick() - timeoutstart > 1000) { + return false; + } + } } return true; @@ -79,9 +85,15 @@ bool IRCTramp::SetVTXPower(POWER power, USART_TypeDef* uart) { } tx_buffer[15] = checksum; + uint32_t timeoutstart = HAL_GetTick(); for(uint8_t i = 0; i < sizeof(tx_buffer); i++) { LL_USART_TransmitData8(uart, tx_buffer[i]); - while (!LL_USART_IsActiveFlag_TXE(uart)); + + while (!LL_USART_IsActiveFlag_TXE(uart)) { + if(HAL_GetTick() - timeoutstart > 1000) { + return false; + } + } } return true; }