Opened 13 years ago

Closed 13 years ago

#1749 closed defect (fixed)

[PATCH] USALS array overflow problem

Reported by: yeasah@… Owned by: danielk
Priority: minor Milestone: 0.20
Component: mythtv Version: head
Severity: medium Keywords:
Cc: Ticket locked: no


There's a problem with the USALS code in libs/libmythtv/dvbdiseqc.cpp that causes the positioner gotox values to be calculated incorrectly for certain positions. The problem is caused by an overrun of a table. The index of a 10 element table is given by the following code:

CMD2 += DecimalLookup?[(int)round(USALS*10)];

Where in that context USALS is a floating point value which can range from 0.0 to 0.999999, which causes the resultant index to be from 0-10, and thus overruns the end of the table by 1 (returning bogus positioning data in this case). The simplest solution woud be to change the code to use floor():

CMD2 += DecimalLookup?[(int)floor(USALS*10)];

However, the presence of the table is silly anyway -- the spec shows a lookup table as decimal only as a convenience, the encoding is actually as a fixed point fraction. As such, the correct value would most easily be calculated directly from the angle. Attached is a patch that eliminates the table overrun problem, and is also more accurate (and less complicated, too).

I would suggest that this be applied to 0.19-fixes as well as the trunk, since the problem really does cause issues with positioning. In the past, I've had to work around "bad" angles by adding some small value to the angle I actually wanted.

Attachments (1)

usals.diff (1.3 KB) - added by yeasah@… 13 years ago.

Download all attachments as: .zip

Change History (3)

Changed 13 years ago by yeasah@…

Attachment: usals.diff added

comment:1 Changed 13 years ago by danielk

Milestone: 0.20
Status: newassigned
Version: head

comment:2 Changed 13 years ago by danielk

Resolution: fixed
Status: assignedclosed

(In [9921]) Fixes #1749. Fixes fraction lookup overflow with DiSEqC rotor code.

This just calculates the fixed point fraction directly instead of using a lookup table using a somewhat modified patch from yeasah at schwide dt net.

Note: See TracTickets for help on using tickets.