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 "../input/touch.h"
#include "../libs/fatfs/ff.h"
#include "../mem/heap.h"
#include "../mem/minerva.h"
#include "../power/bq24193.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();
}
touch_event touchpad;
static touch_event touchpad;
static bool _fts_touch_read(lv_indev_data_t *data)
{
touch_poll(&touchpad);
// Take a screenshot if 3 fingers.
if (touchpad.fingers > 2)
{
_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)
{
case STMFTS_EV_MULTI_TOUCH_ENTER:
case STMFTS_EV_MULTI_TOUCH_MOTION:
data->state = LV_INDEV_STATE_PR;
data->point.x = touchpad.x;
data->point.y = touchpad.y;
break;
case STMFTS_EV_MULTI_TOUCH_LEAVE:
data->state = LV_INDEV_STATE_REL;
data->point.x = touchpad.x;
data->point.y = touchpad.y;
break;
case STMFTS_EV_NO_EVENT:
default:
if (touchpad.touch)
{
data->state = LV_INDEV_STATE_PR;
}
else
{
data->point.x = touchpad.x;
data->point.y = touchpad.y;
data->state = LV_INDEV_STATE_REL;
//return true;
}
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_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_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);
// 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);
// 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);
// Set autoboot index.
ext = lv_obj_get_ext_attr(launch_ctxt[x]);
ext->idx = i;
ext = lv_obj_get_ext_attr(btn);
ext->idx = i;
@ -2046,7 +2045,7 @@ static void _nyx_main_menu(lv_theme_t * th)
_create_status_bar(th);
// 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);
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.
touch_power_on();
lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv);
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read = _fts_touch_read;
lv_indev_drv_register(&indev_drv);
lv_indev_drv_t indev_drv_touch;
lv_indev_drv_init(&indev_drv_touch);
indev_drv_touch.type = LV_INDEV_TYPE_POINTER;
indev_drv_touch.read = _fts_touch_read;
lv_indev_drv_register(&indev_drv_touch);
touchpad.touch = false;
// Initialize temperature sensor.
@ -2118,6 +2117,7 @@ void nyx_load_and_run()
lv_theme_t *th = lv_theme_hekate_init(167, NULL);
lv_theme_set_current(th);
// Create main menu
_nyx_main_menu(th);
while (true)

View file

@ -178,7 +178,7 @@ static void _create_mbox_emummc_raw()
u32 curr_part_size = *(u32 *)&mbr[0x0C + (0x10 * i)];
sector_start = *(u32 *)&mbr[0x08 + (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;
sector_start += 0x8000;
@ -823,7 +823,8 @@ static lv_res_t _create_change_emummc_window()
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++;
}
emummc_idx++;

View file

@ -36,6 +36,7 @@
#define STMFTS_MS_MT_SENSE_ON 0x93
#define STMFTS_SS_HOVER_SENSE_OFF 0x94
#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_ON 0x9B
#define STMFTS_SYSTEM_RESET 0xA0
@ -45,7 +46,10 @@
#define STMFTS_SS_CX_TUNING 0xA4
#define STMFTS_RELEASEINFO 0xAA
#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_SAVE_CX_TUNING 0xFC
#define STMFTS_UNK0 0xB8 //Request compensation
#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;
indev->cursor = cur_obj;
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 (indev->cursor)
{
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

View file

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