From b72469c072514317602d1345b3d19e2375a90ab5 Mon Sep 17 00:00:00 2001 From: "Michael J. Chudobiak" Date: Fri, 24 Aug 2012 13:31:13 -0400 Subject: added diag:eprom:reset --- flash.c | 7 +- flash.h | 3 +- globals.h | 2 +- instr-daemon.c | 2 +- parser.c | 198 +++++++++++++++++++++++++++++++++------------------------ 5 files changed, 123 insertions(+), 89 deletions(-) diff --git a/flash.c b/flash.c index 48e180e..a403f67 100644 --- a/flash.c +++ b/flash.c @@ -12,6 +12,7 @@ #include #include #include +#include #define MAINFILE "/root/flash.copy" #define BACKUPFILE "/root/flash.bup" @@ -757,13 +758,15 @@ static void initFlashValues(FlashStruct *mem) } -void initFlash(FlashStruct *mem, int starting_location) +void initFlash(FlashStruct *mem, gboolean reset_to_defaults, int starting_location) { int read_size = readUserBlock(mem); if ( (read_size == 0) || (mem->fully_programmed == Not_Programmed) || - ((starting_location > 0) && (starting_location < sizeof(*mem))) ) { + (reset_to_defaults && + (starting_location >= 0) && + (starting_location < sizeof(*mem))) ) { g_print_debug ("initializing flash memory\n"); LCD_write(0,0,"Initialize Flash Memory ..."); diff --git a/flash.h b/flash.h index 183e932..d4658ee 100644 --- a/flash.h +++ b/flash.h @@ -2,8 +2,9 @@ #define FLASH_H_ #include "globals.h" +#include -void initFlash(FlashStruct *mem, int starting_location); +void initFlash(FlashStruct *mem, gboolean reset_to_defaults, int starting_location); int readUserBlock(FlashStruct *mem); void writeUserBlock(FlashStruct *mem, int addr, int numbytes); diff --git a/globals.h b/globals.h index 5b60671..8e7708b 100644 --- a/globals.h +++ b/globals.h @@ -384,7 +384,7 @@ typedef struct { short telnet_logon_timeout; /* 164 - timeout in seconds */ - short overwrite_flash_loc; /* 166 */ + short spare6; /* 166 */ float spare5; /* 168 */ short channels; /* 172 */ diff --git a/instr-daemon.c b/instr-daemon.c index 3bc4a57..7ed6808 100644 --- a/instr-daemon.c +++ b/instr-daemon.c @@ -235,7 +235,7 @@ int main(int argc, char **argv) LCD_initialize(); LCD_write(0,0,"Starting..."); - initFlash (&globals.Flash, 0); + initFlash (&globals.Flash, FALSE, 0); gchar *message = g_strdup_printf ("%s, S/N %s", globals.Flash.model_num, globals.Flash.serial_num); LCD_display_extended_message (message, 0); diff --git a/parser.c b/parser.c index 3dba1ee..be84e8f 100644 --- a/parser.c +++ b/parser.c @@ -115,6 +115,7 @@ static int Go_curr_slew_98(gchar** response, int channel, char *parameter,char * static int Go_avrq_ampl(gchar** response, int channel, char *parameter,char *units,int command_type); static int Go_cal_100(gchar** response, int channel, char *parameter,char *units,int command_type); static int Go_cal_interval_101(gchar** response, int channel, char *parameter,char *units,int command_type); +static int Go_eprom_reset_102(gchar** response, int channel, char *parameter,char *units,int command_type); static int Parser_id_word(char *id_me, int *channel, int *with_id_code) { @@ -346,9 +347,9 @@ static int Parser_id_word(char *id_me, int *channel, int *with_id_code) id_code = 106; } else if (!strcmp(id_me,"all") ) { id_code = 107; - } - - else { + } else if (!strcmp(id_me,"reset") || !strcmp(id_me,"res")) { + id_code = 108; + } else { id_code = 9999; } @@ -378,101 +379,101 @@ static int Parser_find_commands(int commands[], int command_depth) {6}, /* opc - sentence 5 */ {8}, /* rst - sentence 6 */ {9}, /* sre - sentence 7 */ - {10}, /* stb - sentence 8 */ - {11}, /* tst - sentence 9 */ - {12}, /* wai - sentence 10 */ - {13,14,81|optional}, /* syst:err:next - 11 */ - {13,15}, /* syst:vers - 12 */ - {16,17,18|optional}, /* stat:oper:event - 13 */ - {16,17,19}, /* stat:oper:cond - 14 */ - {16,17,20}, /* stat:oper:enable - 15 */ - {16,21,18|optional}, /* stat:ques:event - 16 */ - {16,21,19}, /* stat:ques:cond - 17 */ - {16,21,20}, /* stat:ques:enable - 18 */ - {16,22}, /* stat:preset - 19 */ - {24,25}, /* output:impedance - 20 */ - {24,26,27}, /* output:prot:tripped - 21 */ - {28|optional,29,30|optional,31|optional,32|optional}, /* sour:curr:lev:imm:ampl - 22 */ - {28|optional,29,30|optional,31|optional,33}, /* sour:curr:lev:imm:offset - 23 - not used */ - {28|optional,29,30|optional,31|optional,34}, /* sour:curr:lev:imm:high - 24 - not used */ - {28|optional,29,30|optional,31|optional,35}, /* sour:curr:lev:imm:low - 25 */ - {28|optional,36,30|optional,31|optional,32|optional}, /* sour:volt:lev:imm:ampl - 26 */ - {28|optional,36,30|optional,31|optional,33}, /* sour:volt:lev:imm:offset - 27 - not used */ - {28|optional,36,30|optional,31|optional,34}, /* sour:volt:lev:imm:high - 28 - not used */ - {28|optional,36,30|optional,31|optional,35}, /* sour:volt:lev:imm:low - 29 */ - {28|optional,29,26,27}, /* sour:curr:prot:tripped? - 30 */ - {28|optional,36,26,27}, /* sour:volt:prot:tripped? - 31 */ - {28|optional,37,49|optional}, /* sour:freq:cw - 32 */ - {28|optional,37,50|optional}, /* sour:freq:fixed - 33 */ - {28|optional,38,39|optional}, /* sour:func:shape - 34 */ - {28|optional,40,41}, /* sour:puls:per - 35 */ - {28|optional,40,42}, /* sour:puls:width - 36 */ - {28|optional,40,43}, /* sour:puls:dcyc - 37 */ - {28|optional,40,44}, /* sour:puls:hold - 38 */ - {28|optional,40,45}, /* sour:puls:delay - 39 */ - {28|optional,40,46,16|optional}, /* sour:puls:doub:state - 40 */ - {28|optional,40,46,45}, /* sour:puls:doub:delay - 41 */ - {28|optional,40,47}, /* sour:puls:pol - 42 */ - {13,48,31|optional}, /* syst:beep:imm - 43 - not used */ - {52,31|optional,53}, /* init:imm:cont - 44 - not used */ - {51}, /* abort - 45 - not used */ - {54,31|optional,28}, /* trig:imm:sour - 46 */ - {23,57,58}, /* diag:eprom:string - 47 */ - {23,57,55}, /* diag:eprom:int - 48 */ - {23,57,59,60}, /* diag:eprom:bit:set - 49 - not used */ - {23,57,59,61}, /* diag:eprom:bit:clear - 50 - not used */ - {23,57,56}, /* diag:eprom:float - 51 */ - {23,62}, /* diag:shiftreg - 52 */ - {63}, /* *rcl - 53 */ - {64}, /* *sav - 54 */ - {24,16|optional}, /* output:state - 55 */ - {28|optional,40,65,75}, /* sour:puls:gate:type - 56 */ - {66}, /* local (RS232 mode only) - 57 */ - {23,67,45}, /* diag:test:delay - 58 */ - {13,68,70,69}, /* syst:comm:gpib:addr - 59 */ + {10}, /* stb - sentence 8 */ + {11}, /* tst - sentence 9 */ + {12}, /* wai - sentence 10 */ + {13,14,81|optional}, /* syst:err:next - 11 */ + {13,15}, /* syst:vers - 12 */ + {16,17,18|optional}, /* stat:oper:event - 13 */ + {16,17,19}, /* stat:oper:cond - 14 */ + {16,17,20}, /* stat:oper:enable - 15 */ + {16,21,18|optional}, /* stat:ques:event - 16 */ + {16,21,19}, /* stat:ques:cond - 17 */ + {16,21,20}, /* stat:ques:enable - 18 */ + {16,22}, /* stat:preset - 19 */ + {24,25}, /* output:impedance - 20 */ + {24,26,27}, /* output:prot:tripped - 21 */ + {28|optional,29,30|optional,31|optional,32|optional}, /* sour:curr:lev:imm:ampl - 22 */ + {28|optional,29,30|optional,31|optional,33}, /* sour:curr:lev:imm:offset - 23 - not used */ + {28|optional,29,30|optional,31|optional,34}, /* sour:curr:lev:imm:high - 24 - not used */ + {28|optional,29,30|optional,31|optional,35}, /* sour:curr:lev:imm:low - 25 */ + {28|optional,36,30|optional,31|optional,32|optional}, /* sour:volt:lev:imm:ampl - 26 */ + {28|optional,36,30|optional,31|optional,33}, /* sour:volt:lev:imm:offset - 27 - not used */ + {28|optional,36,30|optional,31|optional,34}, /* sour:volt:lev:imm:high - 28 - not used */ + {28|optional,36,30|optional,31|optional,35}, /* sour:volt:lev:imm:low - 29 */ + {28|optional,29,26,27}, /* sour:curr:prot:tripped? - 30 */ + {28|optional,36,26,27}, /* sour:volt:prot:tripped? - 31 */ + {28|optional,37,49|optional}, /* sour:freq:cw - 32 */ + {28|optional,37,50|optional}, /* sour:freq:fixed - 33 */ + {28|optional,38,39|optional}, /* sour:func:shape - 34 */ + {28|optional,40,41}, /* sour:puls:per - 35 */ + {28|optional,40,42}, /* sour:puls:width - 36 */ + {28|optional,40,43}, /* sour:puls:dcyc - 37 */ + {28|optional,40,44}, /* sour:puls:hold - 38 */ + {28|optional,40,45}, /* sour:puls:delay - 39 */ + {28|optional,40,46,16|optional}, /* sour:puls:doub:state - 40 */ + {28|optional,40,46,45}, /* sour:puls:doub:delay - 41 */ + {28|optional,40,47}, /* sour:puls:pol - 42 */ + {13,48,31|optional}, /* syst:beep:imm - 43 - not used */ + {52,31|optional,53}, /* init:imm:cont - 44 - not used */ + {51}, /* abort - 45 - not used */ + {54,31|optional,28}, /* trig:imm:sour - 46 */ + {23,57,58}, /* diag:eprom:string - 47 */ + {23,57,55}, /* diag:eprom:int - 48 */ + {23,57,59,60}, /* diag:eprom:bit:set - 49 - not used */ + {23,57,59,61}, /* diag:eprom:bit:clear - 50 - not used */ + {23,57,56}, /* diag:eprom:float - 51 */ + {23,62}, /* diag:shiftreg - 52 */ + {63}, /* *rcl - 53 */ + {64}, /* *sav - 54 */ + {24,16|optional}, /* output:state - 55 */ + {28|optional,40,65,75}, /* sour:puls:gate:type - 56 */ + {66}, /* local (RS232 mode only) - 57 */ + {23,67,45}, /* diag:test:delay - 58 */ + {13,68,70,69}, /* syst:comm:gpib:addr - 59 */ {13,68,71,72|optional,73}, /* syst:comm:ser:rec:baud - 60 */ {13,68,71,72|optional,74,75|optional}, /* syst:comm:ser:rec:parity - 61 */ {13,68,71,72|optional,76}, /* syst:comm:ser:rec:bits - 62 */ {13,68,71,72|optional,77}, /* syst:comm:ser:rec:sbits - 63 */ - {13,68,71,80,79}, /* syst:comm:ser:control:rts - 64 */ + {13,68,71,80,79}, /* syst:comm:ser:control:rts - 64 */ {13,68,71,72|optional,78}, /* syst:comm:ser:rec:echo - 65 */ - {13,14,82}, /* syst:err:count - 66 */ + {13,14,82}, /* syst:err:count - 66 */ {28|optional,40,65,30}, /* sour:puls:gate:level - 67 */ - {24,85}, /* output:load - 68 */ - {86,32}, /* meas:ampl? - 69 */ - {23,57,87}, /* diag:eprom:char - 70 */ - {23,88}, /* diag:calib - 71 */ + {24,85}, /* output:load - 68 */ + {86,32}, /* meas:ampl? - 69 */ + {23,57,87}, /* diag:eprom:char - 70 */ + {23,88}, /* diag:calib - 71 */ {23,32,88,95|optional}, /* diag:ampl:calib:scale - 72 */ {23,89,88,95|optional}, /* diag:mon:calib:scale - 73 */ - {23,89,90}, /* diag:mon:step - 74 */ - {24,75}, /* output:type - 75 */ + {23,89,90}, /* diag:mon:step - 74 */ + {24,75}, /* output:type - 75 */ {23,33,88,95|optional}, /* diag:offset:calib:scale - 76 */ {23,40,42,88,94}, /* diag:pulse:width:calib:shift - 77 */ - {91,92}, /* route:close - 78 */ - {23,40,42,88,93}, /* diag:pulse:width:calib:point - 79 */ - {23,40,45,88,93}, /* diag:pulse:delay:calib:point - 80 */ - {23,40,41,88,93}, /* diag:pulse:period:calib:point - 81 */ - {23,40,45,88,94}, /* diag:pulse:delay:calib:shift - 82 */ - {23,32,88,93}, /* diag:ampl:calib:point - 83 */ - {23,33,88,93}, /* diag:offset:calib:point - 84 */ - {23,33,96,93}, /* diag:offset:null:point - 85 */ - {23,57,97}, /* diag:eprom:size - 86 */ - {83,84}, /* display:brightness - 87 */ - {28|optional,40,82}, /* sour:puls:count - 88 */ - {28|optional,40,98}, /* sour:puls:separation - 89 */ - {23,40,98,88,93}, /* diag:pulse:separation:calib:point - 90 */ - {13,68,99}, /* system:comm:network - 91 */ - {13,100,101}, /* system:password:new - 92 */ - {23,57,102}, /* diag:eprom:suspend - 93 */ - {28|optional,40,103,104|optional}, /* sour:puls:transition:leading - 94 */ + {91,92}, /* route:close - 78 */ + {23,40,42,88,93}, /* diag:pulse:width:calib:point - 79 */ + {23,40,45,88,93}, /* diag:pulse:delay:calib:point - 80 */ + {23,40,41,88,93}, /* diag:pulse:period:calib:point - 81 */ + {23,40,45,88,94}, /* diag:pulse:delay:calib:shift - 82 */ + {23,32,88,93}, /* diag:ampl:calib:point - 83 */ + {23,33,88,93}, /* diag:offset:calib:point - 84 */ + {23,33,96,93}, /* diag:offset:null:point - 85 */ + {23,57,97}, /* diag:eprom:size - 86 */ + {83,84}, /* display:brightness - 87 */ + {28|optional,40,82}, /* sour:puls:count - 88 */ + {28|optional,40,98}, /* sour:puls:separation - 89 */ + {23,40,98,88,93}, /* diag:pulse:separation:calib:point - 90 */ + {13,68,99}, /* system:comm:network - 91 */ + {13,100,101}, /* system:password:new - 92 */ + {23,57,102}, /* diag:eprom:suspend - 93 */ + {28|optional,40,103,104|optional}, /* sour:puls:transition:leading - 94 */ {23,40,103,88,93}, /* diag:pulse:transition:calib:point - 95 */ {28|optional,29,105,32|optional}, /* sour:curr:limit:ampl - 96 */ {23,24,85,88,93}, /* diag:output:load:calib:point - 97 */ {28|optional,29,106}, /* sour:curr:slew - 98 */ - {23,106,88,93}, /* diag:slew:calib:point - 99 */ - {88,107|optional}, /* calibration:all - 100 */ - {88,37} /* calibration:frequency - 101 */ - + {23,106,88,93}, /* diag:slew:calib:point - 99 */ + {88,107|optional}, /* calibration:all - 100 */ + {88,37}, /* calibration:frequency - 101 */ + {23,57,108} /* diag:eprom:reset - 102 */ }; @@ -1046,6 +1047,9 @@ void Parser_main (char *raw_in, int interactive_terminal, void(*cbfunc)(gpointer case 101: error_num=Go_cal_interval_101(&response,channel,parameter,units,command_type); break; + case 102: + error_num=Go_eprom_reset_102(&response,channel,parameter,units,command_type); + break; case 9999: // was only whitespace, ignore @@ -3716,6 +3720,32 @@ static int Go_eprom_sus_93(gchar** response, int channel, char *parameter,int co } +static int Go_eprom_reset_102(gchar** response, int channel, char *parameter,char *units,int command_type) +{ + int status, value; + + if (channel) { + return InvalidChannel; + } + + switch (command_type) { + case command_withparam: + if (status = process_int_range (parameter, &value, 0, sizeof(globals.Flash)-1)) { + return status; + } + initFlash(&globals.Flash, TRUE, value); + Main_Rst(); + return OK; + break; + + default: + return SyntaxError; + break; + } + +} + + static int Go_rise_time_94(gchar** response, int channel, char *parameter,char *units,int command_type) { float new_rise_time; -- cgit