libcyberradio  22.01.24
Driver.cpp
1 /***************************************************************************
2  * \file Driver.cpp
3  * \brief Main entry point for the C++ CyberRadio Driver.
4  * \author DA
5  * \copyright (c) 2018 CyberRadio Solutions, Inc. All rights reserved.
6  *
7  * \note Requires C++11 compiler support.
8  *
9  ***************************************************************************/
10 
11 #include "LibCyberRadio/Driver/Driver.h"
12 #include "LibCyberRadio/Driver/NDR308/RadioHandler.h"
13 #include "LibCyberRadio/Driver/NDR308TS/RadioHandler.h"
14 #include "LibCyberRadio/Driver/NDR472/RadioHandler.h"
15 #include "LibCyberRadio/Driver/NDR651/RadioHandler.h"
16 #include "LibCyberRadio/Driver/NDR810/RadioHandler.h"
17 #include "LibCyberRadio/Driver/NDR551/RadioHandler.h"
18 #include "LibCyberRadio/Driver/NDR358/RadioHandler.h"
19 #include "LibCyberRadio/Driver/NDR324/RadioHandler.h"
20 #include "LibCyberRadio/Common/Pythonesque.h"
21 #include "LibCyberRadio/Common/BasicList.h"
22 #include "LibCyberRadio/Common/Debuggable.h"
23 #include <algorithm>
24 #include <stdlib.h>
25 #include <iostream>
26 
27 
28 namespace LibCyberRadio
29 {
30 
31  namespace Driver
32  {
33 
35  const std::string& nameString,
36  const std::string& device,
37  int devicePort,
38  bool debug)
39  {
40  Debuggable dbg(debug, "getRadioObject");
41  dbg.debug("Called\n");
42  dbg.debug("-- Name string = \"%s\"\n", nameString.c_str());
43  RadioHandlerPtr sptr = NULL;
44  // Adjust the incoming name string
45  // -- NOTE: This operation requires that we pre-fill the adjusted
46  // name string (assume all characters are copied), and then
47  // trim the string after the conditional copy.
48  std::string adjNameString = nameString;
49  // -- Copy alphanumeric characters from input string to adjusted
50  // name string
51  std::string::iterator its = std::copy_if(nameString.begin(),
52  nameString.end(),
53  adjNameString.begin(),
54  isalnum );
55  adjNameString.erase(its, adjNameString.end());
56  // -- Convert adjusted name string to lower case
57  std::transform(adjNameString.begin(), adjNameString.end(),
58  adjNameString.begin(), tolower);
59  // [FUTURE] Support radio auto-detection
60  // Get an appropriate radio handler object based on name string
61  dbg.debug("Getting handler for \"%s\"...\n", adjNameString.c_str());
62  if ( adjNameString == "ndr308" )
63  {
64  dbg.debug("-- FOUND ndr308\n");
65  sptr = std::shared_ptr<RadioHandler>(
67  );
68  }
69  else if ( adjNameString == "ndr308ts" )
70  {
71  dbg.debug("-- FOUND ndr308ts\n");
72  sptr = std::shared_ptr<RadioHandler>(
74  );
75  }
76  else if ( adjNameString == "ndr308a" )
77  {
78  dbg.debug("-- FOUND ndr308\n");
79  sptr = std::shared_ptr<RadioHandler>(
81  );
82  }
83  else if ( adjNameString == "ndr651" )
84  {
85  dbg.debug("-- FOUND ndr651\n");
86  sptr = std::shared_ptr<RadioHandler>(
88  );
89  }
90  else if ( adjNameString == "ndr810" )
91  {
92  dbg.debug("-- FOUND ndr810\n");
93  sptr = std::shared_ptr<RadioHandler>(
95  );
96  }
97  else if ( adjNameString == "ndr472" )
98  {
99  dbg.debug("-- FOUND ndr472\n");
100  sptr = std::shared_ptr<RadioHandler>(
102  );
103  }
104  else if ( adjNameString == "ndr551" )
105  {
106  dbg.debug("-- FOUND ndr551\n");
107  sptr = std::shared_ptr<RadioHandler>(
109  );
110  }
111  else if ( adjNameString == "ndr358" )
112  {
113  dbg.debug("-- FOUND ndr358\n");
114  sptr = std::shared_ptr<RadioHandler>(
116  );
117  }
118  else if ( adjNameString == "ndr324" )
119  {
120  dbg.debug("-- FOUND ndr324\n");
121  sptr = std::shared_ptr<RadioHandler>(
123  );
124  }
125  else
126  {
127  dbg.debug("-- CANNOT FIND %s\n", adjNameString.c_str());
128  }
129  // Support radio auto-connection
130  if ( (sptr != NULL) && (device != "") )
131  {
132  dbg.debug("Auto-connection started...\n");
133  dbg.debug("-- Device = %s\n", device.c_str());
134  BasicStringList connModes = sptr->getConnectionModeList();
135  for (BasicStringList::const_iterator it = connModes.begin();
136  it != connModes.end(); it++)
137  {
138  dbg.debug("-- Attempting connection mode: %s\n", it->c_str());
139  sptr->connect(*it, device, sptr->getDefaultDeviceInfo());
140  if ( sptr->isConnected() )
141  break;
142  }
143  }
144  // Return the pointer to the radio handler (or NULL)
145  //dbg.debug("Returning %08p\n", sptr.get());
146  return sptr;
147  }
148 
149  std::vector<std::string> getSupportedDevices( void )
150  {
151  std::vector<std::string> suppDevs = {
152  "ndr551",
153  "ndr358",
154  "ndr308",
155  "ndr318",
156  "ndr324",
157  "ndr651"
158  };
159  return suppDevs;
160 
161  }
162 
163  } // namespace Driver
164 
165 } // namespace LibCyberRadio
166 
Radio handler class for the NDR810.
Definition: RadioHandler.h:178
Radio handler class for the NDR551.
Definition: RadioHandler.h:180
Radio handler class for the NDR472.
Definition: RadioHandler.h:133
std::shared_ptr< RadioHandler > RadioHandlerPtr
A pointer to a radio handler object.
Definition: Driver.h:31
Class that supports debug output.
Definition: Debuggable.h:38
RadioHandlerPtr getRadioObject(const std::string &nameString, const std::string &device="", int devicePort=-1, bool debug=false)
Factory method for returning a radio handler object for a given radio.
Definition: Driver.cpp:34
Radio handler class for the NDR308.
Definition: RadioHandler.h:178
Generic radio handler class.
Definition: RadioHandler.h:54
virtual int debug(const char *format,...)
Outputs debug information.
Definition: Debuggable.cpp:95
BASIC_LIST_CONTAINER< std::string > BasicStringList
Type representing a list of strings.
Definition: BasicList.h:25
Radio handler class for the NDR551.
Definition: RadioHandler.h:180
Defines functionality for LibCyberRadio applications.
Definition: App.h:23
Radio handler class for the NDR651.
Definition: RadioHandler.h:218
Radio handler class for the NDR308-TS.
Definition: RadioHandler.h:174
Radio handler class for the NDR551.
Definition: RadioHandler.h:178