Opened 18 years ago
Closed 18 years ago
#1749 closed defect (fixed)
[PATCH] USALS array overflow problem
Reported by: | Owned by: | danielk | |
---|---|---|---|
Priority: | minor | Milestone: | 0.20 |
Component: | mythtv | Version: | head |
Severity: | medium | Keywords: | |
Cc: | Ticket locked: | no |
Description
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)
Change History (3)
Changed 18 years ago by
Attachment: | usals.diff added |
---|
comment:1 Changed 18 years ago by
Milestone: | → 0.20 |
---|---|
Status: | new → assigned |
Version: | → head |
comment:2 Changed 18 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
(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.