Mercurial > hg > fxanalyse
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 |