From: "Hans Werner" <HWerner4@gmx.de>
To: alex.betis@gmail.com, linux-media@vger.kernel.org, linux-dvb@linuxtv.org
Subject: [PATCH] scan-s2: tone setting when moving rotor
Date: Sun, 25 Jan 2009 17:41:56 +0100 [thread overview]
Message-ID: <20090125164156.205250@gmx.net> (raw)
Hi Alex,
here's a patch for scan-s2.
I found with one card (VP-1041) that I needed to be careful to
turn off the tone before making the DiSEqC 1.2 rotor command.
Kaffeine does this too so guess it is generally necessary. Also
we can rotate faster by selecting the higher LNB voltage (18v).
Regards,
Hans
Signed-off-by: Hans Werner <hwerner4@gmx.de>
diff -r 06fb47f19e1c diseqc.c
--- a/diseqc.c
+++ b/diseqc.c
@@ -77,7 +77,15 @@ int rotor_command( int frontend_fd, int
return err;
}
-int rotate_rotor (int frontend_fd, int from_rotor_pos, int to_rotor_pos, int voltage_18){
+static inline void msleep(uint32_t msec)
+{
+ struct timespec req = { msec / 1000, 1000000 * (msec % 1000) };
+
+ while (nanosleep(&req, &req))
+ ;
+}
+
+int rotate_rotor (int frontend_fd, int from_rotor_pos, int to_rotor_pos, int voltage_18, int hiband){
/* Rotate a DiSEqC 1.2 rotor from position from_rotor_pos to position to_rotor_pos */
/* Uses Goto nn (command 9) */
float rotor_wait_time; //seconds
@@ -97,8 +105,17 @@ int rotate_rotor (int frontend_fd, int f
a2 = rotor_angle(from_rotor_pos);
degreesmoved = abs(a1-a2);
if (degreesmoved>180) degreesmoved=360-degreesmoved;
- rotor_wait_time = degreesmoved / (voltage_18 ? speed_18V : speed_13V);
+ rotor_wait_time = degreesmoved / speed_18V;
}
+
+ //switch tone off
+ if (err = ioctl(frontend_fd, FE_SET_TONE, SEC_TONE_OFF))
+ return err;
+ msleep(15);
+ // high voltage for high speed rotation
+ if (err = ioctl(frontend_fd, FE_SET_VOLTAGE, SEC_VOLTAGE_18))
+ return err;
+ msleep(15);
err = rotor_command(frontend_fd, 9, to_rotor_pos, 0, 0);
if (err) {
info("Rotor move error!\n");
@@ -111,20 +128,22 @@ int rotate_rotor (int frontend_fd, int f
}
info("completed.\n");
}
+
} else {
info("Rotor already at position %i\n", from_rotor_pos);
}
+
+ // correct tone and voltage
+ if (err = ioctl(frontend_fd, FE_SET_TONE, hiband ? SEC_TONE_ON : SEC_TONE_OFF))
+ return err;
+ msleep(15);
+ if (err = ioctl(frontend_fd, FE_SET_VOLTAGE, voltage_18))
+ return err;
+ msleep(15);
}
return err;
}
-static inline void msleep(uint32_t msec)
-{
- struct timespec req = { msec / 1000, 1000000 * (msec % 1000) };
-
- while (nanosleep(&req, &req))
- ;
-}
int diseqc_send_msg (int fd, fe_sec_voltage_t v, struct diseqc_cmd **cmd,
fe_sec_tone_mode_t t, fe_sec_mini_cmd_t b)
diff -r 06fb47f19e1c diseqc.h
--- a/diseqc.h
+++ b/diseqc.h
@@ -17,7 +17,7 @@ extern int diseqc_send_msg (int fd, fe_s
* set up the switch to position/voltage/tone
*/
extern int setup_switch (int frontend_fd, int switch_pos, int voltage_18, int freq, int uncommitted_switch_pos);
-extern int rotate_rotor (int frontend_fd, int from_rotor_pos, int to_rotor_pos, int voltage_18);
+extern int rotate_rotor (int frontend_fd, int from_rotor_pos, int to_rotor_pos, int voltage_18, int hiband);
#endif
diff -r 06fb47f19e1c scan.c
--- a/scan.c
+++ b/scan.c
@@ -1076,7 +1076,7 @@ static void parse_nit (struct section_bu
// New DVB-S transponder
t = alloc_transponder(tn.frequency);
- // For sattelites add both DVB-S and DVB-S2 transopnders since we don't know what should be used
+ // For satellites add both DVB-S and DVB-S2 transponders since we don't know what should be used
if(current_tp->delivery_system == SYS_DVBS || current_tp->delivery_system == SYS_DVBS2) {
tn.delivery_system = SYS_DVBS;
copy_transponder(t, &tn);
@@ -1705,6 +1705,7 @@ static int __tune_to_transponder (int fr
uint32_t if_freq = 0;
uint32_t bandwidth_hz = 0;
current_tp = t;
+ int hiband = 0;
struct dtv_property p_clear[] = {
{ .cmd = DTV_CLEAR },
@@ -1735,7 +1736,7 @@ static int __tune_to_transponder (int fr
if (lnb_type.high_val) {
if (lnb_type.switch_val) {
/* Voltage-controlled switch */
- int hiband = 0;
+ hiband = 0;
if (t->frequency >= lnb_type.switch_val)
hiband = 1;
@@ -1770,9 +1771,10 @@ static int __tune_to_transponder (int fr
if (t->orbital_pos!=0) rotor_pos = rotor_nn(t->orbital_pos, t->we_flag);
int err;
err = rotate_rotor( frontend_fd,
- curr_rotor_pos,
- rotor_pos,
- t->polarisation == POLARISATION_VERTICAL ? 0 : 1);
+ curr_rotor_pos,
+ rotor_pos,
+ t->polarisation == POLARISATION_VERTICAL ? 0 : 1,
+ hiband);
if (err)
error("Error in rotate_rotor err=%i\n",err);
else
@@ -1798,14 +1800,14 @@ static int __tune_to_transponder (int fr
}
break;
- case SYS_DVBC_ANNEX_B:
- case SYS_DVBC_ANNEX_AC:
- if_freq = t->frequency;
-
- if (verbosity >= 2){
- dprintf(1,"DVB-C frequency is %d\n", if_freq);
- }
- break;
+ case SYS_DVBC_ANNEX_B:
+ case SYS_DVBC_ANNEX_AC:
+ if_freq = t->frequency;
+
+ if (verbosity >= 2){
+ dprintf(1,"DVB-C frequency is %d\n", if_freq);
+ }
+ break;
}
struct dvb_frontend_event ev;
@@ -1825,7 +1827,7 @@ static int __tune_to_transponder (int fr
.num = 10,
.props = p_tune
};
-
+
/* discard stale QPSK events */
while (1) {
if (ioctl(frontend_fd, FE_GET_EVENT, &ev) == -1)
@@ -2723,8 +2725,8 @@ static const char *usage = "\n"
" -5 multiply all filter timeouts by factor 5\n"
" for non-DVB-compliant section repitition rates\n"
" -O pos Orbital position override 'S4W', 'S19.2E' - good for VDR output\n"
-" -k cnt Skip count, will skip every first specified\n"
-" messages for every message type (default 0)\n"
+" -k cnt Skip count: skip the first cnt \n"
+" messages of each message type (default 0)\n"
" -I cnt Scan iterations count (default 10).\n"
" Larger number will make scan longer on every channel\n"
" -o fmt output format: 'vdr' (default) or 'zap'\n"
--
Release early, release often.
NUR NOCH BIS 31.01.! GMX FreeDSL - Telefonanschluss + DSL
für nur 16,37 EURO/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K11308T4569a
reply other threads:[~2009-01-25 16:41 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090125164156.205250@gmx.net \
--to=hwerner4@gmx.de \
--cc=alex.betis@gmail.com \
--cc=linux-dvb@linuxtv.org \
--cc=linux-media@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox