Harald Welte | d83c513 | 2016-10-26 09:38:24 +0200 | [diff] [blame] | 1 | #pragma once |
| 2 | |
| 3 | #include <osmocom/core/bits.h> |
| 4 | |
Harald Welte | 90bd7b6 | 2016-11-14 22:06:46 +0100 | [diff] [blame] | 5 | /* structure representing a HDLC decoder process */ |
Harald Welte | d83c513 | 2016-10-26 09:38:24 +0200 | [diff] [blame] | 6 | struct hdlc_proc { |
Harald Welte | 90bd7b6 | 2016-11-14 22:06:46 +0100 | [diff] [blame] | 7 | /* 8 bits history of most recently received bits */ |
Harald Welte | d83c513 | 2016-10-26 09:38:24 +0200 | [diff] [blame] | 8 | ubit_t history[8]; |
Harald Welte | 90bd7b6 | 2016-11-14 22:06:46 +0100 | [diff] [blame] | 9 | /* 8 bit buffer for assembling the next output byte */ |
Harald Welte | d83c513 | 2016-10-26 09:38:24 +0200 | [diff] [blame] | 10 | ubit_t next_outbyte[8]; |
Harald Welte | 90bd7b6 | 2016-11-14 22:06:46 +0100 | [diff] [blame] | 11 | /* number of bits currently in use in next_outbyte */ |
Harald Welte | d83c513 | 2016-10-26 09:38:24 +0200 | [diff] [blame] | 12 | uint8_t num_bits; |
Harald Welte | 90bd7b6 | 2016-11-14 22:06:46 +0100 | [diff] [blame] | 13 | |
| 14 | /* output buffer for re-aligned frame bytes */ |
| 15 | struct { |
| 16 | uint8_t buf[1024]; |
| 17 | unsigned int len; |
| 18 | } out; |
| 19 | |
| 20 | /* call-back ot be called at end of frame */ |
| 21 | void (*out_cb)(const uint8_t *data, unsigned int len, void *priv); |
| 22 | /* private data passed to out_cb */ |
| 23 | void *priv; |
Harald Welte | d83c513 | 2016-10-26 09:38:24 +0200 | [diff] [blame] | 24 | }; |
| 25 | |
Harald Welte | 90bd7b6 | 2016-11-14 22:06:46 +0100 | [diff] [blame] | 26 | /* input given number of raw bits from the bit stream into HDLC */ |
| 27 | int process_raw_hdlc(struct hdlc_proc *hdlc, ubit_t *bits, unsigned int len); |