diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2016-08-20 10:21:46 +0200 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2016-08-20 10:21:46 +0200 |
commit | 37ca463d98c79169d28825548e37daa6b00b5ab3 (patch) | |
tree | a72bf56df3999a2047e3a9215272d4a7dd40c811 /src | |
parent | 8cecf13b1a10cc72dd5a937178ebe17c43b60ee0 (diff) |
NMT: Fixed channel coding for channels other than 1..9
Diffstat (limited to 'src')
-rw-r--r-- | src/nmt/frame.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/nmt/frame.c b/src/nmt/frame.c index 7125e72..a903548 100644 --- a/src/nmt/frame.c +++ b/src/nmt/frame.c @@ -39,7 +39,8 @@ uint64_t nmt_encode_channel(int channel, int power) value |= 0x100; channel -= 100; } - value |= channel; + value |= channel % 10; + value |= (channel / 10) << 4; value |= power << 9; return value; @@ -47,10 +48,13 @@ uint64_t nmt_encode_channel(int channel, int power) int nmt_decode_channel(uint64_t value, int *channel, int *power) { - if ((value & 0xff) > 99) + if ((value & 0x00f) > 0x009) + return -1; + if ((value & 0x0f0) > 0x090) return -1; - *channel = (value & 0xff) + + *channel = (value & 0x00f) + + ((value & 0x0f0) >> 4) * 10 + ((value & 0x100) >> 8) * 100 + ((value & 0x800) >> 11) * 200; *power = (value & 0x600) >> 9; |