libosmocore  1.10.0.2-2e788.202408152026
Osmocom core library
isdnhdlc.h
Go to the documentation of this file.
1 /*
2  * isdnhdlc.h -- General purpose ISDN HDLC decoder.
3  *
4  * Implementation of a HDLC decoder/encoder in software.
5  * Necessary because some ISDN devices don't have HDLC
6  * controllers.
7  *
8  * Copyright (C)
9  * 2009 Karsten Keil <keil@b1-systems.de>
10  * 2002 Wolfgang Mües <wolfgang@iksw-muees.de>
11  * 2001 Frode Isaksen <fisaksen@bewan.com>
12  * 2001 Kai Germaschewski <kai.germaschewski@gmx.de>
13  *
14  * This program is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License as published by
16  * the Free Software Foundation; either version 2 of the License, or
17  * (at your option) any later version.
18  *
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22  * GNU General Public License for more details.
23  */
24 
25 #pragma once
26 
27 #include <stdint.h>
28 
30  int bit_shift;
32  int data_bits;
33  int ffbit_shift; /* encoding only */
34  int state;
35  int dstpos;
36 
37  uint16_t crc;
38 
39  uint8_t cbin;
40  uint8_t shift_reg;
41  uint8_t ffvalue;
42 
43  /* set if transferring data */
44  uint32_t data_received:1;
45  /* set if D channel (send idle instead of flags) */
46  uint32_t dchannel:1;
47  /* set if 56K adaptation */
48  uint32_t do_adapt56:1;
49  /* set if in closing phase (need to send CRC + flag) */
50  uint32_t do_closing:1;
51  /* set if data is bitreverse */
52  uint32_t do_bitreverse:1;
53 };
54 
55 /* Feature Flags */
56 #define OSMO_HDLC_F_56KBIT 0x01
57 #define OSMO_HDLC_F_DCHANNEL 0x02
58 #define OSMO_HDLC_F_BITREVERSE 0x04
59 
60 /*
61  The return value from isdnhdlc_decode is
62  the frame length, 0 if no complete frame was decoded,
63  or a negative error number
64 */
65 #define OSMO_HDLC_FRAMING_ERROR 1
66 #define OSMO_HDLC_CRC_ERROR 2
67 #define OSMO_HDLC_LENGTH_ERROR 3
68 
69 extern void osmo_isdnhdlc_rcv_init(struct osmo_isdnhdlc_vars *hdlc, uint32_t features);
70 
71 extern int osmo_isdnhdlc_decode(struct osmo_isdnhdlc_vars *hdlc, const uint8_t *src,
72  int slen, int *count, uint8_t *dst, int dsize);
73 
74 extern void osmo_isdnhdlc_out_init(struct osmo_isdnhdlc_vars *hdlc, uint32_t features);
75 
76 extern int osmo_isdnhdlc_encode(struct osmo_isdnhdlc_vars *hdlc, const uint8_t *src,
77  uint16_t slen, int *count, uint8_t *dst, int dsize);
int osmo_isdnhdlc_encode(struct osmo_isdnhdlc_vars *hdlc, const uint8_t *src, uint16_t slen, int *count, uint8_t *dst, int dsize)
encodes HDLC frames to a transparent bit stream.
Definition: isdnhdlc.c:337
int osmo_isdnhdlc_decode(struct osmo_isdnhdlc_vars *hdlc, const uint8_t *src, int slen, int *count, uint8_t *dst, int dsize)
decodes HDLC frames from a transparent bit stream.
Definition: isdnhdlc.c:116
void osmo_isdnhdlc_rcv_init(struct osmo_isdnhdlc_vars *hdlc, uint32_t features)
Definition: isdnhdlc.c:43
void osmo_isdnhdlc_out_init(struct osmo_isdnhdlc_vars *hdlc, uint32_t features)
Definition: isdnhdlc.c:53
Definition: isdnhdlc.h:29
uint32_t do_adapt56
Definition: isdnhdlc.h:48
uint16_t crc
Definition: isdnhdlc.h:37
int hdlc_bits1
Definition: isdnhdlc.h:31
int dstpos
Definition: isdnhdlc.h:35
int ffbit_shift
Definition: isdnhdlc.h:33
uint32_t data_received
Definition: isdnhdlc.h:44
uint32_t do_closing
Definition: isdnhdlc.h:50
uint8_t cbin
Definition: isdnhdlc.h:39
uint8_t ffvalue
Definition: isdnhdlc.h:41
uint8_t shift_reg
Definition: isdnhdlc.h:40
int bit_shift
Definition: isdnhdlc.h:30
uint32_t dchannel
Definition: isdnhdlc.h:46
uint32_t do_bitreverse
Definition: isdnhdlc.h:52
int state
Definition: isdnhdlc.h:34
int data_bits
Definition: isdnhdlc.h:32