20 #ifndef FE_TUNER_DEVICE_BASE_H 21 #define FE_TUNER_DEVICE_BASE_H 24 #include <uuid/uuid.h> 25 #include <redhawk/FRONTEND/Frontend.h> 27 #include "ossie/prop_helpers.h" 28 #include "bulkio/bulkio.h" 29 #include "fe_tuner_struct_props.h" 42 CF::Device::InvalidCapacity(msg, props)
47 uuid_t new_random_uuid;
48 uuid_generate_random(new_random_uuid);
49 char new_random_uuid_str[37];
50 uuid_unparse(new_random_uuid, new_random_uuid_str);
51 return std::string(new_random_uuid_str);
66 return round((lhs-rhs)*pow(10,places));
78 inline bool validateRequest(
double available_min,
double available_max,
double requested_val){
89 inline bool validateRequest(
double available_min,
double available_max,
double requested_min,
double requested_max){
105 bool validateRequestVsSRI(
const frontend_tuner_allocation_struct& request,
const BULKIO::StreamSRI& upstream_sri,
bool output_mode);
116 bool validateRequestVsDevice(
const frontend_tuner_allocation_struct& request,
const BULKIO::StreamSRI& upstream_sri,
117 bool output_mode,
double min_device_center_freq,
double max_device_center_freq,
double max_device_bandwidth,
double max_device_sample_rate);
125 bool validateRequestVsRFInfo(
const frontend_tuner_allocation_struct& request,
const frontend::RFInfoPkt& rfinfo,
bool mode);
133 bool validateRequestVsDevice(
const frontend_tuner_allocation_struct& request,
const frontend::RFInfoPkt& rfinfo,
134 bool mode,
double min_device_center_freq,
double max_device_center_freq,
double max_device_bandwidth,
double max_device_sample_rate);
148 control_allocation_id.clear();
149 listener_allocation_ids.clear();
156 template <
typename TunerStatusStructType >
163 FrontendTunerDevice(
char *devMgr_ior,
char *
id,
char *lbl,
char *sftwrPrfl,
char *compDev);
164 FrontendTunerDevice(
char *devMgr_ior,
char *
id,
char *lbl,
char *sftwrPrfl, CF::Properties capacities);
165 FrontendTunerDevice(
char *devMgr_ior,
char *
id,
char *lbl,
char *sftwrPrfl, CF::Properties capacities,
char *compDev);
173 virtual CORBA::Boolean
allocateCapacity(
const CF::Properties & capacities)
throw (CORBA::SystemException, CF::Device::InvalidCapacity, CF::Device::InvalidState);
174 virtual void deallocateCapacity(
const CF::Properties & capacities)
throw (CORBA::SystemException, CF::Device::InvalidCapacity, CF::Device::InvalidState);
198 virtual void deviceEnable(TunerStatusStructType &fts,
size_t tuner_id) = 0;
199 virtual void deviceDisable(TunerStatusStructType &fts,
size_t tuner_id) = 0;
200 virtual bool deviceSetTuning(
const frontend_tuner_allocation_struct &request, TunerStatusStructType &fts,
size_t tuner_id) = 0;
212 virtual void assignListener(
const std::string& listen_alloc_id,
const std::string& alloc_id);
218 virtual bool enableTuner(
size_t tuner_id,
bool enable);
225 BULKIO::StreamSRI
create(std::string &stream_id, TunerStatusStructType &frontend_status,
double collector_frequency = -1.0) {
226 BULKIO::StreamSRI sri;
229 if ( frontend_status.sample_rate <= 0.0 )
232 sri.xdelta = 1/frontend_status.sample_rate;
233 sri.xunits = BULKIO::UNITS_TIME;
237 sri.yunits = BULKIO::UNITS_NONE;
240 sri.streamID = stream_id.c_str();
242 if (collector_frequency < 0)
243 colFreq = frontend_status.center_frequency;
246 this->addModifyKeyword<CORBA::Double > (&sri,
"COL_RF",
CORBA::Double(colFreq));
247 this->addModifyKeyword<CORBA::Double > (&sri,
"CHAN_RF",
CORBA::Double(frontend_status.center_frequency));
248 this->addModifyKeyword<std::string> (&sri,
"FRONTEND::RF_FLOW_ID",frontend_status.rf_flow_id);
249 this->addModifyKeyword<CORBA::Double> (&sri,
"FRONTEND::BANDWIDTH",
CORBA::Double(frontend_status.bandwidth));
250 this->addModifyKeyword<std::string> (&sri,
"FRONTEND::DEVICE_ID",std::string(
identifier()));
254 template <
typename CORBAXX>
bool addModifyKeyword(BULKIO::StreamSRI *sri, CORBA::String_member
id, CORBAXX myValue,
bool addOnly =
false) {
257 unsigned long keySize = sri->keywords.length();
259 for (
unsigned int i = 0; i < keySize; i++) {
260 if (!strcmp(sri->keywords[i].id,
id)) {
261 sri->keywords[i].value = value;
266 sri->keywords.length(keySize + 1);
267 if (sri->keywords.length() != keySize + 1)
269 sri->keywords[keySize].id = CORBA::string_dup(
id);
270 sri->keywords[keySize].value = value;
275 void printSRI(BULKIO::StreamSRI *sri, std::string strHeader =
"DEBUG SRI"){
276 std::cout << strHeader <<
":\n";
277 std::cout <<
"\thversion: " << sri->hversion<< std::endl;
278 std::cout <<
"\txstart: " << sri->xstart<< std::endl;
279 std::cout <<
"\txdelta: " << sri->xdelta<< std::endl;
280 std::cout <<
"\txunits: " << sri->xunits<< std::endl;
281 std::cout <<
"\tsubsize: " << sri->subsize<< std::endl;
282 std::cout <<
"\tystart: " << sri->ystart<< std::endl;
283 std::cout <<
"\tydelta: " << sri->ydelta<< std::endl;
284 std::cout <<
"\tyunits: " << sri->yunits<< std::endl;
285 std::cout <<
"\tmode: " << sri->mode<< std::endl;
286 std::cout <<
"\tstreamID: " << sri->streamID<< std::endl;
287 unsigned long keySize = sri->keywords.length();
288 for (
unsigned int i = 0; i < keySize; i++) {
289 std::cout <<
"\t KEYWORD KEY/VAL :: " << sri->keywords[i].id <<
": " << ossie::any_to_string(sri->keywords[i].value) << std::endl;
291 std::cout << std::endl;
296 virtual void construct();
void printSRI(BULKIO::StreamSRI *sri, std::string strHeader="DEBUG SRI")
Definition: fe_tuner_device.h:275
virtual long getTunerMapping(std::string allocation_id)
std::string device_model
Definition: fe_tuner_device.h:182
std::string uuidGenerator()
Definition: fe_tuner_device.h:46
virtual CF::Device::UsageType updateUsageState()
Definition: fe_tuner_device.h:37
std::vector< frontend::tunerAllocationIdsStruct > tuner_allocation_ids
Definition: fe_tuner_device.h:189
FrontendTunerDevice(char *devMgr_ior, char *id, char *lbl, char *sftwrPrfl)
double floatingPointCompare(double lhs, double rhs, size_t places=1)
Definition: fe_tuner_device.h:65
void reset()
Definition: fe_tuner_device.h:147
virtual bool deviceSetTuning(const frontend_tuner_allocation_struct &request, TunerStatusStructType &fts, size_t tuner_id)=0
Definition: fe_tuner_device.h:39
virtual void loadProperties()
virtual bool removeTunerMapping(size_t tuner_id, std::string allocation_id)
frontend::frontend_listener_allocation_struct frontend_listener_allocation
Definition: fe_tuner_device.h:184
double Double
Definition: bulkio_base.h:156
std::vector< TunerStatusStructType > frontend_tuner_status
Definition: fe_tuner_device.h:185
virtual void deviceDisable(TunerStatusStructType &fts, size_t tuner_id)=0
virtual bool deviceDeleteTuning(TunerStatusStructType &fts, size_t tuner_id)=0
virtual void deallocateCapacity(const CF::Properties &capacities)
std::map< std::string, size_t > string_number_mapping
Definition: fe_tuner_device.h:177
string_number_mapping allocation_id_to_tuner_id
Definition: fe_tuner_device.h:192
Definition: fe_tuner_device.h:140
bool validateRequestVsSRI(const frontend_tuner_allocation_struct &request, const BULKIO::StreamSRI &upstream_sri, bool output_mode)
tunerAllocationIdsStruct()
Definition: fe_tuner_device.h:141
boost::mutex allocation_id_mapping_lock
Definition: fe_tuner_device.h:193
bool addModifyKeyword(BULKIO::StreamSRI *sri, CORBA::String_member id, CORBAXX myValue, bool addOnly=false)
Definition: fe_tuner_device.h:254
virtual CORBA::Boolean allocateCapacity(const CF::Properties &capacities)
virtual void deviceEnable(TunerStatusStructType &fts, size_t tuner_id)=0
bool validateRequest(double available_min, double available_max, double requested_val)
Definition: fe_tuner_device.h:78
virtual bool enableTuner(size_t tuner_id, bool enable)
virtual void assignListener(const std::string &listen_alloc_id, const std::string &alloc_id)
AllocationAlreadyExists(const char *msg, const CF::Properties &props)
Definition: fe_tuner_device.h:41
Definition: Device_impl.h:40
std::string control_allocation_id
Definition: fe_tuner_device.h:144
bool validateRequestVsDevice(const frontend_tuner_allocation_struct &request, const BULKIO::StreamSRI &upstream_sri, bool output_mode, double min_device_center_freq, double max_device_center_freq, double max_device_bandwidth, double max_device_sample_rate)
BULKIO::StreamSRI create(std::string &stream_id, TunerStatusStructType &frontend_status, double collector_frequency=-1.0)
Definition: fe_tuner_device.h:225
virtual void setNumChannels(size_t num)=0
std::vector< std::string > listener_allocation_ids
Definition: fe_tuner_device.h:145
Definition: fe_tuner_device.h:157
virtual bool listenerRequestValidation(frontend_tuner_allocation_struct &request, size_t tuner_id)
std::string createAllocationIdCsv(size_t tuner_id)
bool validateRequestVsRFInfo(const frontend_tuner_allocation_struct &request, const frontend::RFInfoPkt &rfinfo, bool mode)
boost::mutex::scoped_lock exclusive_lock
Definition: fe_tuner_device.h:178
virtual std::vector< std::string > getListenerAllocationIds(size_t tuner_id)
virtual std::string getControlAllocationId(size_t tuner_id)
std::string device_kind
Definition: fe_tuner_device.h:181
virtual void removeListener(const std::string &listen_alloc_id)
frontend::frontend_tuner_allocation_struct frontend_tuner_allocation
Definition: fe_tuner_device.h:183
virtual void removeAllocationIdRouting(const size_t tuner_id)=0