Skip to content

Commit c435250

Browse files
committed
Removed keyboard and mouse. Game selection.
1 parent e642b54 commit c435250

File tree

2 files changed

+25
-177
lines changed

2 files changed

+25
-177
lines changed

components/esp_nes/osd.c

Lines changed: 11 additions & 162 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,7 @@ static const char *TAG = "OSD";
3838

3939
#define APP_DEFAULT_WIDTH 256
4040
#define APP_DEFAULT_HEIGHT 240
41-
#define APP_DEFAULT_SCALE 2
42-
43-
typedef struct {
44-
int16_t x; /* Mouse X coordinate */
45-
int16_t y; /* Mouse Y coordinate */
46-
bool left_button; /* Mouse left button state */
47-
} app_mouse_t;
48-
typedef struct {
49-
uint32_t last_key;
50-
bool pressed;
51-
} app_kb_t;
41+
#define APP_DEFAULT_SCALE (BSP_LCD_V_RES/APP_DEFAULT_HEIGHT)
5242

5343
typedef struct {
5444
hid_host_device_handle_t hid_device_handle;
@@ -121,8 +111,6 @@ static uint8_t * vid_buffer = NULL;
121111

122112
/* USB variables */
123113
static QueueHandle_t hid_queue = NULL;
124-
static app_kb_t app_kb;
125-
static app_mouse_t app_mouse;
126114
static gamepad_t app_gamepad;
127115
static gamepad_t app_gamepad_tmp;
128116
/*******************************************************************************
@@ -367,18 +355,14 @@ static void app_osd_video_custom_blit(bitmap_t *primary, int num_dirties, rect_t
367355

368356
bsp_display_lock(0);
369357

370-
for(int y=0; y<APP_DEFAULT_HEIGHT; y++)
371-
{
372-
for(int x=0; x<APP_DEFAULT_WIDTH; x++)
373-
{
374-
for(int z=0; z<APP_DEFAULT_SCALE; z++)
375-
{
376-
vid_buffer[((x)*sizeof(uint16_t)*APP_DEFAULT_SCALE) + (((APP_DEFAULT_SCALE*y)+z)*APP_DEFAULT_SCALE*sizeof(uint16_t)*APP_DEFAULT_WIDTH)] = HIBYTE(colorPalette[data[0]]);
377-
vid_buffer[((x)*sizeof(uint16_t)*APP_DEFAULT_SCALE) + (((APP_DEFAULT_SCALE*y)+z)*APP_DEFAULT_SCALE*sizeof(uint16_t)*APP_DEFAULT_WIDTH) + 1] = LOBYTE(colorPalette[data[0]]);
378-
379-
vid_buffer[((x)*sizeof(uint16_t)*APP_DEFAULT_SCALE) + (((APP_DEFAULT_SCALE*y)+z)*APP_DEFAULT_SCALE*sizeof(uint16_t)*APP_DEFAULT_WIDTH) + 2] = HIBYTE(colorPalette[data[0]]);
380-
vid_buffer[((x)*sizeof(uint16_t)*APP_DEFAULT_SCALE) + (((APP_DEFAULT_SCALE*y)+z)*APP_DEFAULT_SCALE*sizeof(uint16_t)*APP_DEFAULT_WIDTH) + 3] = LOBYTE(colorPalette[data[0]]);
381-
}
358+
for (int y=0; y<APP_DEFAULT_HEIGHT; y++) {
359+
for (int x=0; x<APP_DEFAULT_WIDTH; x++) {
360+
for (int z=0; z<APP_DEFAULT_SCALE; z++) {
361+
for (int pix=0; pix<APP_DEFAULT_SCALE; pix++) {
362+
vid_buffer[((x)*sizeof(uint16_t)*APP_DEFAULT_SCALE) + (((APP_DEFAULT_SCALE*y)+z)*APP_DEFAULT_SCALE*sizeof(uint16_t)*APP_DEFAULT_WIDTH) + (pix*2)] = HIBYTE(colorPalette[data[0]]);
363+
vid_buffer[((x)*sizeof(uint16_t)*APP_DEFAULT_SCALE) + (((APP_DEFAULT_SCALE*y)+z)*APP_DEFAULT_SCALE*sizeof(uint16_t)*APP_DEFAULT_WIDTH) + (pix*2 + 1)] = LOBYTE(colorPalette[data[0]]);
364+
}
365+
}
382366
data++;
383367
}
384368
}
@@ -387,81 +371,6 @@ static void app_osd_video_custom_blit(bitmap_t *primary, int num_dirties, rect_t
387371
bsp_display_unlock();
388372
}
389373

390-
static char usb_hid_get_keyboard_char(uint8_t key, uint8_t shift)
391-
{
392-
char ret_key = 0;
393-
394-
const uint8_t keycode2ascii [57][2] = {
395-
{0, 0}, /* HID_KEY_NO_PRESS */
396-
{0, 0}, /* HID_KEY_ROLLOVER */
397-
{0, 0}, /* HID_KEY_POST_FAIL */
398-
{0, 0}, /* HID_KEY_ERROR_UNDEFINED */
399-
{'a', 'A'}, /* HID_KEY_A */
400-
{'b', 'B'}, /* HID_KEY_B */
401-
{'c', 'C'}, /* HID_KEY_C */
402-
{'d', 'D'}, /* HID_KEY_D */
403-
{'e', 'E'}, /* HID_KEY_E */
404-
{'f', 'F'}, /* HID_KEY_F */
405-
{'g', 'G'}, /* HID_KEY_G */
406-
{'h', 'H'}, /* HID_KEY_H */
407-
{'i', 'I'}, /* HID_KEY_I */
408-
{'j', 'J'}, /* HID_KEY_J */
409-
{'k', 'K'}, /* HID_KEY_K */
410-
{'l', 'L'}, /* HID_KEY_L */
411-
{'m', 'M'}, /* HID_KEY_M */
412-
{'n', 'N'}, /* HID_KEY_N */
413-
{'o', 'O'}, /* HID_KEY_O */
414-
{'p', 'P'}, /* HID_KEY_P */
415-
{'q', 'Q'}, /* HID_KEY_Q */
416-
{'r', 'R'}, /* HID_KEY_R */
417-
{'s', 'S'}, /* HID_KEY_S */
418-
{'t', 'T'}, /* HID_KEY_T */
419-
{'u', 'U'}, /* HID_KEY_U */
420-
{'v', 'V'}, /* HID_KEY_V */
421-
{'w', 'W'}, /* HID_KEY_W */
422-
{'x', 'X'}, /* HID_KEY_X */
423-
{'y', 'Y'}, /* HID_KEY_Y */
424-
{'z', 'Z'}, /* HID_KEY_Z */
425-
{'1', '!'}, /* HID_KEY_1 */
426-
{'2', '@'}, /* HID_KEY_2 */
427-
{'3', '#'}, /* HID_KEY_3 */
428-
{'4', '$'}, /* HID_KEY_4 */
429-
{'5', '%'}, /* HID_KEY_5 */
430-
{'6', '^'}, /* HID_KEY_6 */
431-
{'7', '&'}, /* HID_KEY_7 */
432-
{'8', '*'}, /* HID_KEY_8 */
433-
{'9', '('}, /* HID_KEY_9 */
434-
{'0', ')'}, /* HID_KEY_0 */
435-
{'\r', '\r'}, /* HID_KEY_ENTER */
436-
{0, 0}, /* HID_KEY_ESC */
437-
{'\b', 0}, /* HID_KEY_DEL */
438-
{0, 0}, /* HID_KEY_TAB */
439-
{' ', ' '}, /* HID_KEY_SPACE */
440-
{'-', '_'}, /* HID_KEY_MINUS */
441-
{'=', '+'}, /* HID_KEY_EQUAL */
442-
{'[', '{'}, /* HID_KEY_OPEN_BRACKET */
443-
{']', '}'}, /* HID_KEY_CLOSE_BRACKET */
444-
{'\\', '|'}, /* HID_KEY_BACK_SLASH */
445-
{'\\', '|'}, /* HID_KEY_SHARP */ // HOTFIX: for NonUS Keyboards repeat HID_KEY_BACK_SLASH
446-
{';', ':'}, /* HID_KEY_COLON */
447-
{'\'', '"'}, /* HID_KEY_QUOTE */
448-
{'`', '~'}, /* HID_KEY_TILDE */
449-
{',', '<'}, /* HID_KEY_LESS */
450-
{'.', '>'}, /* HID_KEY_GREATER */
451-
{'/', '?'} /* HID_KEY_SLASH */
452-
};
453-
454-
if (shift > 1) {
455-
shift = 1;
456-
}
457-
458-
if ((key >= HID_KEY_A) && (key <= HID_KEY_SLASH)) {
459-
ret_key = keycode2ascii[key][shift];
460-
}
461-
462-
return ret_key;
463-
}
464-
465374
static void app_usb_hid_host_interface_callback(hid_host_device_handle_t hid_device_handle, const hid_host_interface_event_t event, void *arg)
466375
{
467376
hid_host_dev_params_t *dev = hid_host_device_get_params(hid_device_handle);
@@ -473,67 +382,7 @@ static void app_usb_hid_host_interface_callback(hid_host_device_handle_t hid_dev
473382
switch (event) {
474383
case HID_HOST_INTERFACE_EVENT_INPUT_REPORT:
475384
data = hid_host_device_get_data(hid_device_handle, &data_length);
476-
if (dev->proto == HID_PROTOCOL_KEYBOARD) {
477-
hid_keyboard_input_report_boot_t *keyboard = (hid_keyboard_input_report_boot_t *)data;
478-
if (data_length < sizeof(hid_keyboard_input_report_boot_t)) {
479-
return;
480-
}
481-
for (int i = 0; i < HID_KEYBOARD_KEY_MAX; i++) {
482-
if (keyboard->key[i] > HID_KEY_ERROR_UNDEFINED) {
483-
char key = 0;
484-
485-
/* LVGL special keys */
486-
if (keyboard->key[i] == HID_KEY_TAB) {
487-
if ((keyboard->modifier.left_shift || keyboard->modifier.right_shift)) {
488-
key = LV_KEY_PREV;
489-
} else {
490-
key = LV_KEY_NEXT;
491-
}
492-
} else if (keyboard->key[i] == HID_KEY_RIGHT) {
493-
key = LV_KEY_RIGHT;
494-
} else if (keyboard->key[i] == HID_KEY_LEFT) {
495-
key = LV_KEY_LEFT;
496-
} else if (keyboard->key[i] == HID_KEY_DOWN) {
497-
key = LV_KEY_DOWN;
498-
} else if (keyboard->key[i] == HID_KEY_UP) {
499-
key = LV_KEY_UP;
500-
} else if (keyboard->key[i] == HID_KEY_ENTER || keyboard->key[i] == HID_KEY_KEYPAD_ENTER) {
501-
key = LV_KEY_ENTER;
502-
} else if (keyboard->key[i] == HID_KEY_DELETE) {
503-
key = LV_KEY_DEL;
504-
} else if (keyboard->key[i] == HID_KEY_HOME) {
505-
key = LV_KEY_HOME;
506-
} else if (keyboard->key[i] == HID_KEY_END) {
507-
key = LV_KEY_END;
508-
} else {
509-
/* Get ASCII char */
510-
key = usb_hid_get_keyboard_char(keyboard->key[i], (keyboard->modifier.left_shift || keyboard->modifier.right_shift));
511-
}
512-
513-
if (key == 0) {
514-
ESP_LOGI(TAG, "Not recognized key: %c (%d)", keyboard->key[i], keyboard->key[i]);
515-
}
516-
app_kb.last_key = key;
517-
app_kb.pressed = true;
518-
}
519-
else
520-
{
521-
if(i == 0) {
522-
app_kb.pressed = false;
523-
}
524-
}
525-
526-
}
527-
528-
} else if (dev->proto == HID_PROTOCOL_MOUSE) {
529-
hid_mouse_input_report_boot_t *mouse = (hid_mouse_input_report_boot_t *)data;
530-
if (data_length < sizeof(hid_mouse_input_report_boot_t)) {
531-
break;
532-
}
533-
app_mouse.left_button = mouse->buttons.button1;
534-
app_mouse.x += mouse->x_displacement;
535-
app_mouse.y += mouse->y_displacement;
536-
} else {
385+
if (dev->proto == HID_PROTOCOL_NONE) {
537386
gamepad_t *gamepad = (gamepad_t*)data;
538387
if (data_length < 1) {
539388
break;
@@ -568,7 +417,7 @@ static void app_usb_hid_task(void *arg)
568417
switch (msg.event) {
569418
case HID_HOST_DRIVER_EVENT_CONNECTED:
570419
/* Handle mouse or keyboard */
571-
if (dev->proto == HID_PROTOCOL_NONE || dev->proto == HID_PROTOCOL_KEYBOARD || dev->proto == HID_PROTOCOL_MOUSE) {
420+
if (dev->proto == HID_PROTOCOL_NONE) {
572421
const hid_host_device_config_t dev_config = {
573422
.callback = app_usb_hid_host_interface_callback,
574423
};

main/main.c

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include "nvs_flash.h"
99
#include "nofrendo.h"
1010
#include "esp_partition.h"
11-
#include "esp_spi_flash.h"
11+
#include "spi_flash_mmap.h"
1212
#include "bsp/esp-bsp.h"
1313
#include "usb/usb_host.h"
1414
#include "esp_log.h"
@@ -21,7 +21,14 @@ static const char * APP_GAME_QBERT = "nesrom3";
2121
/* Selected partion with game */
2222
static const char * app_selected_game = NULL;
2323

24-
char *osd_getromdata() {
24+
char *osd_getromdata()
25+
{
26+
/* Wait for select the game */
27+
while(app_selected_game == NULL)
28+
{
29+
vTaskDelay(pdMS_TO_TICKS(100));
30+
};
31+
2532
char* romdata;
2633
const esp_partition_t* part;
2734
spi_flash_mmap_handle_t hrom;
@@ -73,23 +80,24 @@ static void app_lvgl_btn_qbert(lv_event_t *e)
7380
static void app_lvgl_game_selection(void)
7481
{
7582
bsp_display_lock(0);
83+
lv_obj_set_style_bg_color(lv_scr_act(), lv_color_black(), 0);
7684

7785
lv_obj_t * btn = lv_btn_create(lv_scr_act());
7886
lv_obj_t * label = lv_label_create(btn);
7987
lv_label_set_text_static(label, "Super Mario");
80-
lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 10);
88+
lv_obj_align(btn, LV_ALIGN_TOP_LEFT, 0, 10);
8189
lv_obj_add_event_cb(btn, app_lvgl_btn_supermario, LV_EVENT_CLICKED, NULL);
8290

8391
btn = lv_btn_create(lv_scr_act());
8492
label = lv_label_create(btn);
8593
lv_label_set_text_static(label, "Donkey Kong");
86-
lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 60);
94+
lv_obj_align(btn, LV_ALIGN_TOP_LEFT, 0, 60);
8795
lv_obj_add_event_cb(btn, app_lvgl_btn_donkeykong, LV_EVENT_CLICKED, NULL);
8896

8997
btn = lv_btn_create(lv_scr_act());
9098
label = lv_label_create(btn);
9199
lv_label_set_text_static(label, "Q-Bert");
92-
lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 110);
100+
lv_obj_align(btn, LV_ALIGN_TOP_LEFT, 0, 110);
93101
lv_obj_add_event_cb(btn, app_lvgl_btn_qbert, LV_EVENT_CLICKED, NULL);
94102

95103
bsp_display_unlock();
@@ -113,20 +121,11 @@ int app_main(void)
113121

114122
/* Show selection of the game */
115123
app_lvgl_game_selection();
116-
117-
/* Wait for select the game */
118-
while(app_selected_game == NULL)
119-
{
120-
vTaskDelay(pdMS_TO_TICKS(100));
121-
};
122-
123-
/* Clean screen */
124-
lv_obj_clean(lv_scr_act());
125124

126125
printf("NoFrendo start!\n");
127126
nofrendo_main(0, NULL);
128127
printf("NoFrendo died? WtF?\n");
129-
//asm("break.n 1");
128+
130129
return 0;
131130
}
132131

0 commit comments

Comments
 (0)