Files
TX/source/broadcast.c

136 lines
2.4 KiB
C
Raw Normal View History

#include "driver.h"
#include "ports.h"
#include "fgen.h"
#include "utils.h"
#include "System/system.h"
#define MIN_BROADCAST_FREQ 3140
#define MAX_BROADCAST_FREQ 210000
static uint8_t Bcast_LF_Value[5] = {0,5,10,15,20};
static uint8_t Bcast_HF_Value[5] = {0,12,25,37,50};
extern SYSTEM_DATA_t sys;
static FREQUENCY_t * setFrequency(ACCESSORY_t *accy, FREQUENCY_t *freq)
{
// use the current frequency if it is valid, otherwise, set to the lowest valid for broadcast
bool findFreq = false;
if (freq != NULL)
{
if (freq->frequency < MIN_BROADCAST_FREQ || freq->frequency > MAX_BROADCAST_FREQ)
{
findFreq = true;
}
}
else
{
findFreq = true;
}
if (findFreq)
{
freq = fgen_findNearest(MIN_BROADCAST_FREQ);
if (freq == NULL)
{
accy->state = PORT_STATE_ERROR;
return NULL;
}
}
accy->setPower(accy, sys.driver->powerLevel);
return freq;
}
static int setPower(ACCESSORY_t *accy, PowerLevel_t power)
{
FREQUENCY_t *f = driver_getFrequency();
uint8_t duty = 0;
if(f->frequency <= 8010)
duty = Bcast_LF_Value[power];
else
duty = Bcast_HF_Value[power];
driver_setDuty(duty);
return 0;
}
static void _stateInit(ACCESSORY_t *accy)
{
FREQUENCY_t *freq = driver_getFrequency();
if (accy->initState)
{
accy->setFrequency = setFrequency;
accy->setPower = setPower;
2025-08-26 16:10:47 -05:00
accy->signalPath = SIGNAL_PATH_ANT;
accy->driveVoltage[LOW_FREQ] = V_27V;
accy->driveVoltage[HIGH_FREQ] = V_27V;
driver_setFrequency(freq);
2025-08-26 16:10:47 -05:00
ACCY_setTimeout(accy, 500);
}
if (ACCY_timedOut(accy))
{
accy->state = PORT_STATE_RUNNING;
}
}
int broadcast_service(ACCESSORY_t *accy)
{
switch (accy->state)
{
case PORT_STATE_INIT:
{
_stateInit(accy);
break;
}
case PORT_STATE_DEINIT:
{
if (accy->initState)
{
//USB_SendString("Broadcast deinitializing...");
accy->stateTimer = sys.systemTime + 500;
}
if (sys.systemTime >= accy->stateTimer)
{
accy->state = PORT_STATE_STANDBY;
//USB_SendString("Broadcast in standby!");
}
break;
}
case PORT_STATE_RUNNING:
{
if (accy->initState)
{
//USB_SendString("Broadcast running!");
}
break;
}
default:
return -1;
}
return 0;
}