Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

  1. //==============================================================================
  2. //
  3. // Title:               prologix.c
  4. // Purpose:             A short description of the implementation.
  5. //
  6. // Created on:  29.11.2014 at 20:51:03 by korpar.
  7. // Copyright:   . All Rights Reserved.
  8. //
  9. //==============================================================================
  10.  
  11. //==============================================================================
  12. // Include files
  13.  
  14. #include <rs232.h>
  15. #include <utility.h>
  16. #include <ansi_c.h>
  17. #include "prologix.h"
  18.  
  19. //==============================================================================
  20. // Constants
  21.  
  22. //==============================================================================
  23. // Types
  24.  
  25. //==============================================================================
  26. // Static global variables
  27.  
  28. //==============================================================================
  29. // Static functions
  30.  
  31. //==============================================================================
  32. // Global variables
  33.  
  34. //==============================================================================
  35. // Global functions
  36.  
  37. #ifdef PROLOGIX_MAIN
  38. #  include <cvirte.h>
  39. //#  include "PROLOGIX_uic.h"
  40. #  include "PROLOGIX_ui.h"
  41. #endif
  42.  
  43. #define COMWAIT 3.1
  44. #define COMDELAY 0.05
  45.  
  46. static char PROLOGIX_Out[100], PROLOGIX_In[100];
  47. static int PROLOGIX_Port;
  48. static int nin, nout;
  49.  
  50. int _VI_FUNC PROLOGIX_Open (int port)
  51. {
  52.   int status;
  53.   PROLOGIX_Port=port;
  54.   status=OpenComConfig (PROLOGIX_Port, "", 38400, 0, 8, 1, 512, 512);
  55.   if (status) return status;
  56.   SetXMode (PROLOGIX_Port, 0);
  57.   SetCTSMode (PROLOGIX_Port, LWRS_HWHANDSHAKE_OFF);
  58.   SetComTime (PROLOGIX_Port, COMWAIT);
  59.   PROLOGIX_Send("++savecfg 0");
  60.   return 0;
  61. }
  62.  
  63. int _VI_FUNC PROLOGIX_Send (char command[])
  64. {
  65.   Delay(COMDELAY);
  66.   FlushInQ (PROLOGIX_Port);
  67.   nout = sprintf (PROLOGIX_Out, "%s\r", command);
  68.   if (nout != ComWrt (PROLOGIX_Port, PROLOGIX_Out, nout)){
  69.     return -1;
  70.   }else{
  71.     return 0;
  72.   }
  73. }
  74.  
  75. int _VI_FUNC PROLOGIX_Receive (char received[], int length)
  76. {
  77.   nin = ComRdTerm (PROLOGIX_Port, received, length, 0xa);
  78.   if (nin>=0) received[nin]=0;
  79.   return nin;
  80. }
  81.  
  82. int _VI_FUNC PROLOGIX_SetAddr (int *primaryAddr, int *secondaryAddr)
  83. {
  84.   int nread;
  85.   char cmd[100];
  86.  
  87.   if (*primaryAddr<0) {
  88.     PROLOGIX_Send("++addr");
  89.     PROLOGIX_Receive(cmd,100);
  90.     return sscanf(cmd,"%d %d",primaryAddr,secondaryAddr);
  91.   } else if (*primaryAddr<31) {
  92.     sprintf(cmd,"++addr %0d",*primaryAddr);
  93.     if ((*secondaryAddr>=0)&&(*secondaryAddr<31))
  94.       sprintf(cmd,"%s %0d",cmd,*secondaryAddr);
  95.     return PROLOGIX_Send(cmd);
  96.   } else return -1;
  97. }
  98.  
  99. void _VI_FUNC PROLOGIX_Close (void)
  100. {
  101.   CloseCom (PROLOGIX_Port);
  102. }
  103.  
  104. #ifdef PROLOGIX_MAIN
  105.  
  106. int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  107.                        LPSTR lpszCmdLine, int nCmdShow)
  108. {
  109.   int i,j,nch;
  110.   int paddr,saddr;
  111.   int nlines,atline;
  112.   int evcontrl,evpanel,p1_h,ierr;
  113.   int port,comled;
  114.   char cmd[100],res[100];
  115.  
  116.   if (InitCVIRTE (hInstance, 0, 0) == 0)
  117.     return -1;    /* out of memory */
  118.  
  119.   p1_h = LoadPanel (0,"PROLOGIX_ui.uir", P1);
  120. //  p1_h = BuildP1 (0);
  121.   ierr = DisplayPanel (p1_h);
  122.  
  123.   while (1)
  124.   {
  125.     ierr = GetUserEvent (1, &evpanel, &evcontrl);
  126.     if (evcontrl == P1_EXIT_B) break;
  127.     GetCtrlVal (p1_h, P1_COMLED, &comled);
  128.     if (!comled){
  129.       GetCtrlVal (p1_h, P1_PORT, &port);
  130.       if (PROLOGIX_Open (port)) continue;
  131.       SetCtrlVal (p1_h, P1_COMLED, 1);
  132.     }
  133.     switch (evcontrl)
  134.     {
  135.       case P1_SEND_B:
  136.       case P1_SEND_S:
  137.         ierr = GetCtrlVal (p1_h, P1_SEND_S, cmd);
  138.         PROLOGIX_Send (cmd);
  139.         nch=PROLOGIX_Receive(res,100);
  140.         if (nch>0) {
  141.           ierr = SetCtrlVal (p1_h, P1_REPLY_N, nch);
  142.           ierr = SetCtrlVal (p1_h, P1_REPLY_S, res);
  143.         }
  144.         break;
  145.       case P1_STATUS_B:
  146.         PROLOGIX_Send("++savecfg");
  147.         nch=PROLOGIX_Receive(res,100);
  148.         sscanf(res,"%d",&i);
  149.         ierr=SetCtrlVal(p1_h,P1_SAVECFG_L,i);
  150.         PROLOGIX_Send("++mode");
  151.         nch=PROLOGIX_Receive(res,100);
  152.         sscanf(res,"%d",&i);
  153.         ierr=SetCtrlVal(p1_h,P1_MODE_L,i);
  154.         paddr=-1;
  155.         if (PROLOGIX_SetAddr(&paddr,&saddr)==1) saddr=-1;
  156.         ierr=SetCtrlVal(p1_h,P1_PADDR_N,paddr);
  157.         ierr=SetCtrlVal(p1_h,P1_SADDR_N,saddr);
  158.         sprintf(res,"PrimaryAddr=%d, SecondaryAddr=%d",paddr,saddr);
  159.         ierr=InsertTextBoxLine(p1_h,P1_MESSAGE_TB,-1,res);
  160.         PROLOGIX_Send("++auto");
  161.         nch=PROLOGIX_Receive(res,100);
  162.         sscanf(res,"%d",&i);
  163.         ierr=SetCtrlVal(p1_h,P1_AUTO_L,i);
  164.         PROLOGIX_Send("++eoi");
  165.         nch=PROLOGIX_Receive(res,100);
  166.         sscanf(res,"%d",&i);
  167.         ierr=SetCtrlVal(p1_h,P1_EOI_L,i);
  168.         PROLOGIX_Send("++eos");
  169.         nch=PROLOGIX_Receive(res,100);
  170.         sscanf(res,"%d",&i);
  171.         ierr=SetCtrlVal(p1_h,P1_EOS_R,i);
  172.         PROLOGIX_Send("++eot_enable");
  173.         nch=PROLOGIX_Receive(res,100);
  174.         sscanf(res,"%d",&i);
  175.         ierr=SetCtrlVal(p1_h,P1_EOTEN_L,i);
  176.         PROLOGIX_Send("++eot_char");
  177.         nch=PROLOGIX_Receive(res,100);
  178.         sscanf(res,"%d",&i);
  179.         ierr=SetCtrlVal(p1_h,P1_EOTCH_N,i);
  180.         PROLOGIX_Send("++read_tmo_ms");
  181.         nch=PROLOGIX_Receive(res,100);
  182.         sscanf(res,"%d",&i);
  183.         ierr=SetCtrlVal(p1_h,P1_READTO_N,i);
  184.         break;
  185.       default:
  186.         break;
  187.     }
  188.   }
  189.  
  190.   GetCtrlVal (p1_h, P1_COMLED, &comled);
  191.   if (comled) PROLOGIX_Close ();
  192.  
  193.   return 0;
  194. }
  195.  
  196. #endif PROLOGIX_MAIN
  197.