Add wrappers for brightness-related functions

This commit is contained in:
exelix 2019-03-03 15:45:08 +01:00
parent b19c35fe2c
commit eda2ad3c43
2 changed files with 154 additions and 0 deletions

View File

@ -12,3 +12,13 @@ void lblExit(void);
Result lblSwitchBacklightOn(u64 fade_time); Result lblSwitchBacklightOn(u64 fade_time);
Result lblSwitchBacklightOff(u64 fade_time); Result lblSwitchBacklightOff(u64 fade_time);
/**
* @note The brightness goes from 0 to 1.0
*/
Result lblSetCurrentBrightnessSetting(float brightness);
Result lblGetCurrentBrightnessSetting(float *out_value);
Result lblEnableAutoBrightnessControl(void);
Result lblDisableAutoBrightnessControl(void);
Result lblIsAutoBrightnessControlEnabled(bool *out_value);

View File

@ -70,3 +70,147 @@ Result lblSwitchBacklightOn(u64 fade_time) {
Result lblSwitchBacklightOff(u64 fade_time) { Result lblSwitchBacklightOff(u64 fade_time) {
return _lblSwitchBacklight(7, fade_time); return _lblSwitchBacklight(7, fade_time);
} }
Result lblSetCurrentBrightnessSetting(float brightness) {
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
float value;
} *raw;
raw = serviceIpcPrepareHeader(&g_lblSrv, &c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = 2;
raw->value = brightness;
Result rc = serviceIpcDispatch(&g_lblSrv);
if (R_SUCCEEDED(rc)) {
IpcParsedCommand r;
struct {
u64 magic;
u64 result;
} *resp;
serviceIpcParse(&g_lblSrv, &r, sizeof(*resp));
resp = r.Raw;
rc = resp->result;
}
return rc;
}
Result lblGetCurrentBrightnessSetting(float *out_value) {
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
} *raw;
raw = serviceIpcPrepareHeader(&g_lblSrv, &c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = 3;
Result rc = serviceIpcDispatch(&g_lblSrv);
if (R_SUCCEEDED(rc)) {
IpcParsedCommand r;
struct {
u64 magic;
u64 result;
float brightness;
} *resp;
serviceIpcParse(&g_lblSrv, &r, sizeof(*resp));
resp = r.Raw;
rc = resp->result;
if (R_SUCCEEDED(rc))
*out_value = resp->brightness;
}
return rc;
}
static Result _lblSetAutoBrightnessControl(u32 cmd_id) {
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
} *raw;
raw = serviceIpcPrepareHeader(&g_lblSrv, &c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = cmd_id;
Result rc = serviceIpcDispatch(&g_lblSrv);
if (R_SUCCEEDED(rc)) {
IpcParsedCommand r;
struct {
u64 magic;
u64 result;
} *resp;
serviceIpcParse(&g_lblSrv, &r, sizeof(*resp));
resp = r.Raw;
rc = resp->result;
}
return rc;
}
Result lblEnableAutoBrightnessControl(void) {
return _lblSetAutoBrightnessControl(12);
}
Result lblDisableAutoBrightnessControl(void) {
return _lblSetAutoBrightnessControl(13);
}
Result lblIsAutoBrightnessControlEnabled(bool *out_value){
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
} *raw;
raw = serviceIpcPrepareHeader(&g_lblSrv, &c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = 14;
Result rc = serviceIpcDispatch(&g_lblSrv);
if (R_SUCCEEDED(rc)) {
IpcParsedCommand r;
struct {
u64 magic;
u64 result;
u8 isEnabled;
} *resp;
serviceIpcParse(&g_lblSrv, &r, sizeof(*resp));
resp = r.Raw;
rc = resp->result;
if (R_SUCCEEDED(rc))
*out_value = resp->isEnabled != 0;
}
return rc;
}