aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2016-08-20 10:21:46 +0200
committerAndreas Eversberg <jolly@eversberg.eu>2016-08-20 10:21:46 +0200
commit37ca463d98c79169d28825548e37daa6b00b5ab3 (patch)
treea72bf56df3999a2047e3a9215272d4a7dd40c811 /src
parent8cecf13b1a10cc72dd5a937178ebe17c43b60ee0 (diff)
NMT: Fixed channel coding for channels other than 1..9
Diffstat (limited to 'src')
-rw-r--r--src/nmt/frame.c10
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;