Re: [vdr] Diseqc problems with VDR1.7.19

2011-07-25 Thread Hawes, Mark
I've done some further investigation and as far as I can tell the
problem appears to be with the value returned by cDiseqc::Codes in
diseqc.c.

The return value changed from 'uchar' to 'const uchar' between 1.7.18
and 1.7.19 and the returned value now always points to the last diseqc
code in the string.

The following trace from 1.7.19 shows the problem:

 

Diseqc command list found = t V [E0 10 38 F4] W500 [E0 31 6B 01] W250
[E1 31 6B 01] W15 T

  Entered cDiseqc::Codes pointing at : E0 10 38 F4]

  In cDiseqc::Codes - returning a pointer 137345561 to :  W500 [E0 31

Received from diseqc-Codes(n) a pointer 137345509 to : E1 31 6B 01

Sending Diseqc command: E1 31 6B 01

  Entered cDiseqc::Codes pointing at : E0 31 6B 01]

  In cDiseqc::Codes - returning a pointer 137345580 to :  W250 [E1 31

Received from diseqc-Codes(n) a pointer 137345509 to : E1 31 6B 01

Sending Diseqc command: E1 31 6B 01

  Entered cDiseqc::Codes pointing at : E1 31 6B 01]

  In cDiseqc::Codes - returning a pointer 137345599 to :  W15 T

Received from diseqc-Codes(n) a pointer 137345509 to : E1 31 6B 01

Sending Diseqc command: E1 31 6B 01

 

The identical trace from 1.7.18 which works correctly looks like this: 

 

Diseqc command list found = t V [E0 10 38 F4] W500 [E0 31 6B 01] W250
[E1 31 6B 01] W15 T

  Entered cDiseqc::Codes pointing at : E0 10 38 F4]

  In cDiseqc::Codes - returning a pointer 137333177 to :  W500 [E0 31

Received from diseqc-Codes(n) a pointer 137333125 to : E0 10 38 F4

Sending Diseqc command: E0 10 38 F4

  Entered cDiseqc::Codes pointing at : E0 31 6B 01]

  In cDiseqc::Codes - returning a pointer 137333196 to :  W250 [E1 31

Received from diseqc-Codes(n) a pointer 137333125 to : E0 31 6B 01

Sending Diseqc command: E0 31 6B 01

  Entered cDiseqc::Codes pointing at : E1 31 6B 01]

  In cDiseqc::Codes - returning a pointer 137333215 to :  W15 T

Received from diseqc-Codes(n) a pointer 137333125 to : E1 31 6B 01

Sending Diseqc command: E1 31 6B 01

 

I have tried to revert cDiseqc::Codes in 1.7.19 to the 1.7.18 version
but the extent of the changes introduced to 1.7.19 in this area
eventually defeated my limited C++ skills. In doing so I have learnt and
read a lot and it appears that there are some pitfalls in returning
'const' values. I suspect that this is the problem here but can't be
sure.

If someone could have a look at this and suggest how to fix it, it would
be much appreciated.

 

Thanks,



Mark.

 

___
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr


Re: [vdr] Diseqc problems with VDR1.7.19

2011-07-25 Thread Udo Richter
Am 25.07.2011 13:12, schrieb Hawes, Mark:
 I’ve done some further investigation and as far as I can tell the
 problem appears to be with the value returned by cDiseqc::Codes in
 diseqc.c.
 
 The following trace from 1.7.19 shows the problem:
 
 Received from diseqc-Codes(n) a pointer 137345509 to : E1 31 6B 01
 [..]
 Received from diseqc-Codes(n) a pointer 137345509 to : E1 31 6B 01
 [..]
 Received from diseqc-Codes(n) a pointer 137345509 to : E1 31 6B 01

 The identical trace from 1.7.18 which works correctly looks like this:
 
 Received from diseqc-Codes(n) a pointer 137333125 to : E0 10 38 F4
 [..]
 Received from diseqc-Codes(n) a pointer 137333125 to : E0 31 6B 01
 [..]
 Received from diseqc-Codes(n) a pointer 137333125 to : E1 31 6B 01



Without further trying, my wild guess is that the bug is in the
following code fragment of const char *cDiseqc::Codes(const char *s) const:


  int n = strtol(t, p, 16);
  if (!errno  p != t  0 = n  n = 255) {
 if (parsing) {
codes[NumCodes++] = uchar(n);
numCodes = NumCodes;


My guess is that it must be if (!parsing) instead. The switch seems to
be true for syntax checking from cDiseqc::Parse() (the conf file
parser), and false otherwise. The way it is, the values in codes[] only
change when called from the file parser, and then stay at the last code
sequence that has been parsed forever.


Cheers,

Udo

___
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr


Re: [vdr] Diseqc problems with VDR1.7.19

2011-07-25 Thread Hawes, Mark
Thanks Udo, that seems to have done the trick.

I guess Klaus will pick this up as a matter of course ...

Regards,

Mark. 

-Original Message-
From: Udo Richter [mailto:udo_rich...@gmx.de] 
Sent: Tuesday, 26 July 2011 5:19 AM
To: VDR Mailing List
Subject: Re: [vdr] Diseqc problems with VDR1.7.19

Am 25.07.2011 13:12, schrieb Hawes, Mark:
 I've done some further investigation and as far as I can tell the
 problem appears to be with the value returned by cDiseqc::Codes in
 diseqc.c.
 
 The following trace from 1.7.19 shows the problem:
 
 Received from diseqc-Codes(n) a pointer 137345509 to : E1 31 6B 01
 [..]
 Received from diseqc-Codes(n) a pointer 137345509 to : E1 31 6B 01
 [..]
 Received from diseqc-Codes(n) a pointer 137345509 to : E1 31 6B 01

 The identical trace from 1.7.18 which works correctly looks like this:
 
 Received from diseqc-Codes(n) a pointer 137333125 to : E0 10 38 F4
 [..]
 Received from diseqc-Codes(n) a pointer 137333125 to : E0 31 6B 01
 [..]
 Received from diseqc-Codes(n) a pointer 137333125 to : E1 31 6B 01



Without further trying, my wild guess is that the bug is in the
following code fragment of const char *cDiseqc::Codes(const char *s)
const:


  int n = strtol(t, p, 16);
  if (!errno  p != t  0 = n  n = 255) {
 if (parsing) {
codes[NumCodes++] = uchar(n);
numCodes = NumCodes;


My guess is that it must be if (!parsing) instead. The switch seems to
be true for syntax checking from cDiseqc::Parse() (the conf file
parser), and false otherwise. The way it is, the values in codes[] only
change when called from the file parser, and then stay at the last code
sequence that has been parsed forever.


Cheers,

Udo




___
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr


[vdr] Diseqc problems with VDR1.7.19

2011-07-18 Thread Hawes, Mark
Hi,

 

Since upgrading to VDR 1.7.19 I have experienced problems with Diseqc.

 

My diseqc configuration uses command strings which contain 3 code sets:
a diseqc switch command, a diseqc go to command, and a repeat goto
command.

 

Since upgrading to VDR 1.7.19 it appears that the only code set sent is
the last one, but it's sent three times.

 

To demonstrate this I have put some trace in cDvbTuner::SetFrontend
within dvbdevice.c which traces the complete diseqc string, the diseqc
action, and for diseqc codes - the actual diseqc code sent. It produces
the following output:

 

Diseqc command list found = t v [E0 10 38 F4] W500 [E0 31 6B 04] W250
[E0 31 6B 04] W15 T

Diseqc action = 1

Diseqc action = 3

Diseqc action = 7

Sending Diseqc command: E0 31 6B 04  Wrong, should be E0 10 38 F4 

Diseqc action = 7

Sending Diseqc command: E0 31 6B 04  Wrong, should be E0 31 6B 04 

Diseqc action = 7

Sending Diseqc command: E0 31 6B 04

Diseqc action = 2

 

The same trace in vdr 1.7.18 shows the correct codes being sent in the
correct sequence.

 

I note that some work was done in this area for 1.7.19 but my C++ skills
are a little weak to diagnose the problem any further.

 

Can anybody throw some more light on what's going on?

 

Thanks,

 

Mark.

 

 

 

 

 

 

Mark Hawes
Senior Project Manager

Fujitsu Australia Limited
825 Bourke Street, Docklands VIC 3008, Australia
T +61 3 9924 3240 M +61 416 140 218 F +61 3 9924 3001 
mark.ha...@au.fujitsu.com mailto:mark.ha...@au.fujitsu.com 
au.fujitsu.com http://au.fujitsu.com 

 

 

image001.gif___
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr


Re: [vdr] Diseqc problems with VDR1.7.19

2011-07-18 Thread Hawes, Mark
Just looked at the trace I sent in my initial post and realised that I
had selected a Diseqc command that I had modified while trying to
diagnose the situation so my annotations   were a bit misleading.

The following should be less confusing: 

Diseqc command list found = t v [E0 10 38 F4] W500 [E0 31 6B 04] W250
[E1 31 6B 04] W15 T

Diseqc action = 1

Diseqc action = 3

Diseqc action = 7

Sending Diseqc command: E1 31 6B 04  Wrong, should be E0 10 38 F4 

Diseqc action = 7

Sending Diseqc command: E1 31 6B 04  Wrong, should be E0 31 6B 04 

Diseqc action = 7

Sending Diseqc command: E1 31 6B 04

Diseqc action = 2

Again, the final Diseqc command has been sent three times, not the three
commands in the sequence they appear in the command list.

Apologies for the confusion.

 

Mark. 

 

___
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr