2026-03-20 15:56:09 +08:00
#include "LoRaFEMControl.h"
#include <Arduino.h>
void LoRaFEMControl :: init ( void )
{
pinMode ( P_LORA_PA_POWER , OUTPUT );
digitalWrite ( P_LORA_PA_POWER , HIGH );
delay ( 1 );
pinMode ( P_LORA_KCT8103L_PA_CSD , OUTPUT );
digitalWrite ( P_LORA_KCT8103L_PA_CSD , HIGH );
pinMode ( P_LORA_KCT8103L_PA_CTX , OUTPUT );
2026-04-20 09:42:39 +02:00
digitalWrite ( P_LORA_KCT8103L_PA_CTX , lna_enabled ? LOW : HIGH );
2026-03-20 15:56:09 +08:00
setLnaCanControl ( true );
}
void LoRaFEMControl :: setSleepModeEnable ( void )
{
// shutdown the PA
digitalWrite ( P_LORA_KCT8103L_PA_CSD , LOW );
}
void LoRaFEMControl :: setTxModeEnable ( void )
{
2026-08-12 14:07:31 +10:00
pinMode ( P_LORA_KCT8103L_PA_CTX , OUTPUT ); // force pinMode before transmit as temporary workaround for https://github.com/meshcore-dev/MeshCore/issues/3151
2026-03-20 15:56:09 +08:00
digitalWrite ( P_LORA_KCT8103L_PA_CSD , HIGH );
digitalWrite ( P_LORA_KCT8103L_PA_CTX , HIGH );
}
void LoRaFEMControl :: setRxModeEnable ( void )
{
digitalWrite ( P_LORA_KCT8103L_PA_CSD , HIGH );
if ( lna_enabled ) {
digitalWrite ( P_LORA_KCT8103L_PA_CTX , LOW );
} else {
digitalWrite ( P_LORA_KCT8103L_PA_CTX , HIGH );
}
}
void LoRaFEMControl :: setRxModeEnableWhenMCUSleep ( void )
{
digitalWrite ( P_LORA_KCT8103L_PA_CSD , HIGH );
if ( lna_enabled ) {
digitalWrite ( P_LORA_KCT8103L_PA_CTX , LOW );
} else {
digitalWrite ( P_LORA_KCT8103L_PA_CTX , HIGH );
}
}
void LoRaFEMControl :: setLNAEnable ( bool enabled )
{
lna_enabled = enabled ;
}