00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef AVS_HEADER_HH_
00023 # define AVS_HEADER_HH_
00024
00025 # include <wipal/phy/phy.hh>
00026
00027 namespace wpl
00028 {
00029
00030
00031 namespace avs
00032 {
00033 struct header;
00034 }
00035
00036
00037
00038 namespace tool
00039 {
00040
00041 template <>
00042 struct types<avs::header>
00043 {
00044 typedef phy::uint64_time<> time_type;
00045 };
00046
00047 }
00048
00049
00050
00051
00053 namespace avs
00054 {
00055
00057 struct header: public phy::header<avs::header>
00058 {
00059 typedef avs::header exact_type;
00060 typedef WP_TYPE_(time_type, exact_type) time_type;
00061
00062 size_t len_impl(size_t, bool) const;
00063 time_type time_get_impl(bool) const;
00064 void time_set_impl(const time_type&, bool);
00065
00066 template <class S1, class S2>
00067 static bool
00068 eq_time(const pkt::packet<S1>& lhs,
00069 const pkt::packet<S2>& rhs,
00070 const unsigned prec,
00071 const tool::end::endianness phy_end);
00072
00074 uint64_t mactime_get() const;
00075
00077 uint64_t hosttime_get() const;
00078
00079 private:
00080 static uint64_t uint64_get(const void*);
00081
00082 public:
00083
00085 struct v2_extra_fields
00086 {
00087 uint32_t sequence;
00088 uint32_t drops;
00089 uint8_t receiver_addr[6];
00090 uint8_t pad[2];
00091 } __attribute__ ((__packed__));
00092
00093 uint32_t version;
00094 uint32_t length;
00095 uint64_t mactime;
00096 uint64_t hosttime;
00097 uint32_t phytype;
00098 uint32_t channel;
00099 uint32_t datarate;
00100 uint32_t antenna;
00101 uint32_t priority;
00102 uint32_t ssi_type;
00103 uint32_t ssi_signal;
00104 uint32_t ssi_noise;
00105 uint32_t preamble;
00106 uint32_t encoding;
00107 v2_extra_fields v2_fields[];
00108
00109 } __attribute__ ((__packed__));
00110
00111 }
00112
00113 }
00114
00115 # include "avs_header.hxx"
00116
00117 #endif // ! AVS_HEADER_HH_