Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
#include <formatio.h>
#include <userint.h>
#include <ansi_c.h>
#include <utility.h>
#include <tcpsupp.h>
#include <cvirte.h>
#include "lecroy_tcp.h"
#include "wavejet_ui.h"
//#define SCOPE_IP "192.168.1.11"
#define MAX_TCP_CONNECT 5 /* time in secs to get a connection */
#define MAX_TCP_READ 3 /* time in secs to wait for the DSO
to respond to a read request
*/
#define MAX_ST 512 /* maximum message string. no picked from thin air */
#define MAX_THREADS 10
static int sockfd
;
static int p1h
, pID
, rID
, tfID
;
static int poolHandle
= 0;
int CVICALLBACK cb_timer
(int panel
, int control
, int event
, void *callbackData
,
int eventData1
, int eventData2
)
{
QueueUserEvent
(9000, p1h
, P1_TIMER
);
return (0);
}
/*
int CVICALLBACK daq_run(void *functionData)
{
return (0);
}
*/
int __stdcall WinMain
(HINSTANCE hInstance
, HINSTANCE hPrevInstance
,
LPSTR lpszCmdLine
, int nCmdShow
)
{
int i
;
int status
,connected
,displen
;
int refon
;
int tmpindex
,tmpint
;
int p1_tra
[5]={P1_TRA_1
,P1_TRA_2
,P1_TRA_3
,P1_TRA_4
,0};
int p1_vdiv
[5]={P1_VDIV_1
,P1_VDIV_2
,P1_VDIV_3
,P1_VDIV_4
,0};
int p1_bwl
[5]={P1_BWL_1
,P1_BWL_2
,P1_BWL_3
,P1_BWL_4
,0};
float tmpfloat
;
char ip_address
[50],tmpstr
[100];
char outbuf
[MAX_ST
],inbuf
[MAX_ST
];
char display
[500000],imgfn
[300],ftyp
[10];
FILE
*imgfp
;
connected
=0;
if (InitCVIRTE
(hInstance
, 0, 0) == 0)
return -1; /* out of memory */
SetSleepPolicy
(VAL_SLEEP_MORE
);
CmtNewThreadPool
(MAX_THREADS
, &poolHandle
);
SetStdioWindowOptions
(1000, 0, 0);
SetStdioWindowSize
(150, 600);
SetStdioWindowPosition
(100, 20);
if ((p1h
= LoadPanel
(0, "wavejet_ui.uir", P1
)) < 0) return -1;
DisplayPanel
(p1h
);
// SetCtrlAttribute (p1h, P1_PLCH, ATTR_MAX_VALUE, NCH-1);
QueueUserEvent
(1000, p1h
, P1_IPF
);
do {
GetUserEvent
(1, &pID
, &rID
);
switch (rID
) {
case P1_UPDATE
:
if (!connected
) break;
sprintf(outbuf
,"TSCRN? BMP\n");
LECROY_TCP_write
(sockfd
, outbuf
);
LECROY_TCP_read
(sockfd
, display
, sizeof(display
), MAX_TCP_READ
);
sscanf(display
,"# %1d %8d",&status
,&displen
);
imgfp
= fopen ("tmp.bmp", "wb");
status
= fwrite (&display
[10], 1, displen
, imgfp
);
status
= fclose (imgfp
);
status
= DisplayImageFile
(p1h
, P1_DISPLAY
, "tmp.bmp");
break;
case P1_DSAV
:
if (!connected
) break;
status
= GetCtrlVal
(p1h
, P1_DSAV
, tmpstr
);
sprintf(ftyp
,"*.%s",tmpstr
);
StringLowerCase
(ftyp
);
status
= FileSelectPopup
("", ftyp
, ftyp
,"Hard copy", VAL_SAVE_BUTTON
,
0, 1, 1, 1, imgfn
);
if (status
<1) break;
sprintf(outbuf
,"TSCRN? %s\n",tmpstr
);
LECROY_TCP_write
(sockfd
, outbuf
);
LECROY_TCP_read
(sockfd
, display
, sizeof(display
), MAX_TCP_READ
);
sscanf(display
,"# %1d %8d",&status
,&displen
);
imgfp
= fopen (imgfn
, "wb");
status
= fwrite (&display
[10], 1, displen
, imgfp
);
status
= fclose (imgfp
);
break;
case P1_GET_SETUP
:
if (!connected
) break;
break;
case P1_TIMER
:
//ntics+=1;
GetCtrlVal
(p1h
, P1_REFRESH
, &refon
);
if (refon
) QueueUserEvent
(9000, p1h
, P1_UPDATE
);
break;
case P1_REFRESH
:
break;
/*
case P1_DAQ:
GetCtrlVal (p1h, P1_DAQ, &daq_on);
if (daq_on) {
CmtScheduleThreadPoolFunction (poolHandle, daq_run, (void *)&dummy, &tfID);
} else {
CmtWaitForThreadPoolFunctionCompletion (poolHandle, tfID,
OPT_TP_PROCESS_EVENTS_WHILE_WAITING);
CmtReleaseThreadPoolFunctionID (poolHandle, tfID);
}
break;
*/
case P1_IPF
:
status
= GetCtrlVal
(p1h
, P1_IPF
, ip_address
);
status
= SetCtrlVal
(p1h
, P1_IP
, ip_address
);
break;
case P1_CONNECT
:
if (connected
) {
strcpy(outbuf
,"GTL\n");
LECROY_TCP_write
(sockfd
, outbuf
);
LECROY_TCP_disconnect
(sockfd
);
status
= SetCtrlVal
(p1h
, P1_ID
, "");
connected
=0;
}else{
status
= GetCtrlVal
(p1h
, P1_IP
, ip_address
);
sockfd
=LECROY_TCP_connect
(ip_address
, MAX_TCP_CONNECT
);
if (sockfd
<0) {
//printf("\nCould not connect to the scope on IP: %s\n",ip_address);
status
= SetCtrlVal
(p1h
, P1_ID
, "Could not connect!");
status
= SetCtrlVal
(p1h
, P1_CONNECT
, 0);
break;
}else{
connected
=1;
strcpy(outbuf
,"*idn?\n");
LECROY_TCP_write
(sockfd
, outbuf
);
LECROY_TCP_read
(sockfd
, inbuf
, sizeof(inbuf
), MAX_TCP_READ
);
status
= SetCtrlVal
(p1h
, P1_ID
, inbuf
);
for (i
=0;i
<4;i
++) {
sprintf(outbuf
,"C%1d:TRA?\n",i
+1);
LECROY_TCP_write
(sockfd
, outbuf
);
LECROY_TCP_read
(sockfd
, inbuf
, sizeof(inbuf
), MAX_TCP_READ
);
if (FindPattern
(inbuf
, 0, 2, "ON", 1, 0)) {
status
= SetCtrlVal
(p1h
, p1_tra
[i
], 0);
}else{
status
= SetCtrlVal
(p1h
, p1_tra
[i
], 1);
}
sprintf(outbuf
,"C%1d:VDIV?\n",i
+1);
LECROY_TCP_write
(sockfd
, outbuf
);
LECROY_TCP_read
(sockfd
, inbuf
, sizeof(inbuf
), MAX_TCP_READ
);
sscanf(inbuf
,"%g",&tmpfloat
);
status
= SetCtrlVal
(p1h
, p1_vdiv
[i
], tmpfloat
);
sprintf(outbuf
,"C%1d:BWL?\n",i
+1);
LECROY_TCP_write
(sockfd
, outbuf
);
LECROY_TCP_read
(sockfd
, inbuf
, sizeof(inbuf
), MAX_TCP_READ
);
sscanf(inbuf
,"%s",tmpstr
);
status
= SetCtrlVal
(p1h
, p1_bwl
[i
], tmpstr
);
}
sprintf(outbuf
,"PERS?\n");
LECROY_TCP_write
(sockfd
, outbuf
);
LECROY_TCP_read
(sockfd
, inbuf
, sizeof(inbuf
), MAX_TCP_READ
);
sscanf(inbuf
,"%s",tmpstr
);
status
= SetCtrlVal
(p1h
, P1_PERS
, tmpstr
);
sprintf(outbuf
,"TSRC?\n");
LECROY_TCP_write
(sockfd
, outbuf
);
LECROY_TCP_read
(sockfd
, inbuf
, sizeof(inbuf
), MAX_TCP_READ
);
sscanf(inbuf
,"%s",tmpstr
);
status
= SetCtrlVal
(p1h
, P1_TSRC
, tmpstr
);
sprintf(outbuf
,"TSLP?\n");
LECROY_TCP_write
(sockfd
, outbuf
);
LECROY_TCP_read
(sockfd
, inbuf
, sizeof(inbuf
), MAX_TCP_READ
);
sscanf(inbuf
,"%s",tmpstr
);
status
= SetCtrlVal
(p1h
, P1_TSLP
, tmpstr
);
}
}
break;
// vertical
case P1_TRA_1
:
case P1_TRA_2
:
case P1_TRA_3
:
case P1_TRA_4
:
for (i
=0;i
<4;i
++) {
if (rID
==p1_tra
[i
]) {
status
= GetCtrlVal
(p1h
, p1_tra
[i
], &tmpint
);
if (tmpint
) {
sprintf(outbuf
,"C%1d:TRA ON\n",i
+1);
}else{
sprintf(outbuf
,"C%1d:TRA OFF\n",i
+1);
}
LECROY_TCP_write
(sockfd
, outbuf
);
}
}
break;
case P1_VDIV_1
:
case P1_VDIV_2
:
case P1_VDIV_3
:
case P1_VDIV_4
:
for (i
=0;i
<4;i
++) {
if (rID
==p1_vdiv
[i
]) {
status
= GetCtrlVal
(p1h
, p1_vdiv
[i
], &tmpfloat
);
sprintf(outbuf
,"C%1d:VDIV %.3f\n",i
+1,tmpfloat
);
LECROY_TCP_write
(sockfd
, outbuf
);
}
}
break;
case P1_BWL_1
:
case P1_BWL_2
:
case P1_BWL_3
:
case P1_BWL_4
:
for (i
=0;i
<4;i
++) {
if (rID
==p1_bwl
[i
]) {
status
= GetCtrlVal
(p1h
, p1_bwl
[i
], tmpstr
);
sprintf(outbuf
,"C%1d:BWL %s\n",i
+1,tmpstr
);
LECROY_TCP_write
(sockfd
, outbuf
);
}
}
break;
// horizontal
case P1_TDIV
:
if (!connected
) break;
status
= GetCtrlVal
(p1h
, P1_TDIV
, tmpstr
);
sprintf(outbuf
,"TDIV %s\n",tmpstr
);
LECROY_TCP_write
(sockfd
, outbuf
);
break;
case P1_PERS
:
if (!connected
) break;
status
= GetCtrlVal
(p1h
, P1_PERS
, tmpstr
);
sprintf(outbuf
,"PERS %s\n",tmpstr
);
LECROY_TCP_write
(sockfd
, outbuf
);
break;
// trigger
case P1_TLVL
:
if (!connected
) break;
status
= GetCtrlVal
(p1h
, P1_TLVL
, &tmpfloat
);
sprintf(outbuf
,"TLVL %f\n",tmpfloat
);
LECROY_TCP_write
(sockfd
, outbuf
);
break;
case P1_TRDL
:
if (!connected
) break;
status
= GetCtrlVal
(p1h
, P1_TRDL
, &tmpfloat
);
sprintf(outbuf
,"TRDL %.2E\n",tmpfloat
);
LECROY_TCP_write
(sockfd
, outbuf
);
break;
case P1_TSLP
:
if (!connected
) break;
status
= GetCtrlVal
(p1h
, P1_TSLP
, tmpstr
);
sprintf(outbuf
,"TSLP %s\n",tmpstr
);
LECROY_TCP_write
(sockfd
, outbuf
);
break;
case P1_TSRC
:
if (!connected
) break;
status
= GetCtrlVal
(p1h
, P1_TSRC
, tmpstr
);
sprintf(outbuf
,"TSRC %s\n",tmpstr
);
LECROY_TCP_write
(sockfd
, outbuf
);
break;
case P1_TRMD
:
if (!connected
) break;
status
= GetCtrlVal
(p1h
, P1_TRMD
, tmpstr
);
sprintf(outbuf
,"TRMD %s\n",tmpstr
);
LECROY_TCP_write
(sockfd
, outbuf
);
break;
case P1_TEST
:
if (!connected
) break;
strcpy(outbuf
,"GTL\n");
LECROY_TCP_write
(sockfd
, outbuf
);
break;
//case P1_GET_SETUP:
// break;
default:
break;
}
} while ((rID
!= P1_EXIT
));
if (connected
) {
strcpy(outbuf
,"GTL\n");
LECROY_TCP_write
(sockfd
, outbuf
);
LECROY_TCP_disconnect
(sockfd
);
}
DiscardPanel
(p1h
);
CmtDiscardThreadPool
(poolHandle
);
return 0;
}