// // Created by ilya on 25.03.24. // #ifndef SMART_COMPONENTS_POWERMANAGMENT_H #define SMART_COMPONENTS_POWERMANAGMENT_H #include #include "GpioPin.h" #include "UserInput.h" #include "UserIndication.h" #include "SpiPorts.h" #include "Adc.h" #include "LoggerInterface.h" #include "PwmSim7600e.h" #include "LoggerToSerialPort.h" //#include "Amplifier.h" #define PM_SHUTDOWN_DELAY 15000 typedef struct { tGpioPin resetAmp; } tAudioPower; typedef struct { tGpioPin ignition; tGpioPin standby; tGpioPin garage; tGpioPin ecallOut; tGpioPin muteP; tGpioPin muteN; tGpioPin inAnt; tGpioPin Power12V; } tMainPower; typedef struct { tGpioPin can1_standby; tGpioPin can2_standby; } tCanStandby; typedef struct { tGpioPin enable; tGpioPin charge; tAdcIO *batteryIo; uint16_t currentBatVoltage; uint64_t batTestTimer; } tBatteryPower; typedef struct { tGpioPin PowerCheckSpkOn; tGpioPin PowerTestSpkIn; bool speakTestAcsess; uint16_t lastTestTime; } tSpekTestPower; typedef struct { tAdc *boardVoltage; uint16_t currentBoardVoltage; uint16_t currentBoardVoltageOfSerbisePO; uint32_t boardVoltageTimer; } tBoardPower; typedef struct { tSpekTestPower SpekTestPower; tGpioPin PowerRS485; tGpioPin usb; tAudioPower audio; tBatteryPower battery; tMainPower main; tSim7600ePower sim7600; tCanStandby canStandby; tBoardPower boardPower; } tPowerSusystem; typedef struct { bool interAntBufVal; tLoggerInterface *logger; tPowerSusystem *powerSusystem; bool *positiveMute; uint32_t shutdownDelay; uint32_t lastIgnEnabled; bool currentChargeState; bool currentPwrSaveState; bool currentIgnState; bool (*resetAmpLvl) (void *env); tLoggerToSerialPort *slog; osMutexId_t mux_accessPwrMan; tGpioPin *sosButtonPin; tGpioPin *serviceButtonPin; struct { osThreadId_t id; uint32_t stack[256]; StaticTask_t controlBlock; osThreadAttr_t attr; } threadPwr; } tPowerManagement; #define PowerManagementProviderSetAmplVol(ENV) (ENV)->resetAmpLvl((ENV)->ampEnv) void Pwm_Init( tPowerManagement *env, tPowerSusystem *powerSusystem, tAdcIO *batteryIo, tAdc *boardVoltag, bool *positiveMute, tLoggerToSerialPort *slog, tGpioPin *sosButtonPin, tGpioPin *serviceButtonPin ); void PowerManagement_StartThread(tPowerManagement *env); void Pwm_OnDeviceInit(tPowerManagement *env); bool Pwm_IsShutdownRequired(tPowerManagement *env); void Pwm_Blackout(tPowerManagement *env); //void Pwm_MuteAmpOff(tPowerManagement *env); void Pwm_AmpOn(tPowerManagement *env); void Pwm_AmpOff(tPowerManagement *env); void Pwm_ChargeDisable(tPowerManagement *env); void Pwm_ChargeEnable(tPowerManagement *env); void Pwm_LNA_setMode(tPowerManagement *env, bool state); //void Pwm_MuteAmpOn(tPowerManagement *env); void Pwm_PowerSavingEnable(tPowerManagement *env); void Pwm_PowerSavingDisable(tPowerManagement *env); void Pwm_SetMuteInCar(tPowerManagement *env, bool value); void Pwm_BipShutdown(tPowerManagement *env); void Pwm_GsmAndBipStartUp(tPowerManagement *env); void Pwm_GsmAndGnssStartup(tPowerManagement *env); bool Pwm_GsmAndGnssShutDown(tPowerManagement *env); void Pwm_Rs485Disable(tPowerManagement *env); bool Pwm_GetMuteInCarState(tPowerManagement *env); void Pwm_Shutdown(tPowerManagement *env); void Pwm_SetPMuteInCar(tPowerManagement *env, bool value); void Pwm_SetNMuteInCar(tPowerManagement *env, bool value); void Pwm_SetEcallSignalOutInCar(tPowerManagement *env, bool value); void Pwm_SetServiseSignalOutInCar(tPowerManagement *env, bool value); bool Pwm_GetSosButtonState(tPowerManagement *env); bool Pwm_GetServiseButtonState(tPowerManagement *env); #endif //SMART_COMPONENTS_POWERMANAGMENT_H