aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBen V. Brown <[email protected]>2018-01-26 12:42:38 +1100
committerBen V. Brown <[email protected]>2018-01-26 12:42:38 +1100
commit653c71ba2da0aca02944828887b4af7b42961f84 (patch)
tree6567112bc6a763cf3766e1a313c40d8aab7c63d7
parent715be0b0b6f60dcf1f7af854a4f9916033cf0f1e (diff)
downloadIronOS-653c71ba2da0aca02944828887b4af7b42961f84.tar.gz
IronOS-653c71ba2da0aca02944828887b4af7b42961f84.zip
Remove unused I2C DMA
Slow down I2C to 50kHz Adjust ADC timing
-rw-r--r--workspace/TS100/inc/Setup.h3
-rw-r--r--workspace/TS100/src/Setup.c9
-rw-r--r--workspace/TS100/src/hardware.c2
-rw-r--r--workspace/TS100/src/main.cpp1886
-rw-r--r--workspace/TS100/src/stm32f1xx_hal_msp.c29
-rw-r--r--workspace/TS100/src/stm32f1xx_it.c10
6 files changed, 967 insertions, 972 deletions
diff --git a/workspace/TS100/inc/Setup.h b/workspace/TS100/inc/Setup.h
index 6ffdc7aa..1b2fe516 100644
--- a/workspace/TS100/inc/Setup.h
+++ b/workspace/TS100/inc/Setup.h
@@ -18,8 +18,7 @@ extern ADC_HandleTypeDef hadc1;
extern DMA_HandleTypeDef hdma_adc1;
extern I2C_HandleTypeDef hi2c1;
-extern DMA_HandleTypeDef hdma_i2c1_rx;
-extern DMA_HandleTypeDef hdma_i2c1_tx;
+
extern IWDG_HandleTypeDef hiwdg;
diff --git a/workspace/TS100/src/Setup.c b/workspace/TS100/src/Setup.c
index 73ee1266..858a8b5c 100644
--- a/workspace/TS100/src/Setup.c
+++ b/workspace/TS100/src/Setup.c
@@ -9,8 +9,7 @@ ADC_HandleTypeDef hadc1;
DMA_HandleTypeDef hdma_adc1;
I2C_HandleTypeDef hi2c1;
-DMA_HandleTypeDef hdma_i2c1_rx;
-DMA_HandleTypeDef hdma_i2c1_tx;
+
IWDG_HandleTypeDef hiwdg;
TIM_HandleTypeDef htim2;
@@ -130,7 +129,7 @@ static void MX_ADC1_Init(void) {
sConfigInjected.InjectedChannel = ADC_CHANNEL_8;
sConfigInjected.InjectedRank = 1;
sConfigInjected.InjectedNbrOfConversion = 4;
- sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_55CYCLES_5;
+ sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_71CYCLES_5;
sConfigInjected.ExternalTrigInjecConv = ADC_EXTERNALTRIGINJECCONV_T2_CC1;
sConfigInjected.AutoInjectedConv = DISABLE;
sConfigInjected.InjectedDiscontinuousConvMode = DISABLE;
@@ -149,7 +148,7 @@ static void MX_ADC1_Init(void) {
static void MX_I2C1_Init(void) {
hi2c1.Instance = I2C1;
- hi2c1.Init.ClockSpeed = 20000;
+ hi2c1.Init.ClockSpeed = 50000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
@@ -158,8 +157,6 @@ static void MX_I2C1_Init(void) {
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
HAL_I2C_Init(&hi2c1);
- HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);
- HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);
}
diff --git a/workspace/TS100/src/hardware.c b/workspace/TS100/src/hardware.c
index 19aa70a4..c29bff34 100644
--- a/workspace/TS100/src/hardware.c
+++ b/workspace/TS100/src/hardware.c
@@ -58,7 +58,7 @@ uint16_t getTipInstantTemperature() {
uint16_t getTipRawTemp(uint8_t instant) {
#define filterDepth1 1
/*Pre filter used before PID*/
-#define filterDepth2 64
+#define filterDepth2 32
/*Post filter used for UI display*/
static uint16_t filterLayer1[filterDepth1];
static uint16_t filterLayer2[filterDepth2];
diff --git a/workspace/TS100/src/main.cpp b/workspace/TS100/src/main.cpp
index 251f8fa6..9e4394d9 100644
--- a/workspace/TS100/src/main.cpp
+++ b/workspace/TS100/src/main.cpp
@@ -35,994 +35,1032 @@ void startRotationTask(void const *argument);
// Main inits hardware then hands over to the FreeRTOS kernel
int main(void) {
- /* Reset of all peripherals, Initializes the Flash interface and the Systick.
- */
- HAL_Init();
- Setup_HAL(); // Setup all the HAL objects
- setTipPWM(0);
- lcd.initialize(); // start up the LCD
- lcd.setFont(0); // default to bigger font
- accel.initalize(); // this sets up the I2C registers and loads up the default
- // settings
- HAL_IWDG_Refresh(&hiwdg);
- restoreSettings(); // load the settings from flash
- setCalibrationOffset(systemSettings.CalibrationOffset);
- HAL_IWDG_Refresh(&hiwdg);
- /* Create the thread(s) */
- /* definition and creation of GUITask */
- osThreadDef(GUITask, startGUITask, osPriorityBelowNormal, 0, 512);
- GUITaskHandle = osThreadCreate(osThread(GUITask), NULL);
-
- /* definition and creation of PIDTask */
- osThreadDef(PIDTask, startPIDTask, osPriorityRealtime, 0, 256);
- PIDTaskHandle = osThreadCreate(osThread(PIDTask), NULL);
-
- /* definition and creation of ROTTask */
- osThreadDef(ROTTask, startRotationTask, osPriorityLow, 0, 256);
- ROTTaskHandle = osThreadCreate(osThread(ROTTask), NULL);
- /* definition and creation of MOVTask */
- osThreadDef(MOVTask, startMOVTask, osPriorityNormal, 0, 256);
- MOVTaskHandle = osThreadCreate(osThread(MOVTask), NULL);
-
- /* Create the objects*/
- rotationChangedSemaphore =
- xSemaphoreCreateBinary(); // Used to unlock rotation thread
- accelDataAvailableSemaphore =
- xSemaphoreCreateBinary(); // Used to unlock the movement thread
- /* Start scheduler */
- osKernelStart();
-
- /* We should never get here as control is now taken by the scheduler */
- while (1) {
- }
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick.
+ */
+ HAL_Init();
+ Setup_HAL(); // Setup all the HAL objects
+ setTipPWM(0);
+ lcd.initialize(); // start up the LCD
+ lcd.setFont(0); // default to bigger font
+ accel.initalize(); // this sets up the I2C registers and loads up the default
+ // settings
+ HAL_IWDG_Refresh(&hiwdg);
+ restoreSettings(); // load the settings from flash
+ setCalibrationOffset(systemSettings.CalibrationOffset);
+ HAL_IWDG_Refresh(&hiwdg);
+ /* Create the thread(s) */
+ /* definition and creation of GUITask */
+ osThreadDef(GUITask, startGUITask, osPriorityBelowNormal, 0, 512);
+ GUITaskHandle = osThreadCreate(osThread(GUITask), NULL);
+
+ /* definition and creation of PIDTask */
+ osThreadDef(PIDTask, startPIDTask, osPriorityRealtime, 0, 256);
+ PIDTaskHandle = osThreadCreate(osThread(PIDTask), NULL);
+
+ /* definition and creation of ROTTask */
+ osThreadDef(ROTTask, startRotationTask, osPriorityLow, 0, 256);
+ ROTTaskHandle = osThreadCreate(osThread(ROTTask), NULL);
+ /* definition and creation of MOVTask */
+ osThreadDef(MOVTask, startMOVTask, osPriorityNormal, 0, 256);
+ MOVTaskHandle = osThreadCreate(osThread(MOVTask), NULL);
+
+ /* Create the objects*/
+ rotationChangedSemaphore =
+ xSemaphoreCreateBinary(); // Used to unlock rotation thread
+ accelDataAvailableSemaphore =
+ xSemaphoreCreateBinary(); // Used to unlock the movement thread
+ /* Start scheduler */
+ osKernelStart();
+
+ /* We should never get here as control is now taken by the scheduler */
+ while (1) {
+ }
}
void GUIDelay() {
- osDelay(50); // 20Hz
+ osDelay(50); // 20Hz
}
void gui_drawTipTemp() {
- // Draw tip temp handling unit conversion & tolerance near setpoint
- uint16_t Temp = getTipRawTemp(0);
-
- if (systemSettings.temperatureInF)
- Temp = tipMeasurementToF(Temp);
- else
- Temp = tipMeasurementToC(Temp);
- //[Disabled 24/11/2017] Round if nearby
- // if (abs(Temp - systemSettings.SolderingTemp) < 3)
- // Temp = systemSettings.SolderingTemp;
-
- lcd.printNumber(Temp, 3); // Draw the tip temp out finally
+ // Draw tip temp handling unit conversion & tolerance near setpoint
+ uint16_t Temp = getTipRawTemp(0);
+
+ if (systemSettings.temperatureInF)
+ Temp = tipMeasurementToF(Temp);
+ else
+ Temp = tipMeasurementToC(Temp);
+ //[Disabled 24/11/2017] Round if nearby
+ // if (abs(Temp - systemSettings.SolderingTemp) < 3)
+ // Temp = systemSettings.SolderingTemp;
+
+ lcd.printNumber(Temp, 3); // Draw the tip temp out finally
}
ButtonState getButtonState() {
- /*
- * Read in the buttons and then determine if a state change needs to occur
- */
-
- /*
- * If the previous state was 00 Then we want to latch the new state if
- * different & update time
- * If the previous state was !00 Then we want to search if we trigger long
- * press (buttons still down), or if release we trigger press
- * (downtime>filter)
- */
- static uint8_t previousState = 0;
- static uint32_t previousStateChange = 0;
- const uint16_t timeout = 400;
- uint8_t currentState;
- currentState =
- (HAL_GPIO_ReadPin(KEY_A_GPIO_Port, KEY_A_Pin) == GPIO_PIN_RESET ? 1 : 0)
- << 0;
- currentState |=
- (HAL_GPIO_ReadPin(KEY_B_GPIO_Port, KEY_B_Pin) == GPIO_PIN_RESET ? 1 : 0)
- << 1;
-
- if (currentState) lastButtonTime = HAL_GetTick();
- if (currentState == previousState) {
- if (currentState == 0) return BUTTON_NONE;
- if ((HAL_GetTick() - previousStateChange) > timeout) {
- // User has been holding the button down
- // We want to send a buttong is held message
- if (currentState == 0x01)
- return BUTTON_F_LONG;
- else if (currentState == 0x02)
- return BUTTON_B_LONG;
- else
- return BUTTON_NONE; // Both being held case, we dont long hold this
- } else
- return BUTTON_NONE;
- } else {
- // A change in button state has occurred
- ButtonState retVal = BUTTON_NONE;
- if (currentState) {
- // User has pressed a button down (nothing done on down)
-
- } else {
- // User has released buttons
- // If they previously had the buttons down we want to check if they were <
- // long hold and trigger a press
- if ((HAL_GetTick() - previousStateChange) < timeout) {
- // The user didn't hold the button for long
- // So we send button press
-
- if (previousState == 0x01)
- retVal = BUTTON_F_SHORT;
- else if (previousState == 0x02)
- retVal = BUTTON_B_SHORT;
- else
- retVal = BUTTON_BOTH; // Both being held case
- }
- }
- previousState = currentState;
- previousStateChange = HAL_GetTick();
- return retVal;
- }
- return BUTTON_NONE;
+ /*
+ * Read in the buttons and then determine if a state change needs to occur
+ */
+
+ /*
+ * If the previous state was 00 Then we want to latch the new state if
+ * different & update time
+ * If the previous state was !00 Then we want to search if we trigger long
+ * press (buttons still down), or if release we trigger press
+ * (downtime>filter)
+ */
+ static uint8_t previousState = 0;
+ static uint32_t previousStateChange = 0;
+ const uint16_t timeout = 400;
+ uint8_t currentState;
+ currentState = (
+ HAL_GPIO_ReadPin(KEY_A_GPIO_Port, KEY_A_Pin) == GPIO_PIN_RESET ?
+ 1 : 0) << 0;
+ currentState |= (
+ HAL_GPIO_ReadPin(KEY_B_GPIO_Port, KEY_B_Pin) == GPIO_PIN_RESET ?
+ 1 : 0) << 1;
+
+ if (currentState)
+ lastButtonTime = HAL_GetTick();
+ if (currentState == previousState) {
+ if (currentState == 0)
+ return BUTTON_NONE;
+ if ((HAL_GetTick() - previousStateChange) > timeout) {
+ // User has been holding the button down
+ // We want to send a buttong is held message
+ if (currentState == 0x01)
+ return BUTTON_F_LONG;
+ else if (currentState == 0x02)
+ return BUTTON_B_LONG;
+ else
+ return BUTTON_NONE; // Both being held case, we dont long hold this
+ } else
+ return BUTTON_NONE;
+ } else {
+ // A change in button state has occurred
+ ButtonState retVal = BUTTON_NONE;
+ if (currentState) {
+ // User has pressed a button down (nothing done on down)
+
+ } else {
+ // User has released buttons
+ // If they previously had the buttons down we want to check if they were <
+ // long hold and trigger a press
+ if ((HAL_GetTick() - previousStateChange) < timeout) {
+ // The user didn't hold the button for long
+ // So we send button press
+
+ if (previousState == 0x01)
+ retVal = BUTTON_F_SHORT;
+ else if (previousState == 0x02)
+ retVal = BUTTON_B_SHORT;
+ else
+ retVal = BUTTON_BOTH; // Both being held case
+ }
+ }
+ previousState = currentState;
+ previousStateChange = HAL_GetTick();
+ return retVal;
+ }
+ return BUTTON_NONE;
}
static void waitForButtonPress() {
- // we are just lazy and sleep until user confirms button press
- // This also eats the button press event!
- ButtonState buttons = getButtonState();
- while (buttons) {
- buttons = getButtonState();
- GUIDelay();
- lcd.refresh();
- }
- while (!buttons) {
- buttons = getButtonState();
- GUIDelay();
- lcd.refresh();
- }
+ // we are just lazy and sleep until user confirms button press
+ // This also eats the button press event!
+ ButtonState buttons = getButtonState();
+ while (buttons) {
+ buttons = getButtonState();
+ GUIDelay();
+ lcd.refresh();
+ }
+ while (!buttons) {
+ buttons = getButtonState();
+ GUIDelay();
+ lcd.refresh();
+ }
}
void waitForButtonPressOrTimeout(uint32_t timeout) {
- timeout += HAL_GetTick();
- // Make timeout our exit value
- for (;;) {
- ButtonState buttons = getButtonState();
- if (buttons) return;
- if (HAL_GetTick() > timeout) return;
- GUIDelay();
- }
+ timeout += HAL_GetTick();
+ // Make timeout our exit value
+ for (;;) {
+ ButtonState buttons = getButtonState();
+ if (buttons)
+ return;
+ if (HAL_GetTick() > timeout)
+ return;
+ GUIDelay();
+ }
}
// returns true if undervoltage has occured
static bool checkVoltageForExit() {
- uint16_t v = getInputVoltageX10(systemSettings.voltageDiv);
- if ((v < lookupVoltageLevel(systemSettings.cutoutSetting))) {
- lcd.clearScreen();
- lcd.setCursor(0, 0);
- if (systemSettings.detailedSoldering) {
- lcd.setFont(1);
- lcd.print(UndervoltageString);
- lcd.setCursor(0, 8);
- lcd.print(InputVoltageString);
- lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) / 10, 2);
- lcd.drawChar('.');
- lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) % 10, 1);
- lcd.print("V");
-
- } else {
- lcd.setFont(0);
- lcd.print(UVLOWarningString);
- }
-
- lcd.refresh();
- currentlyActiveTemperatureTarget = 0;
- waitForButtonPress();
- return true;
- }
- return false;
+ uint16_t v = getInputVoltageX10(systemSettings.voltageDiv);
+ if ((v < lookupVoltageLevel(systemSettings.cutoutSetting))) {
+ lcd.clearScreen();
+ lcd.setCursor(0, 0);
+ if (systemSettings.detailedSoldering) {
+ lcd.setFont(1);
+ lcd.print(UndervoltageString);
+ lcd.setCursor(0, 8);
+ lcd.print(InputVoltageString);
+ lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) / 10,
+ 2);
+ lcd.drawChar('.');
+ lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) % 10,
+ 1);
+ lcd.print("V");
+
+ } else {
+ lcd.setFont(0);
+ lcd.print(UVLOWarningString);
+ }
+
+ lcd.refresh();
+ currentlyActiveTemperatureTarget = 0;
+ waitForButtonPress();
+ return true;
+ }
+ return false;
}
static void gui_drawBatteryIcon() {
- if (systemSettings.cutoutSetting) {
- // User is on a lithium battery
- // we need to calculate which of the 10 levels they are on
- uint8_t cellCount = systemSettings.cutoutSetting + 2;
- uint16_t cellV = getInputVoltageX10(systemSettings.voltageDiv) / cellCount;
- // Should give us approx cell voltage X10
- // Range is 42 -> 33 = 9 steps therefore we will use battery 1-10
- if (cellV < 33) cellV = 33;
- cellV -= 33; // Should leave us a number of 0-9
- if (cellV > 9) cellV = 9;
- lcd.drawBattery(cellV + 1);
- } else
- lcd.drawSymbol(16); // Draw the DC Logo
+ if (systemSettings.cutoutSetting) {
+ // User is on a lithium battery
+ // we need to calculate which of the 10 levels they are on
+ uint8_t cellCount = systemSettings.cutoutSetting + 2;
+ uint16_t cellV = getInputVoltageX10(systemSettings.voltageDiv)
+ / cellCount;
+ // Should give us approx cell voltage X10
+ // Range is 42 -> 33 = 9 steps therefore we will use battery 1-10
+ if (cellV < 33)
+ cellV = 33;
+ cellV -= 33; // Should leave us a number of 0-9
+ if (cellV > 9)
+ cellV = 9;
+ lcd.drawBattery(cellV + 1);
+ } else
+ lcd.drawSymbol(16); // Draw the DC Logo
}
static void gui_solderingTempAdjust() {
- uint32_t lastChange = HAL_GetTick();
- currentlyActiveTemperatureTarget = 0;
- for (;;) {
- lcd.setCursor(0, 0);
- lcd.clearScreen();
- lcd.setFont(0);
- ButtonState buttons = getButtonState();
- if (buttons) lastChange = HAL_GetTick();
- switch (buttons) {
- case BUTTON_NONE:
- // stay
- break;
- case BUTTON_BOTH:
- // exit
- return;
- break;
- case BUTTON_B_LONG:
-
- break;
- case BUTTON_F_LONG:
-
- break;
- case BUTTON_F_SHORT:
- if (lcd.getRotation()) {
- systemSettings.SolderingTemp += 10; // add 10
- } else {
- systemSettings.SolderingTemp -= 10; // sub 10
- }
- break;
- case BUTTON_B_SHORT:
- if (!lcd.getRotation()) {
- systemSettings.SolderingTemp += 10; // add 10
- } else {
- systemSettings.SolderingTemp -= 10; // sub 10
- }
- break;
- default:
- break;
- }
- // constrain between 50-450 C
- if (systemSettings.temperatureInF) {
- if (systemSettings.SolderingTemp > 850)
- systemSettings.SolderingTemp = 850;
- } else {
- if (systemSettings.SolderingTemp > 450)
- systemSettings.SolderingTemp = 450;
- }
-
- if (systemSettings.temperatureInF) {
- if (systemSettings.SolderingTemp < 120)
- systemSettings.SolderingTemp = 120;
- } else {
- if (systemSettings.SolderingTemp < 50) systemSettings.SolderingTemp = 50;
- }
-
- if (HAL_GetTick() - lastChange > 1500)
- return; // exit if user just doesn't press anything for a bit
- lcd.drawChar('<');
- lcd.drawChar(' ');
- lcd.printNumber(systemSettings.SolderingTemp, 3);
- if (systemSettings.temperatureInF)
- lcd.drawSymbol(0);
- else
- lcd.drawSymbol(1);
- lcd.drawChar(' ');
- lcd.drawChar('>');
- lcd.refresh();
- GUIDelay();
- }
+ uint32_t lastChange = HAL_GetTick();
+ currentlyActiveTemperatureTarget = 0;
+ for (;;) {
+ lcd.setCursor(0, 0);
+ lcd.clearScreen();
+ lcd.setFont(0);
+ ButtonState buttons = getButtonState();
+ if (buttons)
+ lastChange = HAL_GetTick();
+ switch (buttons) {
+ case BUTTON_NONE:
+ // stay
+ break;
+ case BUTTON_BOTH:
+ // exit
+ return;
+ break;
+ case BUTTON_B_LONG:
+
+ break;
+ case BUTTON_F_LONG:
+
+ break;
+ case BUTTON_F_SHORT:
+ if (lcd.getRotation()) {
+ systemSettings.SolderingTemp += 10; // add 10
+ } else {
+ systemSettings.SolderingTemp -= 10; // sub 10
+ }
+ break;
+ case BUTTON_B_SHORT:
+ if (!lcd.getRotation()) {
+ systemSettings.SolderingTemp += 10; // add 10
+ } else {
+ systemSettings.SolderingTemp -= 10; // sub 10
+ }
+ break;
+ default:
+ break;
+ }
+ // constrain between 50-450 C
+ if (systemSettings.temperatureInF) {
+ if (systemSettings.SolderingTemp > 850)
+ systemSettings.SolderingTemp = 850;
+ } else {
+ if (systemSettings.SolderingTemp > 450)
+ systemSettings.SolderingTemp = 450;
+ }
+
+ if (systemSettings.temperatureInF) {
+ if (systemSettings.SolderingTemp < 120)
+ systemSettings.SolderingTemp = 120;
+ } else {
+ if (systemSettings.SolderingTemp < 50)
+ systemSettings.SolderingTemp = 50;
+ }
+
+ if (HAL_GetTick() - lastChange > 1500)
+ return; // exit if user just doesn't press anything for a bit
+ lcd.drawChar('<');
+ lcd.drawChar(' ');
+ lcd.printNumber(systemSettings.SolderingTemp, 3);
+ if (systemSettings.temperatureInF)
+ lcd.drawSymbol(0);
+ else
+ lcd.drawSymbol(1);
+ lcd.drawChar(' ');
+ lcd.drawChar('>');
+ lcd.refresh();
+ GUIDelay();
+ }
}
static void gui_settingsMenu() {
- // Draw the settings menu and provide iteration support etc
- uint8_t currentScreen = 0;
- uint32_t autoRepeatTimer = 0;
- bool earlyExit = false;
- uint32_t descriptionStart = 0;
- while ((settingsMenu[currentScreen].incrementHandler.func != NULL) &&
- earlyExit == false) {
- lcd.setFont(0);
- lcd.clearScreen();
- lcd.setCursor(0, 0);
-
- if (HAL_GetTick() - lastButtonTime < 4000) {
- settingsMenu[currentScreen].draw.func();
-
- } else {
- // Draw description
- // draw string starting from descriptionOffset
- int16_t maxOffset = strlen(settingsMenu[currentScreen].description) + 7;
- if (descriptionStart == 0) descriptionStart = HAL_GetTick();
-
- int16_t descriptionOffset =
- (((HAL_GetTick() - descriptionStart) / 3) % (maxOffset * 12));
- //^ Rolling offset based on time
- lcd.setCursor(((7 * 12) - descriptionOffset), 0);
- lcd.print(settingsMenu[currentScreen].description);
- }
-
- ButtonState buttons = getButtonState();
-
- switch (buttons) {
- case BUTTON_BOTH:
- earlyExit = true; // will make us exit next loop
- descriptionStart = 0;
- break;
- case BUTTON_F_SHORT:
- // increment
- if (descriptionStart == 0)
- settingsMenu[currentScreen].incrementHandler.func();
- else
- descriptionStart = 0;
- break;
- case BUTTON_B_SHORT:
- if (descriptionStart == 0)
- currentScreen++;
- else
- descriptionStart = 0;
- break;
- case BUTTON_F_LONG:
- if (HAL_GetTick() - autoRepeatTimer > 200) {
- settingsMenu[currentScreen].incrementHandler.func();
- autoRepeatTimer = HAL_GetTick();
- descriptionStart = 0;
- }
- break;
- case BUTTON_B_LONG:
- if (HAL_GetTick() - autoRepeatTimer > 200) {
- currentScreen++;
- autoRepeatTimer = HAL_GetTick();
- descriptionStart = 0;
- }
- break;
- case BUTTON_NONE:
- default:
- break;
- }
-
- lcd.refresh(); // update the LCD
- osDelay(20);
- }
-
- saveSettings();
+ // Draw the settings menu and provide iteration support etc
+ uint8_t currentScreen = 0;
+ uint32_t autoRepeatTimer = 0;
+ bool earlyExit = false;
+ uint32_t descriptionStart = 0;
+ while ((settingsMenu[currentScreen].incrementHandler.func != NULL)
+ && earlyExit == false) {
+ lcd.setFont(0);
+ lcd.clearScreen();
+ lcd.setCursor(0, 0);
+
+ if (HAL_GetTick() - lastButtonTime < 4000) {
+ settingsMenu[currentScreen].draw.func();
+
+ } else {
+ // Draw description
+ // draw string starting from descriptionOffset
+ int16_t maxOffset = strlen(settingsMenu[currentScreen].description)
+ + 7;
+ if (descriptionStart == 0)
+ descriptionStart = HAL_GetTick();
+
+ int16_t descriptionOffset =
+ (((HAL_GetTick() - descriptionStart) / 3) % (maxOffset * 12));
+ //^ Rolling offset based on time
+ lcd.setCursor(((7 * 12) - descriptionOffset), 0);
+ lcd.print(settingsMenu[currentScreen].description);
+ }
+
+ ButtonState buttons = getButtonState();
+
+ switch (buttons) {
+ case BUTTON_BOTH:
+ earlyExit = true; // will make us exit next loop
+ descriptionStart = 0;
+ break;
+ case BUTTON_F_SHORT:
+ // increment
+ if (descriptionStart == 0)
+ settingsMenu[currentScreen].incrementHandler.func();
+ else
+ descriptionStart = 0;
+ break;
+ case BUTTON_B_SHORT:
+ if (descriptionStart == 0)
+ currentScreen++;
+ else
+ descriptionStart = 0;
+ break;
+ case BUTTON_F_LONG:
+ if (HAL_GetTick() - autoRepeatTimer > 200) {
+ settingsMenu[currentScreen].incrementHandler.func();
+ autoRepeatTimer = HAL_GetTick();
+ descriptionStart = 0;
+ }
+ break;
+ case BUTTON_B_LONG:
+ if (HAL_GetTick() - autoRepeatTimer > 200) {
+ currentScreen++;
+ autoRepeatTimer = HAL_GetTick();
+ descriptionStart = 0;
+ }
+ break;
+ case BUTTON_NONE:
+ default:
+ break;
+ }
+
+ lcd.refresh(); // update the LCD
+ osDelay(20);
+ }
+
+ saveSettings();
}
static int gui_showTipTempWarning() {
- for (;;) {
- uint16_t tipTemp = tipMeasurementToC(getTipRawTemp(0));
- lcd.clearScreen();
- lcd.setCursor(0, 0);
- if (systemSettings.detailedSoldering) {
- lcd.setFont(1);
- lcd.print(WarningAdvancedString);
- lcd.setCursor(0, 8);
- lcd.print(WarningTipTempString);
-
- if (systemSettings.temperatureInF) {
- lcd.printNumber(tipMeasurementToF(getTipRawTemp(0)), 3);
- lcd.print("F");
- } else {
- lcd.printNumber(tipMeasurementToC(getTipRawTemp(0)), 3);
- lcd.print("C");
- }
- } else {
- lcd.setFont(0);
- lcd.drawArea(0, 0, 24, 16, WarningBlock24);
- lcd.setCursor(24, 0);
- // lcd.print(WarningSimpleString);
- lcd.print(" ");
- if (systemSettings.temperatureInF) {
- lcd.printNumber(tipMeasurementToF(getTipRawTemp(0)), 3);
- lcd.drawSymbol(0);
- } else {
- lcd.printNumber(tipMeasurementToC(getTipRawTemp(0)), 3);
- lcd.drawSymbol(1);
- }
- }
- if (systemSettings.coolingTempBlink && tipTemp > 70) {
- if (HAL_GetTick() % 500 < 250) lcd.clearScreen();
- }
- lcd.refresh();
- ButtonState buttons = getButtonState();
- if (buttons == BUTTON_F_SHORT)
- return 1;
- else if (buttons == BUTTON_B_SHORT || buttons == BUTTON_BOTH)
- return 0;
-
- if (tipTemp < 50) return 0;//Exit the warning screen
-
- GUIDelay();
- }
+ for (;;) {
+ uint16_t tipTemp = tipMeasurementToC(getTipRawTemp(0));
+ lcd.clearScreen();
+ lcd.setCursor(0, 0);
+ if (systemSettings.detailedSoldering) {
+ lcd.setFont(1);
+ lcd.print(WarningAdvancedString);
+ lcd.setCursor(0, 8);
+ lcd.print(WarningTipTempString);
+
+ if (systemSettings.temperatureInF) {
+ lcd.printNumber(tipMeasurementToF(getTipRawTemp(0)), 3);
+ lcd.print("F");
+ } else {
+ lcd.printNumber(tipMeasurementToC(getTipRawTemp(0)), 3);
+ lcd.print("C");
+ }
+ } else {
+ lcd.setFont(0);
+ lcd.drawArea(0, 0, 24, 16, WarningBlock24);
+ lcd.setCursor(24, 0);
+ // lcd.print(WarningSimpleString);
+ lcd.print(" ");
+ if (systemSettings.temperatureInF) {
+ lcd.printNumber(tipMeasurementToF(getTipRawTemp(0)), 3);
+ lcd.drawSymbol(0);
+ } else {
+ lcd.printNumber(tipMeasurementToC(getTipRawTemp(0)), 3);
+ lcd.drawSymbol(1);
+ }
+ }
+ if (systemSettings.coolingTempBlink && tipTemp > 70) {
+ if (HAL_GetTick() % 500 < 250)
+ lcd.clearScreen();
+ }
+ lcd.refresh();
+ ButtonState buttons = getButtonState();
+ if (buttons == BUTTON_F_SHORT)
+ return 1;
+ else if (buttons == BUTTON_B_SHORT || buttons == BUTTON_BOTH)
+ return 0;
+
+ if (tipTemp < 50)
+ return 0; //Exit the warning screen
+
+ GUIDelay();
+ }
+ return 0;
}
static uint16_t min(uint16_t a, uint16_t b) {
- if (a > b)
- return b;
- else
- return a;
+ if (a > b)
+ return b;
+ else
+ return a;
}
static int gui_SolderingSleepingMode() {
- // Drop to sleep temperature and display until movement or button press
-
- for (;;) {
- ButtonState buttons = getButtonState();
- if (buttons) return 0;
- if ((HAL_GetTick() - lastMovementTime < 1000) ||
- (HAL_GetTick() - lastButtonTime < 1000))
- return 0; // user moved or pressed a button, go back to soldering
- if (checkVoltageForExit()) return 1; // return non-zero on error
-
- if (systemSettings.temperatureInF)
- currentlyActiveTemperatureTarget = ftoTipMeasurement(
- min(systemSettings.SleepTemp, systemSettings.SolderingTemp));
- else
- currentlyActiveTemperatureTarget = ctoTipMeasurement(
- min(systemSettings.SleepTemp, systemSettings.SolderingTemp));
- // draw the lcd
- uint16_t tipTemp;
- if (systemSettings.temperatureInF)
- tipTemp = tipMeasurementToF(getTipRawTemp(0));
- else
- tipTemp = tipMeasurementToC(getTipRawTemp(0));
-
- lcd.clearScreen();
- lcd.setCursor(0, 0);
- if (systemSettings.detailedSoldering) {
- lcd.setFont(1);
- lcd.print(SleepingAdvancedString);
- lcd.setCursor(0, 8);
- lcd.print(SleepingTipAdvancedString);
- lcd.printNumber(tipTemp, 3);
- if (systemSettings.temperatureInF)
- lcd.print("F");
- else
- lcd.print("C");
-
- lcd.print(" ");
- lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) / 10, 2);
- lcd.drawChar('.');
- lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) % 10, 1);
- lcd.drawChar('V');
- } else {
- lcd.setFont(0);
- lcd.print(SleepingSimpleString);
- lcd.printNumber(tipTemp, 3);
- if (systemSettings.temperatureInF)
- lcd.drawSymbol(0);
- else
- lcd.drawSymbol(1);
- }
- if (systemSettings.ShutdownTime) // only allow shutdown exit if time > 0
- if (lastMovementTime)
- if (((uint32_t)(HAL_GetTick() - lastMovementTime)) >
- (uint32_t)(systemSettings.ShutdownTime * 60 * 1000)) {
- // shutdown
- currentlyActiveTemperatureTarget = 0;
- return 1; // we want to exit soldering mode
- }
- lcd.refresh();
- GUIDelay();
- }
+ // Drop to sleep temperature and display until movement or button press
+
+ for (;;) {
+ ButtonState buttons = getButtonState();
+ if (buttons)
+ return 0;
+ if ((HAL_GetTick() - lastMovementTime < 1000)
+ || (HAL_GetTick() - lastButtonTime < 1000))
+ return 0; // user moved or pressed a button, go back to soldering
+ if (checkVoltageForExit())
+ return 1; // return non-zero on error
+
+ if (systemSettings.temperatureInF)
+ currentlyActiveTemperatureTarget = ftoTipMeasurement(
+ min(systemSettings.SleepTemp,
+ systemSettings.SolderingTemp));
+ else
+ currentlyActiveTemperatureTarget = ctoTipMeasurement(
+ min(systemSettings.SleepTemp,
+ systemSettings.SolderingTemp));
+ // draw the lcd
+ uint16_t tipTemp;
+ if (systemSettings.temperatureInF)
+ tipTemp = tipMeasurementToF(getTipRawTemp(0));
+ else
+ tipTemp = tipMeasurementToC(getTipRawTemp(0));
+
+ lcd.clearScreen();
+ lcd.setCursor(0, 0);
+ if (systemSettings.detailedSoldering) {
+ lcd.setFont(1);
+ lcd.print(SleepingAdvancedString);
+ lcd.setCursor(0, 8);
+ lcd.print(SleepingTipAdvancedString);
+ lcd.printNumber(tipTemp, 3);
+ if (systemSettings.temperatureInF)
+ lcd.print("F");
+ else
+ lcd.print("C");
+
+ lcd.print(" ");
+ lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) / 10,
+ 2);
+ lcd.drawChar('.');
+ lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) % 10,
+ 1);
+ lcd.drawChar('V');
+ } else {
+ lcd.setFont(0);
+ lcd.print(SleepingSimpleString);
+ lcd.printNumber(tipTemp, 3);
+ if (systemSettings.temperatureInF)
+ lcd.drawSymbol(0);
+ else
+ lcd.drawSymbol(1);
+ }
+ if (systemSettings.ShutdownTime) // only allow shutdown exit if time > 0
+ if (lastMovementTime)
+ if (((uint32_t) (HAL_GetTick() - lastMovementTime))
+ > (uint32_t) (systemSettings.ShutdownTime * 60 * 1000)) {
+ // shutdown
+ currentlyActiveTemperatureTarget = 0;
+ return 1; // we want to exit soldering mode
+ }
+ lcd.refresh();
+ GUIDelay();
+ }
+ return 0;
}
static void gui_solderingMode() {
- /*
- * * Soldering (gui_solderingMode)
- * -> Main loop where we draw temp, and animations
- * --> User presses buttons and they goto the temperature adjust screen
- * ---> Display the current setpoint temperature
- * ---> Use buttons to change forward and back on temperature
- * ---> Both buttons or timeout for exiting
- * --> Long hold front button to enter boost mode
- * ---> Just temporarily sets the system into the alternate temperature for
- * PID control
- * --> Long hold back button to exit
- * --> Double button to exit
- */
- bool boostModeOn = false;
- uint32_t sleepThres = 0;
- if (systemSettings.SleepTime < 6)
- sleepThres = systemSettings.SleepTime * 10 * 1000;
- else
- sleepThres = (systemSettings.SleepTime - 5) * 60 * 1000;
- for (;;) {
- uint16_t tipTemp = getTipRawTemp(0);
-
- ButtonState buttons = getButtonState();
- switch (buttons) {
- case BUTTON_NONE:
- // stay
- boostModeOn = false;
- break;
- case BUTTON_BOTH:
- // exit
- return;
- break;
- case BUTTON_B_LONG:
- return; // exit on back long hold
- break;
- case BUTTON_F_LONG:
- // if boost mode is enabled turn it on
- if (systemSettings.boostModeEnabled) boostModeOn = true;
- break;
- case BUTTON_F_SHORT:
- case BUTTON_B_SHORT: {
- uint16_t oldTemp = systemSettings.SolderingTemp;
- gui_solderingTempAdjust(); // goto adjust temp mode
- if (oldTemp != systemSettings.SolderingTemp) {
- saveSettings(); // only save on change
- }
- } break;
- default:
- break;
- }
- // else we update the screen information
- lcd.setCursor(0, 0);
- lcd.clearScreen();
- lcd.setFont(0);
- if (tipTemp > 16300) {
- lcd.print(BadTipString);
- lcd.refresh();
- currentlyActiveTemperatureTarget = 0;
- waitForButtonPress();
- return;
- } else {
- // We switch the layout direction depending on the orientation of the lcd.
- if (lcd.getRotation()) {
- // battery
- gui_drawBatteryIcon();
-
- lcd.drawChar(' '); // Space out gap between battery <-> temp
- if (systemSettings.temperatureInF) {
- gui_drawTipTemp(); // Draw current tip temp
- lcd.drawSymbol(0); // deg F
- } else {
- gui_drawTipTemp(); // Draw current tip temp
- lcd.drawSymbol(1); // deg C
- }
-
- // We draw boost arrow if boosting, or else gap temp <-> heat indicator
- if (boostModeOn)
- lcd.drawSymbol(2);
- else
- lcd.drawChar(' ');
-
- // Draw heating/cooling symbols
- // If tip PWM > 10% then we are 'heating'
- if (getTipPWM() > 10)
- lcd.drawSymbol(14);
- else
- lcd.drawSymbol(15);
- } else {
- // Draw heating/cooling symbols
- // If tip PWM > 10% then we are 'heating'
- if (getTipPWM() > 10)
- lcd.drawSymbol(14);
- else
- lcd.drawSymbol(15);
- // We draw boost arrow if boosting, or else gap temp <-> heat indicator
- if (boostModeOn)
- lcd.drawSymbol(2);
- else
- lcd.drawChar(' ');
-
- if (systemSettings.temperatureInF) {
- gui_drawTipTemp(); // Draw current tip temp
- lcd.drawSymbol(0); // deg F
- } else {
- gui_drawTipTemp(); // Draw current tip temp
- lcd.drawSymbol(1); // deg C
- }
-
- lcd.drawChar(' '); // Space out gap between battery <-> temp
-
- gui_drawBatteryIcon();
- }
- }
-
- // Update the setpoints for the temperature
- if (boostModeOn) {
- if (systemSettings.temperatureInF)
- currentlyActiveTemperatureTarget =
- ftoTipMeasurement(systemSettings.BoostTemp);
- else
- currentlyActiveTemperatureTarget =
- ctoTipMeasurement(systemSettings.BoostTemp);
-
- } else {
- if (systemSettings.temperatureInF)
- currentlyActiveTemperatureTarget =
- ftoTipMeasurement(systemSettings.SolderingTemp);
- else
- currentlyActiveTemperatureTarget =
- ctoTipMeasurement(systemSettings.SolderingTemp);
- }
-
- // Undervoltage test
- if (checkVoltageForExit()) {
- return;
- }
-
- lcd.refresh();
- if (systemSettings.sensitivity)
- if (HAL_GetTick() - lastMovementTime > sleepThres &&
- HAL_GetTick() - lastButtonTime > sleepThres) {
- if (gui_SolderingSleepingMode()) {
- return; // If the function returns non-0 then exit
- }
- }
- GUIDelay();
- }
+ /*
+ * * Soldering (gui_solderingMode)
+ * -> Main loop where we draw temp, and animations
+ * --> User presses buttons and they goto the temperature adjust screen
+ * ---> Display the current setpoint temperature
+ * ---> Use buttons to change forward and back on temperature
+ * ---> Both buttons or timeout for exiting
+ * --> Long hold front button to enter boost mode
+ * ---> Just temporarily sets the system into the alternate temperature for
+ * PID control
+ * --> Long hold back button to exit
+ * --> Double button to exit
+ */
+ bool boostModeOn = false;
+ uint32_t sleepThres = 0;
+ if (systemSettings.SleepTime < 6)
+ sleepThres = systemSettings.SleepTime * 10 * 1000;
+ else
+ sleepThres = (systemSettings.SleepTime - 5) * 60 * 1000;
+ for (;;) {
+ uint16_t tipTemp = getTipRawTemp(0);
+
+ ButtonState buttons = getButtonState();
+ switch (buttons) {
+ case BUTTON_NONE:
+ // stay
+ boostModeOn = false;
+ break;
+ case BUTTON_BOTH:
+ // exit
+ return;
+ break;
+ case BUTTON_B_LONG:
+ return; // exit on back long hold
+ break;
+ case BUTTON_F_LONG:
+ // if boost mode is enabled turn it on
+ if (systemSettings.boostModeEnabled)
+ boostModeOn = true;
+ break;
+ case BUTTON_F_SHORT:
+ case BUTTON_B_SHORT: {
+ uint16_t oldTemp = systemSettings.SolderingTemp;
+ gui_solderingTempAdjust(); // goto adjust temp mode
+ if (oldTemp != systemSettings.SolderingTemp) {
+ saveSettings(); // only save on change
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ // else we update the screen information
+ lcd.setCursor(0, 0);
+ lcd.clearScreen();
+ lcd.setFont(0);
+ if (tipTemp > 16300) {
+ lcd.print(BadTipString);
+ lcd.refresh();
+ currentlyActiveTemperatureTarget = 0;
+ waitForButtonPress();
+ return;
+ } else {
+ // We switch the layout direction depending on the orientation of the lcd.
+ if (lcd.getRotation()) {
+ // battery
+ gui_drawBatteryIcon();
+
+ lcd.drawChar(' '); // Space out gap between battery <-> temp
+ if (systemSettings.temperatureInF) {
+ gui_drawTipTemp(); // Draw current tip temp
+ lcd.drawSymbol(0); // deg F
+ } else {
+ gui_drawTipTemp(); // Draw current tip temp
+ lcd.drawSymbol(1); // deg C
+ }
+
+ // We draw boost arrow if boosting, or else gap temp <-> heat indicator
+ if (boostModeOn)
+ lcd.drawSymbol(2);
+ else
+ lcd.drawChar(' ');
+
+ // Draw heating/cooling symbols
+ // If tip PWM > 10% then we are 'heating'
+ if (getTipPWM() > 10)
+ lcd.drawSymbol(14);
+ else
+ lcd.drawSymbol(15);
+ } else {
+ // Draw heating/cooling symbols
+ // If tip PWM > 10% then we are 'heating'
+ if (getTipPWM() > 10)
+ lcd.drawSymbol(14);
+ else
+ lcd.drawSymbol(15);
+ // We draw boost arrow if boosting, or else gap temp <-> heat indicator
+ if (boostModeOn)
+ lcd.drawSymbol(2);
+ else
+ lcd.drawChar(' ');
+
+ if (systemSettings.temperatureInF) {
+ gui_drawTipTemp(); // Draw current tip temp
+ lcd.drawSymbol(0); // deg F
+ } else {
+ gui_drawTipTemp(); // Draw current tip temp
+ lcd.drawSymbol(1); // deg C
+ }
+
+ lcd.drawChar(' '); // Space out gap between battery <-> temp
+
+ gui_drawBatteryIcon();
+ }
+ }
+
+ // Update the setpoints for the temperature
+ if (boostModeOn) {
+ if (systemSettings.temperatureInF)
+ currentlyActiveTemperatureTarget = ftoTipMeasurement(
+ systemSettings.BoostTemp);
+ else
+ currentlyActiveTemperatureTarget = ctoTipMeasurement(
+ systemSettings.BoostTemp);
+
+ } else {
+ if (systemSettings.temperatureInF)
+ currentlyActiveTemperatureTarget = ftoTipMeasurement(
+ systemSettings.SolderingTemp);
+ else
+ currentlyActiveTemperatureTarget = ctoTipMeasurement(
+ systemSettings.SolderingTemp);
+ }
+
+ // Undervoltage test
+ if (checkVoltageForExit()) {
+ return;
+ }
+
+ lcd.refresh();
+ if (systemSettings.sensitivity)
+ if (HAL_GetTick() - lastMovementTime > sleepThres
+ && HAL_GetTick() - lastButtonTime > sleepThres) {
+ if (gui_SolderingSleepingMode()) {
+ return; // If the function returns non-0 then exit
+ }
+ }
+ GUIDelay();
+ }
}
#define ACCELDEBUG 0
/* StartGUITask function */
void startGUITask(void const *argument) {
- /*
- * Main program states:
- *
- * * Soldering (gui_solderingMode)
- * -> Main loop where we draw temp, and animations
- * --> User presses buttons and they goto the temperature adjust screen
- * ---> Display the current setpoint temperature
- * ---> Use buttons to change forward and back on temperature
- * ---> Both buttons or timeout for exiting
- * --> Long hold front button to enter boost mode
- * ---> Just temporarily sets the system into the alternate temperature for
- * PID control
- * --> Long hold back button to exit
- * --> Double button to exit
- * * Settings Menu (gui_settingsMenu)
- * -> Show setting name
- * --> If no button press for > 3 Seconds, scroll description
- * -> If user presses back button, adjust the setting
- * -> Currently the same as 1.x (future to make more depth based)
- */
-
- uint8_t animationStep = 0;
- uint8_t tempWarningState = 0;
-
- HAL_IWDG_Refresh(&hiwdg);
- if (showBootLogoIfavailable()) waitForButtonPressOrTimeout(2000);
- HAL_IWDG_Refresh(&hiwdg);
- if (systemSettings.autoStartMode) {
- // jump directly to the autostart mode
- if (systemSettings.autoStartMode == 1) gui_solderingMode();
- }
+ /*
+ * Main program states:
+ *
+ * * Soldering (gui_solderingMode)
+ * -> Main loop where we draw temp, and animations
+ * --> User presses buttons and they goto the temperature adjust screen
+ * ---> Display the current setpoint temperature
+ * ---> Use buttons to change forward and back on temperature
+ * ---> Both buttons or timeout for exiting
+ * --> Long hold front button to enter boost mode
+ * ---> Just temporarily sets the system into the alternate temperature for
+ * PID control
+ * --> Long hold back button to exit
+ * --> Double button to exit
+ * * Settings Menu (gui_settingsMenu)
+ * -> Show setting name
+ * --> If no button press for > 3 Seconds, scroll description
+ * -> If user presses back button, adjust the setting
+ * -> Currently the same as 1.x (future to make more depth based)
+ */
+
+ uint8_t animationStep = 0;
+ uint8_t tempWarningState = 0;
+
+ HAL_IWDG_Refresh(&hiwdg);
+ if (showBootLogoIfavailable())
+ waitForButtonPressOrTimeout(2000);
+ HAL_IWDG_Refresh(&hiwdg);
+ if (systemSettings.autoStartMode) {
+ // jump directly to the autostart mode
+ if (systemSettings.autoStartMode == 1)
+ gui_solderingMode();
+ }
#if ACCELDEBUG
- for (;;) {
- HAL_IWDG_Refresh(&hiwdg);
- osDelay(100);
- }
+ for (;;) {
+ HAL_IWDG_Refresh(&hiwdg);
+ osDelay(100);
+ }
//^ Kept here for a way to block this thread
#endif
- for (;;) {
- ButtonState buttons = getButtonState();
- if (tempWarningState == 2) buttons = BUTTON_F_SHORT;
- switch (buttons) {
- case BUTTON_NONE:
- // Do nothing
- break;
- case BUTTON_BOTH:
- // Not used yet
- break;
-
- case BUTTON_B_LONG:
- // Show the version information
- {
- lcd.clearScreen(); // Ensure the buffer starts clean
- lcd.setCursor(0, 0); // Position the cursor at the 0,0 (top left)
- lcd.setFont(1); // small font
- lcd.print((char *)"V2.01"); // Print version number
- lcd.setCursor(0, 8); // second line
- lcd.print(__DATE__); // print the compile date
- lcd.refresh();
- waitForButtonPress();
- lcd.setFont(0); // reset font
- }
- break;
- case BUTTON_F_LONG:
- gui_solderingTempAdjust();
- saveSettings();
- break;
- case BUTTON_F_SHORT:
- lcd.setFont(0);
- lcd.displayOnOff(true); // turn lcd on
- gui_solderingMode(); // enter soldering mode
- tempWarningState = 0; // make sure warning can show
- break;
- case BUTTON_B_SHORT:
- lcd.setFont(0);
- lcd.displayOnOff(true); // turn lcd on
- gui_settingsMenu(); // enter the settings menu
- saveSettings();
- setCalibrationOffset(
- systemSettings.CalibrationOffset); // ensure cal offset is applied
- break;
- default:
- break;
- }
- currentlyActiveTemperatureTarget = 0; // ensure tip is off
-
- if (systemSettings.sensitivity) {
- if ((HAL_GetTick() - lastMovementTime) > 60000 &&
- (HAL_GetTick() - lastButtonTime) > 60000)
- lcd.displayOnOff(false); // turn lcd off when no movement
- else if (HAL_GetTick() - lastMovementTime < 1000 ||
- HAL_GetTick() - lastButtonTime <
- 1000) /*Use short time for test, and prevent lots of I2C
- writes for no need*/
- lcd.displayOnOff(true); // turn lcd back on
- }
- uint16_t tipTemp = tipMeasurementToC(getTipRawTemp(0));
- if (tipTemp > 600) tipTemp = 0;
- if (tipTemp > 50) {
- if (tempWarningState == 0) {
- currentlyActiveTemperatureTarget = 0; // ensure tip is off
- lcd.displayOnOff(true); // force LCD on
- if (gui_showTipTempWarning() == 1) {
- tempWarningState = 2; // we can re-enter the warning
- } else
- tempWarningState = 1;
- }
- } else
- tempWarningState = 0;
- // Clear the lcd buffer
- lcd.clearScreen();
- lcd.setCursor(0, 0);
- if (systemSettings.detailedIDLE) {
- lcd.setFont(1);
- if (tipTemp > 470) {
- lcd.print(TipDisconnectedString);
- } else {
- lcd.print(IdleTipString);
- if (systemSettings.temperatureInF)
- lcd.printNumber(tipMeasurementToF(getTipRawTemp(0)), 3);
- else
- lcd.printNumber(tipMeasurementToC(getTipRawTemp(0)), 3);
- lcd.print(IdleSetString);
- lcd.printNumber(systemSettings.SolderingTemp, 3);
- }
- lcd.setCursor(0, 8);
- lcd.print(InputVoltageString);
- lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) / 10, 2);
- lcd.drawChar('.');
- lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) % 10, 1);
- lcd.print("V");
-
- } else {
- lcd.setFont(0);
- if (lcd.getRotation()) {
- lcd.drawArea(12, 0, 84, 16, idleScreenBG);
- lcd.setCursor(0, 0);
- gui_drawBatteryIcon();
- } else {
- lcd.drawArea(0, 0, 84, 16, idleScreenBGF); // Needs to be flipped
- lcd.setCursor(84, 0);
- gui_drawBatteryIcon();
- }
- }
-
- lcd.refresh();
- animationStep++;
- GUIDelay();
- }
+ for (;;) {
+ ButtonState buttons = getButtonState();
+ if (tempWarningState == 2)
+ buttons = BUTTON_F_SHORT;
+ switch (buttons) {
+ case BUTTON_NONE:
+ // Do nothing
+ break;
+ case BUTTON_BOTH:
+ // Not used yet
+ break;
+
+ case BUTTON_B_LONG:
+ // Show the version information
+ {
+ lcd.clearScreen(); // Ensure the buffer starts clean
+ lcd.setCursor(0, 0); // Position the cursor at the 0,0 (top left)
+ lcd.setFont(1); // small font
+ lcd.print((char *) "V2.03"); // Print version number
+ lcd.setCursor(0, 8); // second line
+ lcd.print(__DATE__); // print the compile date
+ lcd.refresh();
+ waitForButtonPress();
+ lcd.setFont(0); // reset font
+ }
+ break;
+ case BUTTON_F_LONG:
+ gui_solderingTempAdjust();
+ saveSettings();
+ break;
+ case BUTTON_F_SHORT:
+ lcd.setFont(0);
+ lcd.displayOnOff(true); // turn lcd on
+ gui_solderingMode(); // enter soldering mode
+ tempWarningState = 0; // make sure warning can show
+ break;
+ case BUTTON_B_SHORT:
+ lcd.setFont(0);
+ lcd.displayOnOff(true); // turn lcd on
+ gui_settingsMenu(); // enter the settings menu
+ saveSettings();
+ setCalibrationOffset(systemSettings.CalibrationOffset); // ensure cal offset is applied
+ break;
+ default:
+ break;
+ }
+ currentlyActiveTemperatureTarget = 0; // ensure tip is off
+
+ if (systemSettings.sensitivity) {
+ if ((HAL_GetTick() - lastMovementTime) > 60000
+ && (HAL_GetTick() - lastButtonTime) > 60000)
+ lcd.displayOnOff(false); // turn lcd off when no movement
+ else if (HAL_GetTick() - lastMovementTime < 1000
+ || HAL_GetTick() - lastButtonTime < 1000) /*Use short time for test, and prevent lots of I2C
+ writes for no need*/
+ lcd.displayOnOff(true); // turn lcd back on
+ }
+ uint16_t tipTemp = tipMeasurementToC(getTipRawTemp(0));
+ if (tipTemp > 600)
+ tipTemp = 0;
+ if (tipTemp > 50) {
+ if (tempWarningState == 0) {
+ currentlyActiveTemperatureTarget = 0; // ensure tip is off
+ lcd.displayOnOff(true); // force LCD on
+ if (gui_showTipTempWarning() == 1) {
+ tempWarningState = 2; // we can re-enter the warning
+ } else
+ tempWarningState = 1;
+ }
+ } else
+ tempWarningState = 0;
+ // Clear the lcd buffer
+ lcd.clearScreen();
+ lcd.setCursor(0, 0);
+ if (systemSettings.detailedIDLE) {
+ lcd.setFont(1);
+ if (tipTemp > 470) {
+ lcd.print(TipDisconnectedString);
+ } else {
+ lcd.print(IdleTipString);
+ if (systemSettings.temperatureInF)
+ lcd.printNumber(tipMeasurementToF(getTipRawTemp(0)), 3);
+ else
+ lcd.printNumber(tipMeasurementToC(getTipRawTemp(0)), 3);
+ lcd.print(IdleSetString);
+ lcd.printNumber(systemSettings.SolderingTemp, 3);
+ }
+ lcd.setCursor(0, 8);
+ lcd.print(InputVoltageString);
+ lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) / 10,
+ 2);
+ lcd.drawChar('.');
+ lcd.printNumber(getInputVoltageX10(systemSettings.voltageDiv) % 10,
+ 1);
+ lcd.print("V");
+
+ } else {
+ lcd.setFont(0);
+ if (lcd.getRotation()) {
+ lcd.drawArea(12, 0, 84, 16, idleScreenBG);
+ lcd.setCursor(0, 0);
+ gui_drawBatteryIcon();
+ } else {
+ lcd.drawArea(0, 0, 84, 16, idleScreenBGF); // Needs to be flipped
+ lcd.setCursor(84, 0);
+ gui_drawBatteryIcon();
+ }
+ }
+
+ lcd.refresh();
+ animationStep++;
+ GUIDelay();
+ }
}
/* StartPIDTask function */
void startPIDTask(void const *argument) {
- /*
- * We take the current tip temperature & evaluate the next step for the tip
- * control PWM
- * Tip temperature is measured by getTipTemperature(1) so we get instant
- * result
- * This comes in Cx10 format
- * We then control the tip temperature to aim for the setpoint in the settings
- * struct
- *
- */
- int32_t integralCount = 0;
- int32_t derivativeLastValue = 0;
- int32_t kp, ki, kd, kb;
- int32_t backoffOverflow = 0;
- kp = 20;
- ki = 50;
- kd = 40;
- kb = 0;
- // REMEBER ^^^^ These constants are backwards
- // They act as dividers, so to 'increase' a P term, you make the number
- // smaller.
- const int32_t itermMax = 40;
- for (;;) {
- uint16_t rawTemp = getTipRawTemp(1); // get instantaneous reading
- if (currentlyActiveTemperatureTarget) {
- // Compute the PID loop in here
- // Because our values here are quite large for all measurements (0-16k ~=
- // 33 counts per C)
- // P I & D are divisors, so inverse logic applies (beware)
-
- int32_t rawTempError = currentlyActiveTemperatureTarget - rawTemp;
- int32_t ierror = (rawTempError / ki);
- integralCount += ierror;
- if (integralCount > (itermMax / 2))
- integralCount = itermMax / 2; // prevent too much lead
- else if (integralCount < -itermMax)
- integralCount = itermMax;
-
- int32_t dInput = (rawTemp - derivativeLastValue);
-
- /*Compute PID Output*/
- int32_t output = (rawTempError / kp);
- if (ki) output += integralCount;
- if (kd) output -= (dInput / kd);
- if (kb) output -= backoffOverflow / kb;
-
- if (output > 100) {
- backoffOverflow = output;
- output = 100; // saturate
- } else if (output < 0) {
- backoffOverflow = output;
- output = 0;
- } else
- backoffOverflow = 0;
- if (currentlyActiveTemperatureTarget < rawTemp) {
- output = 0;
- integralCount = 0;
- backoffOverflow = 0;
- derivativeLastValue = 0;
- }
- setTipPWM(output);
- } else {
- setTipPWM(0); // disable the output driver if the output is set to be off
- // elsewhere
- integralCount = 0;
- backoffOverflow = 0;
- derivativeLastValue = 0;
- }
- derivativeLastValue = rawTemp; // store for next loop
- HAL_IWDG_Refresh(&hiwdg);
- osDelay(100); // 10 Hz temp loop
- }
+ /*
+ * We take the current tip temperature & evaluate the next step for the tip
+ * control PWM
+ * Tip temperature is measured by getTipTemperature(1) so we get instant
+ * result
+ * This comes in Cx10 format
+ * We then control the tip temperature to aim for the setpoint in the settings
+ * struct
+ *
+ */
+ int32_t integralCount = 0;
+ int32_t derivativeLastValue = 0;
+ int32_t kp, ki, kd, kb;
+ int32_t backoffOverflow = 0;
+ kp = 20;
+ ki = 50;
+ kd = 40;
+ kb = 0;
+ // REMEBER ^^^^ These constants are backwards
+ // They act as dividers, so to 'increase' a P term, you make the number
+ // smaller.
+ const int32_t itermMax = 40;
+ for (;;) {
+ uint16_t rawTemp = getTipRawTemp(1); // get instantaneous reading
+ if (currentlyActiveTemperatureTarget) {
+ // Compute the PID loop in here
+ // Because our values here are quite large for all measurements (0-16k ~=
+ // 33 counts per C)
+ // P I & D are divisors, so inverse logic applies (beware)
+
+ int32_t rawTempError = currentlyActiveTemperatureTarget - rawTemp;
+ int32_t ierror = (rawTempError / ki);
+ integralCount += ierror;
+ if (integralCount > (itermMax / 2))
+ integralCount = itermMax / 2; // prevent too much lead
+ else if (integralCount < -itermMax)
+ integralCount = itermMax;
+
+ int32_t dInput = (rawTemp - derivativeLastValue);
+
+ /*Compute PID Output*/
+ int32_t output = (rawTempError / kp);
+ if (ki)
+ output += integralCount;
+ if (kd)
+ output -= (dInput / kd);
+ if (kb)
+ output -= backoffOverflow / kb;
+
+ if (output > 100) {
+ backoffOverflow = output;
+ output = 100; // saturate
+ } else if (output < 0) {
+ backoffOverflow = output;
+ output = 0;
+ } else
+ backoffOverflow = 0;
+ if (currentlyActiveTemperatureTarget < rawTemp) {
+ output = 0;
+ integralCount = 0;
+ backoffOverflow = 0;
+ derivativeLastValue = 0;
+ }
+ setTipPWM(output);
+ } else {
+ setTipPWM(0); // disable the output driver if the output is set to be off
+ // elsewhere
+ integralCount = 0;
+ backoffOverflow = 0;
+ derivativeLastValue = 0;
+ }
+ derivativeLastValue = rawTemp; // store for next loop
+ HAL_IWDG_Refresh(&hiwdg);
+ osDelay(100); // 10 Hz temp loop
+ }
}
#define MOVFilter 8
void startMOVTask(void const *argument) {
- osDelay(4000); // wait for accel to stabilize
- int16_t datax[MOVFilter];
- int16_t datay[MOVFilter];
- int16_t dataz[MOVFilter];
- uint8_t currentPointer = 0;
- memset(datax, 0, MOVFilter * sizeof(int16_t));
- memset(datay, 0, MOVFilter * sizeof(int16_t));
- memset(dataz, 0, MOVFilter * sizeof(int16_t));
- int16_t tx, ty, tz;
- int32_t avgx, avgy, avgz;
- if (systemSettings.sensitivity > 9) systemSettings.sensitivity = 9;
+ osDelay(4000); // wait for accel to stabilize
+ int16_t datax[MOVFilter];
+ int16_t datay[MOVFilter];
+ int16_t dataz[MOVFilter];
+ uint8_t currentPointer = 0;
+ memset(datax, 0, MOVFilter * sizeof(int16_t));
+ memset(datay, 0, MOVFilter * sizeof(int16_t));
+ memset(dataz, 0, MOVFilter * sizeof(int16_t));
+ int16_t tx, ty, tz;
+ int32_t avgx, avgy, avgz;
+ if (systemSettings.sensitivity > 9)
+ systemSettings.sensitivity = 9;
#if ACCELDEBUG
- uint32_t max = 0;
+ uint32_t max = 0;
#endif
- for (;;) {
- int32_t threshold = 1200 + (9 * 200);
- threshold -= systemSettings.sensitivity * 200; // 200 is the step size
- accel.getAxisReadings(&tx, &ty, &tz);
+ for (;;) {
+ int32_t threshold = 1200 + (9 * 200);
+ threshold -= systemSettings.sensitivity * 200; // 200 is the step size
+ accel.getAxisReadings(&tx, &ty, &tz);
- datax[currentPointer] = (int32_t)tx;
- datay[currentPointer] = (int32_t)ty;
- dataz[currentPointer] = (int32_t)tz;
- currentPointer = (currentPointer + 1) % MOVFilter;
+ datax[currentPointer] = (int32_t) tx;
+ datay[currentPointer] = (int32_t) ty;
+ dataz[currentPointer] = (int32_t) tz;
+ currentPointer = (currentPointer + 1) % MOVFilter;
#if ACCELDEBUG
- // Debug for Accel
-
- avgx = avgy = avgz = 0;
- for (uint8_t i = 0; i < MOVFilter; i++) {
- avgx += datax[i];
- avgy += datay[i];
- avgz += dataz[i];
- }
- avgx /= MOVFilter;
- avgy /= MOVFilter;
- avgz /= MOVFilter;
- lcd.setFont(1);
- lcd.setCursor(0, 0);
- lcd.printNumber(abs(avgx - (int32_t)tx), 5);
- lcd.print(" ");
- lcd.printNumber(abs(avgy - (int32_t)ty), 5);
- if ((abs(avgx - tx) + abs(avgy - ty) + abs(avgz - tz)) > max)
- max = (abs(avgx - tx) + abs(avgy - ty) + abs(avgz - tz));
- lcd.setCursor(0, 8);
- lcd.printNumber(max, 5);
- lcd.print(" ");
-
- lcd.printNumber((abs(avgx - tx) + abs(avgy - ty) + abs(avgz - tz)), 5);
- lcd.refresh();
- if (HAL_GPIO_ReadPin(KEY_A_GPIO_Port, KEY_A_Pin) == GPIO_PIN_RESET) max = 0;
+ // Debug for Accel
+
+ avgx = avgy = avgz = 0;
+ for (uint8_t i = 0; i < MOVFilter; i++) {
+ avgx += datax[i];
+ avgy += datay[i];
+ avgz += dataz[i];
+ }
+ avgx /= MOVFilter;
+ avgy /= MOVFilter;
+ avgz /= MOVFilter;
+ lcd.setFont(1);
+ lcd.setCursor(0, 0);
+ lcd.printNumber(abs(avgx - (int32_t)tx), 5);
+ lcd.print(" ");
+ lcd.printNumber(abs(avgy - (int32_t)ty), 5);
+ if ((abs(avgx - tx) + abs(avgy - ty) + abs(avgz - tz)) > max)
+ max = (abs(avgx - tx) + abs(avgy - ty) + abs(avgz - tz));
+ lcd.setCursor(0, 8);
+ lcd.printNumber(max, 5);
+ lcd.print(" ");
+
+ lcd.printNumber((abs(avgx - tx) + abs(avgy - ty) + abs(avgz - tz)), 5);
+ lcd.refresh();
+ if (HAL_GPIO_ReadPin(KEY_A_GPIO_Port, KEY_A_Pin) == GPIO_PIN_RESET) max = 0;
#endif
- // Only run the actual processing if the sensitivity is set (aka we are
- // enabled)
- if (systemSettings.sensitivity) {
- // calculate averages
- avgx = avgy = avgz = 0;
- for (uint8_t i = 0; i < MOVFilter; i++) {
- avgx += datax[i];
- avgy += datay[i];
- avgz += dataz[i];
- }
- avgx /= MOVFilter;
- avgy /= MOVFilter;
- avgz /= MOVFilter;
-
- // So now we have averages, we want to look if these are different by more
- // than the threshold
- int32_t error = (abs(avgx - tx) + abs(avgy - ty) + abs(avgz - tz));
- // If error has occured then we update the tick timer
- if (error > threshold) {
- lastMovementTime = HAL_GetTick();
- }
- }
-
- osDelay(100); // Slow down update rate
- }
+ // Only run the actual processing if the sensitivity is set (aka we are
+ // enabled)
+ if (systemSettings.sensitivity) {
+ // calculate averages
+ avgx = avgy = avgz = 0;
+ for (uint8_t i = 0; i < MOVFilter; i++) {
+ avgx += datax[i];
+ avgy += datay[i];
+ avgz += dataz[i];
+ }
+ avgx /= MOVFilter;
+ avgy /= MOVFilter;
+ avgz /= MOVFilter;
+
+ // So now we have averages, we want to look if these are different by more
+ // than the threshold
+ int32_t error = (abs(avgx - tx) + abs(avgy - ty) + abs(avgz - tz));
+ // If error has occured then we update the tick timer
+ if (error > threshold) {
+ lastMovementTime = HAL_GetTick();
+ }
+ }
+
+ osDelay(100); // Slow down update rate
+ }
}
/* StartRotationTask function */
void startRotationTask(void const *argument) {
- /*
- * This task is used to manage rotation of the LCD screen & button re-mapping
- *
- */
- osDelay(1000); // wait for accel to stabilize
- HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(EXTI3_IRQn);
- HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
- //^ We hold off enabling these until now to ensure the semaphore is available
- // to be used first
- switch (systemSettings.OrientationMode) {
- case 0:
- lcd.setRotation(false);
- break;
- case 1:
- lcd.setRotation(true);
- break;
- case 2:
- lcd.setRotation(false);
- break;
- default:
- break;
- }
- for (;;) {
- if (xSemaphoreTake(rotationChangedSemaphore, portMAX_DELAY) == pdTRUE ||
- (HAL_GPIO_ReadPin(INT_Orientation_GPIO_Port, INT_Orientation_Pin) ==
- GPIO_PIN_RESET)) {
- // a rotation event has occured
- bool rotation = accel.getOrientation();
- if (systemSettings.OrientationMode == 2)
- lcd.setRotation(rotation); // link the data through
- }
- osDelay(300);
- }
+ /*
+ * This task is used to manage rotation of the LCD screen & button re-mapping
+ *
+ */
+ osDelay(1000); // wait for accel to stabilize
+ HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(EXTI3_IRQn);
+ HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
+ //^ We hold off enabling these until now to ensure the semaphore is available
+ // to be used first
+ switch (systemSettings.OrientationMode) {
+ case 0:
+ lcd.setRotation(false);
+ break;
+ case 1:
+ lcd.setRotation(true);
+ break;
+ case 2:
+ lcd.setRotation(false);
+ break;
+ default:
+ break;
+ }
+ for (;;) {
+ if (xSemaphoreTake(rotationChangedSemaphore, portMAX_DELAY) == pdTRUE
+ || (HAL_GPIO_ReadPin(INT_Orientation_GPIO_Port,
+ INT_Orientation_Pin) == GPIO_PIN_RESET)) {
+ // a rotation event has occured
+ bool rotation = accel.getOrientation();
+ if (systemSettings.OrientationMode == 2)
+ lcd.setRotation(rotation); // link the data through
+ }
+ osDelay(300);
+ }
}
// Handler called by HAL when a EXTI occurs, but after IRQ bit is cleared
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
- static signed long xHigherPriorityTaskWoken;
- if (GPIO_Pin == INT_Orientation_Pin) {
- xSemaphoreGiveFromISR(rotationChangedSemaphore, &xHigherPriorityTaskWoken);
- } else if (GPIO_Pin == INT_Movement_Pin) {
- // New data is available for reading from the unit
- // xSemaphoreGiveFromISR(accelDataAvailableSemaphore,
- // &xHigherPriorityTaskWoken);
- }
+ static signed long xHigherPriorityTaskWoken;
+ if (GPIO_Pin == INT_Orientation_Pin) {
+ xSemaphoreGiveFromISR(rotationChangedSemaphore,
+ &xHigherPriorityTaskWoken);
+ } else if (GPIO_Pin == INT_Movement_Pin) {
+ // New data is available for reading from the unit
+ // xSemaphoreGiveFromISR(accelDataAvailableSemaphore,
+ // &xHigherPriorityTaskWoken);
+ }
}
#define FLASH_LOGOADDR \
(0x8000000 | 0xF800) /*second last page of flash set aside for logo image*/
bool showBootLogoIfavailable() {
- // check if the header is there (0xAA,0x55,0xF0,0x0D)
- // If so display logo
- uint16_t temp[98];
-
- for (uint8_t i = 0; i < (98); i++) {
- temp[i] = *(uint16_t *)(FLASH_LOGOADDR + (i * 2));
- }
- uint8_t temp8[98 * 2];
- for (uint8_t i = 0; i < 98; i++) {
- temp8[i * 2] = temp[i] >> 8;
- temp8[i * 2 + 1] = temp[i] & 0xFF;
- }
-
- if (temp8[0] != 0xAA) return false;
- if (temp8[1] != 0x55) return false;
- if (temp8[2] != 0xF0) return false;
- if (temp8[3] != 0x0D) return false;
-
- lcd.drawArea(0, 0, 96, 16, (uint8_t *)(temp8 + 4));
- lcd.refresh();
- return true;
+ // check if the header is there (0xAA,0x55,0xF0,0x0D)
+ // If so display logo
+ uint16_t temp[98];
+
+ for (uint8_t i = 0; i < (98); i++) {
+ temp[i] = *(uint16_t *) (FLASH_LOGOADDR + (i * 2));
+ }
+ uint8_t temp8[98 * 2];
+ for (uint8_t i = 0; i < 98; i++) {
+ temp8[i * 2] = temp[i] >> 8;
+ temp8[i * 2 + 1] = temp[i] & 0xFF;
+ }
+
+ if (temp8[0] != 0xAA)
+ return false;
+ if (temp8[1] != 0x55)
+ return false;
+ if (temp8[2] != 0xF0)
+ return false;
+ if (temp8[3] != 0x0D)
+ return false;
+
+ lcd.drawArea(0, 0, 96, 16, (uint8_t *) (temp8 + 4));
+ lcd.refresh();
+ return true;
}
diff --git a/workspace/TS100/src/stm32f1xx_hal_msp.c b/workspace/TS100/src/stm32f1xx_hal_msp.c
index 7a792ed5..1306f350 100644
--- a/workspace/TS100/src/stm32f1xx_hal_msp.c
+++ b/workspace/TS100/src/stm32f1xx_hal_msp.c
@@ -73,7 +73,6 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) {
}
-
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) {
GPIO_InitTypeDef GPIO_InitStruct;
@@ -92,38 +91,10 @@ void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) {
__HAL_RCC_I2C1_CLK_ENABLE()
;
- /* I2C1 DMA Init */
- /* I2C1_RX Init */
- hdma_i2c1_rx.Instance = DMA1_Channel7;
- hdma_i2c1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
- hdma_i2c1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
- hdma_i2c1_rx.Init.MemInc = DMA_MINC_ENABLE;
- hdma_i2c1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
- hdma_i2c1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
- hdma_i2c1_rx.Init.Mode = DMA_NORMAL;
- hdma_i2c1_rx.Init.Priority = DMA_PRIORITY_LOW;
- HAL_DMA_Init(&hdma_i2c1_rx);
-
- __HAL_LINKDMA(hi2c, hdmarx, hdma_i2c1_rx);
-
- /* I2C1_TX Init */
- hdma_i2c1_tx.Instance = DMA1_Channel6;
- hdma_i2c1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
- hdma_i2c1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
- hdma_i2c1_tx.Init.MemInc = DMA_MINC_ENABLE;
- hdma_i2c1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
- hdma_i2c1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
- hdma_i2c1_tx.Init.Mode = DMA_NORMAL;
- hdma_i2c1_tx.Init.Priority = DMA_PRIORITY_LOW;
- HAL_DMA_Init(&hdma_i2c1_tx);
-
- __HAL_LINKDMA(hi2c, hdmatx, hdma_i2c1_tx);
-
}
}
-
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) {
if (htim_base->Instance == TIM3) {
/* Peripheral clock enable */
diff --git a/workspace/TS100/src/stm32f1xx_it.c b/workspace/TS100/src/stm32f1xx_it.c
index a826962d..dae01223 100644
--- a/workspace/TS100/src/stm32f1xx_it.c
+++ b/workspace/TS100/src/stm32f1xx_it.c
@@ -63,16 +63,6 @@ void DMA1_Channel1_IRQHandler(void) {
HAL_DMA_IRQHandler(&hdma_adc1);
}
-// DMA used for transmitting I2C packets
-void DMA1_Channel6_IRQHandler(void) {
- HAL_DMA_IRQHandler(&hdma_i2c1_tx);
-}
-
-//DMA used for receiving I2C packets
-void DMA1_Channel7_IRQHandler(void) {
- HAL_DMA_IRQHandler(&hdma_i2c1_rx);
-}
-
//ADC interrupt used for DMA
void ADC1_2_IRQHandler(void) {
HAL_ADC_IRQHandler(&hadc1);