diff options
-rw-r--r-- | device-functions.c | 31 | ||||
-rw-r--r-- | flash.c | 13 |
2 files changed, 40 insertions, 4 deletions
diff --git a/device-functions.c b/device-functions.c index e8a31ec..6b53063 100644 --- a/device-functions.c +++ b/device-functions.c @@ -3094,12 +3094,14 @@ int Set_VI_Add_Cal(int parameter,int channel,float cal_point) float temp_y_float1[points_in_range+1]; float temp_x_float1[points_in_range+1]; /* float copy of short, for calculations */ int temp_x_short1[points_in_range+1]; + int temp_x_short2[points_in_range+1]; int index,actual_pol; float *pointer_y_float1; short *pointer_x_short1; + short *pointer_x_short2; - int eprom_loc,size_of_y_float1,size_of_x_short1; + int eprom_loc,size_of_y_float1,size_of_x_short1,size_of_x_short2; int true_channel; @@ -3108,6 +3110,7 @@ int Set_VI_Add_Cal(int parameter,int channel,float cal_point) range=polarity=0; max_points=points_in_range; + pointer_x_short2=0; abs_cal_point=cal_point; @@ -3117,8 +3120,10 @@ int Set_VI_Add_Cal(int parameter,int channel,float cal_point) max_ranges=ampl_ranges; pointer_x_short1=&globals.Flash.ampl_dacval[0][0][0][0]; + pointer_x_short2=&globals.Flash.distort_dacval[0][0][0][0]; pointer_y_float1=&globals.Flash.ampl_pwl[0][0][0][0]; size_of_x_short1=sizeof(globals.Flash.ampl_dacval); + size_of_x_short2=sizeof(globals.Flash.distort_dacval); size_of_y_float1=sizeof(globals.Flash.ampl_pwl); Set_VI_Control(pwl_ampl_values,channel,globals.ChannelState[channel].amplitude,&point_found, @@ -3217,6 +3222,7 @@ int Set_VI_Add_Cal(int parameter,int channel,float cal_point) temp_y_float1[max_points]=0.0; /* Adding a cal point may temporarily result in 11 data points. */ temp_x_float1[max_points]=0.0; /* One is eventually discarded. */ temp_x_short1[max_points]=0; + temp_x_short2[max_points]=0; index=true_channel*max_ranges*max_polarity*max_points @@ -3228,6 +3234,9 @@ int Set_VI_Add_Cal(int parameter,int channel,float cal_point) for (i=0; i<max_points; i++) { temp_y_float1[i]=pointer_y_float1[index+i]; /* work on this data */ temp_x_short1[i]=pointer_x_short1[index+i]; + if (pointer_x_short2) { + temp_x_short2[i]=pointer_x_short2[index+i]; + } } @@ -3262,16 +3271,25 @@ int Set_VI_Add_Cal(int parameter,int channel,float cal_point) for (i=max_points-1; i>entry; i--) { temp_y_float1[i+1]=temp_y_float1[i]; temp_x_short1[i+1]=temp_x_short1[i]; + if (pointer_x_short2) { + temp_x_short2[i+1]=temp_x_short2[i]; + } } /* add the new data */ temp_y_float1[entry+1]=abs_cal_point; temp_x_short1[entry+1]=word_out; + for (i=0; i<=max_points; ++i) { temp_x_float1[i]=(float) temp_x_short1[i]; } + if (pointer_x_short2) { + // use a simple average of the nearest points for the pw distort dac + temp_x_short2[entry+1]= (temp_x_short2[entry] + temp_x_short2[entry+2]) / 2; + } + /* delete a point, if required */ if (total==max_points) { @@ -3299,6 +3317,9 @@ int Set_VI_Add_Cal(int parameter,int channel,float cal_point) temp_y_float1[i]=temp_y_float1[i+1]; temp_x_float1[i]=temp_x_float1[i+1]; temp_x_short1[i]=temp_x_short1[i+1]; + if (pointer_x_short2) { + temp_x_short2[i]=temp_x_short2[i+1]; + } } } @@ -3307,6 +3328,9 @@ int Set_VI_Add_Cal(int parameter,int channel,float cal_point) for (i=0; i<max_points; i++) { *(float *)(&pointer_y_float1[index+i])=temp_y_float1[i]; *(short *)(&pointer_x_short1[index+i])=temp_x_short1[i]; + if (pointer_x_short2) { + *(short *)(&pointer_x_short2[index+i])=temp_x_short2[i]; + } } eprom_loc = (char *) pointer_x_short1 - (char *) &(globals.Flash.flash_start); @@ -3315,6 +3339,11 @@ int Set_VI_Add_Cal(int parameter,int channel,float cal_point) eprom_loc = (char *) pointer_y_float1 - (char *) &(globals.Flash.flash_start); writeUserBlock(&globals.Flash, eprom_loc, size_of_y_float1); + if (pointer_x_short2) { + eprom_loc = (char *) pointer_x_short2 - (char *) &(globals.Flash.flash_start); + writeUserBlock(&globals.Flash, eprom_loc, size_of_x_short2); + } + globals.Flags.extended_ampl_min_max=NO; /* update output */ @@ -641,13 +641,20 @@ static void initFlashValues(FlashStruct *mem) } } - for (j=0; j<10; j++) - for (k=0; k<5; k++) - for (m=0; m<2; m++) { + for (k=0; k<5; k++) { + for (m=0; m<2; m++) { + j=0; + mem->ampl_dacval[i][k][m][j]=0; + mem->ampl_pwl[i][k][m][j]=0.0; + mem->distort_dacval[i][k][m][j]=dac_max; /* EA shunt is max at zero ampl, + zero at max ampl */ + for (j=1; j<10; j++) { mem->ampl_dacval[i][k][m][j]=0; mem->ampl_pwl[i][k][m][j]=0.0; mem->distort_dacval[i][k][m][j]=0; } + } + } mem->ampl_dacval[i][0][0][1]=dac_max; mem->ampl_pwl[i][0][0][1]=100.0; |