forked from achamaikin/CCSModuleSW30Web
Add TonHe 30kW PSU control with LV/HV restart (v1.0.37).
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+50
-2
@@ -10,16 +10,64 @@ InfoBlock_t *InfoBlock = (InfoBlock_t *)(VERSION_OFFSET);
|
||||
|
||||
static uint16_t s_connector_max_current_0p1A = (uint16_t)PSU_MAX_CURRENT * 10u;
|
||||
|
||||
void Board_SelectInfoBlockAddress(void)
|
||||
{
|
||||
const volatile uint32_t *new_base = (const volatile uint32_t *)VERSION_OFFSET;
|
||||
|
||||
if (*new_base == 0xFFFFFFFFu) {
|
||||
InfoBlock = (InfoBlock_t *)VERSION_OFFSET_LEGACY;
|
||||
} else {
|
||||
InfoBlock = (InfoBlock_t *)VERSION_OFFSET;
|
||||
}
|
||||
}
|
||||
|
||||
PsuType_t Board_GetPsuType(void)
|
||||
{
|
||||
/* Legacy ConfigBlock has no psuType field; keep Niuera path. */
|
||||
if (InfoBlock == (InfoBlock_t *)VERSION_OFFSET_LEGACY) {
|
||||
return PSU_TYPE_NONE;
|
||||
}
|
||||
return (PsuType_t)InfoBlock->psuType;
|
||||
}
|
||||
|
||||
uint16_t Board_GetPsuMaxCurrentA(void)
|
||||
{
|
||||
switch (Board_GetPsuType()) {
|
||||
case PSU_TYPE_TONHE_30KW:
|
||||
case PSU_TYPE_NIUERA_30KW:
|
||||
return (uint16_t)PSU_BLOCK_CURRENT_30KW;
|
||||
case PSU_TYPE_NIUERA_40KW:
|
||||
return (uint16_t)PSU_BLOCK_CURRENT_40KW;
|
||||
case PSU_TYPE_NONE:
|
||||
default:
|
||||
return (uint16_t)PSU_MAX_CURRENT;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t Board_GetPsuMaxPowerW(void)
|
||||
{
|
||||
switch (Board_GetPsuType()) {
|
||||
case PSU_TYPE_TONHE_30KW:
|
||||
case PSU_TYPE_NIUERA_30KW:
|
||||
return PSU_BLOCK_POWER_30KW;
|
||||
case PSU_TYPE_NIUERA_40KW:
|
||||
return PSU_BLOCK_POWER_40KW;
|
||||
case PSU_TYPE_NONE:
|
||||
default:
|
||||
return (uint32_t)PSU_MAX_POWER;
|
||||
}
|
||||
}
|
||||
|
||||
static uint16_t Board_ResolveConnectorCurrentLimitA(uint16_t raw_limit_a)
|
||||
{
|
||||
return (raw_limit_a == 0u) ? (uint16_t)PSU_MAX_CURRENT : raw_limit_a;
|
||||
return (raw_limit_a == 0u) ? Board_GetPsuMaxCurrentA() : raw_limit_a;
|
||||
}
|
||||
|
||||
void Board_LoadInfoBlockLimits(void)
|
||||
{
|
||||
const uint16_t limit_a = Board_ResolveConnectorCurrentLimitA(InfoBlock->connector1CurrentLimitA);
|
||||
uint32_t limit_0p1a = (uint32_t)limit_a * 10u;
|
||||
const uint32_t hw_max_0p1a = (uint32_t)PSU_MAX_CURRENT * 10u;
|
||||
const uint32_t hw_max_0p1a = (uint32_t)Board_GetPsuMaxCurrentA() * 10u;
|
||||
|
||||
if (limit_0p1a > hw_max_0p1a) {
|
||||
limit_0p1a = hw_max_0p1a;
|
||||
|
||||
Reference in New Issue
Block a user