diff options
author | Josh Blum <josh@joshknows.com> | 2009-09-25 15:57:20 -0700 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2009-09-25 15:57:20 -0700 |
commit | 4036435eeebee7e3653c5b8ad694c77515d5a3ea (patch) | |
tree | b34c2df61c4513f5283c3800e5e54c9cb8d44f75 | |
parent | fd23d8e0b0f457b2b8b0db19bb74e6bac21189bb (diff) |
Reading 64 bit freq out of chunk of context packet.
Where is the rest of my context packet?
Added htonll and ntohll in gruel inet.h
Fixed vrt/types.h freq cast
-rw-r--r-- | gr-vrt/src/vrt_source_32fc.cc | 11 | ||||
-rw-r--r-- | gruel/src/include/gruel/inet.h.in | 31 | ||||
-rw-r--r-- | vrt/include/vrt/types.h | 2 |
3 files changed, 41 insertions, 3 deletions
diff --git a/gr-vrt/src/vrt_source_32fc.cc b/gr-vrt/src/vrt_source_32fc.cc index 6c3035b8f1..483b6c2463 100644 --- a/gr-vrt/src/vrt_source_32fc.cc +++ b/gr-vrt/src/vrt_source_32fc.cc @@ -27,6 +27,8 @@ #include <vrt_source_32fc.h> #include <vrt/expanded_header.h> #include <vrt/copiers.h> +#include <vrt/types.h> +#include <vrt/if_context.h> #include <gr_io_signature.h> #include <missing_pkt_checker.h> #include <iostream> @@ -96,10 +98,17 @@ rx_32fc_handler::operator()(const uint32_t *payload, return true; // Keep calling us, we've got more room } else if (hdr->if_context_p()){ - // FIXME print the IF-Context packet + // print the IF-Context packet fprintf(stderr, "\nIF-Context:\n"); for (size_t i = 0; i < n32_bit_words; i++) fprintf(stderr, "%04x: %08x\n", (unsigned int) i, ntohl(payload[i])); + // copy the context into struct so we cant reference bad memory + // print the components of the struct, prove that it works! + all_context_t if_context; + memcpy(((uint32_t*)&if_context) + 5, payload, sizeof(uint32_t)*n32_bit_words);//FIXME + fprintf(stderr, "\nIF-Context-Components:\n"); + if_context.beamformer.rf_ref_freq = ntohll(if_context.beamformer.rf_ref_freq); + fprintf(stderr, "Ref Freq %f Hz\n", vrt_freq_to_double(if_context.beamformer.rf_ref_freq)); return true; } else { diff --git a/gruel/src/include/gruel/inet.h.in b/gruel/src/include/gruel/inet.h.in index a98d83e9c5..3202707270 100644 --- a/gruel/src/include/gruel/inet.h.in +++ b/gruel/src/include/gruel/inet.h.in @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2008 Free Software Foundation, Inc. + * Copyright 2008, 2009 Free Software Foundation, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,33 @@ #ifndef INCLUDED_INET_H #define INCLUDED_INET_H +#if 1 /* missing htonll or ntohll */ +#if @GR_ARCH_BIGENDIAN@ /* GR_ARCH_BIGENDIAN */ +// Nothing to do... +static inline uint64_t htonll(uint64_t x){ return x;} +static inline uint64_t ntohll(uint64_t x){ return x;} +#else +#if @GR_HAVE_BYTESWAP@ /* GR_HAVE_BYTESWAP */ +#include <byteswap.h> +#else + +static inline uint64_t +bswap_64(uint64_t x) +{ + return ((x & 0x00000000000000ffull) << 56) | ((x & 0x000000000000ff00ull) << 40) | + ((x & 0x0000000000ff0000ull) << 24) | ((x & 0x00000000ff000000ull) << 8) | + ((x & 0x000000ff00000000ull) >> 8) | ((x & 0x0000ff0000000000ull) >> 24) | + ((x & 0x00ff000000000000ull) >> 40) | ((x & 0xff00000000000000ull) >> 56); +} + +#endif /* GR_HAVE_BYTESWAP */ + +static inline uint64_t htonll(uint64_t x){ return bswap_64(x);} +static inline uint64_t ntohll(uint64_t x){ return bswap_64(x);} + +#endif /* GR_ARCH_BIGENDIAN */ +#endif /* missing htonll or ntohll */ + #if @GR_HAVE_ARPA_INET@ /* GR_HAVE_ARPA_INET */ #include <arpa/inet.h> #elif @GR_HAVE_NETINET_IN@ /* GR_HAVE_NETINET_IN */ @@ -61,8 +88,10 @@ static inline uint16_t ntohs(uint16_t x){ return bswap_16(x); } static inline uint8_t ntohx(uint8_t x){ return x; } static inline uint16_t ntohx(uint16_t x){ return ntohs(x); } static inline uint32_t ntohx(uint32_t x){ return ntohl(x); } +static inline uint64_t ntohx(uint64_t x){ return ntohll(x);} static inline uint8_t htonx(uint8_t x){ return x; } static inline uint16_t htonx(uint16_t x){ return htons(x); } static inline uint32_t htonx(uint32_t x){ return htonl(x); } +static inline uint64_t htonx(uint64_t x){ return htonll(x);} #endif /* INCLUDED_INET_H */ diff --git a/vrt/include/vrt/types.h b/vrt/include/vrt/types.h index 2081702c5c..edfa4ec37b 100644 --- a/vrt/include/vrt/types.h +++ b/vrt/include/vrt/types.h @@ -74,7 +74,7 @@ vrt_geo_angle_to_double(vrt_geo_angle_t fx){ **********************************************************************/ typedef int64_t vrt_freq_t; #define VRT_FREQ_RP 20 -#define VRT_FREQ_C(_x) _FXPT_C(vrt_altitude_t, _x, VRT_FREQ_RP) +#define VRT_FREQ_C(_x) _FXPT_C(vrt_freq_t, _x, VRT_FREQ_RP) static inline vrt_freq_t double_to_vrt_freq(double num){ |