Mercurial > hg > fxanalyse
view ad9956.c @ 265:da38cbbc7ec8
Add DDS clients test code
To verify the portabiolity of the clients code and to make testing
easier the test code is independent of the CVI environment and
runtime.
author | Daniele Nicolodi <daniele.nicolodi@obspm.fr> |
---|---|
date | Sun, 21 Jun 2015 14:44:33 +0200 |
parents | 8d9a4c5eb7a4 |
children |
line wrap: on
line source
#ifdef _CVI_ #include <ansi_c.h> #include <toolbox.h> #else #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <math.h> #endif #include "dds.h" #include "xsocket.h" #include "ad9956.h" int ad9956_init(struct ad9956 *d, const char *hostname, double clock) { int r; char buffer[256]; uint64 value; d->sock = xsocket(hostname, 1234); d->profile = 0; d->clock = clock; r = xconnect(d->sock); if (r < 0) return r; /* check compatibility */ r = xask(d->sock, "REVISION", strlen("REVISION"), buffer, sizeof(buffer)); if (r < 0) return r; if (atoi(buffer) != REVISION) return -EINVAL; /* disable clock divider */ r = xask(d->sock, "GET CFR2", strlen("GET CFR2"), buffer, sizeof(buffer)); if (r < 0) return r; r = strtouint64(buffer, &value); if (r < 0) return r; value = value | (1ULL << 16); r = xcommand(d->sock, "SET CFR2 0x%X", value); if (r < 0) return r; return 0; } int ad9956_set_frequency(struct ad9956 *d, double f) { int r; uint64 value = ftw(d->clock, f); r = xcommand(d->sock, "SET PCR%d 0x%llX", d->profile, value); if (r < 0) return r; d->frequency = freq(d->clock, value); return 0; } int ad9956_get_frequency(struct ad9956 *d, double *f) { int r, n; uint64 value; char buffer[256]; n = snprintf(buffer, sizeof(buffer), "GET PCR%d", d->profile); r = xask(d->sock, buffer, n, buffer, sizeof(buffer)); if (r < 0) return r; r = strtouint64(buffer, &value); if (r < 0) return r; d->frequency = freq(d->clock, value); if (f) *f = d->frequency; return 0; } int ad9956_set_sweep_rate(struct ad9956 *d, double rate) { int64 value = (int64)ftw(d->clock, fabs(rate * 0.01)); if (rate < 0.0) value = -value; return xcommand(d->sock, "SWEEP SET DFTW %lld", value); } int ad9956_sweep_start(struct ad9956 *d) { return xcommand(d->sock, "SWEEP START"); } int ad9956_sweep_stop(struct ad9956 *d) { return xcommand(d->sock, "SWEEP STOP"); }