|
757 | 757 | void draw_numbers() { |
758 | 758 | int x = 296; |
759 | 759 | int y = POS.y + 48; |
760 | | - int h = 5; |
761 | 760 | int w = 0; |
762 | 761 | char count[10]; |
763 | 762 | sprintf(count, "(%d/%d)", (ROMS.offset+1), ROMS.total); |
|
769 | 768 | void delete_numbers() { |
770 | 769 | int x = 296; |
771 | 770 | int y = POS.y + 48; |
772 | | - int h = 5; |
773 | 771 | int w = 0; |
774 | 772 | char count[10]; |
775 | 773 | sprintf(count, "(%d/%d)", (ROMS.offset+1), ROMS.total); |
|
853 | 851 | ili9341_write_frame_rectangleLE(x, y, w, h, buffer); |
854 | 852 | draw_text(x+10,y,"Run",false,true, false); |
855 | 853 | } |
| 854 | + |
| 855 | + get_cover(); |
856 | 856 | } |
857 | 857 | //}#pragma endregion GUI |
858 | 858 |
|
|
1126 | 1126 | } |
1127 | 1127 | //}#pragma endregion Files |
1128 | 1128 |
|
| 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 | + |
1129 | 1223 | //{#pragma region Animations |
1130 | 1224 | void animate(int dir) { |
1131 | 1225 | delete_numbers(); |
|
0 commit comments