comparison DDS4xAD9912.c @ 142:fd085d61e4ca

Rework data logging
author Daniele Nicolodi <daniele.nicolodi@obspm.fr>
date Wed, 22 Jan 2014 14:45:23 +0100
parents 43b35f4aae78
children d96f0b04f7fe
comparison
equal deleted inserted replaced
141:e1dec4f11831 142:fd085d61e4ca
1 #include <ansi_c.h>
1 #include <utility.h> 2 #include <utility.h>
2 3 #include <userint.h>
3 //============================================================================== 4 #include <tcpsupp.h>
4 //
5 // Title: DDS4xAD9912.c
6 // Purpose:
7 //
8 // Created on: by Volodimer Laurent, modified by YLC
9 // Copyright: syrte. All Rights Reserved.
10 //
11 //==============================================================================
12
13 //==============================================================================
14 // Include files
15 5
16 #include "DDS4xAD9912.h" 6 #include "DDS4xAD9912.h"
17 #include <userint.h>
18 #include <tcpsupp.h>
19 #include <ansi_c.h>
20 7
21 //==============================================================================
22 // Global functions
23 8
24 static int OnTCPEvent(unsigned handle, int xType, int errCode, void *callbackData) 9 static int OnTCPEvent(unsigned handle, int xType, int errCode, void *callbackData)
10 {
11 switch(xType)
25 { 12 {
26 switch(xType) 13 case TCP_DISCONNECT:
27 {
28 case TCP_DISCONNECT :
29 break; 14 break;
30 case TCP_DATAREADY : 15 case TCP_DATAREADY:
31 ClientTCPRead (handle, Response, sizeof(Response), 0); 16 ClientTCPRead(handle, Response, sizeof(Response), 0);
32 break; 17 break;
33 }
34 return 0;
35 } 18 }
19 return 0;
20 }
36 21
37 22
38 //============================================================================== 23 //==============================================================================
39 // DDS4xAD9912_SendCmd 24 // DDS4xAD9912_SendCmd
40 // 25 //
41 // FUNC : envoie une chaine de caracteres sur un port du serveur TCP/IP de la foxboard 26 // FUNC : envoie une chaine de caracteres sur un port du serveur TCP/IP de la foxboard
42 // PARAM : DDSNum contient le numero de la DDS (1,2,3 ou 4) 27 // PARAM : DDSNum contient le numero de la DDS (1,2,3 ou 4)
43 // PARAM : Buffer contenant la chaîne de caractères à envoyer 28 // PARAM : Buffer contenant la chaîne de caractères à envoyer
44 // RETURN : 0 si la connexion et l'ecriture sur le serveur TCP/IP sont OK 29 // RETURN : 0 si la connexion et l'ecriture sur le serveur TCP/IP sont OK
45 //============================================================================== 30 //==============================================================================
46
47
48 static int DDS4xAD9912_SendCmd(int DDSNum, char * Buffer) 31 static int DDS4xAD9912_SendCmd(int DDSNum, char * Buffer)
49 { 32 {
50 int port = 0; 33 int port = 0;
51 int rv; 34 int rv;
52 35
89 // 72 //
90 // FUNC : reset des 4 DDS 73 // FUNC : reset des 4 DDS
91 // PARAM : 74 // PARAM :
92 // RETURN : 0 si le reset de la DDS 1 , DDS 2, DDS3 et DDS4 est OK 75 // RETURN : 0 si le reset de la DDS 1 , DDS 2, DDS3 et DDS4 est OK
93 //============================================================================== 76 //==============================================================================
94
95 int DDS4xAD9912_Reset(DDS4xAD9912_Data * Instance) 77 int DDS4xAD9912_Reset(DDS4xAD9912_Data * Instance)
96 { 78 {
97 int res_1,res_2; 79 int chan, rv;
98 80
99 sprintf(Request,"set;%i;%i",1,17); 81 for (chan = 1; chan < 5; chan++) {
100 res_1 = DDS4xAD9912_SendCmd(1,Request) ; 82 sprintf(Request, "set;%i;%i", 1, 17);
101 if(res_1 <0) { 83 rv = DDS4xAD9912_SendCmd(chan, Request);
102 MessagePopup("DDS Serveur", "DDS4xAD9912_1 Reset failed !") ; 84 if (rv < 0) {
85 MessagePopup("DDS Serveur", "DDS4xAD9912 reset failed");
86 return -1;
103 } 87 }
104 else Instance->Frequency1 = 0.0 ; 88 Instance->frequency[chan - 1] = 0.0;
105 89 }
106 sprintf(Request,"set;%i;%i",1,17); 90 return 0;
107 res_2 = DDS4xAD9912_SendCmd(2,Request) ; 91 }
108 if(res_2 <0) {
109 MessagePopup("DDS Serveur", "DDS4xAD9912_2 Reset failed !") ;
110 }
111 else Instance->Frequency2 = 0.0;
112
113 sprintf(Request,"set;%i;%i",1,17);
114 res_2 = DDS4xAD9912_SendCmd(3,Request) ;
115 if(res_2 <0) {
116 MessagePopup("DDS Serveur", "DDS4xAD9912_3 Reset failed !") ;
117 }
118 else Instance->Frequency3 = 0.0;
119
120 sprintf(Request,"set;%i;%i",1,17);
121 res_2 = DDS4xAD9912_SendCmd(4,Request) ;
122 if(res_2 <0) {
123 MessagePopup("DDS Serveur", "DDS4xAD9912_4 Reset failed !") ;
124 }
125 else Instance->Frequency4 = 0.0;
126
127
128 return (res_1+res_2);
129 }
130 92
131 93
132 //============================================================================== 94 //==============================================================================
133 // DDS4xAD9912_SetFreq 95 // DDS4xAD9912_SetFreq
134 // 96 //
139 int DDS4xAD9912_SetFrequency(DDS4xAD9912_Data * Instance, int DDSNum, double Freq) 101 int DDS4xAD9912_SetFrequency(DDS4xAD9912_Data * Instance, int DDSNum, double Freq)
140 { 102 {
141 103
142 double Word=WORD(Freq,Clk) ; 104 double Word=WORD(Freq,Clk) ;
143 double reste ; 105 double reste ;
144 int res_0 ; 106 int rv;
145 unsigned char b5,b4,b3,b2,b1,b0 ; 107 unsigned char b5,b4,b3,b2,b1,b0 ;
146 108
147 b5=(unsigned char)(Word/E40); 109 b5=(unsigned char)(Word/E40);
148 b4=(unsigned char)((Word - E40*b5)/E32); 110 b4=(unsigned char)((Word - E40*b5)/E32);
149 b3=(unsigned char)((Word - E40*b5 - E32*b4)/E24); 111 b3=(unsigned char)((Word - E40*b5 - E32*b4)/E24);
151 b1=(unsigned char)((Word - E40*b5 - E32*b4 - E24*b3 - E16*b2)/E8); 113 b1=(unsigned char)((Word - E40*b5 - E32*b4 - E24*b3 - E16*b2)/E8);
152 b0=(unsigned char)((Word - E40*b5 - E32*b4 - E24*b3 - E16*b2 - E8*b1)/1.0); 114 b0=(unsigned char)((Word - E40*b5 - E32*b4 - E24*b3 - E16*b2 - E8*b1)/1.0);
153 reste = (Word - E40*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1-1.0*b0) ; 115 reste = (Word - E40*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1-1.0*b0) ;
154 116
155 sprintf(Request,"set;%i;%i;%i;%i;%i;%i;%i;%i",0,10,b5,b4,b3,b2,b1,b0); 117 sprintf(Request,"set;%i;%i;%i;%i;%i;%i;%i;%i",0,10,b5,b4,b3,b2,b1,b0);
156 res_0 = DDS4xAD9912_SendCmd(DDSNum, Request) ; 118 rv = DDS4xAD9912_SendCmd(DDSNum, Request) ;
157 if (res_0 <0) { 119 if (rv < 0) {
158 MessagePopup("DDS Serveur", "SetFrequency function failed !") ; 120 MessagePopup("DDS Serveur", "SetFrequency function failed !");
159 } 121 return -1;
160 else { 122 }
161 if (DDSNum==1) Instance->Frequency1 = Freq - reste*Clk/E48 ; 123
162 if (DDSNum==2) Instance->Frequency2 = Freq - reste*Clk/E48 ; 124 sprintf(Request,"set;%i;%i",0,18);
163 if (DDSNum==3) Instance->Frequency3 = Freq - reste*Clk/E48 ; 125 rv = DDS4xAD9912_SendCmd(DDSNum, Request) ;
164 if (DDSNum==4) Instance->Frequency4 = Freq - reste*Clk/E48 ; 126 if (rv < 0) {
165 } ; 127 MessagePopup("DDS Serveur", "IO_Update function failed !");
166 128 return -1;
167 sprintf(Request,"set;%i;%i",0,18); // IO_Update logiciel 129 }
168 res_0 = DDS4xAD9912_SendCmd(DDSNum, Request) ; 130
169 if (res_0 <0) { 131 Instance->frequency[DDSNum - 1] = Freq - reste * Clk / E48;
170 MessagePopup("DDS Serveur", "IO_Update function failed !") ; 132 return 0;
171 } 133 }
172 return(res_0) ;
173
174 }
175 134
176 135
177 /* 136 /*
178 * ramp DDS frequency from `f1` to `f2` in steps of `fstep` 137 * ramp DDS frequency from `f1` to `f2` in steps of `fstep`
179 * with a delay of 0.01 seoconds after each step 138 * with a delay of 0.01 seoconds after each step
213 } 172 }
214 173
215 174
216 double DDS4xAD9912_GetFrequency(DDS4xAD9912_Data *dds, int channel) 175 double DDS4xAD9912_GetFrequency(DDS4xAD9912_Data *dds, int channel)
217 { 176 {
218 switch (channel) { 177 return dds->frequency[channel - 1];
219 case 1:
220 return dds->Frequency1;
221 case 2:
222 return dds->Frequency2;
223 case 3:
224 return dds->Frequency3;
225 case 4:
226 return dds->Frequency4;
227 default:
228 return 0.0;
229 }
230 } 178 }
231 179