// ============================================================================ // // = CONTEXT // TANGO Project - NovelecElectrometer Support Library // PhotoVoltaique Types are Type 1, 2 & 3 // // = FILENAME // N_PhotoVoltaique.cpp // // = AUTHOR // X. Elattaoui // // ============================================================================ // ============================================================================ // DEPENDENCIES // ============================================================================ #include <iostream> #include <sstream> #include <string> #include <Xstring.h> #include "N_PhotoVoltaique.h" #include "NovelecProtocol.h" /* * Valid Range values for a N_PhotoVoltaique */ static const std::string NType1_rangeValue[] = {"1e-11 A","3e-11 A","1e-10 A","3e-10 A"}; static const std::string NType2_rangeValue[] = {"1e-10 A","3e-10 A","1e-9 A","3e-9 A","1e-8 A","3e-8 A","1e-7 A","3e-7 A"}; static const std::string NType3_rangeValue[] = {"1e-8 A","3e-8 A","1e-7 A","3e-7 A","1e-6 A","3e-6 A","1e-5 A","3e-5 A"}; // ============================================================================ // N_PhotoVoltaique::N_PhotoVoltaique // ============================================================================ N_PhotoVoltaique::N_PhotoVoltaique (std::string comLink_device_name, short address, short novTypeNumber) : Novelec_MCCE2(comLink_device_name, address, novTypeNumber) { std::cout << "N_PhotoVoltaique::N_PhotoVoltaique <-" << std::endl; //- init range limit switch(novTypeNumber) { case 1 : _rangeLimit = 3; break; case 2 : case 3 : _rangeLimit = 7; break; } std::cout << "N_PhotoVoltaique::N_PhotoVoltaique ->" << std::endl; } // ============================================================================ // N_PhotoVoltaique::~N_PhotoVoltaique // ============================================================================ N_PhotoVoltaique::~N_PhotoVoltaique (void) { std::cout << "N_PhotoVoltaique::~N_PhotoVoltaique <-" << std::endl; std::cout << "N_PhotoVoltaique::~N_PhotoVoltaique ->" << std::endl; } // ============================================================================ // N_PhotoVoltaique::range_up // ============================================================================ void N_PhotoVoltaique::range_up (void) { std::stringstream cmd_to_send; _range += 1; if(_range > _rangeLimit) { _range = _rangeLimit; throw electrometer::ElectrometerException("OUT_OF_RANGE", "Range up limit reached.", "N_PhotoVoltaique::range_up( )."); } //- build and send the command cmd_to_send << _range << std::endl; _electrometerProtocol->set_range(cmd_to_send.str()); } // ============================================================================ // N_PhotoVoltaique::range_down // ============================================================================ void N_PhotoVoltaique::range_down (void) { std::stringstream cmd_to_send; _range -= 1; if(_range < 0) { _range = 0; throw electrometer::ElectrometerException("OUT_OF_RANGE", "Range down limit reached.", "N_PhotoVoltaique::range_down( )."); } //- build and send the command // _rangeStr = NType1_rangeValue[_range]; cmd_to_send << _range << std::endl; _electrometerProtocol->set_range(cmd_to_send.str()); } // ============================================================================ // N_PhotoVoltaique::get_ElectroMeterFrequency Filter // ============================================================================ std::string N_PhotoVoltaique::get_ElectroMeterFrequency (void) { NovelecProtocol* _nproto = dynamic_cast<NovelecProtocol*>(_electrometerProtocol); if(!_nproto) throw electrometer::ElectrometerException("BAD_CAST", "Unable to query the electrmometer frequency.", "N_PhotoVoltaique::get_ElectroMeterFrequency( )."); return _nproto->get_frequency(); } // ============================================================================ // N_PhotoVoltaique::set_ElectroMeterFrequency Filter // ============================================================================ void N_PhotoVoltaique::set_ElectroMeterFrequency (std::string freqFilter) { NovelecProtocol* _nproto = dynamic_cast<NovelecProtocol*>(_electrometerProtocol); if(!_nproto) throw electrometer::ElectrometerException("BAD_CAST", "Unable to query the electrmometer frequency.", "N_PhotoVoltaique::set_ElectroMeterFrequency( )."); _nproto->set_frequency(freqFilter); }