Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 254 | f9daq | 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 |