#ifndef _DRIVER_H #define _DRIVER_H #include #include #include "fgen.h" #include "ports.h" #define MAIN_PSU_ENBL 0b00000100 // Active Low U13 D2 #define V_18V 0 #define V_21V 88 #define V_24V 118 #define V_27V 148 #define V_30V 171 #define V_36V 218 #define V_42V 250 #define V_55V 255 #define MAX_AB_PSU V_24V //TODO #define MAX_AB_VOLTAGE 32.0f #define MAX_D_PSU V_36V #define MAX_D_FREQ 44500 #define MAX_CLAMP_PSU 255 #define POWER_CHANGE_TIME 500 //m sec typedef enum { DRIVER_STATE_INIT = 0, DRIVER_STATE_WAIT_PSU, DRIVER_STATE_SWITCH_AMP, DRIVER_STATE_SWITCH_FREQUENCY, DRIVER_STATE_RUNNING, } DriverState_t; typedef struct { DriverState_t state; bool initState; uint32_t stateTimer; uint8_t psuValue; uint8_t psuValueMax; FREQUENCY_t *frequency; PowerLevel_t powerLevel; uint32_t lastPowerChangeTime; Amplifier_t amplifier; SignalPath_t signalPath; TransformerTap_t tap; uint8_t amplitude; fgen_t *fgen; ACCESSORY_t *prevAccy; } TxDriver_t; bool driver_isLowFreq(void); float driver_maxLoadCurrent(void); TxDriver_t * driver_getDriver(void); void driver_setPSUVoltage(uint8_t value); void driver_setAmplitude(uint8_t value); void driver_isolateOutput(bool isolate); void driver_enablePower(bool enable); void driver_init(void); void driver_monitor(void); void driver_service(void); void driver_setDuty(uint32_t duty); void driver_broadcastOn(bool on); void driver_setFrequency(FREQUENCY_t *freq); void driver_setPower(PowerLevel_t powerLevel); FREQUENCY_t *driver_getFrequency(void); void driver_setSafe(bool safe); PowerLevel_t driver_getPowerLevel(); void driver_setSignalPath(SignalPath_t path); uint8_t driver_getAmplitude(void); TransformerTap_t driver_getTap(void); Amplifier_t driver_getAmplifier(void); bool driver_outputReady(void); void driver_bypass(bool bypass); void driver_powerUp(void); void driver_powerDown(void); #endif