added function to get crc_extra
This commit is contained in:
parent
d341ea723e
commit
1f31fe8bed
1 changed files with 36 additions and 1 deletions
|
|
@ -8,7 +8,42 @@
|
|||
#define HYDROLINK_MAX_PAYLOAD_LEN 6
|
||||
#define HYDROLINK_MAX_MSG_LEN (HYDROLINK_MAX_PAYLOAD_LEN + HYDROLINK_NON_PAYLOAD_LEN)
|
||||
|
||||
#define HYDROLINK_MSG_CRCS {73, 58, 250, 38, 28}
|
||||
typedef struct {
|
||||
uint8_t msg_id;
|
||||
uint8_t crc_extra;
|
||||
} hydrolink_crc_extra_t;
|
||||
|
||||
#define HYDROLINK_MSG_CRCS {{1, 73}, {2, 58}, {3, 250}, {4, 38}, {5, 28}}
|
||||
|
||||
/**
|
||||
* @brief Get the crc_extra byte corresponding to msg_id
|
||||
*
|
||||
* @param msg_id the message's id
|
||||
* @param crc[out] the crc_extra byte as output of this function
|
||||
* @return Return 1 if successfull, 0 otherwise.
|
||||
static inline uint8_t hydrolink_get_crc_extra(uint8_t msg_id, uint8_t *crc) {
|
||||
static const hydrolink_crc_extra_t crcs[] = HYDROLINK_MSG_CRCS;
|
||||
uint8_t left = 0;
|
||||
uint8_t right = sizeof(crcs) / sizeof(crcs[0]) - 1;
|
||||
while (left < right) {
|
||||
uint8_t center = (left+right+1) / 2;
|
||||
if (msg_id < crcs[center].msg_id) {
|
||||
right = center - 1;
|
||||
continue;
|
||||
}
|
||||
if (msg_id > crcs[center].msg_id) {
|
||||
left = center;
|
||||
continue;
|
||||
}
|
||||
left = mid;
|
||||
break;
|
||||
}
|
||||
if (crcs[left].msg_id != msg_id) {
|
||||
return 0;
|
||||
}
|
||||
*crc = crcs[left].crc_extra;
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct hydrolink_msg_s;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue