I am using e2stuido 2023-10 Guix 6.3.0
Guix System Thread running for 7 times and stops. other threads continue to work.
If I send KeyDown events, Message Queue is getting full
Stack Tab not showing anything
GUIX System Thread Stack. It is waiting for Semaphore.
window1_handler not receiving Touch Events. Touch Events are sent by callback functions.
window1_handler gets two events at start up. Got focus and Show Window events.
subsequent events are not receiving.
void sf_touch_panel_v2_callback(sf_touchpanel_v2_callback_args_t *p_args) { bool send_event = true; GX_EVENT * p_gx_event = &g_gx_event; sf_touch_panel_v2_payload_t const * const p_payload = &p_args->payload; switch (p_payload->event_type) { /* New touch event reported. */ case SF_TOUCH_PANEL_V2_EVENT_DOWN: p_gx_event->gx_event_type = GX_EVENT_PEN_DOWN; break; /* Touch released. */ case SF_TOUCH_PANEL_V2_EVENT_UP: p_gx_event->gx_event_type = GX_EVENT_PEN_UP; break; /* Touch has not moved since last touch event. */ /* Touch has moved since last touch event. */ case SF_TOUCH_PANEL_V2_EVENT_HOLD: case SF_TOUCH_PANEL_V2_EVENT_MOVE: p_gx_event->gx_event_type = GX_EVENT_PEN_DRAG; break; /* No valid touch event happened. */ /* Invalid touch data */ case SF_TOUCH_PANEL_V2_EVENT_NONE: case SF_TOUCH_PANEL_V2_EVENT_INVALID: default: send_event = false; break; } if (send_event) { /** Send event to GUI */ p_gx_event->gx_event_sender = GX_ID_NONE; p_gx_event->gx_event_target = 0; p_gx_event->gx_event_display_handle = 0; p_gx_event->gx_event_payload.gx_event_pointdata.gx_point_x = p_payload->x; p_gx_event->gx_event_payload.gx_event_pointdata.gx_point_y = p_payload->y; // send Touch Event to Window UINT status = gx_system_event_send(p_gx_event); /* Confirm that the event flags were set */ if (TX_SUCCESS != status) { while (1) { LED2Toggle(); } } } }
window1_handler()
UINT window1_handler(GX_WINDOW *widget, GX_EVENT *event_ptr) { UINT result = gx_window_event_process(widget, event_ptr); switch (event_ptr->gx_event_type) { case GX_SIGNAL(ID_BUTTON_ENABLER, GX_EVENT_TOGGLE_ON): button_enabled = true; update_button_text_id(widget->gx_widget_parent, ID_WINDOW_CHANGER, GX_STRING_ID_BUTTON_ENABLED); update_prompt_text_id(widget->gx_widget_parent, ID_INSTRUCTIONS, GX_STRING_ID_INSTRUCT_BUTTON); break; case GX_SIGNAL(ID_BUTTON_ENABLER, GX_EVENT_TOGGLE_OFF): button_enabled = false; update_button_text_id(widget->gx_widget_parent, ID_WINDOW_CHANGER, GX_STRING_ID_BUTTON_DISABLED); update_prompt_text_id(widget->gx_widget_parent, ID_INSTRUCTIONS, GX_STRING_ID_INSTRUCT_CHECKBOX); break; case GX_SIGNAL(ID_WINDOW_CHANGER, GX_EVENT_CLICKED): if(button_enabled){ show_window((GX_WINDOW*)&window2, (GX_WIDGET*)widget, true); } break; case GX_EVENT_FOCUS_LOST: break; case GX_EVENT_KEY_DOWN: show_window((GX_WINDOW*)&window2, (GX_WIDGET*)widget, true); break; default: gx_window_event_process(widget, event_ptr); break; } return result; }
Found that GLCD Line Detect Interrupt is not set.
after setting these, now Touch Interrupts and Screen Changing working