diff options
Diffstat (limited to 'opgui.c')
-rw-r--r-- | opgui.c | 50 |
1 files changed, 37 insertions, 13 deletions
@@ -252,7 +252,7 @@ void info(GtkWidget *widget,GtkWidget *window) //"authors","Alberto Maccioni",NULL, "comments", "A graphical interface for the Open Programmer", "copyright", - "Copyright (C) Alberto Maccioni 2009-2022\n\n" + "Copyright (C) Alberto Maccioni 2009-2023\n\n" "This program is free software; you can \n" "redistribute it and/or modify it under \n" "the terms of the GNU General Public License \n" @@ -649,8 +649,6 @@ void WriteATfuseLowLF(GtkWidget *widget,GtkWidget *window){ void onDevSel_Changed(GtkWidget *widget,GtkWidget *window) { struct DevInfo info; - char str2[256],str3[64],strF[32]; - double x; GetSelectedDevice(); if (strlen(dev) == 0) return; // None selected info=GetDevInfo(dev); @@ -764,6 +762,16 @@ int sortIterCompareFunc(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpo } return ret; } + + +#ifndef strupr +char* strupr( char* s ){ + char* p = s; + while (*p = toupper( *p )) p++; + return s; +} +#endif + /// ///Add devices to the device ListStore (which may not have been created) ///groupFilter: add devices in this group (-1 for all) @@ -790,6 +798,8 @@ void AddDevices(enum group_t groupFilter, const char *textFilter) { else gtk_list_store_clear(devStore); int i,j=0; char *devices=0,*tok; + char textFilterU[32]; + strupr(strncpy(textFilterU,textFilter,32)); for(i=0;i<NDEVLIST;i++) { if(devices) free(devices); devices=malloc(strlen(DEVLIST[i].device)+1); @@ -800,7 +810,7 @@ void AddDevices(enum group_t groupFilter, const char *textFilter) { //info.device=malloc(strlen(tok)+1); //strcpy(info.device,tok); info.group=nameToGroup(tok); - if(info.group!=-1&&(!textFilter || strlen(textFilter) == 0 || strstr(tok, textFilter)) && + if(info.group!=-1&&(!textFilter || strlen(textFilter) == 0 || strstr(strupr(tok), textFilterU)) && (groupFilter == -1 || info.group == groupFilter)) { gtk_list_store_insert_with_values(devStore, NULL, -1, DEVICE_ID_COLUMN, j++, @@ -856,8 +866,6 @@ void IOchanged(GtkWidget *widget,GtkWidget *window) int i,j=0; int trisa=1,trisb=0,trisc=0x30,latac=0,latb=0; int port=0,z; - //char str[128]="IO:"; - char s2[64]; str[0]=0; for(i=0;i<sizeof(ioButtons)/sizeof(ioButtons[0]);i++){ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ioButtons[i].r_0))){ @@ -1375,7 +1383,11 @@ void ProgID() else if(HwID==2) PrintMessage(" (18F2450)\r\n\r\n"); else if(HwID==3) PrintMessage(" (18F2458/2553)\r\n\r\n"); else if(HwID==4) PrintMessage(" (18F25K50)\r\n\r\n"); + else if(HwID==5) PrintMessage(" (18F25K50 all-in-one variant)\r\n\r\n"); else PrintMessage(" (?)\r\n\r\n"); + // Disable 3.3V check and hide the option for all-in-one board. Enable and show for others + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b_V33check), HwID==5 ? TRUE : FALSE); + gtk_widget_set_visible(GTK_WIDGET(b_V33check), HwID==5 ? FALSE : TRUE); } /// ///Check if a 3.3V regulator is present @@ -1418,13 +1430,24 @@ int CheckS1() int i,j=0; bufferU[j++]=READ_RAM; bufferU[j++]=0x0F; + if (HwID==5) { //all-in-one board + bufferU[j++]=0x80; // Read PORTA + } + else { //std board bufferU[j++]=0x84; //READ PORTE + } bufferU[j++]=FLUSH; for(;j<DIMBUF;j++) bufferU[j]=0x0; PacketIO(5); for(j=0;j<DIMBUF-3&&bufferI[j]!=READ_RAM;j++); + if (HwID==5) { //all-in-one board + i=bufferI[j+3]&0x80; //i=A7 + return i?1:0; //A7=1 when switch pressed (active high) + } + else { //std board i=bufferI[j+3]&0x8; //i=E3 - return i?0:1; //S1 open -> E3=1 + return i?0:1; //S1 open -> E3=1 (active low) + } } /// ///Execute hardware test @@ -1679,7 +1702,6 @@ void PacketIO(double delay){ int main( int argc, char *argv[]) { //int langID=GetUserDefaultLangID(); - DWORD t0=GetTickCount(); FILE *f; gchar *homedir,*config_dir,*fname=0; char lang[32]=""; @@ -1724,7 +1746,6 @@ int main( int argc, char *argv[]) opterr = 0; int option_index = 0; int help=0,command=0,i,j; - char c; struct option long_options[] = { {"?", no_argument, &help, 1}, @@ -1747,7 +1768,7 @@ int main( int argc, char *argv[]) char* langid=0; i=0; if(lang[0]){ //explicit language selection - if(lang[0]=='i'&&langid[1]=='t'){ //built-in + if(lang[0]=='i'&&lang[1]=='t'){ //built-in strings=strings_it; i=1; } @@ -1852,7 +1873,8 @@ int main( int argc, char *argv[]) dataBuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(data)); //------device tab------------- gtk_label_set_text(GTK_LABEL(GTK_WIDGET(gtk_builder_get_object(builder,"DEVICE_L"))),strings[I_Dev]); //"Device" - gtk_label_set_text(GTK_LABEL(GTK_WIDGET(gtk_builder_get_object(builder,"TYPE_L"))),strings[I_Type]); //"Type" + gtk_label_set_text(GTK_LABEL(GTK_WIDGET(gtk_builder_get_object(builder,"TYPE_L"))),strings[I_TypeFilt]); //"Filter by type" + gtk_label_set_text(GTK_LABEL(GTK_WIDGET(gtk_builder_get_object(builder,"DEV_SRC_L"))),strings[I_Filt]); //"Filter" devTypeCombo=GTK_WIDGET(gtk_builder_get_object(builder,"TYPE_C")); g_signal_connect(G_OBJECT(devTypeCombo),"changed",G_CALLBACK(FilterDevType),NULL); devFiltEntry=GTK_WIDGET(gtk_builder_get_object(builder,"DEV_SRC_E")); @@ -1861,7 +1883,9 @@ int main( int argc, char *argv[]) gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(devTree), -1, strings[I_Dev], gtk_cell_renderer_text_new(), "text", DEVICE_NAME_COLUMN, NULL); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(devTree), - -1, strings[I_Type], gtk_cell_renderer_text_new(), "text", DEVICE_GROUP_COLUMN, NULL); + -1, strings[I_Type], gtk_cell_renderer_text_new(), "text", DEVICE_GROUP_COLUMN, NULL); //"Type" + gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(devTree),0),125); + gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(devTree),1),125); // AddDevices() gets called when an entry in devTypeCombo is selected during init devFrame = GTK_WIDGET(gtk_builder_get_object(builder,"DEVICE_NAME")); devinfo = GTK_WIDGET(gtk_builder_get_object(builder,"DEV_INFO")); @@ -2291,7 +2315,7 @@ int FindDevice(int vid,int pid){ typedef BOOLEAN (__stdcall*SETREPORT) (IN HANDLE HidDeviceObject, IN PVOID ReportBuffer, IN ULONG ReportBufferLength); typedef BOOLEAN (__stdcall*GETMANUFACTURERSTRING) (IN HANDLE HidDeviceObject, OUT PVOID ReportBuffer, IN ULONG ReportBufferLength); typedef BOOLEAN (__stdcall*GETPRODUCTSTRING) (IN HANDLE HidDeviceObject, OUT PVOID ReportBuffer, IN ULONG ReportBufferLength); - typedef BOOLEAN (__stdcall*GETINDEXEDSTRING) (IN HANDLE HidDeviceObject, IN ULONG StringIndex, OUT PVOID ReportBuffer, IN ULONG ReportBufferLength); +// typedef BOOLEAN (__stdcall*GETINDEXEDSTRING) (IN HANDLE HidDeviceObject, IN ULONG StringIndex, OUT PVOID ReportBuffer, IN ULONG ReportBufferLength); HIDD_ATTRIBUTES Attributes; SP_DEVICE_INTERFACE_DATA devInfoData; int LastDevice = FALSE; |