power up/down working for broadcast

This commit is contained in:
2025-06-25 14:49:12 -05:00
parent 2ff7291c63
commit 372e4941a2
11 changed files with 226 additions and 163 deletions

View File

@@ -8,6 +8,11 @@
static SYSTEM_DATA_t *_sys = NULL;
static TxDriver_t _driver;
static bool powerChangeAllowed(void)
{
return ((_sys->systemTime - _driver.lastPowerChangeTime) > POWER_CHANGE_TIME);
}
TxDriver_t * driver_getDriver(void)
{
return &_driver;
@@ -80,6 +85,16 @@ void driver_init(void)
driver_setPSUVoltage(_driver.psuValueMax);
driver_enablePower(true);
fgen_init();
// HACK: pick the first frequency for now
_driver.powerLevel = POWER_LEVEL_0;
_driver.frequency = fgen_getByIndex(0);
_driver.lastPowerChangeTime = _sys->systemTime;
}
void driver_broadcastOn(bool on)
@@ -121,7 +136,6 @@ void driver_setDuty(uint32_t duty)
void driver_setFrequency(FREQUENCY_t *freq)
{
if (_sys->activeAccessory != NULL)
{
@@ -129,17 +143,17 @@ void driver_setFrequency(FREQUENCY_t *freq)
if (freq != NULL)
{
// TODO: accessory may select a different frequency
// accessory may select a different frequency
_driver.frequency = freq;
driver_setPower(_driver.powerLevel);
}
}
}
void driver_setPower(PowerLevel_t powerLevel)
{
if (_sys->activeAccessory != NULL)
@@ -155,6 +169,37 @@ void driver_setPower(PowerLevel_t powerLevel)
}
}
_driver.lastPowerChangeTime = _sys->systemTime;
}
void driver_powerUp(void)
{
// limit power change rate
if (!powerChangeAllowed()) return;
PowerLevel_t level = _driver.powerLevel;
if (level < POWER_LEVEL_4)
{
level++;
}
driver_setPower(level);
}
void driver_powerDown(void)
{
if (!powerChangeAllowed()) return;
PowerLevel_t level = _driver.powerLevel;
if (level > POWER_LEVEL_0)
{
level--;
}
driver_setPower(level);
}
void driver_setSafe(bool safe)
@@ -174,11 +219,16 @@ void driver_setSafe(bool safe)
}
}
FREQUENCY_t *driver_getFrequency(void)
FREQUENCY_t* driver_getFrequency(void)
{
return _driver.frequency;
}
PowerLevel_t driver_getPowerLevel(void)
{
return _driver.powerLevel;
}
// safety monitor run from interrupt
void driver_monitor(void)
{
@@ -191,6 +241,7 @@ void driver_service(void)
{
case DRIVER_STATE_INIT:
{
break;
}