Files
retrobsd/sys/pic32/power_control.c
Serge Vakulenko 585773955b Fix include paths in the kernel sources.
Max32 kernel successfully compiled with kconfig utility.
2015-08-31 00:21:41 -07:00

70 lines
1.6 KiB
C

#include <sys/param.h>
#include <sys/conf.h>
#include <sys/user.h>
#include <sys/systm.h>
#include <sys/machparam.h>
#include <sys/reboot.h>
volatile unsigned int psCounter;
int countdown;
#define COUNTDOWN 5
void power_off()
{
TRIS_CLR(POWER_CONTROL_PORT) = 1<<POWER_CONTROL_PIN;
LAT_SET(POWER_CONTROL_PORT) = 1<<POWER_CONTROL_PIN;
}
void power_switch_check()
{
if (PORT_VAL(POWER_SWITCH_PORT) & (1<<POWER_SWITCH_PIN)) {
countdown = COUNTDOWN;
psCounter = 0;
if (psCounter > 0) {
LAT_SET(POWER_LED_PORT) = 1<<POWER_LED_PIN;
printf("power: switch released - power down aborted\n");
}
} else {
psCounter++;
}
if (psCounter == 20) {
if (countdown == 0) {
printf("power: powering off\n");
boot(0,RB_HALT | RB_POWEROFF);
}
psCounter = 0;
printf("power: powering down in %d\n",countdown);
countdown--;
#ifdef POWER_LED_PORT
if (countdown%2 == 0) {
LAT_SET(POWER_LED_PORT) = 1<<POWER_LED_PIN;
} else {
LAT_CLR(POWER_LED_PORT) = 1<<POWER_LED_PIN;
}
#endif
}
}
void power_init()
{
psCounter = 0;
countdown = COUNTDOWN;
#ifdef POWER_CONTROL_PORT
TRIS_CLR(POWER_CONTROL_PORT) = 1<<POWER_CONTROL_PIN;
LAT_CLR(POWER_CONTROL_PORT) = 1<<POWER_CONTROL_PIN;
#endif
#ifdef POWER_SWITCH_PORT
TRIS_SET(POWER_SWITCH_PORT) = 1<<POWER_SWITCH_PIN;
#endif
#ifdef POWER_LED_PORT
TRIS_CLR(POWER_LED_PORT) = 1<<POWER_LED_PIN;
LAT_SET(POWER_LED_PORT) = 1<<POWER_LED_PIN;
#endif
}