comparison DDS4xAD9959.c @ 0:d9aae7d7f2c6

Import
author Daniele Nicolodi <daniele.nicolodi@obspm.fr>
date Tue, 03 Jul 2012 10:38:59 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:d9aae7d7f2c6
1
2 //==============================================================================
3 //
4 // Title: DDS4xAD9959.c
5 // Purpose:
6 //
7 // Created on: by Volodimer Laurent, modified by YLC
8 // Copyright: syrte. All Rights Reserved.
9 //
10 //==============================================================================
11
12 //==============================================================================
13 // Include files
14
15 #include "DDS4xAD9959.h"
16 #include <userint.h>
17 #include <tcpsupp.h>
18 #include <ansi_c.h>
19
20 //==============================================================================
21
22 // Global functions
23
24 static int OnTCPEvent(unsigned handle, int xType, int errCode, void *callbackData)
25 {
26 switch(xType)
27 {
28 case TCP_DISCONNECT :
29 break;
30 case TCP_DATAREADY :
31 ClientTCPRead (handle, Response, sizeof(Response), 0);
32 break;
33 }
34 return 0;
35 }
36
37
38 //==============================================================================
39 // DDS4xAD9912_SendCmd
40 //
41 // 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)
43 // 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
45 //==============================================================================
46
47
48 static int DDS4XAD9959_SendCmd(int DDSNum, char * Buffer) // essentially a private function
49 {
50 int res_1,res_2;
51
52 switch(DDSNum)
53 {
54 case 1:
55 res_1=ConnectToTCPServer (&hConv, Port1, Adress, OnTCPEvent, 0, 0);
56 if(res_1 <0) MessagePopup("DDS4XAD9959_1 Serveur", "Connection to server failed !");
57 break;
58 case 2:
59 res_1=ConnectToTCPServer (&hConv, Port2, Adress, OnTCPEvent, 0, 0);
60 if(res_1 <0) MessagePopup("DDS4XAD9959_2 Serveur", "Connection to server failed !");
61 break;
62
63 case 3:
64 res_1=ConnectToTCPServer (&hConv, Port3, Adress, OnTCPEvent, 0, 0);
65 if(res_1 <0) MessagePopup("DDS4XAD9959_3 Serveur", "Connection to server failed !");
66 break;
67
68 case 4:
69 res_1=ConnectToTCPServer (&hConv, Port4, Adress, OnTCPEvent, 0, 0);
70 if(res_1 <0) MessagePopup("DDS4XAD9959_4 Serveur", "Connection to server failed !");
71 break;
72
73 }
74
75 res_2=ClientTCPWrite (hConv, Buffer, strlen(Buffer)+1, 0);
76 if(res_2 <0) MessagePopup("DDS Serveur", "Write to server failed !");
77 DisconnectFromTCPServer (hConv);
78 return (res_1+res_2) ;
79 }
80
81
82 //==============================================================================
83 // DDS4xAD9912_Reset
84 //
85 // FUNC : reset des 4 DDS
86 // PARAM :
87 // RETURN : 0 si le reset de la DDS 1 , DDS 2, DDS3 et DDS4 est OK
88 //==============================================================================
89
90 int DDS4XAD9959_Reset(DDS4XAD9959_Data * Instance)
91 {
92 int res_1,res_2;
93
94 sprintf(Request,"set;%i;%i",1,17);
95 res_1 = DDS4XAD9959_SendCmd(1,Request) ;
96 if(res_1 <0) {
97 MessagePopup("DDS Serveur", "DDS4XAD9959_1 Reset failed !") ;
98 }
99 else Instance->Frequency1 = 0.0 ;
100
101 sprintf(Request,"set;%i;%i",1,17);
102 res_2 = DDS4XAD9959_SendCmd(2,Request) ;
103 if(res_2 <0) {
104 MessagePopup("DDS Serveur", "DDS4XAD9959_2 Reset failed !") ;
105 }
106 else Instance->Frequency2 = 0.0;
107
108 sprintf(Request,"set;%i;%i",1,17);
109 res_2 = DDS4XAD9959_SendCmd(3,Request) ;
110 if(res_2 <0) {
111 MessagePopup("DDS Serveur", "DDS4XAD9959_3 Reset failed !") ;
112 }
113 else Instance->Frequency3 = 0.0;
114
115 sprintf(Request,"set;%i;%i",1,17);
116 res_2 = DDS4XAD9959_SendCmd(4,Request) ;
117 if(res_2 <0) {
118 MessagePopup("DDS Serveur", "DDS4XAD9959_4 Reset failed !") ;
119 }
120 else Instance->Frequency4 = 0.0;
121
122
123 return (res_1+res_2);
124 }
125
126
127 //==============================================================================
128 // DDS4xAD9912_SetFreq
129 //
130 // FUNC : sort une fréquence sur la DDS1 ,DDS2, DDS3 ou DDS4
131 // PARAM : DDSNum contient le numero de la DDS (1, 2 , 3 ou 4)
132 // RETURN : 0 si la connexion et l'ecriture sur le serveur TCP/IP sont OK
133 //==============================================================================
134 int DDS4XAD9959_SetFrequency(DDS4XAD9959_Data * Instance, int DDSNum, double Freq)
135 {
136
137 double Word=WORD(Freq,Clk) ;
138 double reste ;
139 int res_0 ;
140 unsigned char b5,b4,b3,b2,b1,b0 ;
141
142 b5=(unsigned char)(Word/E48); // AD9858 is 32 bits, so this one is always zero. For future extension only...
143 b4=(unsigned char)((Word - E48*b5)/E32);
144 b3=(unsigned char)((Word - E48*b5 -E32*b4)/E24);
145 b2=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3)/E16);
146 b1=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3 -E16*b2)/E8);
147 b0=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1)/1.0);
148 reste = (Word - E48*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1-1.0*b0) ;
149
150 sprintf(Request,"set;%i;%i;%i;%i;%i;%i;%i;%i",0,10,b5,b4,b3,b2,b1,b0);
151 res_0 = DDS4XAD9959_SendCmd(DDSNum, Request) ;
152 if (res_0 <0) {
153 MessagePopup("DDS Serveur", "SetFrequency function failed !") ;
154 }
155 else {
156 if (DDSNum==1) Instance->Frequency1 = Freq - reste*Clk/E48 ;
157 if (DDSNum==2) Instance->Frequency2 = Freq - reste*Clk/E48 ;
158 if (DDSNum==3) Instance->Frequency3 = Freq - reste*Clk/E48 ;
159 if (DDSNum==4) Instance->Frequency4 = Freq - reste*Clk/E48 ;
160 } ;
161
162 sprintf(Request,"set;%i;%i",0,18); // IO_Update logiciel
163 res_0 = DDS4XAD9959_SendCmd(DDSNum, Request) ;
164 if (res_0 <0) {
165 MessagePopup("DDS Serveur", "IO_Update function failed !") ;
166 }
167 return(res_0) ;
168
169 }