43 lines
1.1 KiB
C
Raw Normal View History

2017-06-20 00:23:49 +02:00
#include "power.h"
#include "i2c.h"
#include "cache.h"
2017-07-29 15:30:46 +02:00
#include "timer.h"
#include "pxi.h"
static const u8 br_settings[] = {0x1F, 0x3F, 0x7F, 0xBF};
static int prev_brightness = -1;
void CheckBrightness() {
u8 curSlider;
I2C_readRegBuf(I2C_DEV_MCU, 0x09, &curSlider, 1);
curSlider >>= 4;
if (curSlider != prev_brightness) {
PXI_Wait();
PXI_Send(br_settings[curSlider]);
PXI_SetRemote(PXI_SETBRIGHTNESS);
PXI_Sync();
prev_brightness = curSlider;
}
return;
}
2017-07-29 15:30:46 +02:00
void ScreenOn() {
wait_msec(3); // wait 3ms (cause profi200 said so)
flushDCacheRange((u8*)0x23FFFE00, sizeof(u8*)*3); // this assumes CakeHax framebuffers, see ui.h
I2C_writeReg(I2C_DEV_MCU, 0x22, 0x2A); // poweron LCD
}
2017-06-20 00:23:49 +02:00
void Reboot() {
I2C_writeReg(I2C_DEV_MCU, 0x22, 1 << 0); // poweroff LCD to prevent MCU hangs
2017-06-20 00:23:49 +02:00
flushEntireDCache();
2017-07-10 01:46:52 +02:00
if (I2C_writeReg(I2C_DEV_MCU, 0x20, 1 << 2))
while(true);
2017-06-20 00:23:49 +02:00
}
void PowerOff()
{
I2C_writeReg(I2C_DEV_MCU, 0x22, 1 << 0); // poweroff LCD to prevent MCU hangs
2017-06-20 00:23:49 +02:00
flushEntireDCache();
2017-07-10 01:46:52 +02:00
if (I2C_writeReg(I2C_DEV_MCU, 0x20, 1 << 0))
while (true);
2017-06-20 00:23:49 +02:00
}