diff --git a/.cproject b/.cproject index 3346ad2..aaec964 100644 --- a/.cproject +++ b/.cproject @@ -342,6 +342,9 @@ + + + @@ -349,7 +352,7 @@ - + diff --git a/source/System/system.c b/source/System/system.c index cf3810b..670af49 100644 --- a/source/System/system.c +++ b/source/System/system.c @@ -88,7 +88,7 @@ void system_init(void) sys.activeAccessory = NULL; sys.nextAccessory = NULL; sys.maxPowerLimit = POWER_LIMIT_ALKALINE; // default until battery type determined. - + sys.driver = driver_getDriver(); char *ver = SW_VERSION; diff --git a/source/System/system.h b/source/System/system.h index deb6287..379f015 100644 --- a/source/System/system.h +++ b/source/System/system.h @@ -99,9 +99,7 @@ typedef struct int h100HzTimer; char tmpString[64]; - - // TODO: change to FREQUENCY_t* - uint32_t frequency; + TxDriver_t *driver; } SYSTEM_DATA_t; diff --git a/source/USB/usbComms.c b/source/USB/usbComms.c index f35a6ab..c8733d6 100644 --- a/source/USB/usbComms.c +++ b/source/USB/usbComms.c @@ -29,7 +29,7 @@ #include "bootloader.h" #include "eeprom.h" #include "System/system.h" -#include "frq.h" +//#include "frq.h" #include "hwFixes.h" #include "usbComms.h" @@ -278,8 +278,8 @@ void USB_ProcessSystemCommand(void) { //Save settings data EE_SaveData(); - frq_update_flag = false; - Change_To_Next_BC_Freq(); + //frq_update_flag = false; + //Change_To_Next_BC_Freq(); USB_SendString(ACK); } @@ -346,16 +346,17 @@ void USB_ProcessFrequencyCommand(void) p = strtok(null, ","); //inMenu uint32_t inMenu = atoi(p); - FREQ_AddFrequency(frequency, enabled, inMenu, type); + fgen_addFrequency(frequency, enabled, inMenu, type); + USB_SendString(ACK); } else if (USB_CommandCompare("fClear")) { //Clear the frequency list - frq_update_flag = true; + //frq_update_flag = true; - FREQ_ClearFrequencies(); + fgen_clearFrequencies(); USB_SendString(ACK); } else if (USB_CommandCompare("fSave")) @@ -366,7 +367,7 @@ void USB_ProcessFrequencyCommand(void) } else if (USB_CommandCompare("fGetNum")) //Get number of frequencies in the receiver { - sprintf(usbTempString, "%d", FREQ_GetNumFrequencies()); + sprintf(usbTempString, "%d", fgen_getNumFrequencies()); USB_SendString(usbTempString); } else if (USB_CommandPrefixCompare("fGet,")) //Get string representing a single frequency @@ -376,8 +377,8 @@ void USB_ProcessFrequencyCommand(void) p = strtok(null, ","); //index uint32_t index = atoi(p); - FREQUENCY_t frq = FREQ_GetFreqByIndex(index); - sprintf(usbTempString, "%d,%d,%d,%d", frq.frequency1, 0, frq.enabled, 1); //FREQ_TYPE-t always 0, inMenu always 1 + //FREQUENCY_t frq = FREQ_GetFreqByIndex(index); + //sprintf(usbTempString, "%d,%d,%d,%d", frq.frequency1, 0, frq.enabled, 1); //FREQ_TYPE-t always 0, inMenu always 1 USB_SendString(usbTempString); diff --git a/source/adc.c b/source/adc.c index e1614b2..2f7893f 100644 --- a/source/adc.c +++ b/source/adc.c @@ -20,11 +20,12 @@ //Application includes #include "timer.h" #include "adc.h" -#include "frq.h" +//#include "frq.h" #include "ports.h" #include "utils.h" #include "hwFixes.h" #include "System/system.h" +#include "driver.h" /******************************************************************************* * Definitions @@ -348,7 +349,8 @@ static float32_t ScaleLowGainCurrent(float32_t input) uint32_t numEntries = sizeof(currentTableLowGain) / sizeof(float32_t) / 2; //Get target frequency - float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + //float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + float32_t targetFreq = sys.driver->frequency->frequency; #if 0 //TESTING - Use a specific frequency targetFreq = 384; @@ -404,7 +406,8 @@ static float32_t ScaleHighGainCurrent(float32_t input) uint32_t numEntries = sizeof(currentTableHighGain) / sizeof(float32_t) / 2; //Get target frequency - float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + //float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + float32_t targetFreq = sys.driver->frequency->frequency; #if 0 //TESTING - Use a specific frequency targetFreq = 384; @@ -460,7 +463,8 @@ static float32_t ScaleLowGainVoltage(float32_t input) uint32_t numEntries = sizeof(voltageTableLowGain) / sizeof(float32_t) / 2; //Get target frequency - float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + //float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + float32_t targetFreq = sys.driver->frequency->frequency; #if 0 //TESTING - Use a specific frequency targetFreq = 384; @@ -517,7 +521,8 @@ static float32_t ScaleLowGainCurrent208023(float32_t input) uint32_t numEntries = sizeof(currentTableLowGain208023) / sizeof(float32_t) / 2; //Get target frequency - float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + //float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + float32_t targetFreq = sys.driver->frequency->frequency; #if 0 //TESTING - Use a specific frequency targetFreq = 384; @@ -573,7 +578,8 @@ static float32_t ScaleHighGainCurrent208023(float32_t input) uint32_t numEntries = sizeof(currentTableHighGain208023) / sizeof(float32_t) / 2; //Get target frequency - float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + //float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + float32_t targetFreq = sys.driver->frequency->frequency; #if 0 //TESTING - Use a specific frequency targetFreq = 384; @@ -629,7 +635,8 @@ static float32_t ScaleLowGainVoltage208023(float32_t input) uint32_t numEntries = sizeof(voltageTableLowGain208023) / sizeof(float32_t) / 2; //Get target frequency - float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + //float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + float32_t targetFreq = sys.driver->frequency->frequency; #if 0 //TESTING - Use a specific frequency targetFreq = 384; @@ -687,7 +694,8 @@ static float32_t ScaleLowGainCurrent208025(float32_t input) uint32_t numEntries = sizeof(currentTableLowGain208025) / sizeof(float32_t) / 3; //Get target frequency - float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + //float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + float32_t targetFreq = sys.driver->frequency->frequency; #if 0 //TESTING - Use a specific frequency targetFreq = 384; @@ -754,7 +762,8 @@ static float32_t ScaleHighGainCurrent208025(float32_t input) uint32_t numEntries = sizeof(currentTableHighGain208025) / sizeof(float32_t) / 3; //Get target frequency - float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + //float32_t targetFreq = FREQ_GetFreqByIndex(frequency).frequency1; + float32_t targetFreq = sys.driver->frequency->frequency; #if 1 //TESTING - Use a specific frequency targetFreq = 5666; diff --git a/source/amps.c b/source/amps.c index 5705769..30613e3 100644 --- a/source/amps.c +++ b/source/amps.c @@ -12,7 +12,7 @@ #include "psu_ctrl.h" #include "timer.h" #include "ports.h" -#include "frq.h" +//#include "frq.h" #include "taps.h" extern uint8_t frequency, Power_Level,old_freq, psu_failed; diff --git a/source/battery.c b/source/battery.c index 774175f..9c3d42b 100644 --- a/source/battery.c +++ b/source/battery.c @@ -98,7 +98,7 @@ float32_t Bat_Mid_Point; while(1) { - safe_key(); + //safe_key(); Display_Update(); Delay_Ticks(10); } diff --git a/source/broadcast.c b/source/broadcast.c new file mode 100644 index 0000000..258a6ea --- /dev/null +++ b/source/broadcast.c @@ -0,0 +1,140 @@ +#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; + + driver_setFrequency(freq); + + + + driver_broadcastOn(true); + + 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..."); + + // turn off the amp and antenna + driver_broadcastOn(false); + delayms(50); + + // turn off PWM + driver_setDuty(0); + + // set PSU to minimum + driver_setPSUVoltage(V_24V); + + 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; +} diff --git a/source/broadcast.h b/source/broadcast.h new file mode 100644 index 0000000..d321f2f --- /dev/null +++ b/source/broadcast.h @@ -0,0 +1,8 @@ +#ifndef _BROADCAST_H +#define _BROADCAST_H + +#include "ports.h" + +int broadcast_service(ACCESSORY_t *accy); + +#endif \ No newline at end of file diff --git a/source/dds.c b/source/dds.c new file mode 100644 index 0000000..a29c13d --- /dev/null +++ b/source/dds.c @@ -0,0 +1,91 @@ +#include "dds.h" +#include "io.h" + +static void sendCommand(dds_t *dds, uint16_t reg, uint8_t *data, uint16_t len) +{ + uint8_t tmp[2]; + tmp[0] = (uint8_t)(reg >> 8); // Reset bit held + tmp[1] = (uint8_t)(reg & 0x00ff); + + SPI0_SendBytes(tmp, 2, dds->mode); + + if (data != NULL) + { + SPI0_SendBytes(data, len, dds->mode); + } +} + +static uint32_t calculateDDSValue(uint32_t frequency) // Calculate frequency word for DDS +{ + // FREG = (Frequency * 2^28)/fclk = 12MHz normally + return (uint32_t)((frequency * 268435456.0) / DDS_CLK + 0.5); + +} + +void dds_setFrequency(dds_t *dds, uint32_t frequency) +{ + uint16_t freq_hi = FREQ0_REG; + uint16_t freq_lo = FREQ0_REG; + + dds->frequency = frequency; + + uint8_t data[4]; + + // set signal DDS + if (frequency > 0) + { + uint32_t freqValue = calculateDDSValue(dds->frequency); + + freq_hi = FREQ0_REG; + freq_lo = FREQ0_REG; + + freq_lo |= (freqValue & 0x3fff); + freqValue >>= 14; + freq_hi |= (freqValue & 0x3fff); + + data[0] = (uint8_t)(freq_lo >> 8); //LS 16-bit word, MSB + data[1] = (uint8_t)(freq_lo & 0x00ff); //LS 16-bit word, LSB + data[2] = (uint8_t)(freq_hi >> 8); + data[3] = (uint8_t)(freq_hi & 0x00ff); + + // send Control word to hold setup + sendCommand(dds, FRQ_CTRL_WORD1, data, sizeof(data)); + + // send Control word to release setup + sendCommand(dds, FRQ_CTRL_WORD2, NULL, 0); + + } + else + { + dds_sleep(dds, true, false); + } + +} + +void dds_init(dds_t *dds, SPI_MODE_t mode, gpio_pin_t resetPin) +{ + dds->mode = mode; + dds->resetPin = resetPin; + + dds_reset(dds, true); +} + +void dds_reset(dds_t *dds, bool reset) +{ + GPIO_PinWrite(GPIO, dds->resetPin.port, dds->resetPin.pin, (reset ? 1 : 0) ); +} + +void dds_sleep(dds_t *dds, bool sleep, bool disableDAC) +{ + if (sleep) + { + if (disableDAC) + { + sendCommand(dds, SLP_CTRL_WRD2, NULL, 0); + } + else + { + sendCommand(dds, SLP_CTRL_WRD, NULL, 0); + } + } +} diff --git a/source/dds.h b/source/dds.h new file mode 100644 index 0000000..3cca595 --- /dev/null +++ b/source/dds.h @@ -0,0 +1,62 @@ +#ifndef _DDS_H +#define _DDS_H + +#include "spi.h" +#include "io.h" + +#define TX_SYS_CLK 12000000 // 12MHZ +#define DDS_CLK TX_SYS_CLK + +#define RAMP_300KHZ 6710886 + +#define FREQ_MAX_NUM 50 //Max number of frequencies allowed +#define FREQ_MIN 0 +#define FREQ0_REG 0x4000 // Address of internal 9838 register +#define FRQ_CTRL_WORD1 0x2100 // Control register with Reset bit active +#define FRQ_CTRL_WORD2 0x2000 // Exit Reset Control Word +#define PHASE_RESET 0xC000 // PHASE Register 0 = 0; + +#define RAMP_CTRL_WORD1 0x2102 +#define RAMP_CTRL_WORD2 0x2002 +#define RAMP_CTRL_WORD3 0x2002 // TODO Places wavegen in sleep mode +#define SLP_CTRL_WRD 0x2180 // Power down unused DDS +#define SLP_CTRL_WRD2 0x21C0 + +#define BCAST_MIN 3140 +#define BCAST_MAX 200000 +#define DUMMY_FRQ 250 +#define MIN_BLOCK_FREQ 20000 +#define MASK_15 0b00000000 +#define MASK_58 0b00001000 +#define MASK_144 0b00011000 +#define CLK_MASK_BITS 0b11100111 +#define MAX_LD_FREQ 10000 + +//FREQUENCY PACKING - from RX so it has extra fields +#define FREQ_PACK_MASK_FREQ 0x0007ffff //target frequency bits 0 - 18 +#define FREQ_PACK_MASK_TYPE 0x00380000 //3-bit field for FREQ_TYPE_t. bits 19 - 21 +#define FREQ_PACK_SHIFT_TYPE 19 //Frequency type shift +#define FREQ_PACK_MASK_ENABLED 0x80000000 //enabled mask +#define FREQ_PACK_SHIFT_ENABLED 31 //enabled shift bit 31 +#define FREQ_PACK_MASK_INMENU 0x40000000 //inMenu mask +#define FREQ_PACK_SHIFT_INMENU 30 //inMenu shift bit 30 + +//Locate direction (LD) +#define FREQ_LD_MAX_FREQUENCY 10000 //LD runs at or below this frequency +#define FREQ_LD_SWITCH_POINT 1500 //At or below this freq, f2 is f1 * 2. above this f2 = f1 / 2 + +typedef struct +{ + SPI_MODE_t mode; + + uint32_t frequency; + + // reset pin + gpio_pin_t resetPin; + +} dds_t; + +void dds_init(dds_t *dds, SPI_MODE_t mode, gpio_pin_t resetPin); +void dds_reset(dds_t *dds, bool reset); +void dds_sleep(dds_t *dds, bool sleep, bool disableDAC); +#endif diff --git a/source/display.c b/source/display.c index f91eed7..8b71f96 100644 --- a/source/display.c +++ b/source/display.c @@ -17,7 +17,7 @@ #include "spi.h" #include "lcd.h" #include "display.h" -#include "frq.h" +//#include "frq.h" #include "battery.h" #include "utils.h" #include "Graphics/splash.h" @@ -544,6 +544,7 @@ void Display_High_Voltage(void) void Display_Frequency(uint8_t frequency) { +#if 0 // if (freqArray[frequency].frequency2 > 0) // Display_CD_Symbol(); // place a CD symbol in front in correct position @@ -568,27 +569,23 @@ void Display_Frequency(uint8_t frequency) // } FL_DrawString( tempString, LCD_X_MAX+6, LCD_Y_MAX - 22, font18Bold, LCD_DRAW_SET, FL_ALIGN_RIGHT); +#endif } void Display_CD_Symbol(void) { // uint16_t ldy = LCD_Y_MAX - GL_GetMonoBitmapHeight(ld2)+3; - +#if 0 if (freqArray[frequency].frequency1 < 1000) GL_DrawMonoBitmap(ld, LCD_X_MAX - 90, LCD_Y_MAX - 16, LCD_DRAW_SET); else GL_DrawMonoBitmap(ld, LCD_X_MAX - 106, LCD_Y_MAX - 16, LCD_DRAW_SET); +#endif } -void Test_Frequency(void) -{ - if(freqArray[frequency].enabled) - Display_Frequency(frequency); - frequency = Next_Frequency(frequency); -} void Display_Bye_Bye() { @@ -656,7 +653,7 @@ void Display_Normal(void) else Display_Level(Power_Level); // Display bars - Display_Frequency(frequency); + //Display_Frequency(frequency); if(Test_Mode) FL_DrawString("BETA", LCD_X_MIN, LCD_Y_MIN-3, font16Bold, LCD_DRAW_XOR, FL_ALIGN_LEFT); @@ -730,56 +727,6 @@ uint8_t Display_Taps(void) } -void Display_Currently_Selected(void) -{ - - - switch (Cur_Mode) - { - - case BROADCAST: - break; - - case PORT1_A: - if(ACCY_GetConnectedAccessory(1) == ID_CLAMP || ACCY_GetConnectedAccessory(1) == ID_CLAMP2) - //Display_Clamp_Volts(); - Display_Clamp_Power(); - else - Display_Line_Measurements(); - break; - - case PORT1_B: - if(ACCY_GetConnectedAccessory(1) == ID_CLAMP || ACCY_GetConnectedAccessory(1) == ID_CLAMP2) - //Display_Clamp_Volts(); - Display_Clamp_Power(); - else - Display_Line_Measurements(); - - break; - - case PORT2_A: - if(ACCY_GetConnectedAccessory(2) == ID_CLAMP || ACCY_GetConnectedAccessory(2) == ID_CLAMP2) - //Display_Clamp_Volts(); - Display_Clamp_Power(); - else - Display_Line_Measurements(); - - break; - - case PORT2_B: - if(ACCY_GetConnectedAccessory(2) == ID_CLAMP || ACCY_GetConnectedAccessory(2) == ID_CLAMP2) - //Display_Clamp_Volts(); - Display_Clamp_Power(); - else - Display_Line_Measurements(); - - break; - - - } - -} - void Display_Line_Measurements(void) { Display_Line_Voltage(); @@ -790,39 +737,6 @@ void Display_Line_Measurements(void) } -void Display_Tx_Status(void) -{ - - switch(Task) - { - case SAFETY_TASK: - Display_Danger_Menu(); - break; - - case FATAL_ERROR_TASK: - Display_Fatal_Error(); - break; - - case ESTOP_TASK: - Display_Estop(); - break; - - case LOW_BATTERY_TASK: - Display_Flash_Bat(); - break; - - case BAT_INSERTION_ERROR: - LCD_Clear(); //clear the frameBuffer - Display_Bat_Error(); - break; - - default: - Display_Normal(); - - } - - -} void Display_USB_Status(void) { diff --git a/source/display.h b/source/display.h index af945ba..a2fa726 100644 --- a/source/display.h +++ b/source/display.h @@ -93,7 +93,6 @@ void Display_Fatal_Error(void); void Display_OnScreen_Diagnostics(void); void Display_Over_Voltage_Status(void); void Display_USB_Status(void); -void Display_Tx_Status(void); void Draw_Battery(uint8_t stacks); uint8_t Read_Model_type(); void Display_EXT_DC(void); diff --git a/source/driver.c b/source/driver.c new file mode 100644 index 0000000..ad11744 --- /dev/null +++ b/source/driver.c @@ -0,0 +1,207 @@ +#include "driver.h" +#include "io.h" +#include "System/system.h" +#include "spi.h" +#include "pwm.h" +#include "utils.h" + +static SYSTEM_DATA_t *_sys = NULL; +static TxDriver_t _driver; + +TxDriver_t * driver_getDriver(void) +{ + return &_driver; +} + +void driver_setPSUVoltage(uint8_t value) +{ + uint8_t data[2]; + data[0] = 0x0; + data[1] = value; + + SPI0_SendBytes(data, 2, PSU_VCTRL); // Update the Pot +} + +void driver_setAmplitude(uint8_t value) +{ + uint8_t data[2]; + data[0] = 0x0; + data[1] = value; + + SPI0_SendBytes(data, 2, AMPLITUDE); // Update the Pot +} + +void driver_isolateOutput(bool isolate) +{ + if (_sys != NULL) + { + _sys->status[ESTOP] = isolate; + } + + if (isolate) + { + GPIO_WRITE(PIN_ESTOP, LOW); // Isolated + } + else + { + GPIO_WRITE(PIN_ESTOP, HIGH); // Not Isolated + } + +} + +void driver_enablePower(bool enable) +{ + if (enable) + { + GPIO_WRITE(PIN_POWER_CTL, HIGH); // Switch or keep power on + } + else + { + GPIO_WRITE(PIN_POWER_CTL, LOW); // Switch power off + } +} + + +void driver_init(void) +{ + _sys = system_getSys(); + + // isolate output + driver_isolateOutput(true); + + _driver.state = DRIVER_STATE_INIT; + _driver.initState = true; + + // initialize amplitude pot + driver_setAmplitude(0); + + // initialize PSU + _driver.psuValueMax = MAX_AB_PSU; + driver_setPSUVoltage(_driver.psuValueMax); + driver_enablePower(true); + +} + +void driver_broadcastOn(bool on) +{ + // turn off all amplifiers + io_broadcastOn(false, NO_UPDATE); + io_connectAmpAB(false, NO_UPDATE); + io_ampDOn(false, NO_UPDATE); + + // update values at the same time + io_update(); + + delayms(10); + driver_setPSUVoltage(V_27V); + + // turn on broadcast amp + io_broadcastOn(true, UPDATE); + delayms(5); + + // turn on the amplifier power supply + io_ampPsuOn(true, UPDATE); +} + +void driver_setDuty(uint32_t duty) +{ + uint32_t frequency; + + if (duty == 0) + { + frequency = DEFAULT_PWM_FREQ; + } + else + { + frequency = _driver.frequency->frequency; + } + + PWM_Setup(frequency, duty); +} + +void driver_setFrequency(FREQUENCY_t *freq) +{ + + + if (_sys->activeAccessory != NULL) + { + freq = _sys->activeAccessory->setFrequency(_sys->activeAccessory, freq); + + if (freq != NULL) + { + // TODO: accessory may select a different frequency + _driver.frequency = freq; + + driver_setPower(_driver.powerLevel); + } + } + + + +} + +void driver_setPower(PowerLevel_t powerLevel) +{ + if (_sys->activeAccessory != NULL) + { + if (powerLevel > POWER_LEVEL_4) + { + powerLevel = POWER_LEVEL_4; + } + + if (0 == _sys->activeAccessory->setPower(_sys->activeAccessory, powerLevel)) + { + _driver.powerLevel = powerLevel; + } + } + +} + +void driver_setSafe(bool safe) +{ + _sys->safeMode = safe; + //Select_Estop((safe ? ISOLATED : CONNECTED)); + driver_isolateOutput(true); + + if (safe) + { + //clear shift registers to known state + io_expanderSetSafe(); + delayms(10); + + dds_t *dds = fgen_getDDS(DDS_SIGNAL); + dds_sleep(dds, true, true); + } +} + +FREQUENCY_t *driver_getFrequency(void) +{ + return _driver.frequency; +} + +// safety monitor run from interrupt +void driver_monitor(void) +{ + +} + +void driver_service(void) +{ + switch (_driver.state) + { + case DRIVER_STATE_INIT: + { + break; + } + + case DRIVER_STATE_WAIT_PSU: + { + break; + } + + case DRIVER_STATE_SWITCH_FREQUENCY: + { + break; + } + } +} diff --git a/source/driver.h b/source/driver.h new file mode 100644 index 0000000..233d0b9 --- /dev/null +++ b/source/driver.h @@ -0,0 +1,70 @@ +#ifndef _DRIVER_H +#define _DRIVER_H + +#include +#include + +#include "fgen.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_D_PSU V_36V +#define MAX_CLAMP_PSU 255 + +typedef enum +{ + POWER_LEVEL_0 = 0, + POWER_LEVEL_1, + POWER_LEVEL_2, + POWER_LEVEL_3, + POWER_LEVEL_4, +} PowerLevel_t; + +typedef enum +{ + DRIVER_STATE_INIT = 0, + DRIVER_STATE_WAIT_PSU, + DRIVER_STATE_SWITCH_FREQUENCY, +} DriverState_t; + +typedef struct +{ + DriverState_t state; + bool initState; + + uint32_t stateTimer; + + uint8_t psuValue; + uint8_t psuValueMax; + + FREQUENCY_t *frequency; + PowerLevel_t powerLevel; + +} TxDriver_t; + +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); + +#endif diff --git a/source/eeprom.c b/source/eeprom.c index 32a7639..454f6c4 100644 --- a/source/eeprom.c +++ b/source/eeprom.c @@ -17,8 +17,9 @@ #include "timer.h" #include "System/system.h" #include "bootloader.h" -#include "frq.h" +//#include "frq.h" #include "eeprom.h" +#include "fgen.h" #include "Fonts/translate.h" /******************************************************************************* @@ -56,6 +57,37 @@ static bool EE_Busy(void) * Public Functions ******************************************************************************/ + /* + * Pack frequency data and return + * Packed data is used for saving to FLASH + */ +uint32_t EE_GetPackedFrequency(uint32_t index) +{ + FREQUENCY_t *freq = fgen_getByIndex(index); + + uint32_t packed = freq->frequency; + //packed |= freqArray[index].type << FREQ_PACK_SHIFT_TYPE; + packed |= (uint32_t)freq->enabled << FREQ_PACK_SHIFT_ENABLED; + //packed |= (uint32_t)freqArray[index].inMenu << FREQ_PACK_SHIFT_INMENU; + + return packed; +} + +/* + * Add a frequency to the list from packed data + * Packed data is used for saving to FLASH + */ +void EE_AddPackedFrequency(uint32_t packedFreq) +{ + uint32_t frequency = packedFreq & FREQ_PACK_MASK_FREQ; + //FREQ_TYPE_t type = (packedFreq & FREQ_PACK_MASK_TYPE) >> FREQ_PACK_SHIFT_TYPE; + bool enabled = packedFreq & FREQ_PACK_MASK_ENABLED; + //bool inMenu = packedFreq & FREQ_PACK_MASK_INMENU; + + fgen_addFrequency(frequency, enabled, 1, FT_ACTIVE); //inMenu always 1, all FT_ACTIVE +} + + /* * Load data from EEPROM */ @@ -109,7 +141,7 @@ bool EE_LoadFrequencies(void) for(uint32_t i = 0; i < tempNumFreqs; i++) { uint32_t packedFreq = EE_ReadUINT32(EE_FREQ_START + EE_BYTES_PER_WORD * i); - FREQ_AddPackedFrequency(packedFreq); + EE_AddPackedFrequency(packedFreq); } } @@ -134,11 +166,12 @@ void EE_SaveData(void) EE_WriteBytes(EE_DATA_TIMER, &tmr.autoShutdown, 1); // Save Power down timer status //Save Frequencies - uint32_t numFreqs = FREQ_GetNumFrequencies(); + uint32_t numFreqs = fgen_getNumFrequencies(); + EE_WriteUINT32(EE_FREQ_NUM, numFreqs); for(uint32_t i = 0; i < numFreqs; i++) { - EE_WriteUINT32(EE_FREQ_START + EE_BYTES_PER_WORD * i, FREQ_GetPackedFrequency(i)); + EE_WriteUINT32(EE_FREQ_START + EE_BYTES_PER_WORD * i, EE_GetPackedFrequency(i)); } } diff --git a/source/fgen.c b/source/fgen.c new file mode 100644 index 0000000..0a74c49 --- /dev/null +++ b/source/fgen.c @@ -0,0 +1,407 @@ +#include +#include "fgen.h" +#include "dds.h" +#include "io.h" +#include "spi.h" +#include "eeprom.h" +#include "arm_math.h" +#include "soft_timer.h" + +static fgen_t _fgen; + +enum +{ + FREQ_512 = 512, + FREQ_3K14 = 3140, + FREQ_8K = 8192, +}; + +static float V_coeff_lo_Chk(uint32_t f1) +{ + float a; + switch(f1) + { + case 1 ... 940: + a= 0.876923; + break; + case 941 ... 1170: + a = 0.911538; + break; + case 1171 ... 6000: + a = 0.97083; + break; + + case 6001 ... 8009: + a = 1.025; + + break; + case 8010 ... 9820: + a = 1.025; + break; + case 9821 ... 29430: + a = 0.81; + break; + case 29431 ... 32768: + a = 0.81;//1.009; + break; + case 32769 ... 44100: + a = 1.035; + break; + case 44101 ... 65536: + a = 1.0; + break; + case 65537 ... 80000: + a = 1.1; + break; + case 80001 ... 199999: + a = 1.36; + break; + case 200000 ... 480000: + a = 4.5; + break; + default: + a = 0.53; + } + return(a); +} + + + +static float V_coeff_hi_Chk(uint32_t f1) +{ + return(0); +} + +static float I_coeff_lo_Chk(uint32_t f1) +{ + float a; +// a = freqArray[Search_for_frq(f1)].i_coeff_lo; + switch(f1) + { + case 1 ... 500: + a = 1; + break; + case 501 ... 870: + a= 0.8396; + break; + case 871 ... 1170: + a = 0.8105; + break; + case 1171 ... 3139: + a = 0.8634; + break; + case 3140 ... 6000: + a = 0.8634; + break; + case 6001 ... 8009: + a = 0.8634; + + break; + case 8010 ... 9820: + a = 0.8976; + break; + case 9821 ... 29430: + a = 0.8976; + break; + case 29431 ... 32768: + a = 0.8976; + break; + case 32769 ... 44100: + a = 0.91; + break; + case 44101 ... 65536: + a = 1.015; + break; + case 65537 ... 199999: + a = 1.255; + break; + case 200000 ... 480000: + a = 3.111; + break; + default: + a = 0.8976; + } + return(a); +} + +static float I_coeff_hi_Chk(uint32_t f1) +{ + float a; + + switch(f1) + { + case 1 ... 940: + a= 0.47; + break; + case 941 ... 1170: + a = 0.49; + break; + case 1171 ... 6000: + a = 0.482; + break; + + case 6001 ... 8009: + a = 0.53; + + break; + case 8010 ... 9820: + a = 0.53; + break; + case 9821 ... 29430: + a = 0.69; + break; + case 29431 ... 32768: + a = 0.71333; + break; + case 32769 ... 44100: + a = 1.035; + break; + case 44101 ... 65536: + a = 1.35; + break; + case 65537 ... 200000: + a = 1.36; + break; + case 200001 ... 480000: + a = 2.111; + break; + default: + a = 0.53; + } + + return(a); +} + + +dds_t* fgen_getDDS(dds_type_t dds) +{ + return &_fgen.dds[dds]; +} + +void fgen_enableDDS(dds_type_t dds, bool enable) +{ + +} + +void fgen_clearFrequencies(void) +{ + for(uint32_t i = 0; i < _fgen.numFrequencies; i++) + { + _fgen.frequencies[i].frequency = 0; + _fgen.frequencies[i].enabled = 0; + + } + + _fgen.numFrequencies = 0; +} + +void fgen_addFrequency(uint32_t frequency, uint8_t enabled, uint8_t inMenu, FREQ_TYPE_t type) +{ + if(!inMenu) + { + return; //ignore freqs that are not in menu + } + + if((type != FT_ACTIVE) && (type != FT_LD_ACTIVE)) + { + return; //ignore RX frequency types + } + + FREQUENCY_t *freq = &_fgen.frequencies[_fgen.numFrequencies]; + + freq->ldFrequency = 0; + if(type == FT_LD_ACTIVE) + { + if(frequency <= FREQ_LD_SWITCH_POINT) + { + freq->ldFrequency = frequency * 2; + } + else if(frequency <= FREQ_LD_MAX_FREQUENCY) + { + freq->ldFrequency = frequency / 2; //TODO: This will break for odd frequencies since it's an integer. Need to rework freqs... + } + } + + float32_t v_coeff_lo = V_coeff_lo_Chk(frequency); + float32_t i_coeff_hi = I_coeff_hi_Chk(frequency); + float32_t i_coeff_lo = I_coeff_lo_Chk(frequency); + float32_t v_coeff_hi = V_coeff_hi_Chk(frequency); //always 0 + + + + freq->frequency = frequency; + + freq->enabled = enabled; + + freq->v_coeff_hi = v_coeff_hi; + freq->v_coeff_lo = v_coeff_lo; + freq->i_coeff_hi = i_coeff_hi; + freq->i_coeff_lo = i_coeff_lo; + + _fgen.numFrequencies++; + +} + +FREQUENCY_t *fgen_getByIndex(int index) +{ + if (index >= _fgen.numFrequencies) + { + return NULL; + } + + return &_fgen.frequencies[index]; +} + +// find the nearest enabled frequency higher than freq +FREQUENCY_t* fgen_findNearest(uint32_t freq) +{ + for (int i=0; i < _fgen.numFrequencies; ++i) + { + FREQUENCY_t *f = &_fgen.frequencies[i]; + + if (f->frequency >= freq) + { + return f; + } + + } + + return NULL; +} + +uint32_t fgen_getNumFrequencies(void) +{ + return _fgen.numFrequencies; +} + +/* Generate name for the frequency at the specified index + * @param index index in the frequency list + * @param *string pointer to the storage location for the name string + */ +void fgen_getFrequencyName(FREQUENCY_t *freq, uint8_t *string) +{ + //Generate frequency name + // < 1000Hz: "xxxHz" + // < 10kHz: "x.xxkHz" + // < 100kHz: "xx.xkHz" + // >=100kHz: "xxxkHz" + + uint32_t freqTemp = freq->frequency; //the numeric freqTemp + + if(freq->ldFrequency != 0) + { + if(freqTemp < 1000) + { + sprintf(string, "LD %dHz", freqTemp); + } + else if(freqTemp < 10000) + { + sprintf(string, "LD %.2fkHz", (float32_t)freqTemp / 1000.0); + } + else + { + sprintf(string, "ERROR"); + } + } + else + { + if(freqTemp < 1000) + { + sprintf(string, "%dHz", freqTemp); + } + else if(freqTemp < 10000) + { + sprintf(string, "%.2fkHz", (float32_t)freqTemp / 1000.0); + } + else if(freqTemp < 100000) + { + sprintf(string, "%.1fkHz", (float32_t)freqTemp / 1000.0); + } + else if(freqTemp < 500000) + { + sprintf(string, "%.0fkHz", (float32_t)freqTemp / 1000.0); + } + else + { + sprintf(string, "ERROR"); + } + } +} + + +static void loadDefaults(void) +{ + //These are the FACTORY TEST Frequencies + fgen_clearFrequencies(); + + fgen_addFrequency(512, 1, 1, FT_ACTIVE); + fgen_addFrequency(3140, 1, 1, FT_ACTIVE); + fgen_addFrequency(8192, 1, 1, FT_ACTIVE); + fgen_addFrequency(29433, 1, 1, FT_ACTIVE); + fgen_addFrequency(32770, 1, 1, FT_ACTIVE); + fgen_addFrequency(65055, 1, 1, FT_ACTIVE); + fgen_addFrequency(88779, 1, 1, FT_ACTIVE); +} + + +static bool loadFrequencies(void) +{ + bool success = true; + + //Load frequencies + uint32_t tempNumFreqs = EE_ReadUINT32(EE_FREQ_NUM); + if((tempNumFreqs > FREQ_MAX_NUM) || (tempNumFreqs == 0)) //Error check numFreqs + { + loadDefaults(); + } + else + { + for(uint32_t i = 0; i < tempNumFreqs; i++) + { + uint32_t packedFreq = EE_ReadUINT32(EE_FREQ_START + EE_BYTES_PER_WORD * i); + + uint32_t frequency = packedFreq & FREQ_PACK_MASK_FREQ; + bool enabled = packedFreq & FREQ_PACK_MASK_ENABLED; + + fgen_addFrequency(frequency, enabled, 1, FT_ACTIVE); //inMenu always 1, all FT_ACTIVE + + } + } + + return success; +} + +void fgen_init(void) +{ + uint32_t tmp; + gpio_pin_t resetPin; + + // init sets reset + resetPin.port = PORT(PIN_SIG_RESET); + resetPin.pin = PIN (PIN_SIG_RESET); + dds_init(&_fgen.dds[DDS_SIGNAL], SIGNAL, resetPin); + + resetPin.port = PORT(PIN_SD_RESET); + resetPin.pin = PIN (PIN_SD_RESET); + dds_init(&_fgen.dds[DDS_DIRECTION], SDSIGNAL, resetPin); + + resetPin.port = PORT(PIN_RAMP_RST); + resetPin.pin = PIN (PIN_RAMP_RST); + dds_init(&_fgen.dds[DDS_RAMP], RAMP, resetPin); + + stimer_delay(10); + + // clear reset after delay + for (int i=0; i -#include -#include -#include "arm_math.h" -#include "spi.h" -#include "fsl_gpio.h" -#include "frq.h" -#include "LPC54114_cm4.h" -#include "display.h" -#include "utils.h" -#include "init.h" -#include "amps.h" -#include "ports.h" -#include "timer.h" -#include "mode.h" -#include "stdbool.h" -#include "eeprom.h" -#include "pwr_level.h" -#include "System/system.h" - -extern uint8_t Test_Mode, catch_up_flag; -extern uint8_t Taps_Flag; -extern uint32_t new_freq; -extern uint8_t frequency,Cur_Mode,LD_Flag; -extern uint8_t Dds_Pot_Val[2]; - -uint8_t Tx_mode, frq_chg_tmr,old_freq; -FREQDATA_t freq; -FREQUENCY_t freqArray[FREQ_MAX_NUM]; - -uint8_t foo[4]; //stuff the 2 16-bit values into an array of 4 uint8_t -uint8_t frq_update_flag; - - -extern uint8_t Power_Level; -extern ClampData_t clampData; -extern uint32_t systemTime; - -uint32_t Calc_Freq(uint32_t fout) // Calculate frequency word for DDS -{ -float Freg; -uint32_t Frq_result; - - Freg = fout * 268435456.0; // FREG = (Frequency * 2^28)/fclk = 12MHz normally - Frq_result = Freg/DDS_CLK + 0.5; - - return(Frq_result); - -} - -void Load_Ramp(uint32_t ramp_freq) // Sets up RAMP DDS for PWM AMP - -{ - - uint16_t ramp_hi = FREQ0_REG; //top 2 bits 0x01 for Freq0 register address - uint16_t ramp_lo = FREQ0_REG; - - - if (ramp_freq > 0) - { - Send_Ctrl_Word(RAMP_CTRL_WORD1,RAMP); // send Control word to hold setup - - ramp_lo |= (ramp_freq & 0x3fff); - ramp_freq >>= 14; - ramp_hi |= (ramp_freq & 0x3fff); - - //ramp_hi |= (ramp_freq & 0xc000) >> 14; // Preserve upper 2 bits - - - foo[0] = (uint8_t)(ramp_lo >> 8); //LS 16-bit word, MSB - foo[1] = (uint8_t)(ramp_lo & 0x00ff); //LS 16-bit word, LSB - foo[2] = (uint8_t)(ramp_hi >> 8); - foo[3] = (uint8_t)(ramp_hi & 0x00ff); - - SPI0_SendBytes(foo, 4, RAMP); - - Send_Ctrl_Word(RAMP_CTRL_WORD2,RAMP); // send Control word to release setup - } - else - { - Send_Ctrl_Word(RAMP_CTRL_WORD3,RAMP); // Control word to hold setup and put part to sleep - GPIO_PinWrite(GPIO, RAMP_PORT, RAMP_RST_GPIO_PIN, HI); //Hold RST HI - while(1); //stop - } -} - -void Load_Frq_Gen(FRQ_OUT_SELECT_t Freq_Mode, int32_t f1, int32_t f2) - -{ -uint8_t x=0; -uint16_t freq_hi = FREQ0_REG; -uint16_t freq_lo = FREQ0_REG; - - if (Freq_Mode == NULL_FREQ) - x = 1; // Switch both DDS chips OFF - - if (Freq_Mode == SINGLE) - { - x = 2; // Switch the primary DDS ON - - - Send_Ctrl_Word(FRQ_CTRL_WORD1,SIGNAL); // send Control word to hold setup - - freq_lo |= (f1 & 0x3fff); - f1 >>= 14; - freq_hi |= (f1 & 0x3fff); - - foo[0] = (uint8_t)(freq_lo >> 8); //LS 16-bit word, MSB - foo[1] = (uint8_t)(freq_lo & 0x00ff); //LS 16-bit word, LSB - foo[2] = (uint8_t)(freq_hi >> 8); - foo[3] = (uint8_t)(freq_hi & 0x00ff); - -// freq_hi |= (f1 & 0xc000) >> 14; // Preserve upper 2 bits -// freq_lo |= (f1 & 0x3fff); -// foo[0] = (uint8_t)(freq_lo >> 8); -// foo[1] = (uint8_t)(freq_lo & 0x00ff); -// foo[2] = (uint8_t)(freq_hi >> 8); -// foo[3] = (uint8_t)(freq_hi & 0x00ff); - - SPI0_SendBytes(foo, 4, SIGNAL); - - - Send_Ctrl_Word(FRQ_CTRL_WORD2,SIGNAL); // send Control word to release setup - - - - } - - if (Freq_Mode == DUAL) - { // ############---Switch both DDS chips ON SYNCHRONOUSLY--###### - - // Set RESET to hold - // Load F1 - Send_Ctrl_Word(FRQ_CTRL_WORD1,SIGNAL); // send Control word to hold setup - - freq_lo |= (f1 & 0x3fff); - f1 >>= 14; - freq_hi |= (f1 & 0x3fff); - - foo[0] = (uint8_t)(freq_lo >> 8); //LS 16-bit word, MSB - foo[1] = (uint8_t)(freq_lo & 0x00ff); //LS 16-bit word, LSB - foo[2] = (uint8_t)(freq_hi >> 8); - foo[3] = (uint8_t)(freq_hi & 0x00ff); - SPI0_SendBytes(foo, 4, SIGNAL); - - Send_Ctrl_Word(FRQ_CTRL_WORD2,SIGNAL); // send Control word to release setup - - - // Load F2 - freq_hi = FREQ0_REG; - freq_lo = FREQ0_REG; - - Send_Ctrl_Word(FRQ_CTRL_WORD1,SDSIGNAL); // send Control word to hold setup - - - - freq_lo |= (f2 & 0x3fff); - f2 >>= 14; - freq_hi |= (f2 & 0x3fff); - - foo[0] = (uint8_t)(freq_lo >> 8); //LS 16-bit word, MSB - foo[1] = (uint8_t)(freq_lo & 0x00ff); //LS 16-bit word, LSB - foo[2] = (uint8_t)(freq_hi >> 8); - foo[3] = (uint8_t)(freq_hi & 0x00ff); - SPI0_SendBytes(foo, 4, SDSIGNAL); - - - Send_Ctrl_Word(FRQ_CTRL_WORD2,SDSIGNAL); // send Control word to release setup - -// Send_Ctrl_Word(SLP_CTRL_WRD,SIGNAL); // TEST ONLY REMOVE Put unused DDS to sleep - - - -// Send_Ctrl_Word(PHASE_RESET,SIGNAL); // // Set Phase F1 to 0 - - - -// Send_Ctrl_Word(PHASE_RESET,SDSIGNAL); // Set Phase F2 to 0 - - - -// Send_Ctrl_Word(FRQ_CTRL_WORD2,BOTH_SIGNAL); // Send release code word simultaneously - - // End#. - - - // GPIO_PinWrite(GPIO, 1, 13, 1); - // Set high SD_RST - // Set high SIG_RST - - // Set up both Sine Wave generators - - // set low SD_RST - // set low SIG_RST. - } -} - -void Send_Ctrl_Word(uint16_t Control_Reg, SPI_MODE_t mode) -{ -//Set the control register Send MS Byte first then LSByte - - foo[0] = (uint8_t)(Control_Reg >> 8); // Reset bit held - foo[1] = (uint8_t)(Control_Reg & 0x00ff); - SPI0_SendBytes(foo, 2, mode); - -} - - - - -void AddFrequency(uint32_t frequency1,uint32_t frequency2, uint8_t enabled, uint8_t bc_enabled,uint8_t bc_mask,uint8_t pot,float i_lo,float i_hi,float v_lo,float v_hi) -{ - uint32_t i = freq.numFrequencies; - - freqArray[i].frequency1 = frequency1; - freqArray[i].frequency2 = frequency2; - - freqArray[i].enabled = enabled; - freqArray[i].bc_enabled = bc_enabled; - - freqArray[i].bc_Mask = bc_mask; - freqArray[i].max_pot = pot; - -// freqArray[i].v_coeff_lo = 0.876923; - freqArray[i].v_coeff_lo = v_lo; - freqArray[i].i_coeff_hi = i_hi; - freqArray[i].i_coeff_lo = i_lo; - - freq.numFrequencies++; -} - -void ClearFreqArray(void) -{ - for(uint32_t i = 0; i < FREQ_MAX_NUM; i++) - { - freqArray[i].frequency1 = 0; - freqArray[i].frequency2 = 0; - freqArray[i].enabled = 0; - freqArray[i].bc_enabled = 0; - - } -} - -void FREQ_Init(void) -{ - uint32_t tmp; - - GPIO_PinWrite(GPIO, SIGNAL_PORT, SIG_RST_GPIO_PIN, 1); // Set all RESET signals to RESET - GPIO_PinWrite(GPIO, SIGNAL_PORT, SD_RST_GPIO_PIN, 1); - GPIO_PinWrite(GPIO, SIGNAL_PORT, RAMP_RST_GPIO_PIN, 1); - Delay_Ticks(1); - GPIO_PinWrite(GPIO, SIGNAL_PORT, RAMP_RST_GPIO_PIN, 0); - GPIO_PinWrite(GPIO, SIGNAL_PORT, SIG_RST_GPIO_PIN, 0); // Set all RESET signals to RESET - GPIO_PinWrite(GPIO, SIGNAL_PORT, SD_RST_GPIO_PIN, 0); // 8/26/24 - - freq.numFrequencies = 0; - - - if(!EE_LoadFrequencies()) - { - FREQ_LoadFactoryDefaults(); - } - - Send_Ctrl_Word(SLP_CTRL_WRD,SDSIGNAL); // Put unused DDS to sleep - - Load_Ramp(6710886); // 300KHz ramp waveform - -} - -void FREQ_LoadFactoryDefaults(void) -{ - //These are the FACTORY TEST Frequencies - FREQ_ClearFrequencies(); - FREQ_AddFrequency(512, 1, 1, FT_ACTIVE); - FREQ_AddFrequency(3140, 1, 1, FT_ACTIVE); - FREQ_AddFrequency(8192, 1, 1, FT_ACTIVE); - FREQ_AddFrequency(29433, 1, 1, FT_ACTIVE); - FREQ_AddFrequency(32770, 1, 1, FT_ACTIVE); - FREQ_AddFrequency(65055, 1, 1, FT_ACTIVE); - FREQ_AddFrequency(88779, 1, 1, FT_ACTIVE); - -} - - -/* - * Pack frequency data and return - * Packed data is used for saving to FLASH - */ -uint32_t FREQ_GetPackedFrequency(uint32_t index) -{ - uint32_t packed = freqArray[index].frequency1; - //packed |= freqArray[index].type << FREQ_PACK_SHIFT_TYPE; - packed |= (uint32_t)freqArray[index].enabled << FREQ_PACK_SHIFT_ENABLED; - //packed |= (uint32_t)freqArray[index].inMenu << FREQ_PACK_SHIFT_INMENU; - - return packed; -} - -/* - * Add a frequency to the list from packed data - * Packed data is used for saving to FLASH - */ -void FREQ_AddPackedFrequency(uint32_t packedFreq) -{ - uint32_t frequency = packedFreq & FREQ_PACK_MASK_FREQ; - //FREQ_TYPE_t type = (packedFreq & FREQ_PACK_MASK_TYPE) >> FREQ_PACK_SHIFT_TYPE; - bool enabled = packedFreq & FREQ_PACK_MASK_ENABLED; - //bool inMenu = packedFreq & FREQ_PACK_MASK_INMENU; - - FREQ_AddFrequency(frequency, enabled, 1, FT_ACTIVE); //inMenu always 1, all FT_ACTIVE -} - - - -/* - * Clear the frequency list - * Zero out all data and set freq.numFrequencies to zero - */ -void FREQ_ClearFrequencies(void) -{ -// frq_update_flag = true; - for(uint32_t i = 0; i < freq.numFrequencies; i++) - { - freqArray[i].frequency1 = 0; - freqArray[i].enabled = 0; - - } - - freq.numFrequencies = 0; - - frequency = 0; -} - -/* - * Add a Frequency from UM Setup - */ -void FREQ_AddFrequency(uint32_t f1, uint8_t enabledTemp, uint8_t inMenu, FREQ_TYPE_t type) -{ - if(!inMenu) - { - return; //ignore freqs that are not in menu - } - - if((type != FT_ACTIVE) && (type != FT_LD_ACTIVE)) - { - return; //ignore RX frequency types - } - - //TODO: Calculate other things in Keith's freqArray[] here - //frequency2 for LD needs a function to determine 2nd frequency - //Doesn't matter yet since RX doesn't support LD - //scale factors - //other crap - - //f2 - uint32_t f2 = 0; - if(type == FT_LD_ACTIVE) - { - if(f1 <= FREQ_LD_SWITCH_POINT) - { - f2 = f1 * 2; - } - else if(f1 <= FREQ_LD_MAX_FREQUENCY) - { - f2 = f1 / 2; //TODO: This will break for odd frequencies since it's an integer. Need to rework freqs... - } - else - { - f2 = 0; - } - } - - //TODO: Generate values for these!!!!!!!!!! - uint32_t bc_enabledTemp = BC_Enable_Chk(f1); - uint32_t bc_maskTemp = BC_Mask_Chk(f1); //Todo remove as unused - uint32_t max_pot = Max_Pot_Chk(f1); - float32_t v_coeff_lo = V_coeff_lo_Chk(f1); - float32_t i_coeff_hi = I_coeff_hi_Chk(f1); - float32_t i_coeff_lo = I_coeff_lo_Chk(f1); - float32_t v_coeff_hi = V_coeff_hi_Chk(f1); //always 0 - - - AddFrequency(f1, f2, enabledTemp, bc_enabledTemp, bc_maskTemp, max_pot, i_coeff_lo, i_coeff_hi, v_coeff_lo, v_coeff_hi); -} - - -uint8_t BC_Enable_Chk(uint32_t f1) -{ - if((f1 >= BCAST_MIN) && (f1 < BCAST_MAX+1)) - return(1); - else - return(0); -} - -uint8_t BC_Mask_Chk(uint32_t f1) -{ - if((f1 >= BCAST_MIN) && (f1 < 9820)|| (f1 >= 200000) && (f1 <=480000)) - return(MASK_144); - else if(f1 == 29430 || f1==32768 || f1==65536 || f1==131072) - return(MASK_58); - else if(f1 == 44624 || f1== 83078) - return(MASK_15); - else - { - return 99; - } - -} - -uint8_t Max_Pot_Chk(uint32_t f1) -{ - if(f1 < 440) - return(180);//165 - if((f1 >= 440) && (f1 < 12000)) // 29430 - return(235); - - if((f1 >= 12000) && (f1 < 29430)) - return(245); - - if((f1 >= 29430)&& (f1 <= 44500)) - return(250); - if((f1 > 44624) && (f1 < 200000)) - return(200); - if(f1 == 200000) - return(140); - else - return(140); - -//TODO set up default value -} - - -float V_coeff_lo_Chk(uint32_t f1) -{ - float a; - switch(f1) - { - case 1 ... 940: - a= 0.876923; - break; - case 941 ... 1170: - a = 0.911538; - break; - case 1171 ... 6000: - a = 0.97083; - break; - - case 6001 ... 8009: - a = 1.025; - - break; - case 8010 ... 9820: - a = 1.025; - break; - case 9821 ... 29430: - a = 0.81; - break; - case 29431 ... 32768: - a = 0.81;//1.009; - break; - case 32769 ... 44100: - a = 1.035; - break; - case 44101 ... 65536: - a = 1.0; - break; - case 65537 ... 80000: - a = 1.1; - break; - case 80001 ... 199999: - a = 1.36; - break; - case 200000 ... 480000: - a = 4.5; - break; - default: - a = 0.53; - } - return(a); -} - - - -float V_coeff_hi_Chk(uint32_t f1) -{ - return(0); -} - -float I_coeff_lo_Chk(uint32_t f1) -{ - float a; -// a = freqArray[Search_for_frq(f1)].i_coeff_lo; - switch(f1) - { - case 1 ... 500: - a = 1; - break; - case 501 ... 870: - a= 0.8396; - break; - case 871 ... 1170: - a = 0.8105; - break; - case 1171 ... 3139: - a = 0.8634; - break; - case 3140 ... 6000: - a = 0.8634; - break; - case 6001 ... 8009: - a = 0.8634; - - break; - case 8010 ... 9820: - a = 0.8976; - break; - case 9821 ... 29430: - a = 0.8976; - break; - case 29431 ... 32768: - a = 0.8976; - break; - case 32769 ... 44100: - a = 0.91; - break; - case 44101 ... 65536: - a = 1.015; - break; - case 65537 ... 199999: - a = 1.255; - break; - case 200000 ... 480000: - a = 3.111; - break; - default: - a = 0.8976; - } - return(a); -} - -float I_coeff_hi_Chk(uint32_t f1) -{ - float a; - a = freqArray[Search_for_frq(f1)].i_coeff_hi; - switch(f1) - { - case 1 ... 940: - a= 0.47; - break; - case 941 ... 1170: - a = 0.49; - break; - case 1171 ... 6000: - a = 0.482; - break; - - case 6001 ... 8009: - a = 0.53; - - break; - case 8010 ... 9820: - a = 0.53; - break; - case 9821 ... 29430: - a = 0.69; - break; - case 29431 ... 32768: - a = 0.71333; - break; - case 32769 ... 44100: - a = 1.035; - break; - case 44101 ... 65536: - a = 1.35; - break; - case 65537 ... 200000: - a = 1.36; - break; - case 200001 ... 480000: - a = 2.111; - break; - default: - a = 0.53; - } - - return(a); -} - -uint8_t Search_for_frq(uint32_t f1) -{ - uint8_t i =0; - - for(i=0; i < FREQ_MAX_NUM - 1; i++) - { - if((f1 == freqArray[i].frequency1)) //(freqArray[frq_tmp].enabled > 0) - break; - - } - return(i); - -} - - - -void FREQ_ToggleEnable(uint32_t selected) //selected is same as frequency index -{ - freqArray[selected].enabled ^= 1; - -} - -FREQUENCY_t FREQ_GetFreqByIndex(uint32_t index) -{ - return freqArray[index]; -} - -FREQUENCY_t* FREQ_GetFreqPointerByIndex(uint32_t index) -{ - return &freqArray[index]; -} - -uint32_t FREQ_GetNumFrequencies(void) -{ - return freq.numFrequencies; -} - - -uint8_t Next_Frequency(uint8_t frq_tmp) // increments frequency -{ - -uint8_t found = false; -uint8_t i; - - frq_tmp = frequency; - - if (frq_tmp < FREQ_MAX_NUM - 1) - frq_tmp++; - else - frq_tmp = 0; - - for(i=0; i < FREQ_MAX_NUM - 1; i++) - { - if(Check_freq_enabled(frq_tmp)) //(freqArray[frq_tmp].enabled > 0) - { - found = 1; - break; - } - if (frq_tmp < FREQ_MAX_NUM - 1) - frq_tmp++; - else - frq_tmp= 0; - } - - -return(frq_tmp); -} - -bool Check_freq_enabled(uint8_t frq_tmp) -{ - bool x; - - x = false; - - if(Cur_Mode != BROADCAST && (freqArray[frq_tmp].enabled > 0)) - x= true; - else - if ((Cur_Mode == BROADCAST) && (freqArray[frq_tmp].bc_enabled > 0) && (freqArray[frq_tmp].enabled > 0)) - x = true; - return(x); -} - - -/* Generate name for the frequency at the specified index - * @param index index in the frequency list - * @param *string pointer to the storage location for the name string - */ -void FREQ_GetFrequencyName(uint32_t index, uint8_t *string) -{ - //Generate frequency name - // < 1000Hz: "xxxHz" - // < 10kHz: "x.xxkHz" - // < 100kHz: "xx.xkHz" - // >=100kHz: "xxxkHz" - - uint32_t freqTemp = freqArray[index].frequency1; //the numeric freqTemp - - if(freqArray[index].frequency2 != 0) - { - if(freqTemp < 1000) - { - sprintf(string, "LD %dHz", freqTemp); - } - else if(freqTemp < 10000) - { - sprintf(string, "LD %.2fkHz", (float32_t)freqTemp / 1000.0); - } - else - { - sprintf(string, "ERROR"); - } - } - else - { - if(freqTemp < 1000) - { - sprintf(string, "%dHz", freqTemp); - } - else if(freqTemp < 10000) - { - sprintf(string, "%.2fkHz", (float32_t)freqTemp / 1000.0); - } - else if(freqTemp < 100000) - { - sprintf(string, "%.1fkHz", (float32_t)freqTemp / 1000.0); - } - else if(freqTemp < 500000) - { - sprintf(string, "%.0fkHz", (float32_t)freqTemp / 1000.0); - } - else - { - sprintf(string, "ERROR"); - } - } -} - - -/*while(!found && frq_tmp < FREQ_MAX_NUM) -{ - frq_tmp++; - - if(freqArray[frq_tmp].enabled > 0) - found = true; - - if(frq_tmp >= FREQ_MAX_NUM) - frq_tmp = FREQ_MIN; - -} */ - -void Update_Min_Frequency(void) -{ - -} - - - -void Update_Frequency() -{ - uint32_t tmp; - - if (Cur_Mode != BROADCAST) // IF - ! Broadcast - { - Enable_Amplifier(); // Select correct amplifier - Select_Transformer(); // Select correct transformer - - // tmp = Calc_Freq(freqArray[frequency].frequency1); - // Load_Frq_Gen(SINGLE,tmp,0); // # update the frequency generators - - Set_Selected_Freq(); - - Taps_Flag = false; - - - if((ACCY_GetConnectedAccessory(1) == ID_CLAMP) || (ACCY_GetConnectedAccessory(2) == ID_CLAMP)) - { - Get_Clamp_Value(); // Ensure correct table for Clamp amplitude - SPI0_SendBytes(Dds_Pot_Val, 2, AMPLITUDE); - } - else - if ((ACCY_GetConnectedAccessory(1) == ID_CLAMP2) || (ACCY_GetConnectedAccessory(2) == ID_CLAMP2)) - { - clampData.regulate = true; - - if (freqArray[frequency].frequency1 < 800) - { - clampData.maxPower = MAX_POWER_TARGET_VLF; - } - else - if (freqArray[frequency].frequency1 < 45000) - { - clampData.maxPower = MAX_POWER_TARGET_LF; - } - else - { - clampData.maxPower = MAX_POWER_TARGET_HF; - } - - Get_Clamp_Value(); - - clampData.timeout = systemTime + CLAMP_REGULATE_DELAY; - - if (Power_Level > 0) - { - clampData.prevPowerLevel = 0; - setTestPot(); - } - - } - - // Select_Output_Port(ONE); // Switch in the correct pathway - } - else // else - { - All_Amps_Off(); // shut down Amplifiers DC connections - Disable_DC(); - Enable_BC(); // Enable BCAST circuitry using either Minimum or previously selected freq - LD_Flag = false; - - // Init_PWM(); // update PWM generators - } - old_freq = frequency; // Indicate done -} - -void Set_Selected_Freq(void) -{ - uint32_t frq1; - uint32_t frq2; - - if(LD_Flag && freqArray[frequency].frequency1 <= MAX_LD_FREQ) - { - frq1 = Calc_Freq(freqArray[frequency].frequency1); - frq2 = freqArray[frequency].frequency1; - frq2 = frq2 * 2.0; -// frq2 = 9100; // test only - frq2 = Calc_Freq(frq2); - Load_Frq_Gen(DUAL,frq1,frq2); // # update the frequency generators - - } - else - { - frq1 = Calc_Freq(freqArray[frequency].frequency1); - frq2 = 0; - Load_Frq_Gen(SINGLE,frq1,frq2); // # update the frequency generators - - Send_Ctrl_Word(SLP_CTRL_WRD,SDSIGNAL); // Put unused DDS to sleep - } -} - -void Reset_DDS(void) -{ - GPIO_PinWrite(GPIO, SIGNAL_PORT, SIG_RST_GPIO_PIN, 1); // Set all RESET signals to RESET - GPIO_PinWrite(GPIO, SIGNAL_PORT, SD_RST_GPIO_PIN, 1); - GPIO_PinWrite(GPIO, SIGNAL_PORT, RAMP_RST_GPIO_PIN, 1); - Delay_Ticks(1); - GPIO_PinWrite(GPIO, SIGNAL_PORT, RAMP_RST_GPIO_PIN, 0); - GPIO_PinWrite(GPIO, SIGNAL_PORT, SIG_RST_GPIO_PIN, 0); // Set all RESET signals to RESET -} -void Change_to_next_dc_frq(void) -{ -uint32_t tmp_frqx; -uint8_t count; - - if((ACCY_GetConnectedAccessory(1) == ID_CLAMP) || (ACCY_GetConnectedAccessory(2) == ID_CLAMP)) - { - frequency = Next_Frequency(frequency); // increment the frequency - new_freq = freqArray[frequency].frequency1; - - if(freqArray[frequency].frequency1 <= MIN_CTYPE)// is frequecny > min - { - count = 0; - - while(freqArray[frequency].frequency1 < MIN_CTYPE && count < FREQ_MAX_NUM) - { - frequency = Next_Frequency(frequency); // increment the frequency - new_freq = freqArray[frequency].frequency1; - count++; - - } - - // tmp_frqx = Search_Frequency(256); // select minimum frequency for DC Clamp operation -// if (tmp_frqx < FREQ_MAX_NUM) // set up new min freq -// { -// frequency = tmp_frqx; -// new_freq = freqArray[frequency].frequency1; -// } - } - else - { -// frequency = Next_Frequency(frequency); // increment the frequency - new_freq = freqArray[frequency].frequency1; - - } - } - else - { - frequency = Next_Frequency(frequency); // increment the frequency - new_freq = freqArray[frequency].frequency1; - //Sys_Chk_tmr= DELAY_500MS; // Allow system settling before checking measurements - -// catch_up_flag = true; - - } - -} - -void Change_To_Next_BC_Freq(void) -{ - uint32_t tmp_frqx; - - if(Cur_Mode == BROADCAST) // Special case only if BC mode already selected - { - if (freqArray[frequency].frequency1 < BCAST_MIN) // if (freq < min freq) ToDo - - tmp_frqx = Search_Frequency(3140); // select minimum frequency for BCAST - if (tmp_frqx < FREQ_MAX_NUM) - { - frequency = tmp_frqx; - new_freq = freqArray[frequency].frequency1; - } - } - -} diff --git a/source/frq.h b/source/frq.h deleted file mode 100644 index 50ca6b0..0000000 --- a/source/frq.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * frq.h - * - * Created on: Jun 8, 2022 - * Author: Keith.Lloyd - */ - -#ifndef FRQ_H_ -#define FRQ_H_ - -#include "spi.h" - -typedef enum { - NULL_FREQ, - SINGLE, - DUAL -}FRQ_OUT_SELECT_t; - - -#define TX_SYS_CLK 12000000 // 12MHZ -#define DDS_CLK TX_SYS_CLK - - -#define FREQ_MAX_NUM 50 //Max number of frequencies allowed -#define FREQ_MIN 0 -#define FREQ0_REG 0x4000 // Address of internal 9838 register -#define FRQ_CTRL_WORD1 0x2100 // Control register with Reset bit active -#define FRQ_CTRL_WORD2 0x2000 // Exit Reset Control Word -//#define FRQ_CTRL_WORD2 0x2038 // Exit Reset Control Word for PLL Test -#define PHASE_RESET 0xC000 // PHASE Register 0 = 0; - -#define RAMP_CTRL_WORD1 0x2102 -#define RAMP_CTRL_WORD2 0x2002 -#define RAMP_CTRL_WORD3 0x2002 // TODO Places wavegen in sleep mode -#define SLP_CTRL_WRD 0x2180 // Power down unused DDS -#define SLP_CTRL_WRD2 0x21C0 -#define RAMP_PORT 1 -//#define RAMP_RST_GPIO_PIN 14 -#define HI 1 -#define BCAST_MIN 3140 -#define BCAST_MAX 200000 -#define DUMMY_FRQ 250 -#define MIN_BLOCK_FREQ 20000 -#define MASK_15 0b00000000 -#define MASK_58 0b00001000 -#define MASK_144 0b00011000 -#define CLK_MASK_BITS 0b11100111 -#define MAX_LD_FREQ 10000 - -//FREQUENCY PACKING - from RX so it has extra fields -#define FREQ_PACK_MASK_FREQ 0x0007ffff //target frequency bits 0 - 18 -#define FREQ_PACK_MASK_TYPE 0x00380000 //3-bit field for FREQ_TYPE_t. bits 19 - 21 -#define FREQ_PACK_SHIFT_TYPE 19 //Frequency type shift -#define FREQ_PACK_MASK_ENABLED 0x80000000 //enabled mask -#define FREQ_PACK_SHIFT_ENABLED 31 //enabled shift bit 31 -#define FREQ_PACK_MASK_INMENU 0x40000000 //inMenu mask -#define FREQ_PACK_SHIFT_INMENU 30 //inMenu shift bit 30 - -//Locate direction (LD) -#define FREQ_LD_MAX_FREQUENCY 10000 //LD runs at or below this frequency -#define FREQ_LD_SWITCH_POINT 1500 //At or below this freq, f2 is f1 * 2. above this f2 = f1 / 2 - -#define MIN_CTYPE 263 // Minimum clamp frequency. - - -typedef enum { - FT_ACTIVE, //active - FT_LD_ACTIVE, //active w/ Locate Direction - FT_POWER, //RX ONLY individual power - FT_GROUPED_POWER, //RX ONLY Radio style grouped power - FT_CATHODIC, //RX ONLY cathodic protection - Identical to individual power except naming in frequency menu - FT_SONDE, //RX ONLY - FT_RADIO, //RX ONLY - FT_FAULT_FIND, //RX ONLY fault finder - Has it's own dedicated frequency set. frequencies are NOT user definable -}FREQ_TYPE_t; - - - - - - - -//Data for individual frequencies -typedef struct { - uint32_t frequency1; //frequency in Hz - uint32_t frequency2; - uint8_t enabled; // - uint8_t bc_enabled; - uint8_t bc_Mask; - uint8_t max_pot; - float i_coeff_lo; - float i_coeff_hi; - float v_coeff_lo; - float v_coeff_hi; - -}FREQUENCY_t; - - -//General data for frequencies module -typedef struct { - uint32_t numFrequencies; //number of frequencies in freqArray -}FREQDATA_t; - - - - - -void FREQ_Init(void); -void FREQ_LoadFactoryDefaults(void); -uint32_t FREQ_GetPackedFrequency(uint32_t index); -void FREQ_AddPackedFrequency(uint32_t packedFreq); -void FREQ_ClearFrequencies(void); -void FREQ_AddFrequency(uint32_t f1, uint8_t enabledTemp, uint8_t inMenu, FREQ_TYPE_t type); -void Load_Ramp(uint32_t ramp_freq); -void Load_Frq_Gen(FRQ_OUT_SELECT_t, int32_t, int32_t); // NONE,either or both plus two data words -//void AddFrequency(uint32_t frequency, uint32_t frequency2, uint8_t enabled, uint8_t bc_enabled, uint8_t bc_mask); -uint8_t Next_Frequency(uint8_t frequency); -void FREQ_ToggleEnable(uint32_t selected); -FREQUENCY_t FREQ_GetFreqByIndex(uint32_t index); -FREQUENCY_t* FREQ_GetFreqPointerByIndex(uint32_t index); -uint32_t FREQ_GetNumFrequencies(void); -void FREQ_GetFrequencyName(uint32_t index, uint8_t *string); -void Send_Ctrl_Word(uint16_t Control_Reg, SPI_MODE_t mode); -uint32_t Calc_Freq(uint32_t fout); // Calculate frequency word for DDS -void Update_Min_Frequency(void); -void Update_Frequency(); -void Reset_DDS(void); -void AddFrequency(uint32_t frequency1,uint32_t frequency2, uint8_t enabled, uint8_t bc_enabled,uint8_t bc_mask,uint8_t pot,float i_lo,float i_hi,float v_lo,float v_hi); -bool Check_freq_enabled(uint8_t frq_tmp); -uint8_t BC_Enable_Chk(uint32_t f1); -uint8_t BC_Mask_Chk(uint32_t f1); -uint8_t Max_Pot_Chk(uint32_t f1); -float V_coeff_lo_Chk(uint32_t f1); -float V_coeff_hi_Chk(uint32_t f1); -float I_coeff_lo_Chk(uint32_t f1); -float I_coeff_hi_Chk(uint32_t f1); -uint8_t Search_for_frq(uint32_t f1); -void Change_to_next_dc_frq(void); -void Change_To_Next_BC_Freq(void); -void Set_Selected_Freq(void); - -extern FREQUENCY_t freqArray[]; - - -#endif /* FRQ_H_ */ diff --git a/source/io.c b/source/io.c index 3c10ef3..9447302 100644 --- a/source/io.c +++ b/source/io.c @@ -31,13 +31,30 @@ void io_update(void) void io_expanderSetSafe(void) { - _expanderState[BOT_SR] = 0; - _expanderState[MID_SR] = 0; - _expanderState[TOP_SR] = 0; + + io_expanderClearAll(NO_UPDATE); + + io_connectAmpAB(false, NO_UPDATE); + io_backlightOn(true, NO_UPDATE); + io_ampPsuOn(false, NO_UPDATE); io_update(); } +void io_connectAmpAB(bool connect, bool update) +{ + if (connect) + { + EXPANDER_CLEAR(DISCONNECT_AB, NO_UPDATE); + } + else + { + EXPANDER_SET(DISCONNECT_AB, NO_UPDATE); + } + + if (update) io_update(); +} + void io_expanderClearAll(bool update) { _expanderState[BOT_SR] = 0; @@ -51,36 +68,29 @@ void io_backlightOn(bool on, bool update) { if (on) { - EXPANDER_SET(BACKLIGHT_ON, update); + EXPANDER_SET(BACKLIGHT_ON, NO_UPDATE); } else { - EXPANDER_CLEAR(BACKLIGHT_ON, update); + EXPANDER_CLEAR(BACKLIGHT_ON, NO_UPDATE); } + + if (update) io_update(); } -void io_ampABOn(bool on, bool update) -{ - if (on) - { - EXPANDER_SET(AMP_AB_ON, update); - } - else - { - EXPANDER_CLEAR(AMP_AB_ON, update); - } -} void io_ampDOn(bool on, bool update) { if (on) { - EXPANDER_SET(AMP_D_EN, update); + EXPANDER_SET(AMP_D_EN, NO_UPDATE); } else { - EXPANDER_CLEAR(AMP_D_EN, update); + EXPANDER_CLEAR(AMP_D_EN, NO_UPDATE); } + + if (update) io_update(); } void io_broadcastOn(bool on, bool update) @@ -112,4 +122,4 @@ void io_ampPsuOn(bool on, bool update) } if (update) io_update(); -} \ No newline at end of file +} diff --git a/source/io.h b/source/io.h index c217bbf..bf5b731 100644 --- a/source/io.h +++ b/source/io.h @@ -90,10 +90,11 @@ void io_update(void); #define BYPASS_ON (MID_SR , LF_BYPASS) #define BACKLIGHT_ON (BOT_SR, BKLITE_ON) -#define AMP_AB_ON (TOP_SR, MUX_AB_AMP) +#define DISCONNECT_AB (TOP_SR, MUX_AB_AMP) #define BROADCAST_AMP_EN (MID_SR, ANT_AMP_EN) #define BROADCAST_AMP_PWR (TOP_SR, ANT_AMP_SW) + #define AMP_D_EN (MID_SR, DAMP_EN) #define _AMP_PSU_ON (BOT_SR, AMP_PSU) @@ -112,9 +113,11 @@ typedef struct void io_expanderClearAll(bool update); void io_backlightOn(bool on, bool update); -void io_ampABOn(bool on, bool update); void io_ampDOn(bool on, bool update); void io_broadcastOn(bool on, bool update); void io_ampPsuOn(bool on, bool update); +void io_connectAmpAB(bool connect, bool update); +void io_expanderSetSafe(void); + #endif diff --git a/source/lcd.c b/source/lcd.c index cc7fbd8..5553ed0 100644 --- a/source/lcd.c +++ b/source/lcd.c @@ -204,18 +204,7 @@ void Display_Update(void) LCD_Clear(); //clear the frameBuffer Display_USB_Status(); - if((!Check_For_Clamp_New()) && Display_warning_tmr == 0) - Display_Over_Voltage_Status(); - Display_Tx_Status(); - - //Display_OnScreen_Diagnostics(); // temporary for debug - -#if 0 //info - if(Diag_Flag) - Display_OnScreen_Diagnostics(); - -#endif LCD_Update(); } diff --git a/source/main.c b/source/main.c index 4f3ecfe..2500e04 100644 --- a/source/main.c +++ b/source/main.c @@ -19,7 +19,6 @@ #include "spi.h" #include "lcd.h" #include "main.h" -#include "frq.h" #include "pro_key.h" #include "menu1.h" #include "mode.h" @@ -77,23 +76,7 @@ extern SYSTEM_DATA_t sys; ClampData_t clampData; -void setSafeMode(bool safe) -{ - sys.safeMode = safe; - //Select_Estop((safe ? ISOLATED : CONNECTED)); - driver_isolateOutput(true); - if (safe) - { - //clear shift registers to known state - Port_State[MID_SR] = USB_STATE_MID; // - Port_State[BOTTOM_SR] = USB_STATE_BOT; // - Port_State[TOP_SR] = USB_STATE_TOP; - SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register - Delay_Ticks(1); - Send_Ctrl_Word(SLP_CTRL_WRD2, SIGNAL); // Switch signal off - } -} bool isUsbConnected(void) { @@ -141,7 +124,7 @@ static void init(void) io_expanderClearAll(false); io_backlightOn(true, NO_UPDATE); - io_ampABOn(true, NO_UPDATE); + io_connectAmpAB(true, NO_UPDATE); io_update(); BL_ReadInfo(); @@ -199,7 +182,8 @@ int main(void) // USB connected if (!prevUsbConnected) { - setSafeMode(true); + driver_setSafe(true); + //setSafeMode(true); } Display_USB(); @@ -214,7 +198,8 @@ int main(void) //init(); // check that things are safe before exiting safe mode - setSafeMode(false); + //setSafeMode(false); + driver_setSafe(false); prevUsbConnected = false; } } @@ -332,80 +317,9 @@ int main(void) Display_Update(); } -#if 0 - switch (Task) - { - case PRIMARY_TASK: - pro_key(pressed); // process primary keys front 6 first menu - break; - - case BAT_INSERTION_ERROR: - if(Shut_down_tmr == 0); //Display_Bat_Error(); - Power_Down(); // Stores last settings and powers off - break; - - - case LOW_BATTERY_TASK: - if(Low_Bat_timer == 0) - Task = PWR_OFF_TASK; - break; - - } -#endif - - -#if 0 - if(old_freq != frequency && frq_chg_tmr == 0 && (!frq_update_flag)) - { - Update_Frequency(); - //Port_changed_flag = true; - } - - if(Bat_Type == BAT_ERROR) - Task = BAT_INSERTION_ERROR; - - if (Port_timer == 0) - Read_Tx_Ports(); // check for whats plugged in at the ports every 100mS. - - if(Port_changed_flag) - { - Select_Output_Port(); - Update_Frequency(); - Init_Pwr_Level_One(); // Set power out level 1 - - } - - - - - if((!Check_For_Clamp_New())) - { - Check_For_Open_Circuit(); // DC mode only - } - else - { - - EXPANDER_SET(BYPASS_ON, true); - - //Port_State[MID_SR] |= BYPASS_ON; // Set relay to By Pass protection cap - //SPI0_SendBytes(Port_State, 3, EXPANDER); // Send_Update_Port(); - } - - - if (Check_For_Clamp()) - { - doClampPower(); - } - - //Send_Wireless_Data(); // Send system update to Receiver. - - if (Taps_adjust_timer == 0) - Check_Taps(); // Check for optimum Taps - -#endif } diff --git a/source/menu.c b/source/menu.c index c196f02..5f8ce12 100644 --- a/source/menu.c +++ b/source/menu.c @@ -22,7 +22,6 @@ #include "lcd.h" #include "keys.h" #include "timer.h" -#include "frq.h" #include "Graphics\icons.h" #include "System\system.h" #include "mode.h" @@ -96,21 +95,11 @@ static int handleSystemInfoMenu(Menu_t *menu); static int handleAutoShutdown(Menu_t *menu); static int handleFrequencies(Menu_t *menu); -static void ClearMenuItems(MenuItem_t items[], uint32_t num); static void DrawMenuScrollBar(uint32_t displayIndex, uint32_t numItems); -static void DisplaySystemInfo(void); -static void DisplayDiagnostics(void); -static void DisplayDiagnostics2(void); -static void LinkRadioMenu(void); -static void DisplayLinkRadioMenu(uint32_t selected); -static void FrequenciesMenu(void); -static void DisplayFrequenciesMenu(uint32_t selected); -static void LanguageMenu(void); -static void DisplayLanguageMenu(uint32_t selected); -static void DisplayRegulatoryInfo(void); + @@ -339,15 +328,15 @@ static int handleFrequencies(Menu_t *menu) int itemCount = 0; menu->items = &_menuItems[_menuItemsIndex]; MenuItem_t *item; - int numFreq = FREQ_GetNumFrequencies(); + int numFreq = fgen_getNumFrequencies(); for (int i=0; iitems[itemCount++]; item->id = MENU_ID_FREQUENCY; item->handler = NULL; - FREQ_GetFrequencyName(i, item->text); - item->data = (void*)FREQ_GetFreqPointerByIndex(i); + item->data = (void*)fgen_getByIndex(i); + fgen_getFrequencyName(item->data, item->text); } _menuItemsIndex += itemCount; @@ -386,7 +375,7 @@ static int handleFrequencies(Menu_t *menu) FL_DrawString(item->text, MENU_MAIN_TEXT_X, MENU_MAIN_TEXT_Y_START + (i - menu->displayIndex)*MENU_LINE_HEIGHT, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); //checkBoxes - if(FREQ_GetFreqByIndex(i).enabled) + if (fgen_getByIndex(i)->enabled) { GL_DrawMonoBitmap(box_checked, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START +2+ (i - menu->displayIndex)*MENU_LINE_HEIGHT, LCD_DRAW_SET); } @@ -559,17 +548,6 @@ static int handleMainMenu(Menu_t *menu) -//Clear an array of MENU_ITEM_t -static void ClearMenuItems(MenuItem_t items[], uint32_t num) -{ - for(uint32_t i = 0; i < num; i++) - { - items[i].pMonoIcon = NULL; //Init mono icon pointer to null - items[i].text[0] = '\0'; //Init first char to null - } -} - - //Draw menu scroll bar on right side static void DrawMenuScrollBar(uint32_t displayIndex, uint32_t numItems) @@ -603,714 +581,6 @@ static void DrawMenuScrollBar(uint32_t displayIndex, uint32_t numItems) } -static void SystemInfoMenu(void) -{ - uint32_t selected = 0; - uint32_t menuExit = 0; - - - while(1) - { - if(KEY_IsKeyPressed(KEY_ALL)) - { - //use keys to change selected - uint32_t pressed = KEY_WaitForKeyPress(KEY_ALL); - - switch(pressed) //This won't work if multiple keys pressed, but it'll clear them - { - case KEY_UP: - if(--selected > MENU_SYS_INFO_NUM) - { - selected = 0; - } - break; - case KEY_DOWN: - if(++selected >= MENU_SYS_INFO_NUM) - { - selected = MENU_SYS_INFO_NUM - 1; - } - break; - case KEY_BACK: - menuExit = true; - break; - case ON_OFF_KEY: - menu.exitToMainScreen = true; - break; - case KEY_POWER: //Look for test menu key sequence: HOLD POWER, - if(selected == 1) //Must be in Diagnostics to enter test menu - { - uint32_t mode = 0; - uint32_t up = 0; - uint32_t down = 0; - - while(KEY_GetPowerKeyHeld()) - { - if(KEY_GetModeKeyHeld()) - { - mode++; - while(KEY_GetModeKeyHeld()); - } - if(KEY_GetUpKeyHeld()) - { - up++; - while(KEY_GetUpKeyHeld()); - } - if(KEY_GetDownKeyHeld()) - { - down++; - while(KEY_GetDownKeyHeld()); - } - - delayms(100); - } - if((mode == 2) && (up == 2) && (down == 1)) - { - TM_TestMenu(); - } - } - } - - } - -#if 1 //Update info for diagnostics screens. - //ACCEL_Update(); - //RTC_Update(); -#endif - - //Display selected screen - switch(selected) - { - case 0: - DisplaySystemInfo(); - break; - case 1: - DisplayDiagnostics(); - break; - case 2: - DisplayDiagnostics2(); - break; - default: - break; - } - - - if(menuExit || menu.exitToMainScreen) - { - return; - } - - - - Delay_Ticks(10); //100mS delay for screen display - } - -} - -static void DisplaySystemInfo(void) -{ - uint32_t xCol1 = 0; - uint32_t xCol2 = 145; - uint32_t yStart = 17;//22; - uint32_t yPos = yStart; - uint32_t yInc = 18;//7; - - LCD_Clear(); - - - //Title - FL_DrawTranslatedString("SYSTEM INFO", LCD_X_MID, 0, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_CENTER); - - - //Column 1 - yPos = yStart; - if(Read_Model_type() != LEICA) - FL_DrawTranslatedString(sys.manufacturer, xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - else - { -// tempstr2[10] = " 1005573"; -// sprintf(sys.manufacturer, "%s%s",sys.manufacturer,tempstr2); - FL_DrawTranslatedString(sys.manufacturer, xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - FL_DrawTranslatedString(" 1005573", xCol1 + 64, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - - } - yPos += yInc; - - FL_DrawTranslatedString("Model Name", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - FL_DrawTranslatedString("Serial Number", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - FL_DrawTranslatedString("Loader Version", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - FL_DrawTranslatedString("Software Version", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - FL_DrawTranslatedString("Manufacture Date", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - - //Column 2 - yPos = yStart; - if(strncmp(sys.manufacturer, "Underground", 10) == 0 || strncmp(sys.manufacturer, "Goldenland", 9) == 0) //If MFG is "Underground...", move modelNumber to the right - { - FL_DrawString(sys.modelNumber, LCD_X_MAX, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_RIGHT); - yPos += yInc; - } - else - { - FL_DrawString(sys.modelNumber, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - } - - if(Read_Model_type() == UMAG) - FL_DrawString("10W", xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - else - FL_DrawString(sys.modelName, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - - yPos += yInc; - - FL_DrawString(sys.serialNumber, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - sprintf(tempString, "%d", sys.bootloaderVersion); - FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - FL_DrawString(SW_VERSION, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - FL_DrawString(sys.mfgDate, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - - - LCD_Update(); - - -} - - - -static void DisplayDiagnostics(void) -{ - uint32_t xCol1 = 2; - uint32_t xCol2 = 100; - uint32_t yStart = 25; - uint32_t yPos = yStart; - uint32_t yInc = 16; - - - LCD_Clear(); - - //Title - FL_DrawString("DIAGNOSTICS 1", LCD_X_MID, 0, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_CENTER); - - - //Show Main PCBA PN top right - sprintf(tempString, "%d", hwf.mainPcbaPN); - FL_DrawString(tempString, LCD_X_MAX, yStart, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_RIGHT); - - - //Column 1: Headings - yPos = yStart; - FL_DrawString("Output", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - FL_DrawString("Frequency", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; -#if 0 - FL_DrawString("Voltage", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - FL_DrawString("Current", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - FL_DrawString("Power", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; -#endif - - - - yPos += yInc; - yPos += yInc; - - FL_DrawString("Ios", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); //current offset - yPos += yInc; - - FL_DrawString("Vos", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); //voltage offset - yPos += yInc; - - - //Column 2: values - yPos = yStart; - switch(Cur_Mode) //Show text for MODE - { - case BROADCAST: - sprintf(tempString, "INDUCTION"); - break; - case PORT1_A: - sprintf(tempString, "PORT 1A"); - break; - case PORT1_B: - sprintf(tempString, "PORT 1B"); - break; - case PORT2_A: - sprintf(tempString, "PORT 2A"); - break; - case PORT2_B: - sprintf(tempString, "PORT 1B"); - break; - default: - sprintf(tempString, "Taco"); - break; - } - FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - FREQ_GetFrequencyName(frequency, tempString); - FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); //Frequency - yPos += yInc; -#if 0 - FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); //voltage - yPos += yInc; - - FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); //current - yPos += yInc; - - FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); //power - yPos += yInc; -#endif - - sprintf(tempString, "POT %d", Dds_Pot_Val[1]); - FL_DrawString(tempString, xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - - if(psu_failed) - { - sprintf(tempString, "PSU Error1"); - FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - - } - yPos += yInc; - - if((Port_State[MID_SR] & 0x40) > 0) - sprintf(tempString, "Gain HI"); - else - sprintf(tempString, "Gain LO"); - - FL_DrawString(tempString, xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - - - yPos += yInc; -// yPos += yInc; - - sprintf(tempString, "%d", sys.adc.V_OffsetAdc); - FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); //voltage offset - if(!sys.adc.vosOK) - { - FL_DrawString("ERR", xCol1 + 30, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - } - yPos += yInc; - - sprintf(tempString, "%d", sys.adc.I_OffsetAdc); - FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); //current offset - if(!sys.adc.iosOK) - { - FL_DrawString("ERR", xCol1 + 30, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - } - yPos += yInc; - - - - LCD_Update(); -} - - -static void DisplayDiagnostics2(void) -{ - uint32_t xCol1 = 2; - uint32_t xCol2 = 100; - uint32_t yStart = 25; - uint32_t yPos = yStart; - uint32_t yInc = 16; - - - LCD_Clear(); - - //Title - FL_DrawString("DIAGNOSTICS 2", LCD_X_MID, 0, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_CENTER); - -#if 0 - //Column 1: Headings - yPos = yStart; - FL_DrawString("Output", xCol1, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; - - - - //Column 2: values - yPos = yStart; - switch(Cur_Mode) //Show text for MODE - { - case BROADCAST: - sprintf(tempString, "INDUCTION"); - break; - case PORT1_A: - sprintf(tempString, "PORT 1A"); - break; - case PORT1_B: - sprintf(tempString, "PORT 1B"); - break; - case PORT2_A: - sprintf(tempString, "PORT 2A"); - break; - case PORT2_B: - sprintf(tempString, "PORT 1B"); - break; - default: - sprintf(tempString, "Taco"); - break; - } - FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - yPos += yInc; -#endif - - LCD_Update(); -} - - - - -static void LinkRadioMenu(void) -{ - -} - - -static void DisplayLinkRadioMenu(uint32_t selected) -{ - -} - - - - -static void FrequenciesMenu(void) -{ - static uint32_t selected = 0; //static = menu selection persists - Is this a good thing? - uint32_t menuExit = 0; - uint32_t numFrequencies = FREQ_GetNumFrequencies(); - - //Draw screen first time - DisplayFrequenciesMenu(selected); - - while(1) - { - //use keys to change selected - uint32_t pressed = KEY_WaitForKeyPress(KEY_ALL); - - switch(pressed) //This won't work if multiple keys pressed, but it'll clear them - { - case KEY_BACK: - menuExit = true; - break; - case ON_OFF_KEY: - menu.exitToMainScreen = true; - break; - case KEY_UP: - if(--selected > numFrequencies) - { - selected = 0; - } - DisplayFrequenciesMenu(selected); - break; - case (KEY_UP << KEY_LONG_PRESS): - do - { - if(--selected > numFrequencies) - { - selected = 0; - } - DisplayFrequenciesMenu(selected); - Delay_Ticks(MENU_KEY_HOLD_SCROLL_DELAY); - } - while(KEY_GetUpKeyHeld()); - break; - case KEY_DOWN: - if(++selected >= numFrequencies) - { - selected = numFrequencies - 1; - } - DisplayFrequenciesMenu(selected); - break; - case (KEY_DOWN << KEY_LONG_PRESS): - do - { - if(++selected >= numFrequencies) - { - selected = numFrequencies - 1; - } - DisplayFrequenciesMenu(selected); - Delay_Ticks(MENU_KEY_HOLD_SCROLL_DELAY); - } - while(KEY_GetDownKeyHeld()); - break; - case KEY_ENTER: - //Toggle enable on selected frequency - FREQ_ToggleEnable(selected); //selected is same as frequency index - - - DisplayFrequenciesMenu(selected); //Redraw menu after any changes - break; - } - - if(menuExit || menu.exitToMainScreen) - { - return; - } - } - -} - - - -static void DisplayFrequenciesMenu(uint32_t selected) -{ -#if 1 - uint32_t numFrequencies = FREQ_GetNumFrequencies(); - static char displayIndex = 0; //index of first menu line to draw - LCD_Clear(); - - //Title - //FL_DrawString("FREQUENCIES", LCD_X_MID, 0, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_CENTER); - - //Update displayIndex - if(selected >= (displayIndex + MENU_MAX_LINES_DISPLAYED)) - { - displayIndex++; - } - else if(selected < displayIndex) - { - displayIndex--; - } - - - //Draw menu items - for(uint32_t i = displayIndex; i < displayIndex + numFrequencies; i++) //this could draw lots of frequencies off the screen but we don't care - { - - - //Frequency name - FREQ_GetFrequencyName(i, tempString); - FL_DrawString(tempString, MENU_MAIN_TEXT_X, MENU_MAIN_TEXT_Y_START + (i - displayIndex)*MENU_LINE_HEIGHT, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - - //checkBoxes - if(FREQ_GetFreqByIndex(i).enabled) - { - GL_DrawMonoBitmap(box_checked, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START +2+ (i - displayIndex)*MENU_LINE_HEIGHT, LCD_DRAW_SET); - } - else - { - GL_DrawMonoBitmap(box_unchecked, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START +2+ (i - displayIndex)*MENU_LINE_HEIGHT, LCD_DRAW_SET); - } - - } - //Draw selection bar - uint32_t selRectY0 = MENU_MAIN_TEXT_Y_START + (selected - displayIndex)*MENU_LINE_HEIGHT; - //GL_DrawFilledRoundedRectangle(MENU_SEL_RECT_X0, selRectY0, MENU_SEL_RECT_X1, selRectY0 + MENU_LINE_HEIGHT, MENU_SEL_RECT_RADIUS, LCD_DRAW_XOR); - GL_DrawFilledRectangle(MENU_SEL_RECT_X0, selRectY0, MENU_SEL_RECT_X1A, selRectY0 + MENU_LINE_HEIGHT, LCD_DRAW_XOR); - - - //Draw menu icons - //Use DrawMenuBitmap(mainMenu[i], x, y) - - - DrawMenuScrollBar(displayIndex, numFrequencies); - - LCD_Update(); -#endif -} - - - - - - - -static void LanguageMenu(void) -{ - static uint32_t selected = 0; //static = start language menu where we left off - uint32_t menuExit = 0; - - //Draw screen first time - DisplayLanguageMenu(selected); - KEY_ClearAll(); - - while(1) - { - //use keys to changes selected - uint32_t pressed = KEY_WaitForKeyPress(KEY_ALL); - - switch(pressed) //This won't work if multiple keys pressed, but it'll clear them - { - case KEY_BACK: - menuExit = true; - break; - case ON_OFF_KEY: - menu.exitToMainScreen = true; - break; - case KEY_UP: - selected--; - if(selected > LANG_NUM) - { - selected = 0; - } - DisplayLanguageMenu(selected); - break; - case (KEY_UP << KEY_LONG_PRESS): - do - { - if(--selected > LANG_NUM) - { - selected = 0; - } - DisplayLanguageMenu(selected); - Delay_Ticks(MENU_KEY_HOLD_SCROLL_DELAY); - } - while(KEY_GetUpKeyHeld()); - break; - case KEY_DOWN: - selected++; - if(selected >= LANG_NUM) - { - selected = LANG_NUM - 1; - } - DisplayLanguageMenu(selected); - break; - case (KEY_DOWN << KEY_LONG_PRESS): - do - { - if(++selected >= LANG_NUM) - { - selected = LANG_NUM - 1; - } - DisplayLanguageMenu(selected); - Delay_Ticks(MENU_KEY_HOLD_SCROLL_DELAY); - } - while(KEY_GetDownKeyHeld()); // Bug fixed KL 6/26/24 - break; - - case KEY_ENTER: - sys.language = selected; //Change language - DisplayLanguageMenu(selected); - break; - } - - if(menuExit || menu.exitToMainScreen) - { - return; - } - } -} - -static void DisplayLanguageMenu(uint32_t selected) -{ - static char displayIndex = 0; //index of first menu line to draw - - LCD_Clear(); - - //Title - //FL_DrawString("LANGUAGE MENU", 240, 0, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_CENTER); - - if(selected >= (displayIndex + MENU_MAX_LINES_DISPLAYED)) - { - displayIndex++; - } - else if(selected < displayIndex) - { - displayIndex--; - } - - //Draw menu strings - uint32_t lastIndex = displayIndex + MENU_MAX_LINES_DISPLAYED; - for(uint32_t i = displayIndex; i < lastIndex; i++) - { - //Language name - if(i == LANG_CHINESE || i == LANG_KOREAN) //Simsun for Chinese and Korean - { - FL_DrawTranslatedString(languageNames[i], MENU_MAIN_TEXT_X, MENU_MAIN_TEXT_Y_START + (i - displayIndex)*MENU_LINE_HEIGHT, fontSimsun, LCD_DRAW_SET, FL_ALIGN_LEFT); - } - else - { - FL_DrawTranslatedString(languageNames[i], MENU_MAIN_TEXT_X, MENU_MAIN_TEXT_Y_START + (i - displayIndex)*MENU_LINE_HEIGHT, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - } - - //checkBoxes - if(SYS_GetLanguage() == i) //language enum matches index - { - GL_DrawMonoBitmap(box_checked, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START +2+ (i - displayIndex)*MENU_LINE_HEIGHT, LCD_DRAW_SET); - } - else - { - GL_DrawMonoBitmap(box_unchecked, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START +2+ (i - displayIndex)*MENU_LINE_HEIGHT, LCD_DRAW_SET); - } - } - - //Draw selection bar - uint32_t selRectY0 = MENU_MAIN_TEXT_Y_START + (selected - displayIndex)*MENU_LINE_HEIGHT; - GL_DrawFilledRectangle(MENU_SEL_RECT_X0, selRectY0, MENU_SEL_RECT_X1A, selRectY0 + MENU_LINE_HEIGHT, LCD_DRAW_XOR); - - DrawMenuScrollBar(displayIndex, LANG_MENU_NUM); - - - LCD_Update(); -} - - - - - -static void DisplayRegulatoryInfo(void) -{ - uint32_t caretX = 35; - uint32_t menuX = 50; - uint32_t menuYStart = 30; - uint32_t yInc = 30; - - - LCD_Clear(); - - //Title - FL_DrawTranslatedString("REGULATORY INFO", 240, 0, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_CENTER); - - - //TODO: Display radio info here (Tx25 ONLY) - - LCD_Update(); - - while(1) - { - //use keys to changes selected - uint32_t pressed = KEY_WaitForKeyPress(KEY_ALL); - - if((pressed) == KEY_BACK || ON_OFF_KEY) - { - if(pressed == ON_OFF_KEY) - { - menu.exitToMainScreen = true; - } - - return; - } - } -} - - - - - - /******************************************************************************* * Public Functions ******************************************************************************/ @@ -1384,180 +654,6 @@ void MENU_Init(void) } -void MENU_Main(void) -{ - static uint32_t selected = 0; //static = menu selection persists - Is this a good thing? - uint32_t menuNum = MAIN_MENU_NUM_TX10; - uint32_t menuExit = 0; - - //Draw screen first time - MENU_DisplayMain(selected); - - - while(1) - { - //use keys to changes selected - uint32_t pressed = KEY_WaitForKeyPress(KEY_ALL); - - switch(pressed) //This won't work if multiple keys pressed, but it'll clear them - { - case KEY_BACK: - menuExit = true; - break; - case ON_OFF_KEY: - menu.exitToMainScreen = true; - break; - case KEY_UP: - if(--selected > menuNum) - { - selected = 0; - } - MENU_DisplayMain(selected); - break; - case (KEY_UP << KEY_LONG_PRESS): - do - { - if(--selected > menuNum) - { - selected = 0; - } - MENU_DisplayMain(selected); - - Delay_Ticks(MENU_KEY_HOLD_SCROLL_DELAY); - } - while(KEY_GetUpKeyHeld()); - break; - case KEY_DOWN: - if(++selected >= menuNum) - { - selected = menuNum - 1; - } - MENU_DisplayMain(selected); - break; - case (KEY_DOWN << KEY_LONG_PRESS): - do - { - if(++selected >= menuNum) - { - selected = menuNum - 1; - } - MENU_DisplayMain(selected); - Delay_Ticks(MENU_KEY_HOLD_SCROLL_DELAY); - } - while(KEY_GetDownKeyHeld()); - break; - case KEY_ENTER: - switch(selected) - { - case(0): //System Info Menu - SystemInfoMenu(); - break; - case(1): //Frequency menu - FrequenciesMenu(); - break; - case(2): //Auto shut down - tmr_ChangeAutoSDTimer(); - break; - case(3): //Language menu - LanguageMenu(); - break; - case(4): //Link Radio - //LinkRadioMenu(); - break; - case(5): //Regulatory - DisplayRegulatoryInfo(); - break; - default: - break; - } - if(!menu.exitToMainScreen) - { - MENU_DisplayMain(selected); //Redraw menu after any changes - } - break; - } - - if(menuExit || menu.exitToMainScreen) - { - menu.exitToMainScreen = false; - //SYS_SaveSettings(); - return; - } - } -} - -void MENU_DisplayMain(uint32_t selected) -{ - char displayIndex = 0; //index of first menu line to draw - uint32_t menuNum = MAIN_MENU_NUM_TX10; - - LCD_Clear(); - //Title - //'FL_DrawString("MAIN MENU", 240, 0, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_CENTER); - - //Update displayIndex - if(selected >= (displayIndex + MENU_MAX_LINES_DISPLAYED)) - { - displayIndex++; - } - else if(selected < displayIndex) - { - displayIndex--; - } - - - //Draw menu items - for(uint32_t i = displayIndex; i < displayIndex + menuNum; i++) //this can draw extra lines off the screen but we don't care - { - //Menu strings - FL_DrawTranslatedString(mainMenu[i].text, MENU_MAIN_TEXT_X, MENU_MAIN_TEXT_Y_START + (i-displayIndex)*MENU_LINE_HEIGHT, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - - - //Draw item status - switch(i) - { - case(0): //System Info screen - GL_DrawMonoBitmap(menuMore, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START + (i-displayIndex)*MENU_LINE_HEIGHT + MENU_MAIN_STATUS_Y_OFF, LCD_DRAW_SET); - break; - case(1): //Frequency - GL_DrawMonoBitmap(menuMore, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START + (i-displayIndex)*MENU_LINE_HEIGHT + MENU_MAIN_STATUS_Y_OFF, LCD_DRAW_SET); - break; - case(2): //Auto Shutdown - FL_DrawTranslatedString(tmr_GetAutoSDTimerString(), MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START + (i - displayIndex)*MENU_LINE_HEIGHT, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); - break; - case(3): //Language - GL_DrawMonoBitmap(menuMore, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START + (i-displayIndex)*MENU_LINE_HEIGHT + MENU_MAIN_STATUS_Y_OFF, LCD_DRAW_SET); - break; - case(4): //Link radio - GL_DrawMonoBitmap(menuMore, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START + (i-displayIndex)*MENU_LINE_HEIGHT + MENU_MAIN_STATUS_Y_OFF, LCD_DRAW_SET); - break; - - case(5): //Regulatory - - break; - case(6): //Not used - break; - default: - break; - } - } - - //Draw selection bar - uint32_t selRectY0 = MENU_MAIN_TEXT_Y_START + (selected - displayIndex)*MENU_LINE_HEIGHT; - //GL_DrawFilledRoundedRectangle(MENU_SEL_RECT_X0, selRectY0, MENU_SEL_RECT_X1, selRectY0 + MENU_LINE_HEIGHT, MENU_SEL_RECT_RADIUS, LCD_DRAW_XOR); - GL_DrawFilledRectangle(MENU_SEL_RECT_X0, selRectY0, MENU_SEL_RECT_X1, selRectY0 + MENU_LINE_HEIGHT, LCD_DRAW_XOR); - - //Draw menu icons - //Use DrawMenuBitmap(mainMenu[i], x, y) - - - DrawMenuScrollBar(displayIndex, menuNum); - - - LCD_Update(); -} - - void Menu_init(void) { diff --git a/source/ports.c b/source/ports.c index f0f2ca7..b0e02bb 100644 --- a/source/ports.c +++ b/source/ports.c @@ -14,9 +14,8 @@ #include #include -#include "arm_math.h" +#include "arm_math.h" #include "ports.h" -#include "frq.h" #include "spi.h" #include "display.h" #include "utils.h" @@ -32,6 +31,7 @@ #include "System/system.h" #include "usbComms.h" #include "driver.h" +#include "broadcast.h" uint16_t Port_timer; uint16_t Taps_adjust_timer; @@ -49,87 +49,18 @@ extern SYSTEM_DATA_t sys; uint8_t whatever; -static uint8_t Bcast_LF_Value[5] = {0,5,10,15,20}; -static uint8_t Bcast_HF_Value[5] = {0,12,25,37,50}; - -static int handleBroadcast(ACCESSORY_t *accy) +bool ACCY_timedOut(ACCESSORY_t *accy) { - switch (accy->state) - { - case PORT_STATE_INIT: - { - if (accy->initState) - { - // use the current frequency if it is valid, otherwise, set to the lowest valid for broadcast - sys.frequency = 3140; + return (sys.systemTime >= accy->stateTimer); +} - if(sys.frequency <= 8010) - BC_Duty_Cycle = Bcast_LF_Value[0]; - else - BC_Duty_Cycle = Bcast_HF_Value[0]; - - - PWM_Setup(sys.frequency, BC_Duty_Cycle);//freqArray[frequency].frequency1 - - driver_broadcastOn(true); - - - accy->stateTimer = sys.systemTime + 500; - } - - if (sys.systemTime >= accy->stateTimer) - { - accy->state = PORT_STATE_RUNNING; - } - break; - } - - case PORT_STATE_DEINIT: - { - if (accy->initState) - { - //USB_SendString("Broadcast deinitializing..."); - - // turn off the amp and antenna - driver_broadcastOn(false); - delayms(50); - - // turn off PWM - driver_setDuty(0); - - // set PSU to minimum - driver_setPSUVoltage(V_24V); - - 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; +void ACCY_setTimeout(ACCESSORY_t *accy, uint32_t msec) +{ + accy->stateTimer = sys.systemTime + msec; } static int handleClamp(ACCESSORY_t *accy) { - switch (accy->state) { case PORT_STATE_INIT: @@ -388,7 +319,7 @@ bool ACCY_Connect(ACCESSORY_t *accy, ACCY_ID_t id) case ID_BROADCAST: { accy->channels[CHANNEL_A].connected = true; - accy->handler = handleBroadcast; + accy->handler = broadcast_service; break; } @@ -497,23 +428,7 @@ bool ACCY_isKnown(ACCY_ID_t id) } -ACCY_ID_t ACCY_GetConnectedAccessory(uint8_t port) -{ - return ID_NONE; -} -ACCY_ID_t ACCY_GetActive(void) -{ - if(Cur_Mode == PORT1_A) - { - return ACCY_GetConnectedAccessory(1); - } - else - { - return ACCY_GetConnectedAccessory(2); - - } -} void Read_Tx_Ports(void) // check for whats plugged in at the ports every 100mS. @@ -530,241 +445,4 @@ void Read_Tx_Ports(void) // check for whats plugged in at the ports every 100mS. -void Select_Output_Port(void) // which DC Out port, to switch on -{ - Port_State[MID_SR] &= OUT_RELAY_OFF_MASK; - - if (Cur_Mode != BROADCAST) - { - Delay_Ticks(DELAY_100MS); - - if(Compare_Voltage(sys.adc.V_CHK, MAX_BYPASS_VOLTS)) - { - sys.status[OVERVOLTAGE] = true; - Select_Bypass(OFF); // Force into blocked state. - Delay_Ticks(20); - - } - - // HACK - Select_Estop(CONNECTED); // Ensure output is not ISOLATED from connections - - switch (Cur_Mode) - { - case PORT1_A: - Port_State[MID_SR] |= PORT1A_ON; - break; - case PORT1_B: - Port_State[MID_SR] |= PORT1B_ON; - break; - case PORT2_A: - Port_State[MID_SR] |= PORT2A_ON; - break; - case PORT2_B: - Port_State[MID_SR] |= PORT2B_ON; - break; - default: - Port_State[MID_SR] |= PORT2B_ON; // TODO Later disconnect?? - break; - } - Disable_BC(); - Reset_Power_Gain(); - Port_changed_flag = false; - SPI0_SendBytes(Port_State, 3, EXPANDER); - } - - else - { // Assumes broadcast mode has just been selected - Disable_DC(); // Shut down Direct connect circuitry - Select_Estop(ISOLATED); // Ensure output is ISOLATED from connections - - Tx_ConfigureFrequency(); // Select correct frequency - Enable_BC(); // Enable BCAST circuitry using either Minimum or previously selected freq - - Port_changed_flag = false; - - } - -} - - -void Reset_Power_Gain(void) -{ - Power_Level = 0; - Bcast_Pwr_Level = 0; - -// if( (ACCY_GetConnectedAccessory(1) != ID_CLAMP) && (ACCY_GetConnectedAccessory(2) != ID_CLAMP)) - if(!Check_For_Clamp()) - { - if (freqArray[frequency].frequency1 <= MAX_DTYPE) - Dds_Pot_Val[1] = Pot_Value[Power_Level]; // data - else - Dds_Pot_Val[1] = Pot_Value_AB[Power_Level]; // data - } - else - Get_Clamp_Value(); - - - - Dds_Pot_Val[0] = 0; // address - SPI0_SendBytes(Dds_Pot_Val, 2, AMPLITUDE); - - Delay_Ticks(30); // Set power out level 1 3/20/24 - -// Power_Level = 1; -// if(Init_Done) -// { -// Delay_Ticks(10); // Set power out level 1 3/20/24 -// Power_Level++; -// inc_pwr(); - Init_Done = false; -// } -} - - - -void Tx_ConfigureFrequency(void) -{ -uint32_t tmp_frq; - - if (freqArray[frequency].bc_enabled == false && Cur_Mode == BROADCAST) // if (freq < min freq) ToDo - { - tmp_frq = Search_BC_Frequency(); // select minimum frequency for BCAST - if (tmp_frq < FREQ_MAX_NUM) - frequency = tmp_frq; - //endif - } - -} - - -uint32_t Search_BC_Frequency(void) -{ -uint32_t idx; - idx = 0; - while (freqArray[idx].bc_enabled == false && idx < FREQ_MAX_NUM) - idx++; - - if (idx >= FREQ_MAX_NUM) - idx = FREQ_MAX_NUM; - - return(idx); -} - - -uint32_t Search_Frequency(uint32_t pattern) -{ -uint32_t idx; - idx = 0; - while (freqArray[idx].frequency1 != pattern && idx < FREQ_MAX_NUM) - idx++; - - if (idx >= FREQ_MAX_NUM) - idx = FREQ_MAX_NUM; - - return(idx); -} - -void Disable_DC(void) -{ - All_Amps_Off(); // shut down Amplifiers DC connections - // Shut off all amplifier enables - -// Reset_DDS(); // Stop all DDS chips - -// Set_PSU_Voltage(V_18V); //MID_POINT_PSU 18,24,27,30,36, 55 - // Set PSU to MIN. -} - -void Enable_BC(void) -{ - -// if((freqArray[old_freq].frequency1 >8010 ) && (freqArray[frequency].frequency1 < 8010)) -// Cycled_Freq_Change_BC(LF); -// else -// { -// if((freqArray[old_freq].frequency1 < 8010 ) && (freqArray[frequency].frequency1 > 8010)) -// Cycled_Freq_Change_BC(HF); -// } - if(freqArray[frequency].frequency1 <= 8010) - BC_Duty_Cycle = Bcast_LF_Value[Bcast_Pwr_Level]; - else - BC_Duty_Cycle = Bcast_HF_Value[Bcast_Pwr_Level]; - - - PWM_Setup(freqArray[frequency].frequency1, BC_Duty_Cycle);//freqArray[frequency].frequency1 - - - Port_State[MID_SR] |=ANT_AMP_EN; // Enable Antenna amp -// Port_State[BOTTOM_SR] |= ANT_AMP_PWR; // Enable PWR Switch - Port_State[TOP_SR] |= ANT_AMP_SW; - SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register - Delay_Ticks(5); - - Set_PSU_Voltage(V_27V); // Set PSU to MAX - Port_State[BOTTOM_SR] &= AMP_PSU_ON; // switch AMP PSU on - SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register - - -} - -void Cycled_Freq_Change_BC(uint8_t value) -{ - if(value == LF) - { - if(Bcast_Pwr_Level == MAX_BCAST_PWR) - Bcast_Pwr_Level--; - - BC_Duty_Cycle = 10; - BC_Duty_Cycle = BC_Duty_Cycle + Bcast_Pwr_Level*5; - } - else - { - BC_Duty_Cycle = 10; - BC_Duty_Cycle = BC_Duty_Cycle + Bcast_Pwr_Level*10; - - } - -} - - - -void Enable_DC(void) -{ - // Switch on correct amplifier enables - - // Switch on correct power switches - - - // Enable correct DDS chips - - // Set PSU to Medium. -} -void Disable_BC(void) -{ - Port_State[MID_SR] &=~ANT_AMP_EN; // disable Antenna amp -// Port_State[BOTTOM_SR] |=ANT_AMP_PWR; // Enable PWR Switch - Port_State[TOP_SR] &= ~ANT_AMP_SW; - SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register - -// Change the SCT clock back here - PWM_Setup(15890, 0); // switches off PWM // Set duty cycle to zero - - Delay_Ticks(5); - - Set_PSU_Voltage(V_24V); // Set PSU to MIN - - -// Init_PWM_CLKS(DC_CLK); // Return timer clock to internal - -} - -bool Is_Clamp_Detected(void) -{ - if((ACCY_GetConnectedAccessory(1) == ID_CLAMP) || (ACCY_GetConnectedAccessory(2) == ID_CLAMP) || (ACCY_GetConnectedAccessory(1) == ID_CLAMP2) || (ACCY_GetConnectedAccessory(2) == ID_CLAMP2)) - return(true); - else - return(false); - -} diff --git a/source/ports.h b/source/ports.h index d7a46ce..c905cb8 100644 --- a/source/ports.h +++ b/source/ports.h @@ -8,8 +8,15 @@ #ifndef PORTS_H_ #define PORTS_H_ + +#include "fgen.h" +#include "driver.h" + + typedef struct ACCESSORY_s ACCESSORY_t; -typedef int (*AccessoryHandler_t)(ACCESSORY_t *accy); +typedef int (*AccessoryService_t)(ACCESSORY_t *accy); +typedef FREQUENCY_t* (*AccessorySetFrequency_t)(ACCESSORY_t *accy, FREQUENCY_t *freq); +typedef int (*AccessorySetPower_t)(ACCESSORY_t *accy, PowerLevel_t powerLevel); typedef enum { ID_BROADCAST = -1, @@ -30,10 +37,12 @@ typedef enum { typedef enum { - PORT_STATE_DEINIT = -1, + PORT_STATE_ERROR = -1, PORT_STATE_INIT = 0, - PORT_STATE_STANDBY = 1, - PORT_STATE_RUNNING = 2, + PORT_STATE_DEINIT, + PORT_STATE_STANDBY, + PORT_STATE_RUNNING, + } PortState_t; typedef enum @@ -57,24 +66,30 @@ typedef struct bool connected; } AccessoryChannel_t; -struct ACCESSORY_s { +struct ACCESSORY_s +{ bool isConnected; //Accessory is connected ACCY_ID_t connected; //Currently connected accessory ACCY_ID_t lastDetected; //accessory detected last scan uint32_t consecutiveScans; //number of consecutive scans of same accessory - float *idVoltage; + float *idVoltage; PortState_t state; bool initState; - AccessoryHandler_t handler; + AccessoryService_t handler; AccessoryChannel_t channels[NUM_CHANNELS]; - AccyChannelId_t activeChannel; uint32_t stateTimer; - AccessoryPortId_t portId; + + AccessorySetFrequency_t setFrequency; + AccessorySetPower_t setPower; + + uint8_t powerLevel; + + }; #define DELAY_100MS 10 @@ -111,7 +126,6 @@ void ACCY_Connect1(ACCY_ID_t id); void ACCY_Connect2(ACCY_ID_t id); bool ACCY_IsConnected(uint8_t port); ACCY_ID_t ACCY_GetConnectedAccessory(uint8_t port); -ACCY_ID_t ACCY_GetActive(void); void Select_Output_Port(void); // Mutually exclusive output port selector void Enable_BC(void); void Disable_DC(void); @@ -129,4 +143,8 @@ void ACCY_service(void); bool ACCY_Connect(ACCESSORY_t *accy, ACCY_ID_t id); void ACCY_setActive(ACCESSORY_t *accy, AccyChannelId_t channel); void ACCY_next(void); + +bool ACCY_timedOut(ACCESSORY_t *accy); +void ACCY_setTimeout(ACCESSORY_t *accy, uint32_t msec); + #endif /* PORTS_H_ */ diff --git a/source/pwm.c b/source/pwm.c index 033a451..8cd13d1 100644 --- a/source/pwm.c +++ b/source/pwm.c @@ -12,7 +12,6 @@ #include #include -#include "frq.h" #include "pwm.h" #include "ports.h" #include "arm_math.h" diff --git a/source/sys_chk.c b/source/sys_chk.c index f084955..ebeb65b 100644 --- a/source/sys_chk.c +++ b/source/sys_chk.c @@ -40,6 +40,7 @@ uint16_t Power_tmr, Display_warning_tmr; void System_Check() { +#if 0 if(freqArray[frequency].frequency1 <= MAX_DTYPE) { @@ -89,6 +90,8 @@ void System_Check() // Update_Amp_Pot(); } #endif + +#endif } void Safety_Check(void) @@ -101,7 +104,7 @@ void Safety_Check(void) while(1) { - safe_key(); + //safe_key(); Display_Update(); Delay_Ticks(10); } diff --git a/source/timer.c b/source/timer.c index 29db481..82a36de 100644 --- a/source/timer.c +++ b/source/timer.c @@ -96,8 +96,6 @@ void ctimer_match0_callback(uint32_t flags) // ISR every 1mS if (Sys_Timer > 0) Sys_Timer--; - if (frq_chg_tmr > 0) - frq_chg_tmr--; if (Low_Bat_timer > 0) Low_Bat_timer--; @@ -127,8 +125,7 @@ void ctimer_match0_callback(uint32_t flags) // ISR every 1mS if(ByPass_tmr > 0) ByPass_tmr--; - if(Display_warning_tmr > 0) - Display_warning_tmr--; + if(sys.adc.measure) diff --git a/source/utils.c b/source/utils.c index f10cb11..c05754b 100644 --- a/source/utils.c +++ b/source/utils.c @@ -13,7 +13,6 @@ #include "eeprom.h" #include "display.h" #include "utils.h" -#include "frq.h" #include "psu_ctrl.h" #include "amps.h" #include "main.h" @@ -62,6 +61,7 @@ extern ClampData_t clampData; uint8_t Error, Suspend_Step_Chk; + uint8_t Check_Output_Status(char Connector) { uint32_t x = 1; @@ -114,6 +114,7 @@ GPIO_PinWrite(GPIO, 0, PORT_LE, 1); // De-select CS void Select_Bypass(RELAY_SELECT_t bypass) // Bypass allows transmitting w/o full protection { +#if 0 sys.status[BYPASS] = bypass; if (bypass) @@ -127,7 +128,7 @@ void Select_Bypass(RELAY_SELECT_t bypass) // Bypass allows transmitting w/o full { EXPANDER_CLEAR(BYPASS_ON, true); } - +#endif } @@ -152,7 +153,7 @@ void Select_Estop(ESTOP_SELECT_t stop) } void Select_Transformer() { - +#if 0 if (freqArray[frequency].frequency1 > MAX_LOW_FRQ)//ie. > 80K Was MAX_DTYPE { Port_State[MID_SR] |= SLCT_XFMR; // Switch to High freq xfrmr Taps O/P @@ -179,6 +180,7 @@ void Select_Transformer() // or not SPI0_SendBytes(Port_State, 3, EXPANDER); +#endif } void Select_Amp_Xfrmr_Rly(AMP_XFRMR_SLCT_t Amp2xfrmr) // Allows any combination of Amp and transformer @@ -219,6 +221,7 @@ void Power_ON_OFF(RELAY_SELECT_t Power) void Check_Clamp_OverVoltage(void) { +#if 0 if (Cur_Mode != BROADCAST) { @@ -231,6 +234,7 @@ void Check_Clamp_OverVoltage(void) } } } +#endif } void Check_Live_Voltage() { @@ -276,6 +280,7 @@ bool Compare_Voltage(float32_t source, float32_t limit) void Check_Over_Current() { +#if 0 float x; x = Get_Max_Current(); @@ -291,18 +296,22 @@ float x; } } +#endif } float Get_Max_Current(void) { +#if 0 if (freqArray[frequency].frequency1 <= MAX_DTYPE) return (MAX_CURRENT); else return (MAX_HF_CURRENT); +#endif } void Check_Over_Power(void) { +#if 0 //uint8_t New_Pot_Val; if (Cur_Mode != BROADCAST) { @@ -315,20 +324,23 @@ void Check_Over_Power(void) } } // Delay_Ticks(100); +#endif } float32_t Get_Power_Limit(void) { +#if 0 if (freqArray[frequency].frequency1 < MAX_DTYPE) return(sys.maxPowerLimit); else return(1.0); - +#endif } // if over power, scale amplitude void Adjust_Output_Power(float32_t New_Power_Limit) { +#if 0 if (Watts_Filt > New_Power_Limit) { uint8_t New_Pot_Val; @@ -345,6 +357,7 @@ void Adjust_Output_Power(float32_t New_Power_Limit) } else Suspend_Step_Chk = false; +#endif } @@ -468,6 +481,7 @@ void Count_Down_PWR_OFF(void) //Display_Bat_Error(); void Adjust_Clamp_Volts(void) // Set clamp output voltages to PL1 { +#if 0 if (freqArray[frequency].frequency1 <= MAX_DTYPE) { Dds_Pot_Val[1] = Pot_Value_CLAMP1[1]; // data @@ -481,10 +495,12 @@ void Adjust_Clamp_Volts(void) // Set clamp output voltages to PL1 Dds_Pot_Val[0] = 0; // address SPI0_SendBytes(Dds_Pot_Val, 2, AMPLITUDE); +#endif } void Check_Over_Voltage(void) // Check Direct Connect Over voltage { +#if 0 uint8_t New_Pot_Val; uint8_t test1; if (Over_Voltage_tmr == 0) @@ -513,10 +529,12 @@ void Check_Over_Voltage(void) // Check Direct Connect Over voltage } } } +#endif } void Controlled_Pwr_Dwn() { + #if 0 uint8_t count; uint8_t avalue; // for debugging only @@ -549,10 +567,12 @@ void Controlled_Pwr_Dwn() Set_PSU_Voltage(V_18V); // switch off main psu down Delay_Ticks(DELAY_250MS); + #endif } void Update_Amp_Pot(void) { +#if 0 uint8_t avalue; // for debugging only Dds_Pot_Val[0] = 0; // address @@ -563,11 +583,12 @@ void Update_Amp_Pot(void) avalue = Dds_Pot_Val[1]; SPI0_SendBytes(Dds_Pot_Val, 2, AMPLITUDE); - +#endif } void Check_For_Clamp_On_Pwr_Up(void) { +#if 0 uint32_t idNumber1 = (uint32_t) ((sys.adc.V_ID2 * 3.3333) + 0.5);//multiply by 3.3333 and round to nearest integer uint32_t idNumber2 = (uint32_t) ((sys.adc.V_ID1 * 3.3333) + 0.5);//multiply by 3.3333 and round to nearest integer @@ -590,6 +611,7 @@ void Check_For_Clamp_On_Pwr_Up(void) } } } +#endif } bool Check_For_Clamp_New() @@ -701,6 +723,7 @@ bool Check_For_Clamp(void) // Assumes BROADCAST already checked for void freq_key_process(void) { +#if 0 uint32_t tmp_frqx; LD_Flag = false; @@ -738,10 +761,12 @@ void freq_key_process(void) } } } +#endif } void LD_key_process(void) { +#if 0 if(freqArray[frequency].frequency1 <= MAX_LD_FREQ && Cur_Mode != BROADCAST) { LD_Flag ^= 1; @@ -751,6 +776,7 @@ void LD_key_process(void) else Init_LD_Sync(); // clear the second freq } +#endif } @@ -806,4 +832,4 @@ void Umag_Patch(void) void delayms(uint32_t msec) { stimer_delay(msec); -} \ No newline at end of file +}