Skip to content

Commit 48cec32

Browse files
committed
Wed 5 Feb 2020 16:35:29 EST - cover art implementation
1 parent 40b4a49 commit 48cec32

File tree

7 files changed

+113
-6
lines changed

7 files changed

+113
-6
lines changed

Launchers/retro-esp32/main/includes/core.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
#include "nvs_flash.h"
1818
#include "sdmmc_cmd.h"
1919

20+
/*
21+
CRC
22+
*/
23+
#include <rom/crc.h>
24+
2025
/*
2126
ESP
2227
*/

Launchers/retro-esp32/main/includes/declarations.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@ void sort_files(char** files);
8787
void draw_files();
8888
void has_save_file(char *save_name);
8989

90+
/*
91+
Cover
92+
*/
93+
void get_cover();
94+
void draw_cover();
95+
9096
/*
9197
Animations
9298
*/

Launchers/retro-esp32/main/includes/structures.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ LIST ROMS = {8, 0, 0, 0, 0};
2929
typedef struct{
3030
char name[256];
3131
char path[256];
32+
uint32_t crc;
3233
bool ready;
3334
} LOAD;
3435
LOAD ROM;

Launchers/retro-esp32/main/main.c

Lines changed: 96 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,6 @@
757757
void draw_numbers() {
758758
int x = 296;
759759
int y = POS.y + 48;
760-
int h = 5;
761760
int w = 0;
762761
char count[10];
763762
sprintf(count, "(%d/%d)", (ROMS.offset+1), ROMS.total);
@@ -769,7 +768,6 @@
769768
void delete_numbers() {
770769
int x = 296;
771770
int y = POS.y + 48;
772-
int h = 5;
773771
int w = 0;
774772
char count[10];
775773
sprintf(count, "(%d/%d)", (ROMS.offset+1), ROMS.total);
@@ -853,6 +851,8 @@
853851
ili9341_write_frame_rectangleLE(x, y, w, h, buffer);
854852
draw_text(x+10,y,"Run",false,true, false);
855853
}
854+
855+
get_cover();
856856
}
857857
//}#pragma endregion GUI
858858

@@ -1126,6 +1126,100 @@
11261126
}
11271127
//}#pragma endregion Files
11281128

1129+
//{#pragma region Cover
1130+
void get_cover() {
1131+
//debounce(ODROID_INPUT_A);
1132+
char file[256] = "";
1133+
sprintf(file, "%s/%s", ROM.path, ROM.name);
1134+
1135+
FILE *f = fopen(file, "rb");
1136+
ROM.crc = 0;
1137+
if (f) {
1138+
fseek(f, 0, SEEK_END);
1139+
int offset = 0;
1140+
if(strcmp(EXTENSIONS[STEP], "nes") == 0) {offset = 16;}
1141+
int size = ftell(f) - offset;
1142+
fseek(f, offset, SEEK_SET);
1143+
int buf_size = 32768; //4096;
1144+
unsigned char *cover = (unsigned char*)heap_caps_malloc(buf_size, MALLOC_CAP_SPIRAM);
1145+
if (cover)
1146+
{
1147+
uint32_t crc_tmp = 0;
1148+
bool abort = false;
1149+
while (true)
1150+
{
1151+
odroid_input_gamepad_read(&gamepad);
1152+
if (gamepad.values[ODROID_INPUT_A] ||
1153+
gamepad.values[ODROID_INPUT_START] ||
1154+
gamepad.values[ODROID_INPUT_SELECT] ||
1155+
gamepad.values[ODROID_INPUT_LEFT] ||
1156+
gamepad.values[ODROID_INPUT_RIGHT] ||
1157+
gamepad.values[ODROID_INPUT_UP] ||
1158+
gamepad.values[ODROID_INPUT_DOWN]) {
1159+
abort = true;
1160+
break;
1161+
}
1162+
int count = fread(cover, 1, buf_size, f);
1163+
crc_tmp = crc32_le(crc_tmp, (const uint8_t*)cover, count);
1164+
if (count != buf_size){break;}
1165+
}
1166+
heap_caps_free(cover);
1167+
fclose(f);
1168+
if (!abort) {
1169+
printf("%X %s ; Size: %d\n", crc_tmp, file, size);
1170+
ROM.crc = crc_tmp;
1171+
}
1172+
} else {
1173+
printf("Buffer alloc failed: Size: %d; File: %s\n",size, file);
1174+
fclose(f);
1175+
ROM.crc = 1;
1176+
}
1177+
} else {
1178+
printf("File not found: %s\n", file);
1179+
ROM.crc = 1;
1180+
}
1181+
1182+
if(ROM.crc > 1) {
1183+
draw_cover();
1184+
}
1185+
}
1186+
1187+
void draw_cover() {
1188+
char file[256] = "/sd/romart";
1189+
char crc[10];
1190+
sprintf(crc, "%X", ROM.crc);
1191+
sprintf(file, "%s/%s/%c/%s.art", file, EXTENSIONS[STEP], crc[0], crc);
1192+
1193+
printf("\n----- %s -----\n"
1194+
"ROM.name:%s\n"
1195+
"ROM.path:%s\n"
1196+
"ROM.crc:%X\n"
1197+
"file:%s\n"
1198+
, __func__,
1199+
ROM.name,
1200+
ROM.path,
1201+
ROM.crc,
1202+
file);
1203+
1204+
FILE *f = fopen(file, "rb");
1205+
if(f) {
1206+
uint16_t width, height;
1207+
fread(&width, 2, 1, f);
1208+
fread(&height, 2, 1, f);
1209+
1210+
if (width<=320 && height<=176) {
1211+
uint16_t *img = (uint16_t*)heap_caps_malloc(width*height*2, MALLOC_CAP_SPIRAM);
1212+
fread(img, 2, width*height, f);
1213+
ili9341_write_frame_rectangleLE(SCREEN.w-width-16,POS.y, width, height, img);
1214+
heap_caps_free(img);
1215+
}
1216+
fclose(f);
1217+
} else {
1218+
printf("FILE NOT FOUND");
1219+
}
1220+
}
1221+
//}#pragma endregion Cover
1222+
11291223
//{#pragma region Animations
11301224
void animate(int dir) {
11311225
delete_numbers();

Launchers/retro-esp32/sdkconfig

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ CONFIG_SPIRAM_SUPPORT=y
170170
#
171171
CONFIG_SPIRAM_BOOT_INIT=y
172172
CONFIG_SPIRAM_IGNORE_NOTFOUND=
173-
CONFIG_SPIRAM_USE_MEMMAP=y
174-
CONFIG_SPIRAM_USE_CAPS_ALLOC=
173+
CONFIG_SPIRAM_USE_MEMMAP=
174+
CONFIG_SPIRAM_USE_CAPS_ALLOC=y
175175
CONFIG_SPIRAM_USE_MALLOC=
176176
CONFIG_SPIRAM_TYPE_AUTO=y
177177
CONFIG_SPIRAM_TYPE_ESPPSRAM32=
@@ -183,6 +183,7 @@ CONFIG_SPIRAM_MEMTEST=y
183183
CONFIG_SPIRAM_CACHE_WORKAROUND=y
184184
CONFIG_SPIRAM_BANKSWITCH_ENABLE=y
185185
CONFIG_SPIRAM_BANKSWITCH_RESERVE=8
186+
CONFIG_WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST=
186187
CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=
187188
CONFIG_MEMMAP_TRACEMEM=
188189
CONFIG_MEMMAP_TRACEMEM_TWOBANKS=

Launchers/retro-esp32/sdkconfig.old

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ CONFIG_FLASH_ENCRYPTION_ENABLED=
3737
#
3838
# Serial flasher config
3939
#
40-
CONFIG_ESPTOOLPY_PORT="/dev/cu.usbserial-A1015RV2"
40+
CONFIG_ESPTOOLPY_PORT="/dev/cu.SLAB_USBtoUART"
4141
CONFIG_ESPTOOLPY_BAUD_115200B=
4242
CONFIG_ESPTOOLPY_BAUD_230400B=
4343
CONFIG_ESPTOOLPY_BAUD_921600B=y

Odroid/odroid-go-firmware

0 commit comments

Comments
 (0)