@@ -31,8 +31,8 @@ static struct
31
31
bool initialized ;
32
32
} gui ;
33
33
34
- static const char * SETTING_FONTTYPE = "FontType" ;
35
- static const char * SETTING_THEME = "Theme" ;
34
+ static const char * SETTING_FONTTYPE = "FontType" ;
35
+ static const char * SETTING_THEME = "Theme" ;
36
36
37
37
38
38
void rg_gui_init (void )
@@ -131,7 +131,7 @@ void rg_gui_copy_buffer(int left, int top, int width, int height, int stride, co
131
131
for (int y = 0 ; y < height ; ++ y )
132
132
{
133
133
uint16_t * dst = gui .screen_buffer + (top + y ) * gui .screen_width + left ;
134
- const uint16_t * src = (void * )buffer + y * stride ;
134
+ const uint16_t * src = (void * )buffer + y * stride ;
135
135
for (int x = 0 ; x < width ; ++ x )
136
136
if (src [x ] != C_TRANSPARENT )
137
137
dst [x ] = src [x ];
@@ -707,11 +707,13 @@ int rg_gui_dialog(const char *title, const rg_gui_option_t *options_const, int s
707
707
for (size_t i = 0 ; i < options_count ; i ++ )
708
708
{
709
709
rg_gui_option_t * option = & options [i ];
710
- if (option -> value && text_buffer ) {
710
+ if (option -> value && text_buffer )
711
+ {
711
712
option -> value = strcpy (text_buffer_ptr , option -> value );
712
713
text_buffer_ptr += strlen (text_buffer_ptr ) + 24 ;
713
714
}
714
- if (option -> label && text_buffer ) {
715
+ if (option -> label && text_buffer )
716
+ {
715
717
option -> label = strcpy (text_buffer_ptr , option -> label );
716
718
text_buffer_ptr += strlen (text_buffer_ptr ) + 24 ;
717
719
}
@@ -822,9 +824,9 @@ bool rg_gui_confirm(const char *title, const char *message, bool default_yes)
822
824
{
823
825
const rg_gui_option_t options [] = {
824
826
{0 , (char * )message , NULL , -1 , NULL },
825
- {0 , "" , NULL , -1 , NULL },
826
- {1 , "Yes" , NULL , 1 , NULL },
827
- {0 , "No " , NULL , 1 , NULL },
827
+ {0 , "" , NULL , -1 , NULL },
828
+ {1 , "Yes" , NULL , 1 , NULL },
829
+ {0 , "No " , NULL , 1 , NULL },
828
830
RG_DIALOG_CHOICE_LAST
829
831
};
830
832
return rg_gui_dialog (title , message ? options : options + 1 , default_yes ? -2 : -1 ) == 1 ;
@@ -834,8 +836,8 @@ void rg_gui_alert(const char *title, const char *message)
834
836
{
835
837
const rg_gui_option_t options [] = {
836
838
{0 , (char * )message , NULL , -1 , NULL },
837
- {0 , "" , NULL , -1 , NULL },
838
- {1 , "OK" , NULL , 1 , NULL },
839
+ {0 , "" , NULL , -1 , NULL },
840
+ {1 , "OK" , NULL , 1 , NULL },
839
841
RG_DIALOG_CHOICE_LAST
840
842
};
841
843
rg_gui_dialog (title , message ? options : options + 1 , -1 );
@@ -1016,7 +1018,8 @@ static rg_gui_event_t speedup_update_cb(rg_gui_option_t *option, rg_gui_event_t
1016
1018
1017
1019
static rg_gui_event_t disk_activity_cb (rg_gui_option_t * option , rg_gui_event_t event )
1018
1020
{
1019
- if (event == RG_DIALOG_PREV || event == RG_DIALOG_NEXT ) {
1021
+ if (event == RG_DIALOG_PREV || event == RG_DIALOG_NEXT )
1022
+ {
1020
1023
rg_storage_set_activity_led (!rg_storage_get_activity_led ());
1021
1024
}
1022
1025
strcpy (option -> value , rg_storage_get_activity_led () ? "On " : "Off" );
@@ -1027,10 +1030,12 @@ static rg_gui_event_t font_type_cb(rg_gui_option_t *option, rg_gui_event_t event
1027
1030
{
1028
1031
if (event == RG_DIALOG_PREV || event == RG_DIALOG_NEXT )
1029
1032
{
1030
- if (event == RG_DIALOG_PREV && !rg_gui_set_font_type (gui .style .font_type - 1 )) {
1033
+ if (event == RG_DIALOG_PREV && !rg_gui_set_font_type (gui .style .font_type - 1 ))
1034
+ {
1031
1035
rg_gui_set_font_type (0 );
1032
1036
}
1033
- if (event == RG_DIALOG_NEXT && !rg_gui_set_font_type (gui .style .font_type + 1 )) {
1037
+ if (event == RG_DIALOG_NEXT && !rg_gui_set_font_type (gui .style .font_type + 1 ))
1038
+ {
1034
1039
rg_gui_set_font_type (0 );
1035
1040
}
1036
1041
}
@@ -1093,26 +1098,71 @@ void rg_gui_options_menu(void)
1093
1098
rg_audio_set_mute (false);
1094
1099
}
1095
1100
1096
- void rg_gui_about_menu ( const rg_gui_option_t * extra_options )
1101
+ void rg_gui_sysinfo_menu ( void )
1097
1102
{
1098
- char build_ver [32 ], build_date [32 ], build_user [32 ], network_str [64 ];
1103
+ char screen_str [32 ], network_str [64 ], memory_str [32 ];
1104
+ char storage_str [32 ], localtime_str [32 ], uptime [32 ];
1099
1105
1100
1106
const rg_gui_option_t options [] = {
1101
- {0 , "Version" , build_ver , 1 , NULL },
1102
- {0 , "Date" , build_date , 1 , NULL },
1103
- {0 , "By" , build_user , 1 , NULL },
1104
- #ifdef RG_ENABLE_NETWORKING
1107
+ {0 , "Console" , RG_TARGET_NAME , 1 , NULL },
1108
+ {0 , "Screen" , screen_str , 1 , NULL },
1109
+ {0 , "Memory" , memory_str , 1 , NULL },
1105
1110
{0 , "Network" , network_str , 1 , NULL },
1106
- #endif
1111
+ // {0, "Storage", storage_str, 1, NULL},
1112
+ {0 , "RTC" , localtime_str , 1 , NULL },
1113
+ {0 , "Uptime" , uptime , 1 , NULL },
1107
1114
RG_DIALOG_SEPARATOR ,
1108
- {1000 , "Reboot to firmware" , NULL , 1 , NULL },
1109
- {2000 , "Reset settings" , NULL , 1 , NULL },
1110
- {3000 , "Clear cache" , NULL , 1 , NULL },
1111
- {4000 , "Debug" , NULL , 1 , NULL },
1112
- {0000 , "Close" , NULL , 1 , NULL },
1115
+ {0 , "Close" , NULL , 1 , NULL },
1113
1116
RG_DIALOG_CHOICE_LAST
1114
1117
};
1115
1118
1119
+ const rg_display_t * display = rg_display_get_info ();
1120
+ rg_stats_t stats = rg_system_get_counters ();
1121
+ time_t now = time (NULL );
1122
+
1123
+ snprintf (screen_str , 32 , "%dx%d (%d)" , display -> screen .width , display -> screen .height , display -> screen .format );
1124
+ snprintf (memory_str , 32 , "%dKB + %dKB" , stats .totalMemoryInt / 1024 , stats .totalMemoryExt / 1024 );
1125
+ snprintf (uptime , 32 , "%ds" , (int )(rg_system_timer () / 1000000 ));
1126
+ snprintf (storage_str , 32 , "%s" , "N/A" );
1127
+ strftime (localtime_str , 32 , "%F %T" , localtime (& now ));
1128
+
1129
+ #ifdef RG_ENABLE_NETWORKING
1130
+ rg_network_t net = rg_network_get_info ();
1131
+ if (net .state == RG_NETWORK_CONNECTED )
1132
+ snprintf (network_str , 64 , "%s\n%s" , net .name , net .ip_addr );
1133
+ else if (net .state == RG_NETWORK_CONNECTING )
1134
+ snprintf (network_str , 64 , "%s\n%s" , net .name , "connecting..." );
1135
+ else if (net .name [0 ])
1136
+ snprintf (network_str , 64 , "%s\n%s" , net .name , "disconnected" );
1137
+ else
1138
+ snprintf (network_str , 64 , "%s" , "disconnected" );
1139
+ #else
1140
+ strcpy (network_str , "No adapter" );
1141
+ #endif
1142
+
1143
+ rg_gui_dialog ("System Information" , options , -1 );
1144
+ }
1145
+
1146
+ void rg_gui_about_menu (const rg_gui_option_t * extra_options )
1147
+ {
1148
+ char build_ver [32 ], build_date [32 ], build_user [32 ];
1149
+
1150
+ size_t extra_options_count = get_dialog_items_count (extra_options );
1151
+
1152
+ rg_gui_option_t options [16 + extra_options_count ];
1153
+ rg_gui_option_t * opt = & options [0 ];
1154
+
1155
+ * opt ++ = (rg_gui_option_t ){0 , "Version" , build_ver , 1 , NULL };
1156
+ * opt ++ = (rg_gui_option_t ){0 , "Date" , build_date , 1 , NULL };
1157
+ * opt ++ = (rg_gui_option_t ){0 , "By" , build_user , 1 , NULL };
1158
+ * opt ++ = (rg_gui_option_t )RG_DIALOG_SEPARATOR ;
1159
+ * opt ++ = (rg_gui_option_t ){1000 , "System information" , NULL , 1 , NULL };
1160
+ for (size_t i = 0 ; i < extra_options_count ; i ++ )
1161
+ * opt ++ = extra_options [i ];
1162
+ * opt ++ = (rg_gui_option_t ){2000 , "Reset settings" , NULL , 1 , NULL };
1163
+ * opt ++ = (rg_gui_option_t ){3000 , "Debug" , NULL , 1 , NULL };
1164
+ * opt ++ = (rg_gui_option_t )RG_DIALOG_CHOICE_LAST ;
1165
+
1116
1166
const rg_app_t * app = rg_system_get_app ();
1117
1167
1118
1168
snprintf (build_ver , 30 , "%s" , app -> version );
@@ -1129,39 +1179,28 @@ void rg_gui_about_menu(const rg_gui_option_t *extra_options)
1129
1179
strcat (build_ver , ")" );
1130
1180
}
1131
1181
1132
- rg_network_t net = rg_network_get_info ();
1133
- if (net .state == RG_NETWORK_CONNECTED )
1134
- snprintf (network_str , 64 , "%s\n%s" , net .name , net .ip_addr );
1135
- else if (net .state == RG_NETWORK_CONNECTING )
1136
- snprintf (network_str , 64 , "%s\n%s" , net .name , "connecting..." );
1137
- else if (net .name [0 ])
1138
- snprintf (network_str , 64 , "%s\n%s" , net .name , "disconnected" );
1139
- else
1140
- snprintf (network_str , 64 , "%s" , "disconnected" );
1141
-
1142
- int sel = rg_gui_dialog ("Retro-Go" , options , -1 );
1143
-
1144
- rg_settings_commit ();
1145
- rg_system_save_time ();
1146
-
1147
- switch (sel )
1182
+ while (true)
1148
1183
{
1149
- case 1000 :
1150
- rg_system_switch_app (RG_APP_FACTORY , RG_APP_FACTORY , 0 , 0 );
1151
- break ;
1152
- case 2000 :
1153
- if (rg_gui_confirm ("Reset all settings?" , NULL , false)) {
1154
- rg_settings_reset ();
1155
- rg_system_restart ();
1156
- }
1157
- break ;
1158
- case 3000 :
1159
- rg_storage_delete (RG_BASE_PATH_CACHE );
1160
- rg_system_restart ();
1161
- break ;
1162
- case 4000 :
1163
- rg_gui_debug_menu (NULL );
1164
- break ;
1184
+ switch (rg_gui_dialog ("Retro-Go" , options , 4 ))
1185
+ {
1186
+ case 1000 :
1187
+ rg_gui_sysinfo_menu ();
1188
+ break ;
1189
+ case 2000 :
1190
+ if (rg_gui_confirm ("Reset all settings?" , NULL , false)) {
1191
+ rg_storage_delete (RG_BASE_PATH_CACHE );
1192
+ rg_settings_reset ();
1193
+ rg_system_restart ();
1194
+ return ;
1195
+ }
1196
+ break ;
1197
+ case 3000 :
1198
+ rg_gui_debug_menu (NULL );
1199
+ break ;
1200
+ default :
1201
+ return ;
1202
+ }
1203
+ rg_system_event (RG_EVENT_REDRAW , NULL );
1165
1204
}
1166
1205
}
1167
1206
@@ -1182,10 +1221,12 @@ void rg_gui_debug_menu(const rg_gui_option_t *extra_options)
1182
1221
{0 , "Timezone " , timezone , 1 , NULL },
1183
1222
{0 , "Uptime " , uptime , 1 , NULL },
1184
1223
RG_DIALOG_SEPARATOR ,
1185
- {1000 , "Save screenshot" , NULL , 1 , NULL },
1186
- {2000 , "Save trace" , NULL , 1 , NULL },
1187
- {3000 , "Cheats" , NULL , 1 , NULL },
1188
- {4000 , "Crash" , NULL , 1 , NULL },
1224
+ {1 , "Reboot to firmware" , NULL , 1 , NULL },
1225
+ {2 , "Clear cache" , NULL , 1 , NULL },
1226
+ {3 , "Save screenshot" , NULL , 1 , NULL },
1227
+ {4 , "Save trace" , NULL , 1 , NULL },
1228
+ {5 , "Cheats" , NULL , 1 , NULL },
1229
+ {6 , "Crash" , NULL , 1 , NULL },
1189
1230
RG_DIALOG_CHOICE_LAST
1190
1231
};
1191
1232
@@ -1205,13 +1246,22 @@ void rg_gui_debug_menu(const rg_gui_option_t *extra_options)
1205
1246
1206
1247
switch (rg_gui_dialog ("Debugging" , options , 0 ))
1207
1248
{
1208
- case 1000 :
1249
+ case 1 :
1250
+ rg_system_switch_app (RG_APP_FACTORY , RG_APP_FACTORY , 0 , 0 );
1251
+ break ;
1252
+ case 2 :
1253
+ rg_storage_delete (RG_BASE_PATH_CACHE );
1254
+ rg_system_restart ();
1255
+ break ;
1256
+ case 3 :
1209
1257
rg_emu_screenshot (RG_STORAGE_ROOT "/screenshot.png" , 0 , 0 );
1210
1258
break ;
1211
- case 2000 :
1259
+ case 4 :
1212
1260
rg_system_save_trace (RG_STORAGE_ROOT "/trace.txt" , 0 );
1213
1261
break ;
1214
- case 4000 :
1262
+ case 5 :
1263
+ break ;
1264
+ case 6 :
1215
1265
RG_PANIC ("Crash test!" );
1216
1266
break ;
1217
1267
}
0 commit comments