diff --git a/src/GNUmakefile b/src/GNUmakefile
index 6738f7f..5860f3b 100644
--- a/src/GNUmakefile
+++ b/src/GNUmakefile
@@ -2,7 +2,7 @@
 LIBS ?= -losmocore `pkg-config --libs qmi-glib`
 all: qxdm-log
 
-qxdm-log: framing.o qxdm-log.o config.o gprs_rlc.o gprs_mac.o diag_gsm.o protocol.o qmi_decode.o
+qxdm-log: diagchar_hdlc.o qxdm-log.o config.o gprs_rlc.o gprs_mac.o diag_gsm.o protocol.o qmi_decode.o
 	$(CC) $(CPPFLAGS) -o $@ $^ $(LIBS)
 
 clean:
diff --git a/src/config.c b/src/config.c
index 237eb82..916cb05 100644
--- a/src/config.c
+++ b/src/config.c
@@ -2,7 +2,7 @@
 #include <osmocom/core/msgb.h>
 
 #include "diagcmd.h"
-#include "framing.h"
+#include "protocol.h"
 
 enum log_config_op {
 	LOG_CONFIG_DISABLE_OP			= 0,
@@ -27,7 +27,7 @@
 
 struct msgb *gen_log_config_set_mask(uint32_t equip_id, uint32_t last_item)
 {
-	struct msgb *msg = msgb_alloc(MAX_PACKET, "Diag Tx");
+	struct msgb *msg = msgb_alloc(DIAG_MAX_REQ_SIZE, "Diag Tx");
 	struct diag_log_config_set_mask *dlcsm;
 	uint8_t *mask;
 
diff --git a/src/framing.c b/src/framing.c
deleted file mode 100644
index 9a0590c..0000000
--- a/src/framing.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Author: Dieter Spaar  
- * October 2012
- *
- * Modified by Holger Freyther
- */
-
-#include "framing.h"
-
-#include <stdio.h>
-#include <string.h>
-
-
-#define PACKET_START_STOP   0x7E
-#define PACKET_ESCAPE       0x7D
-
-#define CRC_SEED        0xFFFF
-
-/*
- * Comment is from: utils.c of libqcdm
- * QCDM protocol frames are pseudo Async HDLC frames which end with a 3-byte
- * trailer.  This trailer consists of the 16-bit CRC of the frame plus an ending
- * "async control character" whose value is 0x7E.  The frame *and* the CRC are
- * escaped before adding the trailing control character so that the control
- * character (0x7E) and the escape marker (0x7D) are never seen in the frame.
- */
-
-
-/* 16 bit CRC, generator polynomial 0x8408 */
-static const uint16_t crc_ccit16[256] = 
-{
-	0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
-	0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
-	0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
-	0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
-	0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
-	0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
-	0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
-	0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
-	0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
-	0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
-	0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
-	0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
-	0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
-	0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
-	0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
-	0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
-	0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
-	0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
-	0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
-	0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
-	0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
-	0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
-	0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
-	0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
-	0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
-	0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
-	0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
-	0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
-	0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
-	0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
-	0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
-	0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
-};
-
-static uint16_t crc16(const uint8_t *data, size_t len)
-{
-	uint16_t crc = CRC_SEED;
-
-	for(; len != 0; len--, data++)
-		crc = crc_ccit16[(crc ^ *data) & 0x00ff] ^ (crc >> 8);
-
-	/* return the 1's complement */
-	return ~crc;
-}
-
-#define DO_ESCAPE(x, idx, out, out_len) \
-    if(x == PACKET_START_STOP || x == PACKET_ESCAPE) \
-    { \
-        if(idx + 2 > out_len) \
-        { \
-            printf("output buffer too small need %d have %d\n", idx + 2, out_len); \
-            return -1; \
-        } \
-        out[idx++] = PACKET_ESCAPE; \
-        out[idx++] = (x ^ 0x20); \
-    } \
-    else \
-    { \
-        if(idx + 1 > out_len) \
-        { \
-            printf("output buffer too small need %d have %d\n", idx + 2, out_len); \
-            return -1; \
-        } \
-        out[idx++] = x; \
-    } \
-
-int frame_pack(const uint8_t *in, const size_t in_len, uint8_t *out, const size_t out_len)
-{
-	uint8_t c;
-	size_t i, idx = 0;
-
-	/* packet data */
-	for (i = 0; i < in_len; i++) {
-		c = in[i];
-		DO_ESCAPE(c, idx, out, out_len);
-	}
-
-	/* two bytes CRC */
-	uint16_t crc = crc16(in, in_len);
-
-	c = (uint8_t) (crc & 0xFF);
-	DO_ESCAPE(c, idx, out, out_len);
-
-	c = (uint8_t) (crc >> 8);
-	DO_ESCAPE(c, idx, out, out_len);
-
-	/* end of packet */
-	out[idx++] = PACKET_START_STOP;
-	return idx;
-}
-
-#undef DO_ESCAPE
-
-/* returns number of bytes in pPacket if a packet is complete */
-int frame_unpack(uint8_t *pDataIn, int nDataIn, uint8_t *pPacket)
-{
-	static uint8_t ubBuf[MAX_PACKET * 2];
-	static int nDataBuf = 0;
-	int i;
-
-	if (nDataIn > sizeof(ubBuf)) {
-		printf("Too many data\n");
-		return -1;
-	}
-
-	/* is there enough free space in the buffer ? */
-	if (nDataIn + nDataBuf >= sizeof(ubBuf)) {
-		/* no, empty buffer */
-		nDataBuf = 0;
-	}
-
-	/* append data to buffer */
-	memcpy(ubBuf + nDataBuf, pDataIn, nDataIn);
-	nDataBuf += nDataIn;
-
-	/* search for packet end */
-	int idxStop = -1;
-	for (i = 0; i < nDataBuf; i++) {
-		if (ubBuf[i] == PACKET_START_STOP) {
-			idxStop = i;
-			break;
-		}
-	}
-
-	if (idxStop < 0)
-		return 0;
-
-	/* get packet */
-
-	int nDataPacket = 0;
-	int bEscape = 0;
-	for (i = 0; i < idxStop; i++) {
-		if (ubBuf[i] == PACKET_ESCAPE) {
-			bEscape = 1;
-		} else {
-			if (bEscape)
-				pPacket[nDataPacket++] = (ubBuf[i] ^ 0x20);
-			else
-				pPacket[nDataPacket++] = ubBuf[i];
-			bEscape = 0;
-		}
-		if (nDataPacket >= MAX_PACKET) {
-			printf("Too many packet data\n");
-			return -1;
-		}
-	}
-
-	/* remove packet from buffer */
-	memmove(ubBuf, ubBuf + idxStop + 1, nDataBuf - (idxStop + 1));
-	nDataBuf -= (idxStop + 1);
-
-	/* check CRC */
-
-	if (nDataPacket <= 2) {
-		printf("Not enough packet data\n");
-		return -1;
-	}
-
-	uint16_t crc = crc16(pPacket, nDataPacket - 2);
-	if ((crc & 0xFF) != pPacket[nDataPacket - 2] ||
-	    (crc >> 8) != pPacket[nDataPacket - 1]) {
-		printf("Invalid CRC (0x%04X != 0x%02X%02X)\n",
-			crc, pPacket[nDataPacket - 1], pPacket[nDataPacket - 2]);
-		return -1;
-	}
-
-	return nDataPacket - 2;
-}
diff --git a/src/framing.h b/src/framing.h
deleted file mode 100644
index 3d96853..0000000
--- a/src/framing.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef framing_h
-#define framing_h
-
-#include <stdint.h>
-#include <sys/types.h>
-
-#define MAX_PACKET 2048
-
-int frame_pack(const uint8_t *in, const size_t in_len, uint8_t *out, const size_t out_len);
-int frame_unpack(uint8_t *pDataIn, int nDataIn, uint8_t *pPacket);
-
-#endif
diff --git a/src/protocol.h b/src/protocol.h
index ac9a8b9..415bc3e 100644
--- a/src/protocol.h
+++ b/src/protocol.h
@@ -3,6 +3,12 @@
 
 #include <stdint.h>
 
+/* From Qualcomm Linux kernel diagchar.h */
+#define DIAG_MAX_REQ_SIZE		(16 * 1024)
+#define DIAG_MAX_HDLC_BUF_SIZE		((DIAG_MAX_REQ_SIZE * 2) + 3)
+#define HDLC_FOOTER_LEN			3
+
+
 /*
  * 79 00 03 00 06 00 9C 76 B6 07 00 00 D4 00 00 00    y......v¶...Ô...
  * 02 00 00 00 39 00 00 00 63 F9 FF FF 00 00 00 00    ....9...cùÿÿ....
diff --git a/src/qxdm-log.c b/src/qxdm-log.c
index 00cff31..a4baf58 100644
--- a/src/qxdm-log.c
+++ b/src/qxdm-log.c
@@ -13,7 +13,7 @@
 
 #include <osmocom/core/msgb.h>
 
-#include "framing.h"
+#include "diagchar_hdlc.h"
 #include "protocol.h"
 #include "config.h"
 #include "diagcmd.h"
@@ -26,20 +26,37 @@
 #include "gprs_mac.h"
 #include "qmi_decode.h"
 
+struct diag_instance {
+	int fd;
+	/* Receiver */
+	struct {
+		struct msgb *msg;
+	} rx;
+	struct {
+	} tx;
+};
+
 /* transmit a msgb containing a DIAG message over the given fd */
-static int diag_transmit_msgb(int fd, struct msgb *msg)
+static int diag_transmit_msgb(struct diag_instance *di, struct msgb *msg)
 {
 	int out_len, rc;
-	uint8_t packet[MAX_PACKET * 2];
+	uint8_t packet[DIAG_MAX_HDLC_BUF_SIZE];
+	struct diag_send_desc_type send;
+	struct diag_hdlc_dest_type enc = { NULL, NULL, 0 };
 
-	out_len = frame_pack(msgb_data(msg), msgb_length(msg),
-			     packet, sizeof(packet));
-	if (out_len < 0) {
-		printf("Failed to pack packet\n");
-		return -1;
-	}
+	send.state = DIAG_STATE_START;
+	send.pkt = msgb_data(msg);
+	send.last = msgb_data(msg) + msgb_length(msg) - 1;
+	send.terminate = 1;
 
-	rc = write(fd, packet, out_len);
+	enc.dest = packet;
+	enc.dest_last = packet + sizeof(packet) - 1;
+
+	diag_hdlc_encode(&send, &enc);
+
+	out_len = (enc.dest - (void *)packet);
+
+	rc = write(di->fd, packet, out_len);
 	if (rc != out_len) {
 		printf("Short write on packet.\n");
 		return -1;
@@ -51,24 +68,14 @@
 }
 
 /* transmit a message from a buffer (nto msgb) as DIAG over the given fd */
-static int diag_transmit_buf(int fd, const uint8_t *data, size_t data_len)
+static int diag_transmit_buf(struct diag_instance *di, const uint8_t *data, size_t data_len)
 {
-	int out_len, rc;
-	uint8_t packet[MAX_PACKET * 2];	
+	struct msgb *msg = msgb_alloc(DIAG_MAX_REQ_SIZE, "DIAG Tx");
 
-	out_len = frame_pack(data, data_len, packet, sizeof(packet));
-	if (out_len < 0) {
-		printf("Failed to pack packet\n");
-		return -1;
-	}
+	memcpy(msg->tail, data, data_len);
+	msgb_put(msg, data_len);
 
-	rc = write(fd, packet, out_len);
-	if (rc != out_len) {
-		printf("Short write on packet.\n");
-		return -1;
-	}
-
-	return 0;
+	return diag_transmit_msgb(di, msg);
 }
 
 static int dump_log(const uint8_t *data, const size_t len)
@@ -344,44 +351,80 @@
 
 /*********/
 
-static int do_read(int fd)
+static int do_read(struct diag_instance *di)
 {
-	uint8_t buf[MAX_PACKET*2];
-	struct msgb *msg = msgb_alloc(MAX_PACKET, "DIAG Rx");
+	uint8_t buf[DIAG_MAX_HDLC_BUF_SIZE];
+	struct diag_hdlc_decode_type hdlc_decode;
+	struct msgb *msg;
 	int rc;
 
-	rc = read(fd, buf, sizeof(buf));
+	/* read raw data into buffer */
+	rc = read(di->fd, buf, sizeof(buf));
 	if (rc <= 0 ) {
-		printf("Short read!\n");
-		exit(EXIT_FAILURE);
+		fprintf(stderr, "Short read!\n");
+		return -EIO;
 	}
 
-	rc = frame_unpack(buf, rc, msgb_data(msg));
-	if (rc <= 0) {
+	if (!di->rx.msg) {
+		di->rx.msg = msgb_alloc(DIAG_MAX_REQ_SIZE, "DIAG Rx");
+		di->rx.msg->l2h = di->rx.msg->tail;
+	}
+	msg = di->rx.msg;
+
+	hdlc_decode.dest_ptr = msg->tail;
+	hdlc_decode.dest_size = msgb_tailroom(msg);
+	hdlc_decode.src_ptr = buf;
+	hdlc_decode.src_size = rc;
+	hdlc_decode.src_idx = 0;
+	hdlc_decode.dest_idx = 0;
+
+	rc = diag_hdlc_decode(&hdlc_decode);
+
+	if (msgb_length(msg) + hdlc_decode.dest_idx > DIAG_MAX_REQ_SIZE) {
+		fprintf(stderr, "Dropping packet. pkt_size: %d, max: %d\n",
+			msgb_length(msg) + hdlc_decode.dest_idx,
+			DIAG_MAX_REQ_SIZE);
+		return -EIO;
+	}
+
+	msgb_put(msg, hdlc_decode.dest_idx);
+
+	if (rc == HDLC_COMPLETE) {
+		di->rx.msg = NULL;
+		rc = crc_check(msgb_data(msg), msgb_length(msg));
+		if (rc) {
+			fprintf(stderr, "Bad CRC, dropping packet\n");
+			msgb_free(msg);
+			return -EINVAL;
+		}
+		msgb_get(msg, HDLC_FOOTER_LEN);
+
+		if (msgb_length(msg) < 1) {
+			fprintf(stderr, "Message too short, len: %u\n", msgb_length(msg));
+			msgb_free(msg);
+			return -EINVAL;
+		}
+
+		switch (msg->l2h[0]) {
+		case DIAG_LOG_F:
+			diag_log_handle(msg);
+			break;
+		case DIAG_EXT_MSG_F:
+			dump_log(msgb_data(msg), msgb_length(msg));
+			break;
+		default:
+			printf("Got %d bytes data of unknown payload type 0x%02x\n",
+				msgb_length(msg), msg->l2h[0]);
+			printf("%s\n", osmo_hexdump(msgb_data(msg), msgb_length(msg)));
+			break;
+		}
 		msgb_free(msg);
-		return rc;
 	}
-	msg->l2h = msgb_put(msg, rc);
 
-	switch (msg->l2h[0]) {
-	case DIAG_LOG_F:
-		diag_log_handle(msg);
-		break;
-	case DIAG_EXT_MSG_F:
-		dump_log(msgb_data(msg), msgb_length(msg));
-		break;
-	default:
-		printf("Got %d data of payload\n", rc); 
-		printf("%s\n", osmo_hexdump(msgb_data(msg), msgb_length(msg)));
-		break;
-	};
+	return 0;
+};
 
-	msgb_free(msg);
-
-	return rc;
-}
-
-static void do_configure(int fd)
+static void do_configure(struct diag_instance *di)
 {
 	static uint8_t timestamp[] = { DIAG_TS_F };
 	static const uint8_t enable_evt_report[] = {
@@ -406,20 +449,20 @@
 	};
 
 	/* TODO: introduce a wait for response kind of method */
-	diag_transmit_buf(fd, timestamp, sizeof(timestamp));
-	do_read(fd);
+	diag_transmit_buf(di, timestamp, sizeof(timestamp));
+	do_read(di);
 
 	/* enable|disable the event report */
 #if 0
-	diag_transmit_buf(fd, enable_evt_report, sizeof(enable_evt_report));
-	do_read(fd);
+	diag_transmit_buf(di, enable_evt_report, sizeof(enable_evt_report));
+	do_read(di);
 #else
-	diag_transmit_buf(fd, disable_evt_report, sizeof(disable_evt_report));
-	do_read(fd);
+	diag_transmit_buf(di, disable_evt_report, sizeof(disable_evt_report));
+	do_read(di);
 #endif
 
-	diag_transmit_buf(fd, extended_report_cfg, sizeof(extended_report_cfg));
-	do_read(fd);
+	diag_transmit_buf(di, extended_report_cfg, sizeof(extended_report_cfg));
+	do_read(di);
 
 	printf("GSM\n");
 	struct msgb *msg = gen_log_config_set_mask(5, 1064);
@@ -462,8 +505,8 @@
 	log_config_set_mask_bit(msg, LOG_GPRS_MAC_UL_TBF_RELEASE_C);
 	log_config_set_mask_bit(msg, LOG_GPRS_MAC_DL_TBF_RELEASE_C);
 
-	diag_transmit_msgb(fd, msg);
-	do_read(fd);
+	diag_transmit_msgb(di, msg);
+	do_read(di);
 
 	printf("WCDMA\n");
 	msg = gen_log_config_set_mask(4, 1064);
@@ -478,8 +521,8 @@
 	log_config_set_mask_bit(msg, 0x129);
 	log_config_set_mask_bit(msg, LOG_WCDMA_SIGNALING_MSG_C);
 
-	diag_transmit_msgb(fd, msg);
-	do_read(fd);
+	diag_transmit_msgb(di, msg);
+	do_read(di);
 
 
 	printf("Core\n");
@@ -491,37 +534,41 @@
 	for (int i = LOG_QMI_RESERVED_CODES_BASE_C; i < LOG_QMI_LAST_C; i++)
 		log_config_set_mask_bit(msg, i);
 
-	diag_transmit_msgb(fd, msg);
-	do_read(fd);
+	diag_transmit_msgb(di, msg);
+	do_read(di);
 }
 
 int main(int argc, char **argv)
 {
+	struct diag_instance di;
 	int i;
+	int rc;
 
-	int fd, rc;
 	if (argc < 2) {
 		printf("Invoke with %s PATH_TO_SERIAL\n",
 			argv[0]);
 		return EXIT_FAILURE;
 	}
 
-	fd = osmo_serial_init(argv[1], 115200);
-	if (fd < 0)
+	memset(&di, 0, sizeof(di));
+	di.fd = osmo_serial_init(argv[1], 115200);
+	if (di.fd < 0)
 		return EXIT_FAILURE;
 
-	do_configure(fd);
+	do_configure(&di);
 
 	while (1) {
 		i++;
-		do_read(fd);
+		rc = do_read(&di);
+		if (rc == -EIO)
+			break;
 #if 0
 		/* some packets need to be explicitly requested and
 		 * don't appear automatically */
 		if (i % 10 == 0) {
 			struct msgb *msg = diag_gsm_make_log_pack_req(LOG_GPRS_LLC_PDU_STATS_C , 0, 0);
 			printf("Requesting LLC stats...(%s)\n", osmo_hexdump(msgb_data(msg), msgb_length(msg)));
-			diag_transmit_msgb(fd, msg);
+			diag_transmit_msgb(&di, msg);
 		}
 #endif
 
