mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
Merge branch 'dev' into Short-Detection
This commit is contained in:
@@ -208,7 +208,7 @@ bool isTipDisconnected() {
|
||||
|
||||
void setStatusLED(const enum StatusLED state) {}
|
||||
uint8_t preStartChecks() {
|
||||
if (!hub238_has_run_selection()) {
|
||||
if (!hub238_has_run_selection() && (xTaskGetTickCount() < TICKS_SECOND * 5)) {
|
||||
return 0;
|
||||
}
|
||||
// We check if we are in a "Limited" mode; where we have to run the PWM really fast
|
||||
|
||||
@@ -215,6 +215,6 @@ uint8_t hub238_source_currentX100() {
|
||||
temp &= 0b1111;
|
||||
return pdo_slot_to_currentx100(temp);
|
||||
}
|
||||
return 10;//Failsafe to 0.1 amp
|
||||
return 10; // Failsafe to 0.1 amp
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -33,19 +33,19 @@ uint32_t OLED::displayChecksum;
|
||||
*/
|
||||
I2C_CLASS::I2C_REG OLED_Setup_Array[] = {
|
||||
/**/
|
||||
{0x80, OLED_OFF, 0}, /* Display off */
|
||||
{0x80, OLED_DIVIDER, 0}, /* Set display clock divide ratio / osc freq */
|
||||
{0x80, 0x52, 0}, /* Divide ratios */
|
||||
{0x80, 0xA8, 0}, /* Set Multiplex Ratio */
|
||||
{0x80, OLED_HEIGHT - 1, 0}, /* Multiplex ratio adjusts how far down the matrix it scans */
|
||||
{0x80, 0xC0, 0}, /* Set COM Scan direction */
|
||||
{0x80, 0xD3, 0}, /* Set vertical Display offset */
|
||||
{0x80, 0x00, 0}, /* 0 Offset */
|
||||
{0x80, 0x40, 0}, /* Set Display start line to 0 */
|
||||
{0x80, OLED_OFF, 0}, /* Display off */
|
||||
{0x80, OLED_DIVIDER, 0}, /* Set display clock divide ratio / osc freq */
|
||||
{0x80, 0x52, 0}, /* Divide ratios */
|
||||
{0x80, 0xA8, 0}, /* Set Multiplex Ratio */
|
||||
{0x80, OLED_HEIGHT - 1, 0}, /* Multiplex ratio adjusts how far down the matrix it scans */
|
||||
{0x80, 0xC0, 0}, /* Set COM Scan direction */
|
||||
{0x80, 0xD3, 0}, /* Set vertical Display offset */
|
||||
{0x80, 0x00, 0}, /* 0 Offset */
|
||||
{0x80, 0x40, 0}, /* Set Display start line to 0 */
|
||||
#ifdef OLED_SEGMENT_MAP_REVERSED
|
||||
{0x80, 0xA1, 0}, /* Set Segment remap to normal */
|
||||
{0x80, 0xA1, 0}, /* Set Segment remap to normal */
|
||||
#else
|
||||
{0x80, 0xA0, 0}, /* Set Segment remap to normal */
|
||||
{0x80, 0xA0, 0}, /* Set Segment remap to normal */
|
||||
#endif
|
||||
{0x80, 0x8D, 0}, /* Charge Pump */
|
||||
{0x80, 0x14, 0}, /* Charge Pump settings */
|
||||
@@ -547,8 +547,9 @@ void OLED::printNumber(uint16_t number, uint8_t places, FontStyle fontStyle, boo
|
||||
}
|
||||
|
||||
buffer[0] = 2 + number % 10;
|
||||
if (noLeaderZeros)
|
||||
if (noLeaderZeros) {
|
||||
stripLeaderZeros(buffer, places);
|
||||
}
|
||||
print(buffer, fontStyle);
|
||||
}
|
||||
|
||||
@@ -574,10 +575,12 @@ void OLED::drawSymbol(uint8_t symbolID) {
|
||||
// Draw an area, but y must be aligned on 0/8 offset
|
||||
void OLED::drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t *ptr) {
|
||||
// Splat this from x->x+wide in two strides
|
||||
if (x <= -wide)
|
||||
if (x <= -wide) {
|
||||
return; // cutoffleft
|
||||
if (x > 96)
|
||||
}
|
||||
if (x > 96) {
|
||||
return; // cutoff right
|
||||
}
|
||||
|
||||
uint8_t visibleStart = 0;
|
||||
uint8_t visibleEnd = wide;
|
||||
@@ -609,10 +612,12 @@ void OLED::drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uin
|
||||
// For data which has octets swapped in a 16-bit word.
|
||||
void OLED::drawAreaSwapped(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t *ptr) {
|
||||
// Splat this from x->x+wide in two strides
|
||||
if (x <= -wide)
|
||||
if (x <= -wide) {
|
||||
return; // cutoffleft
|
||||
if (x > 96)
|
||||
}
|
||||
if (x > 96) {
|
||||
return; // cutoff right
|
||||
}
|
||||
|
||||
uint8_t visibleStart = 0;
|
||||
uint8_t visibleEnd = wide;
|
||||
@@ -643,10 +648,12 @@ void OLED::drawAreaSwapped(int16_t x, int8_t y, uint8_t wide, uint8_t height, co
|
||||
|
||||
void OLED::fillArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t value) {
|
||||
// Splat this from x->x+wide in two strides
|
||||
if (x <= -wide)
|
||||
if (x <= -wide) {
|
||||
return; // cutoffleft
|
||||
if (x > 96)
|
||||
}
|
||||
if (x > 96) {
|
||||
return; // cutoff right
|
||||
}
|
||||
|
||||
uint8_t visibleStart = 0;
|
||||
uint8_t visibleEnd = wide;
|
||||
@@ -682,30 +689,37 @@ void OLED::drawFilledRect(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, bool c
|
||||
uint8_t mask = 0xFF;
|
||||
if (y0) {
|
||||
mask = mask << (y0 % 8);
|
||||
for (uint8_t col = x0; col < x1; col++)
|
||||
if (clear)
|
||||
for (uint8_t col = x0; col < x1; col++) {
|
||||
if (clear) {
|
||||
stripPointers[0][(y0 / 8) * 96 + col] &= ~mask;
|
||||
else
|
||||
} else {
|
||||
stripPointers[0][(y0 / 8) * 96 + col] |= mask;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Next loop down the line the total number of solids
|
||||
if (y0 / 8 != y1 / 8)
|
||||
for (uint8_t col = x0; col < x1; col++)
|
||||
if (y0 / 8 != y1 / 8) {
|
||||
for (uint8_t col = x0; col < x1; col++) {
|
||||
for (uint8_t r = (y0 / 8); r < (y1 / 8); r++) {
|
||||
// This gives us the row index r
|
||||
if (clear)
|
||||
if (clear) {
|
||||
stripPointers[0][(r * 96) + col] = 0;
|
||||
else
|
||||
} else {
|
||||
stripPointers[0][(r * 96) + col] = 0xFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Finally draw the tail
|
||||
mask = ~(mask << (y1 % 8));
|
||||
for (uint8_t col = x0; col < x1; col++)
|
||||
if (clear)
|
||||
for (uint8_t col = x0; col < x1; col++) {
|
||||
if (clear) {
|
||||
stripPointers[0][(y1 / 8) * 96 + col] &= ~mask;
|
||||
else
|
||||
} else {
|
||||
stripPointers[0][(y1 / 8) * 96 + col] |= mask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OLED::drawHeatSymbol(uint8_t state) {
|
||||
|
||||
@@ -44,10 +44,11 @@ uint32_t TipThermoModel::convertTipRawADCTouV(uint16_t rawADC, bool ski
|
||||
|
||||
if (getSettingValue(SettingsOptions::CalibrationOffset) && skipCalOffset == false) {
|
||||
// Remove uV tipOffset
|
||||
if (valueuV > getSettingValue(SettingsOptions::CalibrationOffset))
|
||||
if (valueuV > getSettingValue(SettingsOptions::CalibrationOffset)) {
|
||||
valueuV -= getSettingValue(SettingsOptions::CalibrationOffset);
|
||||
else
|
||||
} else {
|
||||
valueuV = 0;
|
||||
}
|
||||
}
|
||||
lastuv = valueuV;
|
||||
return valueuV;
|
||||
@@ -78,8 +79,9 @@ uint32_t TipThermoModel::getTipInC(bool sampleNow) {
|
||||
// I found a number that doesn't unbalance the existing PID, causing overshoot.
|
||||
// This could be tuned in concert with PID parameters...
|
||||
|
||||
if (currentTipTempInC < 0)
|
||||
if (currentTipTempInC < 0) {
|
||||
return 0;
|
||||
}
|
||||
return currentTipTempInC;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ void USBPowerDelivery::IRQOccured() { pe.IRQOccured(); }
|
||||
bool USBPowerDelivery::negotiationHasWorked() { return pe.pdHasNegotiated(); }
|
||||
uint8_t USBPowerDelivery::getStateNumber() { return pe.currentStateCode(true); }
|
||||
void USBPowerDelivery::step() {
|
||||
while (pe.thread()) {}
|
||||
while (pe.thread()) {}
|
||||
}
|
||||
|
||||
void USBPowerDelivery::PPSTimerCallback() { pe.TimersCallback(); }
|
||||
@@ -93,18 +93,22 @@ uint32_t *USBPowerDelivery::getLastSeenCapabilities() { return lastCapabilities;
|
||||
static unsigned int sqrtI(unsigned long sqrtArg) {
|
||||
unsigned int answer, x;
|
||||
unsigned long temp;
|
||||
if (sqrtArg == 0)
|
||||
if (sqrtArg == 0) {
|
||||
return 0; // undefined result
|
||||
if (sqrtArg == 1)
|
||||
return 1; // identity
|
||||
}
|
||||
if (sqrtArg == 1) {
|
||||
return 1; // identity
|
||||
}
|
||||
answer = 0; // integer square root
|
||||
for (x = 0x8000; x > 0; x = x >> 1) { // 16 bit shift
|
||||
answer |= x; // possible bit in root
|
||||
temp = answer * answer; //
|
||||
if (temp == sqrtArg)
|
||||
if (temp == sqrtArg) {
|
||||
break; // exact, found it
|
||||
if (temp > sqrtArg)
|
||||
}
|
||||
if (temp > sqrtArg) {
|
||||
answer ^= x; // too large, reverse bit
|
||||
}
|
||||
}
|
||||
return answer; // approximate root
|
||||
}
|
||||
@@ -225,7 +229,6 @@ bool EPREvaluateCapabilityFunc(const epr_pd_msg *capabilities, pd_msg *request)
|
||||
request->hdr = PD_MSGTYPE_EPR_REQUEST | PD_NUMOBJ(2);
|
||||
request->obj[1] = lastCapabilities[bestIndex]; // Copy PDO into slot 2
|
||||
|
||||
|
||||
if (bestIsAVS) {
|
||||
request->obj[0] = PD_RDO_PROG_CURRENT_SET(PD_CA2PAI(bestIndexCurrent)) | PD_RDO_PROG_VOLTAGE_SET(PD_MV2APS(bestIndexVoltage));
|
||||
} else if (bestIsPPS) {
|
||||
|
||||
@@ -107,7 +107,7 @@ enum class SettingsItemIndex : uint8_t {
|
||||
};
|
||||
|
||||
struct TranslationIndexTable {
|
||||
uint16_t CJCCalibrationDone;
|
||||
uint16_t CalibrationDone;
|
||||
uint16_t ResetOKMessage;
|
||||
uint16_t SettingsResetMessage;
|
||||
uint16_t NoAccelerometerMessage;
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "Settings.h"
|
||||
#include "BSP.h"
|
||||
#include "Setup.h"
|
||||
#include "Translation.h"
|
||||
#include "configuration.h"
|
||||
#include <string.h> // for memset
|
||||
bool sanitiseSettings();
|
||||
@@ -65,7 +66,7 @@ static const SettingConstants settingsConstants[(int)SettingsOptions::SettingsOp
|
||||
{0, 1, 1, COOLING_TEMP_BLINK}, // CoolingTempBlink
|
||||
{0, 1, 1, DETAILED_IDLE}, // DetailedIDLE
|
||||
{0, 1, 1, DETAILED_SOLDERING}, // DetailedSoldering
|
||||
{0, 1, 1, TEMPERATURE_INF}, // TemperatureInF
|
||||
{0, (uint16_t)(HasFahrenheit ? 1 : 0), 1, TEMPERATURE_INF}, // TemperatureInF
|
||||
{0, 1, 1, DESCRIPTION_SCROLL_SPEED}, // DescriptionScrollSpeed
|
||||
{0, 2, 1, LOCKING_MODE}, // LockingMode
|
||||
{0, 99, 1, POWER_PULSE_DEFAULT}, // KeepAwakePulse
|
||||
|
||||
@@ -884,19 +884,21 @@ static bool setCalibrateVIN(void) {
|
||||
OLED::clearScreen();
|
||||
|
||||
for (;;) {
|
||||
OLED::setCursor(0, 0);
|
||||
OLED::setCursor(25, 0);
|
||||
uint16_t voltage = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);
|
||||
OLED::printNumber(voltage / 10, 2, FontStyle::LARGE);
|
||||
OLED::print(LargeSymbolDot, FontStyle::LARGE);
|
||||
OLED::printNumber(voltage % 10, 1, FontStyle::LARGE, false);
|
||||
OLED::print(LargeSymbolVolts, FontStyle::LARGE);
|
||||
OLED::setCursor(0, 8);
|
||||
OLED::printNumber(getSettingValue(SettingsOptions::VoltageDiv), 3, FontStyle::SMALL);
|
||||
|
||||
switch (getButtonState()) {
|
||||
case BUTTON_F_SHORT:
|
||||
nextSettingValue(SettingsOptions::VoltageDiv);
|
||||
prevSettingValue(SettingsOptions::VoltageDiv);
|
||||
break;
|
||||
case BUTTON_B_SHORT:
|
||||
prevSettingValue(SettingsOptions::VoltageDiv);
|
||||
nextSettingValue(SettingsOptions::VoltageDiv);
|
||||
break;
|
||||
case BUTTON_BOTH:
|
||||
case BUTTON_F_LONG:
|
||||
@@ -904,9 +906,9 @@ static bool setCalibrateVIN(void) {
|
||||
saveSettings();
|
||||
OLED::clearScreen();
|
||||
OLED::setCursor(0, 0);
|
||||
OLED::printNumber(getSettingValue(SettingsOptions::VoltageDiv), 3, FontStyle::LARGE);
|
||||
warnUser(translatedString(Tr->CalibrationDone), 3 * TICKS_SECOND);
|
||||
OLED::refresh();
|
||||
waitForButtonPressOrTimeout(1 * TICKS_SECOND);
|
||||
waitForButtonPressOrTimeout(0.5 * TICKS_SECOND);
|
||||
return false;
|
||||
case BUTTON_NONE:
|
||||
default:
|
||||
|
||||
@@ -30,7 +30,7 @@ void performCJCC(void) {
|
||||
}
|
||||
setSettingValue(SettingsOptions::CalibrationOffset, setoffset);
|
||||
OLED::clearScreen();
|
||||
warnUser(translatedString(Tr->CJCCalibrationDone), 3 * TICKS_SECOND);
|
||||
warnUser(translatedString(Tr->CalibrationDone), 3 * TICKS_SECOND);
|
||||
OLED::refresh();
|
||||
// Preventing to repeat calibration at boot automatically (only one shot).
|
||||
setSettingValue(SettingsOptions::CalibrateCJC, 0);
|
||||
|
||||
Reference in New Issue
Block a user