Mercurial > hg > fxanalyse
diff DDS4xAD9959.c @ 0:d9aae7d7f2c6
Import
author | Daniele Nicolodi <daniele.nicolodi@obspm.fr> |
---|---|
date | Tue, 03 Jul 2012 10:38:59 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DDS4xAD9959.c Tue Jul 03 10:38:59 2012 +0200 @@ -0,0 +1,169 @@ + +//============================================================================== +// +// Title: DDS4xAD9959.c +// Purpose: +// +// Created on: by Volodimer Laurent, modified by YLC +// Copyright: syrte. All Rights Reserved. +// +//============================================================================== + +//============================================================================== +// Include files + +#include "DDS4xAD9959.h" +#include <userint.h> +#include <tcpsupp.h> +#include <ansi_c.h> + +//============================================================================== + +// Global functions + +static int OnTCPEvent(unsigned handle, int xType, int errCode, void *callbackData) + { + switch(xType) + { + case TCP_DISCONNECT : + break; + case TCP_DATAREADY : + ClientTCPRead (handle, Response, sizeof(Response), 0); + break; + } + return 0; + } + + +//============================================================================== +// DDS4xAD9912_SendCmd +// +// FUNC : envoie une chaine de caracteres sur un port du serveur TCP/IP de la foxboard +// PARAM : DDSNum contient le numero de la DDS (1,2,3 ou 4) +// PARAM : Buffer contenant la chaîne de caractères à envoyer +// RETURN : 0 si la connexion et l'ecriture sur le serveur TCP/IP sont OK +//============================================================================== + + +static int DDS4XAD9959_SendCmd(int DDSNum, char * Buffer) // essentially a private function + { + int res_1,res_2; + + switch(DDSNum) + { + case 1: + res_1=ConnectToTCPServer (&hConv, Port1, Adress, OnTCPEvent, 0, 0); + if(res_1 <0) MessagePopup("DDS4XAD9959_1 Serveur", "Connection to server failed !"); + break; + case 2: + res_1=ConnectToTCPServer (&hConv, Port2, Adress, OnTCPEvent, 0, 0); + if(res_1 <0) MessagePopup("DDS4XAD9959_2 Serveur", "Connection to server failed !"); + break; + + case 3: + res_1=ConnectToTCPServer (&hConv, Port3, Adress, OnTCPEvent, 0, 0); + if(res_1 <0) MessagePopup("DDS4XAD9959_3 Serveur", "Connection to server failed !"); + break; + + case 4: + res_1=ConnectToTCPServer (&hConv, Port4, Adress, OnTCPEvent, 0, 0); + if(res_1 <0) MessagePopup("DDS4XAD9959_4 Serveur", "Connection to server failed !"); + break; + + } + + res_2=ClientTCPWrite (hConv, Buffer, strlen(Buffer)+1, 0); + if(res_2 <0) MessagePopup("DDS Serveur", "Write to server failed !"); + DisconnectFromTCPServer (hConv); + return (res_1+res_2) ; + } + + +//============================================================================== +// DDS4xAD9912_Reset +// +// FUNC : reset des 4 DDS +// PARAM : +// RETURN : 0 si le reset de la DDS 1 , DDS 2, DDS3 et DDS4 est OK +//============================================================================== + + int DDS4XAD9959_Reset(DDS4XAD9959_Data * Instance) + { + int res_1,res_2; + + sprintf(Request,"set;%i;%i",1,17); + res_1 = DDS4XAD9959_SendCmd(1,Request) ; + if(res_1 <0) { + MessagePopup("DDS Serveur", "DDS4XAD9959_1 Reset failed !") ; + } + else Instance->Frequency1 = 0.0 ; + + sprintf(Request,"set;%i;%i",1,17); + res_2 = DDS4XAD9959_SendCmd(2,Request) ; + if(res_2 <0) { + MessagePopup("DDS Serveur", "DDS4XAD9959_2 Reset failed !") ; + } + else Instance->Frequency2 = 0.0; + + sprintf(Request,"set;%i;%i",1,17); + res_2 = DDS4XAD9959_SendCmd(3,Request) ; + if(res_2 <0) { + MessagePopup("DDS Serveur", "DDS4XAD9959_3 Reset failed !") ; + } + else Instance->Frequency3 = 0.0; + + sprintf(Request,"set;%i;%i",1,17); + res_2 = DDS4XAD9959_SendCmd(4,Request) ; + if(res_2 <0) { + MessagePopup("DDS Serveur", "DDS4XAD9959_4 Reset failed !") ; + } + else Instance->Frequency4 = 0.0; + + + return (res_1+res_2); + } + + +//============================================================================== +// DDS4xAD9912_SetFreq +// +// FUNC : sort une fréquence sur la DDS1 ,DDS2, DDS3 ou DDS4 +// PARAM : DDSNum contient le numero de la DDS (1, 2 , 3 ou 4) +// RETURN : 0 si la connexion et l'ecriture sur le serveur TCP/IP sont OK +//============================================================================== +int DDS4XAD9959_SetFrequency(DDS4XAD9959_Data * Instance, int DDSNum, double Freq) + { + + double Word=WORD(Freq,Clk) ; + double reste ; + int res_0 ; + unsigned char b5,b4,b3,b2,b1,b0 ; + + b5=(unsigned char)(Word/E48); // AD9858 is 32 bits, so this one is always zero. For future extension only... + b4=(unsigned char)((Word - E48*b5)/E32); + b3=(unsigned char)((Word - E48*b5 -E32*b4)/E24); + b2=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3)/E16); + b1=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3 -E16*b2)/E8); + b0=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1)/1.0); + reste = (Word - E48*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1-1.0*b0) ; + + sprintf(Request,"set;%i;%i;%i;%i;%i;%i;%i;%i",0,10,b5,b4,b3,b2,b1,b0); + res_0 = DDS4XAD9959_SendCmd(DDSNum, Request) ; + if (res_0 <0) { + MessagePopup("DDS Serveur", "SetFrequency function failed !") ; + } + else { + if (DDSNum==1) Instance->Frequency1 = Freq - reste*Clk/E48 ; + if (DDSNum==2) Instance->Frequency2 = Freq - reste*Clk/E48 ; + if (DDSNum==3) Instance->Frequency3 = Freq - reste*Clk/E48 ; + if (DDSNum==4) Instance->Frequency4 = Freq - reste*Clk/E48 ; + } ; + + sprintf(Request,"set;%i;%i",0,18); // IO_Update logiciel + res_0 = DDS4XAD9959_SendCmd(DDSNum, Request) ; + if (res_0 <0) { + MessagePopup("DDS Serveur", "IO_Update function failed !") ; + } + return(res_0) ; + + }