summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flash.c7
-rw-r--r--flash.h3
-rw-r--r--globals.h2
-rw-r--r--instr-daemon.c2
-rw-r--r--parser.c198
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 <sys/sendfile.h>
#include <sys/stat.h>
#include <mhash.h>
+#include <glib.h>
#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 <glib.h>
-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;