Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SX1276PingPong by
AlohaPacket.cpp@16:c3c6b13c3c42, 2016-06-08 (annotated)
- Committer:
- rba90
- Date:
- Wed Jun 08 22:15:29 2016 +0000
- Revision:
- 16:c3c6b13c3c42
random stuff
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| rba90 | 16:c3c6b13c3c42 | 1 | #include "AlohaPacket.h" |
| rba90 | 16:c3c6b13c3c42 | 2 | |
| rba90 | 16:c3c6b13c3c42 | 3 | uint8_t crc8(const uint8_t *data, int len) |
| rba90 | 16:c3c6b13c3c42 | 4 | { |
| rba90 | 16:c3c6b13c3c42 | 5 | unsigned int crc = 0; |
| rba90 | 16:c3c6b13c3c42 | 6 | |
| rba90 | 16:c3c6b13c3c42 | 7 | for (int j = len; j; j--, data++) |
| rba90 | 16:c3c6b13c3c42 | 8 | { |
| rba90 | 16:c3c6b13c3c42 | 9 | crc ^= (*data << 8); |
| rba90 | 16:c3c6b13c3c42 | 10 | for (int i = 8; i; i--) |
| rba90 | 16:c3c6b13c3c42 | 11 | { |
| rba90 | 16:c3c6b13c3c42 | 12 | if (crc & 0x8000) |
| rba90 | 16:c3c6b13c3c42 | 13 | { |
| rba90 | 16:c3c6b13c3c42 | 14 | crc ^= (0x1070 << 3); |
| rba90 | 16:c3c6b13c3c42 | 15 | } |
| rba90 | 16:c3c6b13c3c42 | 16 | crc <<= 1; |
| rba90 | 16:c3c6b13c3c42 | 17 | } |
| rba90 | 16:c3c6b13c3c42 | 18 | } |
| rba90 | 16:c3c6b13c3c42 | 19 | |
| rba90 | 16:c3c6b13c3c42 | 20 | return (uint8_t)(crc >> 8); |
| rba90 | 16:c3c6b13c3c42 | 21 | } |
| rba90 | 16:c3c6b13c3c42 | 22 | |
| rba90 | 16:c3c6b13c3c42 | 23 | bool dissectAlohaPacket(uint8_t *input, HeaderStruct *header, DataStruct *data) |
| rba90 | 16:c3c6b13c3c42 | 24 | { |
| rba90 | 16:c3c6b13c3c42 | 25 | // assume user has already prepare memory in *in |
| rba90 | 16:c3c6b13c3c42 | 26 | |
| rba90 | 16:c3c6b13c3c42 | 27 | // get header |
| rba90 | 16:c3c6b13c3c42 | 28 | if (header) |
| rba90 | 16:c3c6b13c3c42 | 29 | { |
| rba90 | 16:c3c6b13c3c42 | 30 | header->fid = input[0] >> 4; // higher four bits |
| rba90 | 16:c3c6b13c3c42 | 31 | header->no = input[0] & 0x0f; // lower four bits |
| rba90 | 16:c3c6b13c3c42 | 32 | } |
| rba90 | 16:c3c6b13c3c42 | 33 | |
| rba90 | 16:c3c6b13c3c42 | 34 | // get data |
| rba90 | 16:c3c6b13c3c42 | 35 | if (data) |
| rba90 | 16:c3c6b13c3c42 | 36 | { |
| rba90 | 16:c3c6b13c3c42 | 37 | data->pd0 = input[1]; |
| rba90 | 16:c3c6b13c3c42 | 38 | data->pd1 = input[2]; |
| rba90 | 16:c3c6b13c3c42 | 39 | } |
| rba90 | 16:c3c6b13c3c42 | 40 | |
| rba90 | 16:c3c6b13c3c42 | 41 | // check crc |
| rba90 | 16:c3c6b13c3c42 | 42 | if (header && data) |
| rba90 | 16:c3c6b13c3c42 | 43 | { |
| rba90 | 16:c3c6b13c3c42 | 44 | return input[3] == crc8(input, 3); |
| rba90 | 16:c3c6b13c3c42 | 45 | } |
| rba90 | 16:c3c6b13c3c42 | 46 | else |
| rba90 | 16:c3c6b13c3c42 | 47 | { |
| rba90 | 16:c3c6b13c3c42 | 48 | return false; |
| rba90 | 16:c3c6b13c3c42 | 49 | } |
| rba90 | 16:c3c6b13c3c42 | 50 | } |
| rba90 | 16:c3c6b13c3c42 | 51 | |
| rba90 | 16:c3c6b13c3c42 | 52 | void createAlohaPacket(uint8_t *output, HeaderStruct *header, DataStruct *data) |
| rba90 | 16:c3c6b13c3c42 | 53 | { |
| rba90 | 16:c3c6b13c3c42 | 54 | // assume user has already allocated memory for output |
| rba90 | 16:c3c6b13c3c42 | 55 | |
| rba90 | 16:c3c6b13c3c42 | 56 | // create header |
| rba90 | 16:c3c6b13c3c42 | 57 | if (header) |
| rba90 | 16:c3c6b13c3c42 | 58 | { |
| rba90 | 16:c3c6b13c3c42 | 59 | output[0] = header->no; |
| rba90 | 16:c3c6b13c3c42 | 60 | output[0] |= header->fid << 4; |
| rba90 | 16:c3c6b13c3c42 | 61 | } |
| rba90 | 16:c3c6b13c3c42 | 62 | |
| rba90 | 16:c3c6b13c3c42 | 63 | // fit data |
| rba90 | 16:c3c6b13c3c42 | 64 | if (data) |
| rba90 | 16:c3c6b13c3c42 | 65 | { |
| rba90 | 16:c3c6b13c3c42 | 66 | output[1] = data->pd0; |
| rba90 | 16:c3c6b13c3c42 | 67 | output[2] = data->pd1; |
| rba90 | 16:c3c6b13c3c42 | 68 | } |
| rba90 | 16:c3c6b13c3c42 | 69 | |
| rba90 | 16:c3c6b13c3c42 | 70 | // calculate CRC |
| rba90 | 16:c3c6b13c3c42 | 71 | if (header && data) |
| rba90 | 16:c3c6b13c3c42 | 72 | { |
| rba90 | 16:c3c6b13c3c42 | 73 | output[3] = crc8(output, 3); |
| rba90 | 16:c3c6b13c3c42 | 74 | } |
| rba90 | 16:c3c6b13c3c42 | 75 | } |
