Subversion Repositories f9daq

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #include <formatio.h>
  2. #include <userint.h>
  3. #include <ansi_c.h>
  4. #include <utility.h>
  5. #include <tcpsupp.h>
  6. #include <cvirte.h>
  7.  
  8. #include "lecroy_tcp.h"
  9. #include "wavejet_ui.h"
  10.  
  11. //#define SCOPE_IP "192.168.1.11"
  12. #define MAX_TCP_CONNECT         5       /* time in secs to get a connection */
  13. #define MAX_TCP_READ            3       /* time in secs to wait for the DSO
  14.                                            to respond to a read request */
  15. #define MAX_ST  512     /* maximum message string. no picked from thin air */
  16.  
  17. #define MAX_THREADS 10
  18.  
  19. static int sockfd;
  20. static int p1h, pID, rID, tfID;
  21. static int poolHandle = 0;
  22.  
  23.  
  24.  
  25. int CVICALLBACK cb_timer (int panel, int control, int event, void *callbackData,
  26.                            int eventData1, int eventData2)
  27. {                              
  28.   QueueUserEvent (9000, p1h, P1_TIMER);
  29.   return (0);
  30. }
  31. /*
  32. int CVICALLBACK daq_run(void *functionData)
  33. {
  34.   return (0);
  35. }
  36. */
  37.  
  38. int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  39.                                            LPSTR lpszCmdLine, int nCmdShow)
  40. {
  41.   int i;
  42.   int status,connected,displen;
  43.   int refon;
  44.   int tmpindex,tmpint;
  45.   int p1_tra[5]={P1_TRA_1,P1_TRA_2,P1_TRA_3,P1_TRA_4,0};
  46.   int p1_vdiv[5]={P1_VDIV_1,P1_VDIV_2,P1_VDIV_3,P1_VDIV_4,0};
  47.   int p1_bwl[5]={P1_BWL_1,P1_BWL_2,P1_BWL_3,P1_BWL_4,0};
  48.   float tmpfloat;
  49.   char ip_address[50],tmpstr[100];
  50.   char outbuf[MAX_ST],inbuf[MAX_ST];
  51.   char display[500000],imgfn[300],ftyp[10];
  52.  
  53.   FILE *imgfp;
  54.  
  55.   connected=0;
  56.  
  57.   if (InitCVIRTE (hInstance, 0, 0) == 0)
  58.                 return -1;    /* out of memory */
  59.  
  60.   SetSleepPolicy(VAL_SLEEP_MORE);
  61.   CmtNewThreadPool (MAX_THREADS, &poolHandle);
  62.  
  63.   SetStdioWindowOptions (1000, 0, 0);
  64.   SetStdioWindowSize (150, 600);
  65.   SetStdioWindowPosition (100, 20);
  66.  
  67.   if ((p1h = LoadPanel (0, "wavejet_ui.uir", P1)) < 0) return -1;
  68.   DisplayPanel (p1h);
  69.  
  70.  
  71. //  SetCtrlAttribute (p1h, P1_PLCH, ATTR_MAX_VALUE, NCH-1);
  72.   QueueUserEvent (1000, p1h, P1_IPF);
  73.  
  74.   do {
  75.     GetUserEvent (1, &pID, &rID);
  76.         switch (rID) {
  77.           case P1_UPDATE:
  78.             if (!connected) break;
  79.             sprintf(outbuf,"TSCRN? BMP\n");
  80.         LECROY_TCP_write(sockfd, outbuf);
  81.         LECROY_TCP_read(sockfd, display, sizeof(display), MAX_TCP_READ);
  82.         sscanf(display,"# %1d %8d",&status,&displen);
  83.         imgfp = fopen ("tmp.bmp", "wb");
  84.         status = fwrite (&display[10], 1, displen, imgfp);
  85.         status = fclose (imgfp);
  86.                 status = DisplayImageFile (p1h, P1_DISPLAY, "tmp.bmp");
  87.         break;
  88.           case P1_DSAV:
  89.             if (!connected) break;
  90.         status = GetCtrlVal (p1h, P1_DSAV, tmpstr);
  91.         sprintf(ftyp,"*.%s",tmpstr);
  92.                 StringLowerCase (ftyp);
  93.                 status = FileSelectPopup ("", ftyp, ftyp,"Hard copy", VAL_SAVE_BUTTON,
  94.                                           0, 1, 1, 1, imgfn);
  95.             if (status<1) break;
  96.                 sprintf(outbuf,"TSCRN? %s\n",tmpstr);
  97.         LECROY_TCP_write(sockfd, outbuf);
  98.         LECROY_TCP_read(sockfd, display, sizeof(display), MAX_TCP_READ);
  99.         sscanf(display,"# %1d %8d",&status,&displen);
  100.         imgfp = fopen (imgfn, "wb");
  101.         status = fwrite (&display[10], 1, displen, imgfp);
  102.         status = fclose (imgfp);
  103.         break;
  104.           case P1_GET_SETUP:
  105.             if (!connected) break;
  106.             break;
  107.       case P1_TIMER:
  108.         //ntics+=1;
  109.         GetCtrlVal (p1h, P1_REFRESH, &refon);
  110.                 if (refon) QueueUserEvent (9000, p1h, P1_UPDATE);
  111.             break;
  112.       case P1_REFRESH:
  113.             break;
  114.           /*
  115.           case P1_DAQ:
  116.                 GetCtrlVal (p1h, P1_DAQ, &daq_on);
  117.                 if (daq_on) {
  118.                   CmtScheduleThreadPoolFunction (poolHandle, daq_run, (void *)&dummy, &tfID);
  119.                 } else {
  120.           CmtWaitForThreadPoolFunctionCompletion (poolHandle, tfID,
  121.                                                                                                   OPT_TP_PROCESS_EVENTS_WHILE_WAITING);
  122.                   CmtReleaseThreadPoolFunctionID (poolHandle, tfID);
  123.                 }
  124.             break;
  125.             */
  126.       case P1_IPF:
  127.           status = GetCtrlVal (p1h, P1_IPF, ip_address);
  128.           status = SetCtrlVal (p1h, P1_IP, ip_address);
  129.             break;
  130.           case P1_CONNECT:
  131.         if (connected) {
  132.           strcpy(outbuf,"GTL\n");
  133.           LECROY_TCP_write(sockfd, outbuf);
  134.           LECROY_TCP_disconnect(sockfd);
  135.           status = SetCtrlVal (p1h, P1_ID, "");
  136.           connected=0;
  137.         }else{
  138.           status = GetCtrlVal (p1h, P1_IP, ip_address);
  139.           sockfd=LECROY_TCP_connect(ip_address, MAX_TCP_CONNECT);
  140.           if (sockfd<0) {
  141.             //printf("\nCould not connect to the scope on IP: %s\n",ip_address);
  142.             status = SetCtrlVal (p1h, P1_ID, "Could not connect!");
  143.             status = SetCtrlVal (p1h, P1_CONNECT, 0);
  144.             break;
  145.           }else{
  146.             connected=1;
  147.             strcpy(outbuf,"*idn?\n");
  148.             LECROY_TCP_write(sockfd, outbuf);
  149.             LECROY_TCP_read(sockfd, inbuf, sizeof(inbuf), MAX_TCP_READ);
  150.             status = SetCtrlVal (p1h, P1_ID, inbuf);
  151.            
  152.             for (i=0;i<4;i++) {
  153.               sprintf(outbuf,"C%1d:TRA?\n",i+1);
  154.               LECROY_TCP_write(sockfd, outbuf);
  155.               LECROY_TCP_read(sockfd, inbuf, sizeof(inbuf), MAX_TCP_READ);
  156.               if (FindPattern (inbuf, 0, 2, "ON", 1, 0)) {
  157.                 status = SetCtrlVal (p1h, p1_tra[i], 0);
  158.               }else{
  159.                 status = SetCtrlVal (p1h, p1_tra[i], 1);
  160.               }
  161.              
  162.               sprintf(outbuf,"C%1d:VDIV?\n",i+1);
  163.               LECROY_TCP_write(sockfd, outbuf);
  164.               LECROY_TCP_read(sockfd, inbuf, sizeof(inbuf), MAX_TCP_READ);
  165.               sscanf(inbuf,"%g",&tmpfloat);
  166.               status = SetCtrlVal (p1h, p1_vdiv[i], tmpfloat);
  167.              
  168.               sprintf(outbuf,"C%1d:BWL?\n",i+1);
  169.               LECROY_TCP_write(sockfd, outbuf);
  170.               LECROY_TCP_read(sockfd, inbuf, sizeof(inbuf), MAX_TCP_READ);
  171.               sscanf(inbuf,"%s",tmpstr);
  172.               status = SetCtrlVal (p1h, p1_bwl[i], tmpstr);
  173.             }
  174.  
  175.             sprintf(outbuf,"PERS?\n");
  176.             LECROY_TCP_write(sockfd, outbuf);
  177.             LECROY_TCP_read(sockfd, inbuf, sizeof(inbuf), MAX_TCP_READ);
  178.             sscanf(inbuf,"%s",tmpstr);
  179.             status = SetCtrlVal (p1h, P1_PERS, tmpstr);
  180.            
  181.             sprintf(outbuf,"TSRC?\n");
  182.             LECROY_TCP_write(sockfd, outbuf);
  183.             LECROY_TCP_read(sockfd, inbuf, sizeof(inbuf), MAX_TCP_READ);
  184.             sscanf(inbuf,"%s",tmpstr);
  185.             status = SetCtrlVal (p1h, P1_TSRC, tmpstr);
  186.            
  187.             sprintf(outbuf,"TSLP?\n");
  188.             LECROY_TCP_write(sockfd, outbuf);
  189.             LECROY_TCP_read(sockfd, inbuf, sizeof(inbuf), MAX_TCP_READ);
  190.             sscanf(inbuf,"%s",tmpstr);
  191.             status = SetCtrlVal (p1h, P1_TSLP, tmpstr);
  192.           }
  193.         }
  194.             break;
  195.           // vertical
  196.           case P1_TRA_1:
  197.           case P1_TRA_2:
  198.           case P1_TRA_3:
  199.           case P1_TRA_4:
  200.             for (i=0;i<4;i++) {
  201.               if (rID==p1_tra[i]) {
  202.             status = GetCtrlVal (p1h, p1_tra[i], &tmpint);
  203.             if (tmpint) {
  204.               sprintf(outbuf,"C%1d:TRA ON\n",i+1);
  205.             }else{
  206.               sprintf(outbuf,"C%1d:TRA OFF\n",i+1);
  207.             }
  208.             LECROY_TCP_write(sockfd, outbuf);
  209.           }
  210.         }
  211.         break;
  212.           case P1_VDIV_1:
  213.           case P1_VDIV_2:
  214.           case P1_VDIV_3:
  215.           case P1_VDIV_4:
  216.             for (i=0;i<4;i++) {
  217.               if (rID==p1_vdiv[i]) {
  218.             status = GetCtrlVal (p1h, p1_vdiv[i], &tmpfloat);
  219.             sprintf(outbuf,"C%1d:VDIV %.3f\n",i+1,tmpfloat);
  220.             LECROY_TCP_write(sockfd, outbuf);
  221.           }
  222.         }
  223.         break;
  224.           case P1_BWL_1:
  225.           case P1_BWL_2:
  226.           case P1_BWL_3:
  227.           case P1_BWL_4:
  228.             for (i=0;i<4;i++) {
  229.               if (rID==p1_bwl[i]) {
  230.             status = GetCtrlVal (p1h, p1_bwl[i], tmpstr);
  231.             sprintf(outbuf,"C%1d:BWL %s\n",i+1,tmpstr);
  232.             LECROY_TCP_write(sockfd, outbuf);
  233.           }
  234.         }
  235.         break;
  236.           // horizontal
  237.           case P1_TDIV:
  238.             if (!connected) break;
  239.         status = GetCtrlVal (p1h, P1_TDIV, tmpstr);
  240.                 sprintf(outbuf,"TDIV %s\n",tmpstr);
  241.         LECROY_TCP_write(sockfd, outbuf);
  242.             break;
  243.           case P1_PERS:
  244.             if (!connected) break;
  245.         status = GetCtrlVal (p1h, P1_PERS, tmpstr);
  246.                 sprintf(outbuf,"PERS %s\n",tmpstr);
  247.         LECROY_TCP_write(sockfd, outbuf);
  248.             break;
  249.           // trigger
  250.           case P1_TLVL:
  251.             if (!connected) break;
  252.         status = GetCtrlVal (p1h, P1_TLVL, &tmpfloat);
  253.                 sprintf(outbuf,"TLVL %f\n",tmpfloat);
  254.         LECROY_TCP_write(sockfd, outbuf);
  255.             break;
  256.           case P1_TRDL:
  257.             if (!connected) break;
  258.         status = GetCtrlVal (p1h, P1_TRDL, &tmpfloat);
  259.                 sprintf(outbuf,"TRDL %.2E\n",tmpfloat);
  260.         LECROY_TCP_write(sockfd, outbuf);
  261.             break;
  262.           case P1_TSLP:
  263.             if (!connected) break;
  264.         status = GetCtrlVal (p1h, P1_TSLP, tmpstr);
  265.                 sprintf(outbuf,"TSLP %s\n",tmpstr);
  266.         LECROY_TCP_write(sockfd, outbuf);
  267.             break;
  268.           case P1_TSRC:
  269.             if (!connected) break;
  270.         status = GetCtrlVal (p1h, P1_TSRC, tmpstr);
  271.                 sprintf(outbuf,"TSRC %s\n",tmpstr);
  272.         LECROY_TCP_write(sockfd, outbuf);
  273.             break;
  274.           case P1_TRMD:
  275.             if (!connected) break;
  276.         status = GetCtrlVal (p1h, P1_TRMD, tmpstr);
  277.                 sprintf(outbuf,"TRMD %s\n",tmpstr);
  278.         LECROY_TCP_write(sockfd, outbuf);
  279.             break;
  280.           case P1_TEST:
  281.             if (!connected) break;
  282.         strcpy(outbuf,"GTL\n");
  283.         LECROY_TCP_write(sockfd, outbuf);
  284.             break;
  285.           //case P1_GET_SETUP:
  286.           //  break;
  287.           default:
  288.             break;
  289.         }
  290.        
  291.   } while ((rID != P1_EXIT));
  292.            
  293.   if (connected) {
  294.     strcpy(outbuf,"GTL\n");
  295.     LECROY_TCP_write(sockfd, outbuf);
  296.     LECROY_TCP_disconnect(sockfd);
  297.   }
  298.  
  299.   DiscardPanel (p1h);
  300.   CmtDiscardThreadPool (poolHandle);
  301.  
  302.   return 0;
  303. }
  304.