blob: 2760213f7c28ca660278c1f1db5d46eb61adff17 [file] [log] [blame]
Harald Welted83c5132016-10-26 09:38:24 +02001#pragma once
2
3#include <osmocom/core/bits.h>
4
Harald Welte90bd7b62016-11-14 22:06:46 +01005/* structure representing a HDLC decoder process */
Harald Welted83c5132016-10-26 09:38:24 +02006struct hdlc_proc {
Harald Welte90bd7b62016-11-14 22:06:46 +01007 /* 8 bits history of most recently received bits */
Harald Welted83c5132016-10-26 09:38:24 +02008 ubit_t history[8];
Harald Welte90bd7b62016-11-14 22:06:46 +01009 /* 8 bit buffer for assembling the next output byte */
Harald Welted83c5132016-10-26 09:38:24 +020010 ubit_t next_outbyte[8];
Harald Welte90bd7b62016-11-14 22:06:46 +010011 /* number of bits currently in use in next_outbyte */
Harald Welted83c5132016-10-26 09:38:24 +020012 uint8_t num_bits;
Harald Welte90bd7b62016-11-14 22:06:46 +010013
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 Welted83c5132016-10-26 09:38:24 +020024};
25
Harald Welte90bd7b62016-11-14 22:06:46 +010026/* input given number of raw bits from the bit stream into HDLC */
27int process_raw_hdlc(struct hdlc_proc *hdlc, ubit_t *bits, unsigned int len);