nyx: Various fixes

This commit is contained in:
CTCaer 2019-08-28 02:20:48 +03:00
parent d0b0164077
commit 92a60a1e89
5 changed files with 34 additions and 25 deletions

View file

@ -30,6 +30,7 @@
#include "../gfx/gfx.h" #include "../gfx/gfx.h"
#include "../input/touch.h" #include "../input/touch.h"
#include "../libs/fatfs/ff.h" #include "../libs/fatfs/ff.h"
#include "../mem/heap.h"
#include "../mem/minerva.h" #include "../mem/minerva.h"
#include "../power/bq24193.h" #include "../power/bq24193.h"
#include "../power/max17050.h" #include "../power/max17050.h"
@ -172,41 +173,39 @@ static void _disp_fb_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const
lv_flush_ready(); lv_flush_ready();
} }
touch_event touchpad; static touch_event touchpad;
static bool _fts_touch_read(lv_indev_data_t *data) static bool _fts_touch_read(lv_indev_data_t *data)
{ {
touch_poll(&touchpad); touch_poll(&touchpad);
// Take a screenshot if 3 fingers.
if (touchpad.fingers > 2) if (touchpad.fingers > 2)
{
_save_fb_to_bmp(); _save_fb_to_bmp();
msleep(200);
}
// Always set touch points.
data->point.x = touchpad.x;
data->point.y = touchpad.y;
// Decide touch enable.
switch (touchpad.type & STMFTS_MASK_EVENT_ID) switch (touchpad.type & STMFTS_MASK_EVENT_ID)
{ {
case STMFTS_EV_MULTI_TOUCH_ENTER: case STMFTS_EV_MULTI_TOUCH_ENTER:
case STMFTS_EV_MULTI_TOUCH_MOTION: case STMFTS_EV_MULTI_TOUCH_MOTION:
data->state = LV_INDEV_STATE_PR; data->state = LV_INDEV_STATE_PR;
data->point.x = touchpad.x;
data->point.y = touchpad.y;
break; break;
case STMFTS_EV_MULTI_TOUCH_LEAVE: case STMFTS_EV_MULTI_TOUCH_LEAVE:
data->state = LV_INDEV_STATE_REL; data->state = LV_INDEV_STATE_REL;
data->point.x = touchpad.x;
data->point.y = touchpad.y;
break; break;
case STMFTS_EV_NO_EVENT: case STMFTS_EV_NO_EVENT:
default: default:
if (touchpad.touch) if (touchpad.touch)
{
data->state = LV_INDEV_STATE_PR; data->state = LV_INDEV_STATE_PR;
}
else else
{
data->point.x = touchpad.x;
data->point.y = touchpad.y;
data->state = LV_INDEV_STATE_REL; data->state = LV_INDEV_STATE_REL;
//return true;
}
break; break;
} }
@ -925,7 +924,7 @@ void nyx_create_onoff_button(lv_theme_t *th, lv_obj_t *parent, lv_obj_t *btn, co
lv_label_set_text(label_btn, btn_name); lv_label_set_text(label_btn, btn_name);
lv_label_set_static_text(label_btnsw, "#00ffc9 OFF#"); lv_label_set_static_text(label_btnsw, "#D0D0D0 OFF#");
lv_obj_align(label_btn, btn, LV_ALIGN_IN_LEFT_MID, LV_DPI / 4, 0); lv_obj_align(label_btn, btn, LV_ALIGN_IN_LEFT_MID, LV_DPI / 4, 0);
lv_obj_align(label_btnsw, btn, LV_ALIGN_IN_RIGHT_MID, -LV_DPI / 4, -LV_DPI / 10); lv_obj_align(label_btnsw, btn, LV_ALIGN_IN_RIGHT_MID, -LV_DPI / 4, -LV_DPI / 10);
@ -1619,8 +1618,6 @@ static lv_res_t _create_window_home_launch(lv_obj_t *btn)
bmp = bmp_to_lvimg_obj(icon_path); bmp = bmp_to_lvimg_obj(icon_path);
// Enable button. // Enable button.
ext = lv_obj_get_ext_attr(launch_ctxt[x]);
ext->idx = i;
lv_obj_set_opa_scale(launch_ctxt[x], LV_OPA_COVER); lv_obj_set_opa_scale(launch_ctxt[x], LV_OPA_COVER);
// Default to switch logo if no icon found at all. // Default to switch logo if no icon found at all.
@ -1643,6 +1640,8 @@ static lv_res_t _create_window_home_launch(lv_obj_t *btn)
lv_obj_align(img, NULL, LV_ALIGN_CENTER, 0, 0); lv_obj_align(img, NULL, LV_ALIGN_CENTER, 0, 0);
// Set autoboot index. // Set autoboot index.
ext = lv_obj_get_ext_attr(launch_ctxt[x]);
ext->idx = i;
ext = lv_obj_get_ext_attr(btn); ext = lv_obj_get_ext_attr(btn);
ext->idx = i; ext->idx = i;
@ -2046,7 +2045,7 @@ static void _nyx_main_menu(lv_theme_t * th)
_create_status_bar(th); _create_status_bar(th);
// Create tasks. // Create tasks.
system_tasks.task.dram_periodic_comp = lv_task_create(minerva_periodic_training, 500, LV_TASK_PRIO_HIGHEST, NULL); system_tasks.task.dram_periodic_comp = lv_task_create(minerva_periodic_training, EMC_PERIODIC_TRAIN_MS, LV_TASK_PRIO_HIGHEST, NULL);
lv_task_ready(system_tasks.task.dram_periodic_comp); lv_task_ready(system_tasks.task.dram_periodic_comp);
system_tasks.task.status_bar = lv_task_create(_update_status_bar, 5000, LV_TASK_PRIO_LOW, NULL); system_tasks.task.status_bar = lv_task_create(_update_status_bar, 5000, LV_TASK_PRIO_LOW, NULL);
@ -2103,11 +2102,11 @@ void nyx_load_and_run()
// Initialize touch. // Initialize touch.
touch_power_on(); touch_power_on();
lv_indev_drv_t indev_drv; lv_indev_drv_t indev_drv_touch;
lv_indev_drv_init(&indev_drv); lv_indev_drv_init(&indev_drv_touch);
indev_drv.type = LV_INDEV_TYPE_POINTER; indev_drv_touch.type = LV_INDEV_TYPE_POINTER;
indev_drv.read = _fts_touch_read; indev_drv_touch.read = _fts_touch_read;
lv_indev_drv_register(&indev_drv); lv_indev_drv_register(&indev_drv_touch);
touchpad.touch = false; touchpad.touch = false;
// Initialize temperature sensor. // Initialize temperature sensor.
@ -2118,6 +2117,7 @@ void nyx_load_and_run()
lv_theme_t *th = lv_theme_hekate_init(167, NULL); lv_theme_t *th = lv_theme_hekate_init(167, NULL);
lv_theme_set_current(th); lv_theme_set_current(th);
// Create main menu
_nyx_main_menu(th); _nyx_main_menu(th);
while (true) while (true)

View file

@ -178,7 +178,7 @@ static void _create_mbox_emummc_raw()
u32 curr_part_size = *(u32 *)&mbr[0x0C + (0x10 * i)]; u32 curr_part_size = *(u32 *)&mbr[0x0C + (0x10 * i)];
sector_start = *(u32 *)&mbr[0x08 + (0x10 * i)]; sector_start = *(u32 *)&mbr[0x08 + (0x10 * i)];
u8 type = mbr[0x04 + (0x10 * i)]; u8 type = mbr[0x04 + (0x10 * i)];
if ((curr_part_size >= (storage.sec_cnt + 0x8000)) && sector_start && type != 0x83) //! TODO: For now it skips linux partitions. if ((curr_part_size >= (storage.sec_cnt + 0xC000)) && sector_start && type != 0x83) //! TODO: For now it skips linux partitions.
{ {
part_idx = i; part_idx = i;
sector_start += 0x8000; sector_start += 0x8000;
@ -823,7 +823,8 @@ static lv_res_t _create_change_emummc_window()
if(!f_stat(path, NULL)) if(!f_stat(path, NULL))
{ {
strcpy(&emummc_img->dirlist[file_based_idx * 256], &emummc_img->dirlist[emummc_idx * 256]); char *tmp = &emummc_img->dirlist[emummc_idx * 256];
memcpy(&emummc_img->dirlist[file_based_idx * 256], tmp, strlen(tmp) + 1);
file_based_idx++; file_based_idx++;
} }
emummc_idx++; emummc_idx++;

View file

@ -36,6 +36,7 @@
#define STMFTS_MS_MT_SENSE_ON 0x93 #define STMFTS_MS_MT_SENSE_ON 0x93
#define STMFTS_SS_HOVER_SENSE_OFF 0x94 #define STMFTS_SS_HOVER_SENSE_OFF 0x94
#define STMFTS_SS_HOVER_SENSE_ON 0x95 #define STMFTS_SS_HOVER_SENSE_ON 0x95
#define STMFTS_LP_TIMER_CALIB 0x97
#define STMFTS_MS_KEY_SENSE_OFF 0x9A #define STMFTS_MS_KEY_SENSE_OFF 0x9A
#define STMFTS_MS_KEY_SENSE_ON 0x9B #define STMFTS_MS_KEY_SENSE_ON 0x9B
#define STMFTS_SYSTEM_RESET 0xA0 #define STMFTS_SYSTEM_RESET 0xA0
@ -45,7 +46,10 @@
#define STMFTS_SS_CX_TUNING 0xA4 #define STMFTS_SS_CX_TUNING 0xA4
#define STMFTS_RELEASEINFO 0xAA #define STMFTS_RELEASEINFO 0xAA
#define STMFTS_WRITE_REG 0xB6 #define STMFTS_WRITE_REG 0xB6
#define STMFTS_NOISE_WRITE 0xC7
#define STMFTS_NOISE_READ 0xC8
#define STMFTS_RW_FB_REG 0xD0 // read data #define STMFTS_RW_FB_REG 0xD0 // read data
#define STMFTS_SAVE_CX_TUNING 0xFC
#define STMFTS_UNK0 0xB8 //Request compensation #define STMFTS_UNK0 0xB8 //Request compensation
#define STMFTS_UNK1 0xCF #define STMFTS_UNK1 0xCF

View file

@ -143,8 +143,11 @@ void lv_indev_set_cursor(lv_indev_t * indev, lv_obj_t * cur_obj)
if(indev->driver.type != LV_INDEV_TYPE_POINTER) return; if(indev->driver.type != LV_INDEV_TYPE_POINTER) return;
indev->cursor = cur_obj; indev->cursor = cur_obj;
lv_obj_set_parent(indev->cursor, lv_layer_sys()); if (indev->cursor)
lv_obj_set_pos(indev->cursor, indev->proc.act_point.x, indev->proc.act_point.y); {
lv_obj_set_parent(indev->cursor, lv_layer_sys());
lv_obj_set_pos(indev->cursor, indev->proc.act_point.x, indev->proc.act_point.y);
}
} }
#if USE_LV_GROUP #if USE_LV_GROUP

View file

@ -36,6 +36,7 @@ extern "C" {
/** /**
* Possible priorities for lv_tasks * Possible priorities for lv_tasks
*/ */
#define LV_TASK_ONESHOT 0
enum enum
{ {
LV_TASK_PRIO_OFF = 0, LV_TASK_PRIO_OFF = 0,