Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(867)

Unified Diff: src/devices/uan/uan-tx-mode.h

Issue 1350041: UAN module addition
Patch Set: Created 13 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/devices/uan/uan-tx-mode.h
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/devices/uan/uan-tx-mode.h
@@ -0,0 +1,195 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Leonard Tracy <lentracy@gmail.com>
+ */
+
+#ifndef UANTXMODE_H
+#define UANTXMODE_H
+
+#include "ns3/object.h"
+#include <map>
+
+namespace ns3 {
+
+class UanTxModeFactory;
+class UanTxMode;
+
+/**
+ * \class UanTxMode
+ * \brief Abstraction of packet modulation information
+ */
+class UanTxMode
+{
+public:
+ UanTxMode ();
+ ~UanTxMode ();
+
+ /**
+ * Modulation type
+ */
+ typedef enum {
+ PSK, QAM, FSK, OTHER
+ } ModulationType;
+ /**
+ * \returns The modulation type of the mode
+ */
+ ModulationType GetModType (void) const;
+ /**
+ * \returns Data rate of the TX mode in bits per second
+ */
+ uint32_t GetDataRateBps (void) const;
+ /**
+ * \returns PHY rate in symbols per second
+ */
+ uint32_t GetPhyRateSps (void) const;
+ /**
+ * \returns Center frequency of transmitted signal in Hz
+ */
+ uint32_t GetCenterFreqHz (void) const;
+ /**
+ * \returns Bandwidth of transmitted signal in Hz
+ */
+ uint32_t GetBandwidthHz (void) const;
+ /**
+ * \returns Number of constellation points in modulation
+ */
+ uint32_t GetConstellationSize (void) const;
+ /**
+ * \returns Name
+ */
+ std::string GetName (void) const;
+ /**
+ * \returns Unique ID
+ */
+ uint32_t GetUid (void) const;
+
+private:
+ friend class UanTxModeFactory;
+ friend std::ostream &operator<< (std::ostream & os, const UanTxMode &mode);
+ friend std::istream &operator>> (std::istream & is, UanTxMode &mode);
+
+
+ uint32_t m_uid;
+
+};
+
+std::ostream & operator << (std::ostream & os, const UanTxMode &mode);
+std::istream & operator >> (std::istream & is, const UanTxMode &mode);
+
+class UanTxModeFactory
+{
+public:
+ UanTxModeFactory ();
+ ~UanTxModeFactory ();
+
+ /**
+ *
+ * \param dataRateBps Data rate in BPS
+ * \param phyRateSps Symbol rate in symbols per second
+ * \param cfHz Center frequency in Hz
+ * \param bwHz Bandwidth in Hz
+ * \param constSize Modulation constellation size (2 for BPSK, 4 for QPSK)
+ * \param name Unique string name for this transmission mode
+ */
+ static UanTxMode CreateMode (UanTxMode::ModulationType type,
+ uint32_t dataRateBps,
+ uint32_t phyRateSps,
+ uint32_t cfHz,
+ uint32_t bwHz,
+ uint32_t constSize,
+ std::string name);
+
+ /**
+ * \param name String name of mode
+ * \returns Mode with given name
+ */
+ static UanTxMode GetMode (std::string name);
+ /**
+ * \param uid Unique ID of mode
+ * \returns The mode with given uid
+ */
+ static UanTxMode GetMode (uint32_t uid);
+private:
+ friend class UanTxMode;
+ uint32_t m_nextUid;
+
+ struct UanTxModeItem
+ {
+ UanTxMode::ModulationType m_type;
+ uint32_t m_cfHz;
+ uint32_t m_bwHz;
+ uint32_t m_dataRateBps;
+ uint32_t m_phyRateSps;
+ uint32_t m_constSize;
+ uint32_t m_uid;
+ std::string m_name;
+ };
+
+ std::map<uint32_t, UanTxModeItem> m_modes;
+ bool NameUsed (std::string name);
+ static UanTxModeFactory &GetFactory (void);
+ UanTxModeItem &GetModeItem (uint32_t uid);
+ UanTxModeItem &GetModeItem (std::string name);
+ UanTxMode MakeModeFromItem (const UanTxModeItem &item);
+
+};
+
+/**
+ * \class UanModesList
+ * \brief Container for UanTxModes
+ */
+class UanModesList
+{
+public:
+ UanModesList ();
+ virtual ~UanModesList ();
+
+ /**
+ * \param mode Add mode to list
+ */
+ void AppendMode (UanTxMode mode);
+ /**
+ * \brief delete mode at given index
+ * \param num Index of mode to delete
+ */
+ void DeleteMode (uint32_t num);
+ /**
+ * \param index Mode index
+ * \returns mode at given index
+ */
+ UanTxMode operator[] (uint32_t index) const;
+ /**
+ * \returns Number of modes in list
+ */
+ uint32_t GetNModes (void) const;
+
+
+private:
+ std::vector<UanTxMode> m_modes;
+ friend std::ostream &operator << (std::ostream &os, const UanModesList &ml);
+ friend std::istream &operator >> (std::istream &is, UanModesList &ml);
+};
+
+std::ostream &operator << (std::ostream &os, const UanModesList &ml);
+std::istream &operator >> (std::istream &is, UanModesList &ml);
+
+ATTRIBUTE_HELPER_HEADER (UanModesList);
+
+} // namespace ns3
+
+#endif // UANTXMODE_H

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b