CARMA C++
WbdcMaster.h
Go to the documentation of this file.
1 
9 #ifndef CARMA_DOWNCONVERTER_WBDCMASTER_H
10 #define CARMA_DOWNCONVERTER_WBDCMASTER_H
11 
12 #include "carma/canbus/Master.h"
13 #include "carma/downconverter/common/DownconverterControl.h"
14 #include "carma/downconverter/common/QuadModControl.h"
15 #include "carma/downconverter/common/LoMonitorControl.h"
16 #include "carma/downconverter/common/NoiseSourceControl.h"
17 #include "carma/downconverter/common/SldcLoControl.h"
18 #include "carma/downconverter/spectral/BlockDownconverterControl.h"
19 #include "carma/downconverter/spectral/SpectralDownconverterControl.h"
20 
21 #include <map>
22 #include <pthread.h>
23 #include <tao/Basic_Types.h>
24 
51 namespace carma {
52 
53 namespace corba {
54  class Server;
55 }
56 
57 namespace monitor {
58  // Forward dec
59  class WbdcSubsystem;
60 }
61 
62 namespace downconverter {
63 
64  class Downconverter;
65  class LoMonitor;
66  class NoiseSource;
67  class QuadratureModulator;
68 
84  public:
85 
99  carma::monitor::WbdcSubsystem & mon );
100 
111  WbdcMaster( carma::corba::Server & server,
112  int modulBusNo, int slotNo,
113  carma::monitor::WbdcSubsystem & mon );
114 
124  WbdcMaster( carma::corba::Server & server,
125  int modulBusNo,
126  carma::monitor::WbdcSubsystem & mon );
127 
134  virtual ~WbdcMaster();
135 
142  bool isDone();
143 
144  protected:
145 
155  void updateStatus();
156 
157  public:
158 
159  // Our CORBA IDL Defined control methods. These implement the IDL
160  // defined System interface. They are declared private to assure that
161  // they are only accessible via CORBA (doesn't care about privacy).
162  carma::downconverter::DownconverterControl_ptr GlobalDownconverter();
163  carma::downconverter::DownconverterControl_ptr Downconverter(
164  short input, short band);
165  carma::downconverter::SpectralDownconverterControl_ptr
166  SpectralDownconverter( CORBA::Short input, CORBA::Short band );
167  carma::downconverter::QuadModControl_ptr GlobalQuadMod();
168  carma::downconverter::QuadModControl_ptr QuadMod(short input);
169  carma::downconverter::NoiseSourceControl_ptr GlobalNoiseSource();
170  carma::downconverter::NoiseSourceControl_ptr NoiseSource();
171  carma::downconverter::LoMonitorControl_ptr GlobalLoMonitor();
172  carma::downconverter::LoMonitorControl_ptr LoMonitor();
173  carma::downconverter::SldcLoControl_ptr LoControl();
174  carma::downconverter::BlockDownconverterControl_ptr
175  BlockDownconverter( CORBA::Short inputNo );
176  carma::downconverter::BlockDownconverterControl_ptr
177  GlobalBlockDownconverter( );
178 
179  void selectSidebandFrequency(
181  CORBA::Double lofreq,
182  CORBA::UShort bandNo);
183  void selectFilter(
185  CORBA::UShort bandNo );
186  void setPsysPreset( CORBA::UShort inputNo, CORBA::UShort bandNo );
187  void setPsys( CORBA::Float psys,
188  CORBA::UShort inputNo,
189  CORBA::UShort bandNo );
190  void reset();
191  void softReset();
192  // DEBUG
193  void quit();
194 
195  private:
196 
197  // Copying and assignment are not allowed
198  WbdcMaster(const WbdcMaster &);
199  WbdcMaster &operator=(const WbdcMaster &);
200 
201  // Helper routines to consolidate initialization among 3 constructors.
202  void initialize();
203  void addDevices();
204 
205  // Consolidate removal of devices - used on destruction.
206  void removeDevices();
207 
208  // Run thread entry point. Entry points are needed in order to assure
209  // that the actual run method is not subject to the c-style linkage
210  // rules (static) that are required of the pthread entry point.
211  static void *runThreadEntry(void *arg);
212 
213  // Redefine run such that it is private. Since the carmaWbdcHost app
214  // is a CORBA server, it will block on runOrb - thus we call run in
215  // a seperate thread in the WbdcMaster constructor to get the CANbus
216  // side of things moving independently.
217  void run();
218 
219  // Keep the run thread id around so that we can properly destroy the
220  // thread upon destruction.
221  pthread_t runThreadId_;
222 
223  // Node 0 'Global control' device objects. (Aren't added to Master
224  // device map via addDevice).
225  typedef std::map< carma::canbus::nodeType,
227 
228  DcByNodeMap downconverters_;
231  carma::downconverter::LoMonitor * globalLoMon_;
232 
233  typedef std::pair< short, short > InputBandNoPair;
234  typedef std::map< InputBandNoPair,
235  carma::downconverter::DownconverterControl_ptr >
236  DownconverterControlsMap;
237  typedef std::map< short,
238  carma::downconverter::QuadModControl_ptr >
239  QuadModControlsMap;
240 
241  carma::downconverter::DownconverterControl_ptr globalDcControl_;
242  carma::downconverter::QuadModControl_ptr globalQmControl_;
243  carma::downconverter::LoMonitorControl_ptr globalLoMonControl_;
244 
245  DownconverterControlsMap dcControls_;
246  QuadModControlsMap qmControls_;
247  carma::downconverter::NoiseSourceControl_ptr nsControl_;
248  carma::downconverter::LoMonitorControl_ptr loMonControl_;
249  carma::corba::Server & server_;
250 
251  carma::monitor::WbdcSubsystem & mon_;
252 
253  const bool emulate_; // Emulate Janz Hardware
254  const std::string hostname_; // Hostname we're running on
255 
256  // DEBUG
257  pthread_mutex_t doneMutex_;
258  bool done_;
259 
260  }; // End WbdcMaster class
261 }; // End downconverter namespace
262 }; // End carma namespace
263 #endif
Noise Source Device Class.
Definition: NoiseSource.h:38
LoMonitor Device class implementation.
Definition: LoMonitor.h:41
WbdcMaster(carma::corba::Server &server, carma::monitor::WbdcSubsystem &mon)
Default constructor for emulation.
FilterType
Valid output bandwidth filter types.
Declaration of carma::canbus::Master class.
Quadrature modulator Device class implementation.
virtual ~WbdcMaster()
Destructor.
unsigned short nodeType
Carma Node Type id type.
Definition: Types.h:66
Carma Canbus Master class.
Definition: Master.h:110
SpectralDownconverter CAN Device class implementation.
Downconverter Device class implementation.
Definition: Downconverter.h:35
Class for creating, managing and serving requests to CORBA servants.
Definition: Server.h:22
void updateStatus()
Update the status of the Cwdc CAN Master.
Spectral Line Downconverter LO Control module class.
Definition: LoControl.h:36
CAN device implementation for block downconverter (API #4).
bool isDone()
Query to see if the System::quit() method has been invoked.
Carma Wideband Downconverter CAN Master class.
Definition: WbdcMaster.h:83