Device(HP8590) %{ static int rd_data(char wav[], float temp[]); static int rd_wf_data(struct gpibDpvt *pdpvt, int p1, int p2, char **p3); STATIC int mySrqHandler(struct hwpvt *phwpvt, int srqStatus); }% TimeOut 600; NameTable Couple ="AC", "DC"; NameTable Grat ="ON", "OFF"; NameTable Mkfcname "OFF", "ON"; NameTable ViewName = "A","B","C"; EfastTable CoupleMode ="COUPLE AC;\r\n", "COUPLE DC;\r\n"; EfastTable CoupleRead ="AC\r\n","DC\r\n"; EfastTable GratMode ="GRAT ON;\r\n", "GRAT OFF;\r\n"; EfastTable Mkfcmode ="MKFC OFF;\r\n", "MKFC ON;\r\n"; EfastTable ViewMode ="VIEW TRA;\r\n", "VIEW TRB;\r\n", "VIEW TRC;\r\n"; SrqHandler=mySrqHandler UNSolicited_SRQ; ParamTable{ set_center_freq{rec=ao,command="CF %lfHZ;\r\n"} set_center_freq_up{rec=ao,command="CF UP;\r\n"} set_center_freq_dn{rec=ao,command="CF DN;\r\n"} get_center_freq{rec=ai,command="CF?;\r\n",conv="%lf\r\n",leng=511} set_start_freq{rec=ao,command="FA %lfHZ;\r\n"} set_start_freq_up{rec=ao,command="FA UP;\r\n"} set_start_freq_dn{rec=ao,command="FA DN;\r\n"} get_start_freq{rec=ai,command="FA?;\r\n",conv="%lf\r\n",leng=511} set_stop_freq{rec=ao,command="FB %lfHZ;\r\n"} set_stop_freq_up{rec=ao,command="FB UP;\r\n"} set_stop_freq_dn{rec=ao,command="FB DN;\r\n"} get_stop_freq{rec=ai,command="FB?;\r\n",conv="%lf\r\n",leng=511} set_center_freq_step{rec=ao,command="SS %lfHZ;\r\n"} set_center_freq_step_up{rec=ao,command="SS UP;\r\n"} set_center_freq_step_dn{rec=ao,command="SS DN;\r\n"} set_center_freq_auto{rec=ao,command="SS AUTO;\r\n"} get_center_freq_step{rec=ai,command="SS?;\r\n",conv="%lf\r\n",leng=511} set_span{rec=ao,command="SP %lfHZ;\r\n"} set_span_up{rec=ao,command="SP UP;\r\n"} set_sapn_dn{rec=ao,command="SP DN;\r\n"} get_span{rec=ai,command="SP?;\r\n",conv="%lf\r\n",leng=511} set_rbw{rec=ao,command="RB %lfHZ;\r\n"} set_rbw_up{rec=ao,command="RB UP;\r\n"} set_rbw_dn{rec=ao,command="RB DN;\r\n"} set_rbw_auto{rec=ao,command="RB AUTO;\r\n"} get_rbw{rec=ai,command="RB?\r\n",conv="%lf\r\n",leng=511} set_vbw{rec=ao,command="FB %lfHZ;\r\n"} set_vbw_up{rec=ao,command="VB UP;\r\n"} set_vbw_dn{rec=ao,command="VB DN;\r\n"} set_vbw_auto{rec=ao,command="VB AUTO;\r\n"} get_vbw{rec=ai,command="VB?\r\n",conv="%lf\r\n",leng=511} set_sweep{rec=ao,command="ST %lfSC;\r\n"} set_sweep_up{rec=ao,command="ST UP;\r\n"} set_sweep_dn{rec=ao,command="ST DN;\r\n"} set_sweep_auto{rec=ao,command="ST AUTO;\r\n"} get_sweep{rec=ai,command="ST?;\r\n",conv="%lf\r\n",leng=511} set_attenuation{rec=ao,command="AT %lfDB;\r\n"} set_attenuation_up{rec=ao,command="AT UP;\r\n"} set_attenuation_dn{rec=ao,command="AT DN;\r\n"} set_attenuation_auto{rec=ao,command="AT AUTO;\r\n"} get_attenuation{rec=ai,command="AT?;\r\n",conv="%lf\r\n",leng=511} set_couple{rec=mbbo,efast=CoupleMode,name=Couple} get_couple{rec=mbbi,efast=CoupleRead,name=Couple} set_log_scale{rec=ao,command="LG %lfDB;"} set_log_scale_up{rec=ao,command="LG UP;"} set_log_scale_dn{rec=ao,command="LG DN;"} get_log_scale{rec=ai,command="LG?;\r\n",conv="%lf\r\n",leng=511} set_linear{rec=ao,command="LN;"} set_reference_level{rec=ao,command="RL %lfDB;\r\n"} set_reference_level_up{rec=ao,command="RL UP;\r\n"} set_reference_level_dn{rec=ao,command="RL DN;\r\n"} get_reference_level{rec=ai,command="RL?;\r\n",conv="%lf\r\n",leng=511} set_srcat{rec=ao,command="SRCAT %lfDB;\r\n"} set_srcat_up{rec=ao,command="SRCAT UP;\r\n"} set_srcat_dn{rec=ao,command="SRCAT DN;\r\n"} set_srcat_auto{rec=ao,command="SRCAT AUTO;\r\n"} get_srcat{rec=ai,command="SRCAT?;\r\n",conv="%lf\r\n",leng=511} set_srcpwr{rec=ao,command="SRCPWR %lfDB;\r\n"} set_srcpwr_up{rec=ao,command="SRCPWR UP;\r\n"} set_srcpwr_dn{rec=ao,command="SRCPWR DN;\r\n"} set_srcpwr_on{rec=ao,command="SRCPWR ON;\r\n"} set_srcpwr_off{rec=ao,command="SRCPWR OFF;\r\n"} get_srcpwr{rec=ai,command="SRCPWR?;\r\n",conv="%lf\r\n",leng=511} set_srctkpk{rec=ao,command="SRCTKPK;"} set_grat{rec=mbbo,efast=GratMode,name=Grat} set_title{rec=so,command="TITLE :%s:;\r\n"} get_trace_a{rec=wf,command="TDF P;AUNITS DBM;TA;\r\n",leng=8191, conv=rd_wf_data} get_trace_b{rec=wf,command="TDF P;AUNITS DBM;TB;\r\n",leng=8191, conv=rd_wf_data} get_trace_aeos{rec=wf,command="ONEOS!TDF P; AUNITS DBM;TA;!\r\n", leng=8191,conv=rd_wf_data} set_trigger_single{rec=ao,command="SNGLS;\r\n"} set_trigger_start{rec=ao,command="TS;\r\n"} set_trace_a_clrw{rec=ao,command="CLRW TRA;\r\n"} set_trace_b_clrw{rec=ao,command="CLRW TRB;\r\n"} set_marker_peak_eos{rec=ao,command="ONEOS!MKPK HI;!\r\n"} set_marker_peak_nh{rec=ao,command="MKPK NH;\r\n"} set_marker_peak_nr{rec=ao,command="MKPK NR;\r\n"} set_marker_peak_nl{rec=ao,command="MKPK NL;\r\n"} set_marker_delta{rec=ao,command="MKD;\r\n"} set_marker_normal{rec=ao,command="MKN;\r\n"} get_marker_freq{rec=ai,command="TDF P;MKREAD FRQ;MKF?;\r\n", conv="%lf\r\n",leng=511} get_marker_amp{rec=ai,command="TDF P;AUNITS DBM;MKA?;\r\n", conv="%lf\r\n",leng=511} set_marker_act{rec=lo,command="MKACT %d;\r\n"} get_marker_act{rec=li,command="MKACT?\r\n",conv="%d\r\n",leng=511} set_marker_center{rec=ao,command="MKCF;\r\n"} set_marker_counter{rec=mbbo,efast=Mkfcmode,name=Mkfcname} set_marker_fc_res{rec=lo,command="MKFCR %dHZ;\r\n"} get_marker_fc_res{rec=li,command="MKFCR?;\r\n",conv="%d\r\n",leng=511} set_maker_off{rec=ao,command="MKOFF ALL;\r\n"} get_maker_xpos{rec=li,command="MKP?;\r\n", conv="%d\r\n",leng=511} set_view_trace{rec=mbbo,efast=ViewMode,name=ViewName} set_sa_init{rec=ao,command="IP;\r\n"} set_cont_sweep{rec=ao,command="CONTS;\r\n"} set_marker_peak{rec=ao,command="MKPK HI;\r\n"} dispose_all{rec=ao,command="DISPOSE ALL;\r\n"} dispose_oneos{rec=ao,command="DISPOSE ONEOS;\r\n"} set_trace_maxhold_a{rec=ao,command="MXMH TRA;\r\n"} set_trace_maxhold_b{rec=ao,command="MXMH TRB;\r\n"} set_trace_vavg{rec=lo,command="VAVG %d;\r\n"} set_trace_vavg_on{rec=ao,command="VAVG ON;\r\n"} set_trace_vavg_off{rec=ao,command="VAVG OFF;\r\n"} set_trace_clrw_a{rec=ao,command="CLRW TRA;\r\n"} set_trace_clrw_b{rec=ao,command="CLRW TRB;\r\n"} set_trace_clrw_c{rec=ao,command="CLRW TRB;\r\n"} get_trace_eos_peak{rec=ai,command="ONEOS!MKPK HI;TDF P;MKREAD FRQ;MKF?;!\r\n",conv="%lf\r\n",leng=511} get_marker_eos{rec=ai,type=readw,command="ONEOS!MKPK HI;TDF P;MKREAD FRQ;MKF?;!\r\n",conv="%lf\r\n",leng=511} set_srq{rec=ao,command="RQS 20;\r\n"} rel_srq{rec=ao,command="RQS 0;\r\n"} get_stb{rec=li,command="STB?;\r\n",conv="%d\r\n",leng=511} UNSolicited_SRQ{rec=si,type=read, command="EVENT?\r", conv="%[^\t]",leng=320} set_srctk{rec=lo,command="SRCTK %d;\r\n"} get_srctk{rec=li,command="SRCTK?;\r\n",conv="%d\r\n",leng=511} } %{ #define HP8590_GOODBITS 0x3E #define HP8590_ILLCOM 0x20 #define HP8590_COMMAND 0x10 #define HP8590_HARD 0x08 #define HP8590_SWEEP 0x04 #define HP8590_USER 0x02 STATIC int mySrqHandler(struct hwpvt *phwpvt, int srqStatus) { int status = IDLE; /* assume device will be idle when finished */ int rqsBit,errorBit,busyBit; CALLBACK *pcallback; /* analyze srqStatus */ rqsBit =srqStatus & HP8590_COMMAND; switch (srqStatus & HP8590_GOODBITS) { case HP8590_ILLCOM: logMsg("HP8590 Illigal command\n"); break; case HP8590_COMMAND: if (phwpvt->srqCallback !=NULL) status =((*(phwpvt->srqCallback))(phwpvt->parm,srqStatus)); else logMsg("HP8590 srqHandler: Unsolicited operation complete from HP8590 device support!\n"); break; case HP8590_HARD: logMsg("HP8590 hardware broken!!\n"); break; case HP8590_SWEEP: if (phwpvt->srqCallback !=NULL) status =((*(phwpvt->srqCallback))(phwpvt->parm,srqStatus)); else logMsg("HP8590 srqHandler: Unsolicited operation complete from HP8590 device support!\n"); break; case HP8590_USER: break; default: if (phwpvt->unsolicitedDpvt != NULL){ pcallback=&(phwpvt->unsolicitedDpvt->head.callback); callbackSetCallback(devGpibLib_processCallback, pcallback); callbackSetPriority(priorityHigh, pcallback); callbackSetUser((void*)phwpvt->unsolicitedDpvt, pcallback); callbackRequest(pcallback); } else{ logMsg("HP8590 UNKNOWN SRQ\n"); } } return(status); } static int rd_data(char wav[], float data[]) { int i; char wa1[8191]; strcpy(wa1,strtok(wav,"\r\n")); data[0]= (float) atof(wa1); for (i=1; i<399; i++) { strcpy(wa1,strtok(NULL,"\r\n")); /* printf("wa1=%s\n",wa1); */ data[i] = (float) atof(wa1); } return 0; } STATIC int rd_wf_data(struct gpibDpvt *pdpvt, int p1, int p2, char **p3) { struct waveformRecord *pwf = (struct waveformRecord *) (pdpvt->precord); char *craw; float *temparray; float temp[8191],*ptemp; int s[8191],ok_flag; unsigned long numElem; temparray = (float *) pwf->bptr; craw = pdpvt->msg; /* logMsg("craw = %s\n",craw); printf("craw -- end\n");*/ /* craw = strtok(craw,"\r\n"); if (craw == NULL) { devGpibLib_setPvSevr(pwf, READ_ALARM, INVALID_ALARM); logMsg("null data in HP8590\n"); return(ERROR); } */ ok_flag = rd_data(craw,temp); if (ok_flag != 0) { devGpibLib_setPvSevr(pwf,READ_ALARM, INVALID_ALARM); logMsg("Not OK HP8594\n"); return(ERROR); } numElem = 399; if (numElem > pwf->nelm) numElem = pwf->nelm; pwf->nord = numElem; ptemp=temp; while (numElem--) { /* logMsg( "\n%d-th data: %f",numElem, *ptemp); */ *temparray++ = (float) *ptemp++; } /* logMsg( "\nread_wf end normally\n"); */ return(OK); } }% %{ }%