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
28namespace 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
Class that supports debug output.
Definition Debuggable.h:39
virtual int debug(const char *format,...)
Outputs debug information.
Radio handler class for the NDR308-TS.
Radio handler class for the NDR308.
Radio handler class for the NDR551.
Radio handler class for the NDR551.
Radio handler class for the NDR472.
Radio handler class for the NDR551.
Radio handler class for the NDR651.
Radio handler class for the NDR810.
Generic radio handler class.
Provides programming elements for driving CRS NDR-class radios.
std::shared_ptr< RadioHandler > RadioHandlerPtr
A pointer to a radio handler object.
Definition Driver.h:31
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
Defines functionality for LibCyberRadio applications.
Definition App.h:24
BASIC_LIST_CONTAINER< std::string > BasicStringList
Type representing a list of strings.
Definition BasicList.h:25