From acaccf6fb25fa65d42ec90bcbe21ac8241628ab9 Mon Sep 17 00:00:00 2001 From: Andreas Monzner Date: Sat, 5 Nov 2005 14:19:27 +0000 Subject: [PATCH] add some funktions to configure lnbs, satellites, diseqc... still need some changes for swig to do functions callable from python --- lib/dvb/sec.cpp | 402 +++++++++++++++++++++++++++++++++++++++--------- lib/dvb/sec.h | 75 ++++++--- 2 files changed, 385 insertions(+), 92 deletions(-) diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index a964b75e..0c387ca2 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -18,72 +18,73 @@ DEFINE_REF(eDVBSatelliteEquipmentControl); eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl() + :m_lnbidx(-1), m_curSat(m_lnbs[0].m_satellites.end()) { - m_lnblist.push_back(eDVBSatelliteLNBParameters()); - eDVBSatelliteLNBParameters &lnb1_ref = m_lnblist.back(); - eDVBSatelliteDiseqcParameters &diseqc1_ref = lnb1_ref.m_diseqc_parameters; - -/* - eDVBSatelliteRotorParameters &rotor_ref = lnb1_ref.m_rotor_parameters; - eDVBSatelliteRotorParameters::eDVBSatelliteRotorInputpowerParameters &rotor_input_ref = rotor_ref.m_inputpower_parameters; - eDVBSatelliteRotorParameters::eDVBSatelliteRotorGotoxxParameters &rotor_gotoxx_ref = rotor_ref.m_gotoxx_parameters; - - rotor_input_ref.m_use = true; - rotor_input_ref.m_threshold = 50; - - rotor_gotoxx_ref.m_can_use = true; - rotor_gotoxx_ref.m_lo_direction = eDVBSatelliteRotorParameters::EAST; - rotor_gotoxx_ref.m_la_direction = eDVBSatelliteRotorParameters::NORTH; - rotor_gotoxx_ref.m_longitude = 8.683; - rotor_gotoxx_ref.m_latitude = 51.017;*/ - - lnb1_ref.m_lof_hi = 10600000; - lnb1_ref.m_lof_lo = 9750000; - lnb1_ref.m_lof_threshold = 11700000; - - diseqc1_ref.m_diseqc_mode = eDVBSatelliteDiseqcParameters::V1_0; - diseqc1_ref.m_committed_cmd = eDVBSatelliteDiseqcParameters::AA; - diseqc1_ref.m_repeats = 0; - diseqc1_ref.m_seq_repeat = false; - diseqc1_ref.m_swap_cmds = false; - diseqc1_ref.m_toneburst_param = eDVBSatelliteDiseqcParameters::NO; - diseqc1_ref.m_uncommitted_cmd = 0; - diseqc1_ref.m_use_fast = 0; - - eDVBSatelliteSwitchParameters &astra_ref = lnb1_ref.m_satellites[192]; - astra_ref.m_22khz_signal = eDVBSatelliteSwitchParameters::HILO; - astra_ref.m_voltage_mode = eDVBSatelliteSwitchParameters::HV; - + clear(); + +#undef ROTOR + +// ASTRA + addLNB(); + setLNBTunerMask(1); + setLNBLOFL(9750000); + setLNBThreshold(11750000); +#ifdef ROTOR + setLNBLOFH(10600000); + setDiSEqCMode(eDVBSatelliteDiseqcParameters::V1_2); +#else + setLNBLOFH(10607000); + setDiSEqCMode(eDVBSatelliteDiseqcParameters::V1_0); +#endif + setToneburst(eDVBSatelliteDiseqcParameters::NO); + setRepeats(0); +#ifdef ROTOR + setCommittedCommand(eDVBSatelliteDiseqcParameters::AA); +#else + setCommittedCommand(eDVBSatelliteDiseqcParameters::BB); +#endif + setCommandOrder(0); // committed, toneburst + setFastDiSEqC(true); +#ifdef ROTOR + setLongitude(8.683); + setLatitude(51.017); + setLoDirection(eDVBSatelliteRotorParameters::EAST); + setLaDirection(eDVBSatelliteRotorParameters::NORTH); + setUseInputpower(true); + setInputpowerDelta(50); +#endif + addSatellite(192); + setVoltageMode(eDVBSatelliteSwitchParameters::HV); + setToneMode(eDVBSatelliteSwitchParameters::HILO); +#ifdef ROTOR + setRotorPosNum(0); // use gotoXX +#else // HOTBIRD - - m_lnblist.push_back(eDVBSatelliteLNBParameters()); - eDVBSatelliteLNBParameters &lnb2_ref = m_lnblist.back(); - eDVBSatelliteDiseqcParameters &diseqc2_ref = lnb2_ref.m_diseqc_parameters; - - lnb2_ref.m_lof_hi = 10600000; - lnb2_ref.m_lof_lo = 9750000; - lnb2_ref.m_lof_threshold = 11700000; - - diseqc2_ref.m_diseqc_mode = eDVBSatelliteDiseqcParameters::V1_0; - diseqc2_ref.m_committed_cmd = eDVBSatelliteDiseqcParameters::AB; - diseqc2_ref.m_repeats = 0; - diseqc2_ref.m_seq_repeat = false; - diseqc2_ref.m_swap_cmds = false; - diseqc1_ref.m_toneburst_param = eDVBSatelliteDiseqcParameters::NO; - diseqc2_ref.m_uncommitted_cmd = 0; - diseqc2_ref.m_use_fast = 0; - - eDVBSatelliteSwitchParameters &hotbird_ref = lnb2_ref.m_satellites[130]; - hotbird_ref.m_22khz_signal = eDVBSatelliteSwitchParameters::HILO; - hotbird_ref.m_voltage_mode = eDVBSatelliteSwitchParameters::HV; + addLNB(); + setLNBTunerMask(1); + setLNBLOFL(9750000); + setLNBLOFH(10600000); + setLNBThreshold(11750000); + setDiSEqCMode(eDVBSatelliteDiseqcParameters::V1_0); + setToneburst(eDVBSatelliteDiseqcParameters::NO); + setRepeats(0); + setCommittedCommand(eDVBSatelliteDiseqcParameters::AB); + setCommandOrder(0); // committed, toneburst + setFastDiSEqC(true); +#endif + addSatellite(130); + setVoltageMode(eDVBSatelliteSwitchParameters::HV); + setToneMode(eDVBSatelliteSwitchParameters::HILO); +#ifdef ROTOR + setRotorPosNum(0); // use gotoXX +#endif } RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat) { - std::list::iterator it = m_lnblist.begin(); - for (;it != m_lnblist.end(); ++it ) + for (int idx=0; idx <= m_lnbidx; ++idx ) { - eDVBSatelliteLNBParameters &lnb_param = *it; + eDVBSatelliteLNBParameters &lnb_param = m_lnbs[idx]; eDVBSatelliteDiseqcParameters &di_param = lnb_param.m_diseqc_parameters; eDVBSatelliteRotorParameters &rotor_param = lnb_param.m_rotor_parameters; @@ -210,6 +211,14 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); } + if ( di_param.m_command_order & 1 && // toneburst at begin of sequence + changed_burst && di_param.m_toneburst_param != eDVBSatelliteDiseqcParameters::NO ) + { + sec_sequence.push_back( eSecCommand(eSecCommand::SEND_TONEBURST, di_param.m_toneburst_param) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); + frontend.setData(2, di_param.m_toneburst_param); + } + if ( send_diseqc ) { int loops=0; @@ -229,7 +238,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA diseqc.data[0] = i ? 0xE1 : 0xE0; diseqc.data[1] = 0x10; - if ( !send_csw || (di_param.m_swap_cmds && send_ucsw) ) + if ( !send_csw || (send_ucsw && (di_param.m_command_order & 4) ) ) { diseqc.data[2] = 0x39; diseqc.data[3] = ucsw; @@ -260,35 +269,35 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA if ( i < loops ) sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, delay ) ); else - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 30) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); } else // delay 120msek when no command is in repeat gap sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 120) ); } else - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 30) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); frontend.setData(0, csw); frontend.setData(1, ucsw); } } - if ( (changed_burst || send_diseqc) && di_param.m_toneburst_param != eDVBSatelliteDiseqcParameters::NO ) + + if ( !(di_param.m_command_order & 1) && // toneburst at end of sequence + (changed_burst || send_diseqc) && di_param.m_toneburst_param != eDVBSatelliteDiseqcParameters::NO ) { sec_sequence.push_back( eSecCommand(eSecCommand::SEND_TONEBURST, di_param.m_toneburst_param) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 30) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); frontend.setData(2, di_param.m_toneburst_param); } + if ( di_param.m_diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2 ) { int RotorCmd=0; bool useGotoXX = false; - std::map::iterator it = - rotor_param.m_rotor_position_table.find( sat.orbital_position ); - - if (it != rotor_param.m_rotor_position_table.end()) // position for selected sat found ? - RotorCmd=it->second; - else // entry not in table found + if (sw_param.m_rotorPosNum) // we have stored rotor pos? + RotorCmd=sw_param.m_rotorPosNum; + else // we must calc gotoxx cmd { eDebug("Entry for %d,%d° not in Rotor Table found... i try gotoXX°", sat.orbital_position / 10, sat.orbital_position % 10 ); useGotoXX = true; @@ -404,7 +413,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); // 50msec delay sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) ); cmd.direction=1; // check for running rotor - cmd.deltaA=rotor_param.m_inputpower_parameters.m_threshold; + cmd.deltaA=rotor_param.m_inputpower_parameters.m_delta; cmd.steps=+3; cmd.okcount=0; sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) ); // check if rotor has started @@ -454,3 +463,254 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA return -1; } +RESULT eDVBSatelliteEquipmentControl::clear() +{ + for (int i=0; i < m_lnbidx; ++i) + { + m_lnbs[i].m_satellites.clear(); + m_lnbs[i].tuner_mask = 0; + } + m_lnbidx=-1; + return 0; +} + +/* LNB Specific Parameters */ +RESULT eDVBSatelliteEquipmentControl::addLNB() +{ + if ( m_lnbidx < (int)(sizeof(m_lnbs) / sizeof(eDVBSatelliteLNBParameters))) + m_curSat=m_lnbs[++m_lnbidx].m_satellites.end(); + else + { + eDebug("no more LNB free... cnt is %d", m_lnbidx); + return -ENOSPC; + } + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setLNBTunerMask(int tunermask) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].tuner_mask = tunermask; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setLNBLOFL(int lofl) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_lof_lo = lofl; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setLNBLOFH(int lofh) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_lof_hi = lofh; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setLNBThreshold(int threshold) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_lof_threshold = threshold; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setLNBIncreasedVoltage(bool onoff) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_increased_voltage = onoff; + else + return -ENOENT; + return 0; +} + +/* DiSEqC Specific Parameters */ +RESULT eDVBSatelliteEquipmentControl::setDiSEqCMode(int diseqcmode) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_diseqc_parameters.m_diseqc_mode = (eDVBSatelliteDiseqcParameters::t_diseqc_mode)diseqcmode; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setToneburst(int toneburst) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_diseqc_parameters.m_toneburst_param = (eDVBSatelliteDiseqcParameters::t_toneburst_param)toneburst; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setRepeats(int repeats) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_diseqc_parameters.m_repeats=repeats; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setCommittedCommand(int command) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_diseqc_parameters.m_committed_cmd=command; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setUncommittedCommand(int command) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_diseqc_parameters.m_uncommitted_cmd = command; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setCommandOrder(int order) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_diseqc_parameters.m_command_order=order; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setFastDiSEqC(bool onoff) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_diseqc_parameters.m_use_fast=onoff; + else + return -ENOENT; + return 0; +} + +/* Rotor Specific Parameters */ +RESULT eDVBSatelliteEquipmentControl::setLongitude(float longitude) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_longitude=longitude; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setLatitude(float latitude) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_latitude=latitude; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setLoDirection(int direction) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_lo_direction=direction; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setLaDirection(int direction) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_la_direction=direction; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setUseInputpower(bool onoff) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_rotor_parameters.m_inputpower_parameters.m_use=onoff; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setInputpowerDelta(int delta) +{ + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_rotor_parameters.m_inputpower_parameters.m_delta=delta; + else + return -ENOENT; + return 0; +} + +/* Satellite Specific Parameters */ +RESULT eDVBSatelliteEquipmentControl::addSatellite(int orbital_position) +{ + if ( currentLNBValid() ) + { + std::map::iterator it = + m_lnbs[m_lnbidx].m_satellites.find(orbital_position); + if ( it == m_lnbs[m_lnbidx].m_satellites.end() ) + { + std::pair::iterator, bool > ret = + m_lnbs[m_lnbidx].m_satellites.insert( + std::pair(orbital_position, eDVBSatelliteSwitchParameters()) + ); + if ( ret.second ) + m_curSat = ret.first; + else + return -ENOMEM; + } + else + return -EEXIST; + } + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setVoltageMode(int mode) +{ + if ( currentLNBValid() && m_curSat != m_lnbs[m_lnbidx].m_satellites.end() ) + m_curSat->second.m_voltage_mode = (eDVBSatelliteSwitchParameters::t_voltage_mode)mode; + else + return -ENOENT; + return 0; + +} + +RESULT eDVBSatelliteEquipmentControl::setToneMode(int mode) +{ + if ( currentLNBValid() ) + { + if ( m_curSat != m_lnbs[m_lnbidx].m_satellites.end() ) + m_curSat->second.m_22khz_signal = (eDVBSatelliteSwitchParameters::t_22khz_signal)mode; + else + return -EPERM; + } + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setRotorPosNum(int rotor_pos_num) +{ + if ( currentLNBValid() ) + { + if ( m_curSat != m_lnbs[m_lnbidx].m_satellites.end() ) + m_curSat->second.m_rotorPosNum=rotor_pos_num; + else + return -EPERM; + } + else + return -ENOENT; + return 0; +} diff --git a/lib/dvb/sec.h b/lib/dvb/sec.h index 0b06afc6..3370a0b0 100644 --- a/lib/dvb/sec.h +++ b/lib/dvb/sec.h @@ -113,7 +113,7 @@ class eDVBSatelliteDiseqcParameters { public: enum { AA=0, AB=1, BA=2, BB=3, SENDNO=4 /* and 0xF0 .. 0xFF*/ }; // DiSEqC Parameter - int m_committed_cmd; + __u8 m_committed_cmd; enum t_diseqc_mode { NONE=0, V1_0=1, V1_1=2, V1_2=3, SMATV=4 }; // DiSEqC Mode t_diseqc_mode m_diseqc_mode; @@ -121,11 +121,19 @@ public: enum t_toneburst_param { NO=0, A=1, B=2 }; t_toneburst_param m_toneburst_param; - int m_repeats; // for cascaded switches + __u8 m_repeats; // for cascaded switches bool m_use_fast; // send no DiSEqC on H/V or Lo/Hi change bool m_seq_repeat; // send the complete DiSEqC Sequence twice... - bool m_swap_cmds; // swaps the committed & uncommitted cmd - int m_uncommitted_cmd; // state of the 4 uncommitted switches.. + __u8 m_command_order; + /* diseqc 1.0) + 0) commited, toneburst + 1) toneburst, committed + diseqc > 1.0) + 2) committed, uncommitted, toneburst + 3) toneburst, committed, uncommitted + 4) uncommitted, committed, toneburst + 5) toneburst, uncommitted, committed */ + __u8 m_uncommitted_cmd; // state of the 4 uncommitted switches.. }; class eDVBSatelliteSwitchParameters @@ -135,6 +143,7 @@ public: enum t_voltage_mode { HV=0, _14V=1, _18V=2, _0V=3 }; // 14/18 V t_voltage_mode m_voltage_mode; t_22khz_signal m_22khz_signal; + __u8 m_rotorPosNum; // 0 is disable.. then use gotoxx }; class eDVBSatelliteRotorParameters @@ -142,38 +151,28 @@ class eDVBSatelliteRotorParameters public: enum { NORTH, SOUTH, EAST, WEST }; + eDVBSatelliteRotorParameters() { setDefaultOptions(); } + struct eDVBSatelliteRotorInputpowerParameters { bool m_use; // can we use rotor inputpower to detect rotor running state ? - int m_threshold; // threshold between running and stopped rotor + __u8 m_delta; // delta between running and stopped rotor }; eDVBSatelliteRotorInputpowerParameters m_inputpower_parameters; struct eDVBSatelliteRotorGotoxxParameters { - bool m_can_use; // rotor support gotoXX cmd ? - int m_lo_direction; // EAST, WEST - int m_la_direction; // NORT, SOUTH + __u8 m_lo_direction; // EAST, WEST + __u8 m_la_direction; // NORT, SOUTH double m_longitude; // longitude for gotoXX° function double m_latitude; // latitude for gotoXX° function }; eDVBSatelliteRotorGotoxxParameters m_gotoxx_parameters; - struct Orbital_Position_Compare - { - inline bool operator()(const int &i1, const int &i2) const - { - return abs(i1-i2) < 6 ? false: i1 < i2; - } - }; - std::map< int, int, Orbital_Position_Compare > m_rotor_position_table; - /* mapping orbitalposition <-> number stored in rotor */ - void setDefaultOptions() // set default rotor options { m_inputpower_parameters.m_use = true; - m_inputpower_parameters.m_threshold = 60; - m_gotoxx_parameters.m_can_use = true; + m_inputpower_parameters.m_delta = 60; m_gotoxx_parameters.m_lo_direction = EAST; m_gotoxx_parameters.m_la_direction = NORTH; m_gotoxx_parameters.m_longitude = 0.0; @@ -187,6 +186,8 @@ public: enum t_12V_relais_state { OFF=0, ON }; t_12V_relais_state m_12V_relais_state; // 12V relais output on/off + __u8 tuner_mask; // useable by tuner ( 1 | 2 | 4...) + unsigned int m_lof_hi, // for 2 band universal lnb 10600 Mhz (high band offset frequency) m_lof_lo, // for 2 band universal lnb 9750 Mhz (low band offset frequency) m_lof_threshold; // for 2 band universal lnb 11750 Mhz (band switch frequency) @@ -200,11 +201,43 @@ public: class eDVBSatelliteEquipmentControl: public iDVBSatelliteEquipmentControl { - std::list m_lnblist; + eDVBSatelliteLNBParameters m_lnbs[128]; // i think its enough + int m_lnbidx; // current index for set parameters + std::map::iterator m_curSat; public: DECLARE_REF(eDVBSatelliteEquipmentControl); eDVBSatelliteEquipmentControl(); RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat); + + bool currentLNBValid() { return m_lnbidx > -1 && m_lnbidx < (int)(sizeof(m_lnbs) / sizeof(eDVBSatelliteLNBParameters)); } + RESULT clear(); +/* LNB Specific Parameters */ + RESULT addLNB(); + RESULT setLNBTunerMask(int tunermask); + RESULT setLNBLOFL(int lofl); + RESULT setLNBLOFH(int lofh); + RESULT setLNBThreshold(int threshold); + RESULT setLNBIncreasedVoltage(bool onoff); +/* DiSEqC Specific Parameters */ + RESULT setDiSEqCMode(int diseqcmode); + RESULT setToneburst(int toneburst); + RESULT setRepeats(int repeats); + RESULT setCommittedCommand(int command); + RESULT setUncommittedCommand(int command); + RESULT setCommandOrder(int order); + RESULT setFastDiSEqC(bool onoff); +/* Rotor Specific Parameters */ + RESULT setLongitude(float longitude); + RESULT setLatitude(float latitude); + RESULT setLoDirection(int direction); + RESULT setLaDirection(int direction); + RESULT setUseInputpower(bool onoff); + RESULT setInputpowerDelta(int delta); // delta between running and stopped rotor +/* Satellite Specific Parameters */ + RESULT addSatellite(int orbital_position); + RESULT setVoltageMode(int mode); + RESULT setToneMode(int mode); + RESULT setRotorPosNum(int rotor_pos_num); }; #endif -- 2.30.2