/* @(#)GNC Version 1.4: : HP8590 */
/******************************************************************************
*
* The following define statements are used to declare the names to be used
* for the dset tables.
*
* NOTE: The dsets are referenced by the entries in the command table.
*
******************************************************************************/
| #define | DSET_AI devAiHP8590LGpib |
| #define | DSET_AO devAoHP8590LGpib |
| #define | DSET_BI devBiHP8590LGpib |
| #define | DSET_BO devBoHP8590LGpib |
| #define | DSET_SI devSiHP8590LGpib |
| #define | DSET_SO devSoHP8590LGpib |
| #define | DSET_LI devLiHP8590LGpib |
| #define | DSET_LO devLoHP8590LGpib |
| #define | DSET_MBBI devMbbiHP8590LGpib |
| #define | DSET_MBBO devMbboHP8590LGpib |
| #define | DSET_WF devWfHP8590LGpib |
#include <devGpib.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <devCommonGpib.h>
#include <errlog.h>
#include <menuFtype.h>
#include <epicsStdio.h>
#define STATIC static
| STATIC long | init_dev_sup(), report(); |
#define TIMEWINDOW 1
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); */
| static | struct devGpibParmBlock devSupParms; |
/******************************************************************************
*
* Define all the dset's.
*
* Note that the dset names are provided via the #define lines at the top of
* this file.
*
* Other than for the debugging flag(s), these DSETs are the only items that
* will appear in the global name space within the IOC.
*
* The last 3 items in the DSET structure are used to point to the parm
* structure, the work functions used for each record type, and the srq
* handler for each record type.
*
******************************************************************************/
/******************************************************************************
*
* Debugging flags that can be accessed from the shell.
*
******************************************************************************/
int HP8590Debug = 0;
| extern int ibSrqDebug; | | /* declared in the GPIB driver */ |
/****************************************************************************** *
* Use the TIME_WINDOW defn to indicate how long commands should be ignored
* for a given device after it times out. The ignored commands will be
* returned as errors to device support.
*
* Use the DMA_TIME to define how long you wish to wait for an I/O operation
* to complete once started.
*
* These are to be declared in 60ths of a second.
*
******************************************************************************/
/******************************************************************************
*
* Strings used by the init routines to fill in the znam, onam, ...
* fields in BI and BO record types.
*
******************************************************************************/
static unsigned long GDL_BinaryNameVal[] = { 0 ,1 };
static char *CoupleList[] = { "AC", "DC" };
static struct devGpibNames Couple = { 2, CoupleList, GDL_BinaryNameVal, 1 };
static char *GratList[] = { "ON", "OFF" };
static struct devGpibNames Grat = { 2, GratList, GDL_BinaryNameVal, 1 };
static char *MkfcnameList[] = { "OFF", "ON" };
static struct devGpibNames Mkfcname = { 2, MkfcnameList, GDL_BinaryNameVal, 1 };
/******************************************************************************
*
* Structures used by the init routines to fill in the onst, twst,... and the
* onvl, twvl,... fields in MBBI and MBBO record types.
*
* Note that the intExtSsBm and intExtSsBmStop structures use the same
* intExtSsBmStopList and intExtSsBmStopVal lists but have a different number
* of elements in them that they use... The intExtSsBm structure only represents
* 4 elements, while the intExtSsBmStop structure represents 5.
*
******************************************************************************/
static char *ViewNameList[] = { "A" ,"B" ,"C" };
static unsigned long ViewNameVal[] = { 0 ,1 ,2 };
static struct devGpibNames ViewName = { 3, ViewNameList, ViewNameVal, 2 };
/******************************************************************************
*
* String arrays for EFAST operations. Note that the last entry must be
* NULL.
*
* On input operations, only as many bytes as are found in the string array
* elements are compared. If there are more bytes than that in the input
* message, they are ignored. The first matching string found (starting
* from the 0'th element) will be used as a match.
*
* NOTE: For the input operations, the strings are compared literally! This
* can cause problems if the instrument is returning things like \r and \n
* characters. You must take care when defining input strings so you include
* them as well.
*
******************************************************************************/
static char *(CoupleMode[])={"COUPLE AC;\r\n","COUPLE DC;\r\n",NULL};
static char *(CoupleRead[])={"AC\r\n","DC\r\n",NULL};
static char *(GratMode[])={"GRAT ON;\r\n","GRAT OFF;\r\n",NULL};
static char *(Mkfcmode[])={"MKFC OFF;\r\n","MKFC ON;\r\n",NULL};
static char *(ViewMode[])={"VIEW TRA;\r\n","VIEW TRB;\r\n","VIEW TRC;\r\n",NULL};
/******************************************************************************
*
* Array of structures that define all GPIB messages
* supported for this type of instrument.
*
******************************************************************************/
#define EOSLN NULL
static struct gpibCmd gpibCmds[] = {
/* CMMAND 0 set_center_freq */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "CF %lfHZ;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 1 set_center_freq_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "CF UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 2 set_center_freq_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "CF DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 3 get_center_freq */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "CF?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 4 set_start_freq */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "FA %lfHZ;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 5 set_start_freq_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "FA UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 6 set_start_freq_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "FA DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 7 get_start_freq */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "FA?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 8 set_stop_freq */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "FB %lfHZ;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 9 set_stop_freq_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "FB UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 10 set_stop_freq_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "FB DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 11 get_stop_freq */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "FB?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 12 set_center_freq_step */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SS %lfHZ;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 13 set_center_freq_step_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SS UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 14 set_center_freq_step_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SS DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 15 set_center_freq_auto */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SS AUTO;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 16 get_center_freq_step */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "SS?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 17 set_span */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SP %lfHZ;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 18 set_span_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SP UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 19 set_sapn_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SP DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 20 get_span */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "SP?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 21 set_rbw */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "RB %lfHZ;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 22 set_rbw_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "RB UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 23 set_rbw_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "RB DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 24 set_rbw_auto */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "RB AUTO;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 25 get_rbw */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "RB?\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 26 set_vbw */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "FB %lfHZ;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 27 set_vbw_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "VB UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 28 set_vbw_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "VB DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 29 set_vbw_auto */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "VB AUTO;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 30 get_vbw */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "VB?\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 31 set_sweep */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "ST %lfSC;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 32 set_sweep_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "ST UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 33 set_sweep_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "ST DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 34 set_sweep_auto */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "ST AUTO;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 35 get_sweep */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "ST?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 36 set_attenuation */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "AT %lfDB;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 37 set_attenuation_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "AT UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 38 set_attenuation_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "AT DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 39 set_attenuation_auto */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "AT AUTO;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 40 get_attenuation */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "AT?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 41 set_couple */
{&DSET_MBBO, GPIBEFASTO, IB_Q_LOW, NULL, NULL, 0, 32, NULL, 0, 0, CoupleMode, &Couple, EOSLN },
/* CMMAND 42 get_couple */
{&DSET_MBBI, GPIBEFASTI, IB_Q_LOW, NULL, NULL, 0, 32, NULL, 0, 0, CoupleRead, &Couple, EOSLN },
/* CMMAND 43 set_log_scale */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "LG %lfDB;", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 44 set_log_scale_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "LG UP;", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 45 set_log_scale_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "LG DN;", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 46 get_log_scale */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "LG?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 47 set_linear */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "LN;", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 48 set_reference_level */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "RL %lfDB;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 49 set_reference_level_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "RL UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 50 set_reference_level_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "RL DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 51 get_reference_level */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "RL?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 52 set_srcat */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SRCAT %lfDB;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 53 set_srcat_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SRCAT UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 54 set_srcat_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SRCAT DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 55 set_srcat_auto */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SRCAT AUTO;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 56 get_srcat */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "SRCAT?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 57 set_srcpwr */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SRCPWR %lfDB;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 58 set_srcpwr_up */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SRCPWR UP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 59 set_srcpwr_dn */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SRCPWR DN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 60 set_srcpwr_on */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SRCPWR ON;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 61 set_srcpwr_off */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SRCPWR OFF;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 62 get_srcpwr */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "SRCPWR?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 63 set_srctkpk */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SRCTKPK;", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 64 set_grat */
{&DSET_MBBO, GPIBEFASTO, IB_Q_LOW, NULL, NULL, 0, 32, NULL, 0, 0, GratMode, &Grat, EOSLN },
/* CMMAND 65 set_title */
{&DSET_SO, GPIBWRITE, IB_Q_LOW, NULL, "TITLE :%s:;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 66 get_trace_a */
{&DSET_WF, GPIBREADW, IB_Q_LOW, "SNGLS;TDF P;AUNITS DBM;RQS 4;TS;TA;\r\n", NULL, 0, 819100, rd_wf_data, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 67 get_trace_b */
{&DSET_WF, GPIBREAD, IB_Q_LOW, "TDF P;AUNITS DBM;TB;\r\n", NULL, 0, 8191, rd_wf_data, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 68 get_trace_aeos */
{&DSET_WF, GPIBREAD, IB_Q_LOW, "ONEOS!TDF P; AUNITS DBM;TA;!\r\n", NULL, 0, 8191, rd_wf_data, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 69 set_trigger_single */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "SNGLS;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 70 set_trigger_start */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "TS;\r\n", 0, 256, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 71 set_trace_a_clrw */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "CLRW TRA;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 72 set_trace_b_clrw */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "CLRW TRB;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 73 set_marker_peak_eos */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "ONEOS!MKPK HI;!\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 74 set_marker_peak_nh */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "MKPK NH;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 75 set_marker_peak_nr */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "MKPK NR;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 76 set_marker_peak_nl */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "MKPK NL;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 77 set_marker_delta */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "MKD;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 78 set_marker_normal */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "MKN;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 79 get_marker_freq */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "TDF P;MKREAD FRQ;MKF?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 80 get_marker_amp */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "TDF P;AUNITS DBM;MKA?;\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 81 set_marker_act */
{&DSET_LO, GPIBWRITE, IB_Q_LOW, NULL, "MKACT %d;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 82 get_marker_act */
{&DSET_LI, GPIBREAD, IB_Q_LOW, "MKACT?\r\n", "%d\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 83 set_marker_center */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "MKCF;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 84 set_marker_counter */
{&DSET_MBBO, GPIBEFASTO, IB_Q_LOW, NULL, NULL, 0, 32, NULL, 0, 0, Mkfcmode, &Mkfcname, EOSLN },
/* CMMAND 85 set_marker_fc_res */
{&DSET_LO, GPIBWRITE, IB_Q_LOW, NULL, "MKFCR %dHZ;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 86 get_marker_fc_res */
{&DSET_LI, GPIBREAD, IB_Q_LOW, "MKFCR?;\r\n", "%d\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 87 set_maker_off */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "MKOFF ALL;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 88 get_maker_xpos */
{&DSET_LI, GPIBREAD, IB_Q_LOW, "MKP?;\r\n", "%d\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 89 set_view_trace */
{&DSET_MBBO, GPIBEFASTO, IB_Q_LOW, NULL, NULL, 0, 32, NULL, 0, 0, ViewMode, &ViewName, EOSLN },
/* CMMAND 90 set_sa_init */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "IP;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 91 set_cont_sweep */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "RQS 0;CONTS;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 92 set_marker_peak */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "MKPK HI;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 93 dispose_all */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "DISPOSE ALL;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 94 dispose_oneos */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "DISPOSE ONEOS;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 95 set_trace_maxhold_a */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "MXMH TRA;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 96 set_trace_maxhold_b */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "MXMH TRB;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 97 set_trace_vavg */
{&DSET_LO, GPIBWRITE, IB_Q_LOW, NULL, "VAVG %d;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 98 set_trace_vavg_on */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "VAVG ON;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 99 set_trace_vavg_off */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "VAVG OFF;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 100 set_trace_clrw_a */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "CLRW TRA;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 101 set_trace_clrw_b */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "CLRW TRB;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 102 set_trace_clrw_c */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "CLRW TRB;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 103 get_trace_eos_peak */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "ONEOS!MKPK HI;TDF P;MKREAD FRQ;MKF?;!\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 104 get_marker_eos */
{&DSET_AI, GPIBREADW, IB_Q_LOW, "ONEOS!MKPK HI;TDF P;MKREAD FRQ;MKF?;!\r\n", "%lf\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 105 set_srq */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "RQS 4;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 106 rel_srq */
{&DSET_AO, GPIBWRITE, IB_Q_LOW, NULL, "RQS 0;\r\n", 0, 64, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 107 get_stb */
{&DSET_LI, GPIBREAD, IB_Q_LOW, "STB?;\r\n", "%d\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 108 UNSolicited_SRQ */
{&DSET_LI, GPIBSRQHANDLER, IB_Q_LOW, "CLS;\r\n", NULL, 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 109 set_srctk */
{&DSET_LO, GPIBWRITE, IB_Q_LOW, NULL, "SRCTK %d;\r\n", 0, 32, NULL, 0, 0, NULL, NULL, EOSLN },
/* CMMAND 110 get_srctk */
{&DSET_LI, GPIBREAD, IB_Q_LOW, "SRCTK?;\r\n", "%d\r\n", 0, 511, NULL, 0, 0, NULL, NULL, EOSLN }
};
/* The following is the number of elements in the command array above. */
| #define NUMPARAMS | sizeof(gpibCmds)/sizeof(struct gpibCmd) |
/******************************************************************************
*
* Structure containing the user's functions and operating parameters needed
* by the gpib library functions.
*
* The magic SRQ parm is the parm number that, if specified on a passive
* record, will cause the record to be processed automatically when an
* unsolicited SRQ interrupt is detected from the device.
*
* If the parm is specified on a non-passive record, it will NOT be processed
* when an unsolicited SRQ is detected.
*
* In the future, the magic SRQ parm records will be processed as "I/O event
* scanned"... not passive.
*
******************************************************************************/
static long init_ai(int parm)
{
if(parm==0) {
devSupParms.name = "devHP8590LGpib";
devSupParms.gpibCmds = gpibCmds;
devSupParms.numparams = NUMPARAMS;
devSupParms.timeout = TIMEOUT;
devSupParms.timeWindow = TIMEWINDOW;
devSupParms.respond2Writes = -1.0;
}
return(0);
}
/******************************************************************************
*
* Initialization for device support
* This is called one time before any records are initialized with a parm
* value of 0. And then again AFTER all record-level init is complete
* with a param value of 1.
*
******************************************************************************/
/******************************************************************************
*
* Print a report of operating statistics for all devices supported by this
* module.
*
* This function will no longer be required after epics 3.3 is released
*
******************************************************************************/
/******************************************************************************
*
* c code
*
*****************************************************************************/
| #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 rd_data(char wav[], float data[])
{
int i;
char wa1[32767];
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[500],*ptemp;
| int | 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); */
printf("Not OK HP8594\n");
return(-1);
}
numElem = 399;
if (numElem > pwf->nelm) numElem = pwf->nelm;
pwf->nord = numElem;
while (numElem--) {
/* logMsg( "\n%d-th data: %f",numElem, *ptemp); */
*temparray++ = (float) *ptemp++;
}
/* logMsg( "\nread_wf end normally\n"); */
return(0);
}
/*
STATIC int mySrqHandler(struct hwpvt *phwpvt, int srqStatus)
{
int status = IDLE;
int rqsBit,errorBit,busyBit;
CALLBACK *pcallback;
rqsBit =srqStatus & HP8590_COMMAND;
switch (srqStatus & HP8590_GOODBITS) {
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{
printf("HP8590 UNKNOWN SRQ\n");
}
}
return(status);
}
*/