diff --git a/IRCTramp/IRCTramp.cpp b/IRCTramp/IRCTramp.cpp new file mode 100644 index 0000000..75d97bf --- /dev/null +++ b/IRCTramp/IRCTramp.cpp @@ -0,0 +1,100 @@ +#include "IRCTramp.hpp" +#include "stm32g4xx_ll_usart.h" + +bool IRCTramp::SetVTXFrequency(FREQUENCY freq, USART_TypeDef* 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; + + 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)) { + if(HAL_GetTick() - timeoutstart > 1000) { + return false; + } + } + } + + return true; +} + +bool IRCTramp::SetVTXPower(POWER power, USART_TypeDef* 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; + + 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)) { + if(HAL_GetTick() - timeoutstart > 1000) { + return false; + } + } + } + return true; +} + diff --git a/IRCTramp/IRCTramp.hpp b/IRCTramp/IRCTramp.hpp new file mode 100644 index 0000000..90eb60b --- /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, USART_TypeDef* uart); +bool SetVTXPower(POWER power, USART_TypeDef* uart); + +} + + + +#endif /* IRCTRAMP_IRCTRAMP_HPP_ */