Reload lists after scanning, and move text to bottom to leave top solely to camera (#126)
* reload lists after qr code is scanned * move "press R to exit" to bottom screen
This commit is contained in:
@@ -34,13 +34,14 @@ typedef struct {
|
|||||||
u32 *texture_buffer;
|
u32 *texture_buffer;
|
||||||
Handle mutex;
|
Handle mutex;
|
||||||
volatile bool finished;
|
volatile bool finished;
|
||||||
|
volatile bool success;
|
||||||
Handle cancel;
|
Handle cancel;
|
||||||
|
|
||||||
bool capturing;
|
bool capturing;
|
||||||
struct quirc* context;
|
struct quirc* context;
|
||||||
} qr_data;
|
} qr_data;
|
||||||
|
|
||||||
void init_qr(EntryMode current_mode);
|
bool init_qr(EntryMode current_mode);
|
||||||
void exit_qr(qr_data *data);
|
void exit_qr(qr_data *data);
|
||||||
void take_picture(void);
|
void take_picture(void);
|
||||||
Result http_get(char *url, const char *path);
|
Result http_get(char *url, const char *path);
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ bool start_capture_cam(qr_data *data)
|
|||||||
void update_qr(qr_data *data, EntryMode current_mode)
|
void update_qr(qr_data *data, EntryMode current_mode)
|
||||||
{
|
{
|
||||||
hidScanInput();
|
hidScanInput();
|
||||||
if (hidKeysDown() & KEY_R) {
|
if (hidKeysDown() & (KEY_R | KEY_B | KEY_TOUCH)) {
|
||||||
exit_qr(data);
|
exit_qr(data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -169,10 +169,11 @@ void update_qr(qr_data *data, EntryMode current_mode)
|
|||||||
pp2d_load_texture_memory(TEXTURE_QR, data->texture_buffer, 400, 240);
|
pp2d_load_texture_memory(TEXTURE_QR, data->texture_buffer, 400, 240);
|
||||||
|
|
||||||
pp2d_draw_texture(TEXTURE_QR, 0, 0);
|
pp2d_draw_texture(TEXTURE_QR, 0, 0);
|
||||||
pp2d_draw_rectangle(0, 216, 400, 24, RGBA8(55, 122, 168, 255));
|
|
||||||
pp2d_draw_text_center(GFX_TOP, 220, 0.5, 0.5, RGBA8(255, 255, 255, 255), "Press \uE005 To Quit");
|
pp2d_draw_on(GFX_BOTTOM, GFX_LEFT);
|
||||||
|
pp2d_draw_text_center(GFX_BOTTOM, 4, 0.5, 0.5, RGBA8(255, 255, 255, 255), "Press \uE005 To Quit");
|
||||||
pp2d_end_draw();
|
pp2d_end_draw();
|
||||||
|
|
||||||
int w;
|
int w;
|
||||||
int h;
|
int h;
|
||||||
u8 *image = (u8*) quirc_begin(data->context, &w, &h);
|
u8 *image = (u8*) quirc_begin(data->context, &w, &h);
|
||||||
@@ -194,12 +195,13 @@ void update_qr(qr_data *data, EntryMode current_mode)
|
|||||||
{
|
{
|
||||||
exit_qr(data);
|
exit_qr(data);
|
||||||
http_get((char*)scan_data.payload, main_paths[current_mode]);
|
http_get((char*)scan_data.payload, main_paths[current_mode]);
|
||||||
|
data->success = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_qr(EntryMode current_mode)
|
bool init_qr(EntryMode current_mode)
|
||||||
{
|
{
|
||||||
qr_data *data = calloc(1, sizeof(qr_data));
|
qr_data *data = calloc(1, sizeof(qr_data));
|
||||||
data->capturing = false;
|
data->capturing = false;
|
||||||
@@ -211,6 +213,8 @@ void init_qr(EntryMode current_mode)
|
|||||||
data->texture_buffer = calloc(1, 400 * 240 * sizeof(u32));
|
data->texture_buffer = calloc(1, 400 * 240 * sizeof(u32));
|
||||||
|
|
||||||
while (!data->finished) update_qr(data, current_mode);
|
while (!data->finished) update_qr(data, current_mode);
|
||||||
|
|
||||||
|
return (bool)data->success;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -108,17 +108,21 @@ static void exit_thread(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void exit_function(bool power_pressed)
|
void free_lists(void)
|
||||||
{
|
{
|
||||||
stop_install_check();
|
stop_install_check();
|
||||||
for(int i = 0; i < MODE_AMOUNT; i++)
|
for(int i = 0; i < MODE_AMOUNT; i++)
|
||||||
{
|
{
|
||||||
Entry_List_s * current_list = &lists[i];
|
Entry_List_s * current_list = &lists[i];
|
||||||
free(current_list->entries);
|
free(current_list->entries);
|
||||||
current_list->entries = NULL;
|
memset(current_list, 0, sizeof(Entry_List_s));
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_thread();
|
exit_thread();
|
||||||
|
}
|
||||||
|
|
||||||
|
void exit_function(bool power_pressed)
|
||||||
|
{
|
||||||
|
free_lists();
|
||||||
svcCloseHandle(update_icons_handle);
|
svcCloseHandle(update_icons_handle);
|
||||||
exit_screens();
|
exit_screens();
|
||||||
exit_services();
|
exit_services();
|
||||||
@@ -209,8 +213,7 @@ static void load_lists(Entry_List_s * lists)
|
|||||||
{
|
{
|
||||||
ssize_t texture_id_offset = TEXTURE_ICON;
|
ssize_t texture_id_offset = TEXTURE_ICON;
|
||||||
|
|
||||||
stop_install_check();
|
free_lists();
|
||||||
exit_thread();
|
|
||||||
for(int i = 0; i < MODE_AMOUNT; i++)
|
for(int i = 0; i < MODE_AMOUNT; i++)
|
||||||
{
|
{
|
||||||
InstallType loading_screen = INSTALL_NONE;
|
InstallType loading_screen = INSTALL_NONE;
|
||||||
@@ -222,8 +225,6 @@ static void load_lists(Entry_List_s * lists)
|
|||||||
draw_install(loading_screen);
|
draw_install(loading_screen);
|
||||||
|
|
||||||
Entry_List_s * current_list = &lists[i];
|
Entry_List_s * current_list = &lists[i];
|
||||||
free(current_list->entries);
|
|
||||||
memset(current_list, 0, sizeof(Entry_List_s));
|
|
||||||
Result res = load_entries(main_paths[i], current_list, i);
|
Result res = load_entries(main_paths[i], current_list, i);
|
||||||
if(R_SUCCEEDED(res))
|
if(R_SUCCEEDED(res))
|
||||||
{
|
{
|
||||||
@@ -353,7 +354,13 @@ int main(void)
|
|||||||
u32 out;
|
u32 out;
|
||||||
ACU_GetWifiStatus(&out);
|
ACU_GetWifiStatus(&out);
|
||||||
if(out)
|
if(out)
|
||||||
init_qr(current_mode);
|
{
|
||||||
|
|
||||||
|
if(init_qr(current_mode))
|
||||||
|
{
|
||||||
|
load_lists(lists);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw_error("Please connect to Wi-Fi before scanning QRs", ERROR_LEVEL_WARNING);
|
throw_error("Please connect to Wi-Fi before scanning QRs", ERROR_LEVEL_WARNING);
|
||||||
|
|||||||
Reference in New Issue
Block a user