Merge remote-tracking branch 'upstream/dev' into magic

This commit is contained in:
Ben V. Brown
2022-07-25 21:08:00 +10:00
22 changed files with 81 additions and 65 deletions

View File

@@ -17,7 +17,7 @@ extern "C" {
void power_check();
// Returns the tip resistance in x10 ohms, so 7.5 = 75; 14=140 etc
uint8_t getTipResitanceX10();
uint8_t getTipResistanceX10();
uint8_t getTipThermalMass();

View File

@@ -17,3 +17,5 @@ void power_check() {
}
bool getIsPoweredByDCIN() { return false; }
uint8_t getTipResistanceX10() { return TIP_RESISTANCE; }

View File

@@ -27,7 +27,8 @@
#ifndef PORTMACRO_H
#define PORTMACRO_H
#include "FreeRTOSConfig.h"
#include "projdefs.h"
#ifdef __cplusplus
extern "C" {
#endif

View File

@@ -288,3 +288,5 @@ uint64_t getDeviceID() {
//
return HAL_GetUIDw0() | ((uint64_t)HAL_GetUIDw1() << 32);
}
uint8_t getTipResistanceX10() { return TIP_RESISTANCE; }

View File

@@ -100,7 +100,7 @@ extern uint32_t SystemCoreClock;
#define configUSE_IDLE_HOOK 1
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ (SystemCoreClock)
#define configTICK_RATE_HZ ((TickType_t)1000)
#define configTICK_RATE_HZ (1000)
#define configMAX_PRIORITIES (6)
#define configMINIMAL_STACK_SIZE ((uint16_t)256)
#define configTOTAL_HEAP_SIZE ((size_t)1024 * 14) /*Currently use about 9000*/

View File

@@ -27,6 +27,8 @@
#ifndef PORTMACRO_H
#define PORTMACRO_H
#include "FreeRTOSConfig.h"
#include "projdefs.h"
#ifdef __cplusplus
extern "C" {

View File

@@ -93,3 +93,5 @@ void setStatusLED(const enum StatusLED state) {}
uint8_t preStartChecks() { return 0; }
uint64_t getDeviceID() { return dbg_id_get(); }
uint8_t getTipResistanceX10() { return TIP_RESISTANCE; }

View File

@@ -58,14 +58,9 @@ typedef portSTACK_TYPE StackType_t;
typedef long BaseType_t;
typedef unsigned long UBaseType_t;
#if (configUSE_16_BIT_TICKS == 1)
typedef uint16_t TickType_t;
#define portMAX_DELAY (TickType_t)0xffff
#else
/* RISC-V TIMER is 64-bit long */
typedef uint64_t TickType_t;
#define portMAX_DELAY (TickType_t)0xFFFFFFFFFFFFFFFFULL
#endif
/*-----------------------------------------------------------*/
/* Architecture specifics. */

View File

@@ -8,7 +8,7 @@
#include "settingsGUI.hpp"
#include "task.h"
#include <Buttons.hpp>
uint32_t lastButtonTime = 0;
TickType_t lastButtonTime = 0;
ButtonState getButtonState() {
/*
@@ -22,10 +22,11 @@ ButtonState getButtonState() {
* 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 = TICKS_100MS * 4;
uint8_t currentState;
static uint8_t previousState = 0;
static bool longPressed = false;
static TickType_t previousStateChange = 0;
const TickType_t timeout = TICKS_100MS * 4;
uint8_t currentState;
currentState = (getButtonA()) << 0;
currentState |= (getButtonB()) << 1;
@@ -34,9 +35,10 @@ ButtonState getButtonState() {
if (currentState == previousState) {
if (currentState == 0)
return BUTTON_NONE;
if ((xTaskGetTickCount() - previousStateChange) > timeout) {
if ((xTaskGetTickCount() - previousStateChange) >= timeout) {
// User has been holding the button down
// We want to send a button is held message
longPressed = true;
if (currentState == 0x01)
return BUTTON_F_LONG;
else if (currentState == 0x02)
@@ -50,19 +52,15 @@ ButtonState getButtonState() {
ButtonState retVal = BUTTON_NONE;
if (currentState) {
// User has pressed a button down (nothing done on down)
if (currentState != previousState) {
// There has been a change in the button states
// If there is a rising edge on one of the buttons from double press we
// want to mask that out As users are having issues with not release
// both at once
if (previousState == 0x03)
currentState = 0x03;
}
// If there is a rising edge on one of the buttons from double press we
// want to mask that out As users are having issues with not release
// both at once
previousState |= currentState;
} 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 ((xTaskGetTickCount() - previousStateChange) < timeout) {
if (!longPressed) {
// The user didn't hold the button for long
// So we send button press
@@ -73,8 +71,9 @@ ButtonState getButtonState() {
else
retVal = BUTTON_BOTH; // Both being held case
}
previousState = 0;
longPressed = false;
}
previousState = currentState;
previousStateChange = xTaskGetTickCount();
return retVal;
}
@@ -95,7 +94,7 @@ void waitForButtonPress() {
}
}
void waitForButtonPressOrTimeout(uint32_t timeout) {
void waitForButtonPressOrTimeout(TickType_t timeout) {
timeout += xTaskGetTickCount();
// calculate the exit point

View File

@@ -7,8 +7,8 @@
#include "BSP.h"
#ifndef INC_BUTTONS_H_
#define INC_BUTTONS_H_
extern uint32_t lastButtonTime;
#include "portmacro.h"
extern TickType_t lastButtonTime;
enum ButtonState {
BUTTON_NONE = 0, /* No buttons pressed / < filter time*/
@@ -29,7 +29,7 @@ enum ButtonState {
// Returns what buttons are pressed (if any)
ButtonState getButtonState();
// Helpers
void waitForButtonPressOrTimeout(uint32_t timeout);
void waitForButtonPressOrTimeout(TickType_t timeout);
void waitForButtonPress();
#endif /* INC_BUTTONS_H_ */

View File

@@ -221,7 +221,7 @@ void OLED::maskScrollIndicatorOnOLED() {
// it from the screen buffer which is updated by `OLED::setRotation`.
uint8_t rightmostColumn = screenBuffer[7];
uint8_t maskCommands[] = {
// Set column address:
// Set column address:
// A[6:0] - Column start address = rightmost column
// B[6:0] - Column end address = rightmost column
0x80,
@@ -252,10 +252,10 @@ void OLED::transitionSecondaryFramebuffer(bool forwardNavigation) {
uint8_t *firstBackStripPtr = &secondFrameBuffer[0];
uint8_t *secondBackStripPtr = &secondFrameBuffer[OLED_WIDTH];
uint32_t totalDuration = TICKS_100MS * 5; // 500ms
uint32_t duration = 0;
uint32_t start = xTaskGetTickCount();
uint8_t offset = 0;
TickType_t totalDuration = TICKS_100MS * 5; // 500ms
TickType_t duration = 0;
TickType_t start = xTaskGetTickCount();
uint8_t offset = 0;
while (duration <= totalDuration) {
duration = xTaskGetTickCount() - start;

View File

@@ -90,6 +90,7 @@ bool USBPowerDelivery::isVBUSConnected() {
uint32_t lastCapabilities[11];
uint32_t *USBPowerDelivery::getLastSeenCapabilities() { return lastCapabilities; }
#ifdef POW_EPR
static unsigned int sqrtI(unsigned long sqrtArg) {
unsigned int answer, x;
unsigned long temp;
@@ -108,6 +109,7 @@ static unsigned int sqrtI(unsigned long sqrtArg) {
}
return answer; // approximate root
}
#endif
// parseCapabilitiesArray returns true if a valid capability was found
// caps is the array of capabilities objects
@@ -119,7 +121,7 @@ bool parseCapabilitiesArray(const uint8_t numCaps, uint8_t *bestIndex, uint16_t
*bestVoltage = 5000; // Default 5V
// Fudge of 0.5 ohms to round up a little to account for us always having off periods in PWM
uint8_t tipResistance = getTipResitanceX10() + 5;
uint8_t tipResistance = getTipResistanceX10() + 5;
#ifdef MODEL_HAS_DCDC
// If this device has step down DC/DC inductor to smooth out current spikes
// We can instead ignore resistance and go for max voltage we can accept; and rely on the DC/DC regulation to keep under current limit
@@ -173,7 +175,9 @@ bool parseCapabilitiesArray(const uint8_t numCaps, uint8_t *bestIndex, uint16_t
*bestIsPPS = true;
*bestIsAVO = false;
}
} else if ((lastCapabilities[i] & PD_PDO_TYPE) == PD_PDO_TYPE_AUGMENTED && (((lastCapabilities[i] & PD_APDO_TYPE) == PD_APDO_TYPE_AVS))) {
}
#ifdef POW_EPR
else if ((lastCapabilities[i] & PD_PDO_TYPE) == PD_PDO_TYPE_AUGMENTED && (((lastCapabilities[i] & PD_APDO_TYPE) == PD_APDO_TYPE_AVS))) {
*bestIsAVO = true;
uint16_t max_voltage = PD_PAV2MV(PD_APDO_AVS_MAX_VOLTAGE_GET(lastCapabilities[i]));
uint8_t max_wattage = PD_APDO_AVS_MAX_POWER_GET(lastCapabilities[i]);
@@ -187,7 +191,6 @@ bool parseCapabilitiesArray(const uint8_t numCaps, uint8_t *bestIndex, uint16_t
ideal_max_voltage = (max_voltage); // constrain to model max voltage safe to select
}
auto operating_current = (ideal_max_voltage / tipResistance); // Current in centiamps
MSG((char *)"AVS max %d wattage %d tipRes %d sqrt %d -> %d\r\n", max_voltage, max_wattage, tipResistance, ideal_max_voltage, operating_current);
if (ideal_max_voltage > *bestVoltage) {
*bestIndex = i;
@@ -196,8 +199,8 @@ bool parseCapabilitiesArray(const uint8_t numCaps, uint8_t *bestIndex, uint16_t
*bestIsAVO = true;
}
}
#endif
}
// Now that the best index is known, set the current values
return *bestIndex != 0xFF; // have we selected one
}
@@ -220,7 +223,6 @@ bool EPREvaluateCapabilityFunc(const epr_pd_msg *capabilities, pd_msg *request)
/* We got what we wanted, so build a request for that */
request->hdr = PD_MSGTYPE_EPR_REQUEST | PD_NUMOBJ(2);
request->obj[1] = lastCapabilities[bestIndex]; // Copy PDO into slot 2
MSG((char *)"Eval index %d volt %d current %d pps %d avo %d\r\n", bestIndex, bestIndexVoltage, bestIndexCurrent, bestIsPPS ? 1 : 0, bestIsAVO ? 1 : 0);
if (bestIsAVO) {
request->obj[0] = PD_RDO_PROG_CURRENT_SET(PD_CA2PAI(bestIndexCurrent)) | PD_RDO_PROG_VOLTAGE_SET(PD_MV2APS(bestIndexVoltage)) | PD_RDO_NO_USB_SUSPEND | PD_RDO_OBJPOS_SET(bestIndex + 1);
@@ -315,7 +317,7 @@ void pdbs_dpm_get_sink_capability(pd_msg *cap, const bool isPD3) {
// if (requested_voltage_mv != 5000) {
// voltage = requested_voltage_mv;
// }
// uint16_t current = (voltage) / getTipResitanceX10(); // In centi-amps
// uint16_t current = (voltage) / getTipResistanceX10(); // In centi-amps
// /* Add a PDO for the desired power. */
// cap->obj[numobj++] = PD_PDO_TYPE_FIXED | PD_PDO_SNK_FIXED_VOLTAGE_SET(PD_MV2PDV(voltage)) | PD_PDO_SNK_FIXED_CURRENT_SET(current);

View File

@@ -19,7 +19,6 @@ public:
static bool negotiationHasWorked(); // Has PD negotiation worked (are we in a PD contract)
static uint8_t getStateNumber(); // Debugging - Get the internal state number
static bool isVBUSConnected(); // Is the VBus pin connected on the FUSB302
static void triggerRenegotiation(); // Trigger a restart of voltage selection
static uint32_t *getLastSeenCapabilities(); // returns pointer to the last seen capabilities from the powersource
private:
//

View File

@@ -1,14 +1,14 @@
#ifndef SCROLL_MESSAGE_HPP_
#define SCROLL_MESSAGE_HPP_
#include "portmacro.h"
#include <stdint.h>
/**
* A helper class for showing a full-screen scrolling message.
*/
class ScrollMessage {
uint32_t messageStart = 0;
int16_t lastOffset = -1;
TickType_t messageStart = 0;
int16_t lastOffset = -1;
/**
* Calcualte the width in pixels of the message string, in the large
@@ -47,7 +47,7 @@ public:
* @param currentTick The current tick as returned by `xTaskGetTickCount()`.
* @return Whether the OLED framebuffer has been modified.
*/
bool drawUpdate(const char *message, uint32_t currentTick);
bool drawUpdate(const char *message, TickType_t currentTick);
};
#endif /* SCROLL_MESSAGE_HPP_ */

View File

@@ -30,7 +30,7 @@ static uint16_t str_display_len(const char *const str) {
uint16_t ScrollMessage::messageWidth(const char *message) { return FONT_12_WIDTH * str_display_len(message); }
bool ScrollMessage::drawUpdate(const char *message, uint32_t currentTick) {
bool ScrollMessage::drawUpdate(const char *message, TickType_t currentTick) {
bool lcdRefresh = false;
if (messageStart == 0) {

View File

@@ -49,7 +49,7 @@ uint32_t availableW10(uint8_t sample) {
// R = R*10
// P therefore is in V^2*100/R*10 = W*10.
uint32_t v = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), sample); // 100 = 10v
uint32_t tipResistance = getTipResitanceX10();
uint32_t tipResistance = getTipResistanceX10();
if (tipResistance == 0) {
return 100; // say 100 watt to force scale down
}

View File

@@ -171,9 +171,9 @@ static void gui_drawBatteryIcon() {
#endif
}
static void gui_solderingTempAdjust() {
uint32_t lastChange = xTaskGetTickCount();
TickType_t lastChange = xTaskGetTickCount();
currentTempTargetDegC = 0; // Turn off header while adjusting temp
uint32_t autoRepeatTimer = 0;
TickType_t autoRepeatTimer = 0;
uint8_t autoRepeatAcceleration = 0;
bool waitForRelease = false;
ButtonState buttons = getButtonState();
@@ -370,7 +370,7 @@ static void display_countdown(int sleepThres) {
* Print seconds or minutes (if > 99 seconds) until sleep
* mode is triggered.
*/
int lastEventTime = lastButtonTime < lastMovementTime ? lastMovementTime : lastButtonTime;
TickType_t lastEventTime = lastButtonTime < lastMovementTime ? lastMovementTime : lastButtonTime;
TickType_t downCount = sleepThres - xTaskGetTickCount() + lastEventTime;
if (downCount > (99 * TICKS_SECOND)) {
OLED::printNumber(downCount / 60000 + 1, 2, FontStyle::SMALL);

View File

@@ -116,8 +116,8 @@ int32_t getPIDResultX10Watts(int32_t setpointDelta) {
static TickType_t lastCall = 0;
static Integrator<int32_t> powerStore = {0};
const int rate = 1000 / (xTaskGetTickCount() - lastCall);
lastCall = xTaskGetTickCount();
const TickType_t rate = 1000 / (xTaskGetTickCount() - lastCall);
lastCall = xTaskGetTickCount();
// Sandman note:
// PID Challenge - we have a small thermal mass that we to want heat up as fast as possible but we don't
// want to overshot excessively (if at all) the setpoint temperature. In the same time we have 'imprecise'

View File

@@ -4,4 +4,4 @@
* i.e.: BUILD_VERSION = 'Rel. v2.08' --> Will generated to: 'v2.08.1a2b3c4'
*/
#define BUILD_VERSION "v2.18"
#define BUILD_VERSION "v2.19"