mirror of git://git.sysmocom.de/ofono
gatchat: Fix handling of HDLC debug output
This commit is contained in:
parent
c6e25f65fc
commit
a58f01316b
|
@ -35,6 +35,7 @@
|
||||||
#include "crc-ccitt.h"
|
#include "crc-ccitt.h"
|
||||||
#include "ringbuffer.h"
|
#include "ringbuffer.h"
|
||||||
#include "gatio.h"
|
#include "gatio.h"
|
||||||
|
#include "gatutil.h"
|
||||||
#include "gathdlc.h"
|
#include "gathdlc.h"
|
||||||
|
|
||||||
#define BUFFER_SIZE (2 * 2048)
|
#define BUFFER_SIZE (2 * 2048)
|
||||||
|
@ -77,7 +78,8 @@ struct _GAtHDLC {
|
||||||
guint num_plus;
|
guint num_plus;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void hdlc_record(int fd, gboolean in, guint8 *data, guint16 length)
|
static inline void hdlc_record(GAtHDLC *hdlc, gboolean in,
|
||||||
|
guint8 *data, guint16 length)
|
||||||
{
|
{
|
||||||
guint16 len = htons(length);
|
guint16 len = htons(length);
|
||||||
guint32 ts;
|
guint32 ts;
|
||||||
|
@ -85,7 +87,9 @@ static void hdlc_record(int fd, gboolean in, guint8 *data, guint16 length)
|
||||||
unsigned char id;
|
unsigned char id;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (fd < 0)
|
g_at_util_debug_dump(in, data, length, hdlc->debugf, hdlc->debug_data);
|
||||||
|
|
||||||
|
if (hdlc->record_fd < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
|
@ -96,25 +100,25 @@ static void hdlc_record(int fd, gboolean in, guint8 *data, guint16 length)
|
||||||
|
|
||||||
id = 0x07;
|
id = 0x07;
|
||||||
|
|
||||||
err = write(fd, &id, 1);
|
err = write(hdlc->record_fd, &id, 1);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
err = write(fd, &ts, 4);
|
err = write(hdlc->record_fd, &ts, 4);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
id = in ? 0x02 : 0x01;
|
id = in ? 0x02 : 0x01;
|
||||||
|
|
||||||
err = write(fd, &id, 1);
|
err = write(hdlc->record_fd, &id, 1);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
err = write(fd, &len, 2);
|
err = write(hdlc->record_fd, &len, 2);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
err = write(fd, data, length);
|
err = write(hdlc->record_fd, data, length);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -260,7 +264,7 @@ static void new_bytes(struct ring_buffer *rbuf, gpointer user_data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
hdlc_record(hdlc->record_fd, TRUE, buf, wrap);
|
hdlc_record(hdlc, TRUE, buf, wrap);
|
||||||
|
|
||||||
hdlc->in_read_handler = TRUE;
|
hdlc->in_read_handler = TRUE;
|
||||||
|
|
||||||
|
@ -308,7 +312,7 @@ static void new_bytes(struct ring_buffer *rbuf, gpointer user_data)
|
||||||
|
|
||||||
if (pos == wrap) {
|
if (pos == wrap) {
|
||||||
buf = ring_buffer_read_ptr(rbuf, pos);
|
buf = ring_buffer_read_ptr(rbuf, pos);
|
||||||
hdlc_record(hdlc->record_fd, TRUE, buf, len - wrap);
|
hdlc_record(hdlc, TRUE, buf, len - wrap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -376,8 +380,7 @@ error:
|
||||||
if (write_buffer)
|
if (write_buffer)
|
||||||
ring_buffer_free(write_buffer);
|
ring_buffer_free(write_buffer);
|
||||||
|
|
||||||
if (hdlc->decode_buffer)
|
g_free(hdlc->decode_buffer);
|
||||||
g_free(hdlc->decode_buffer);
|
|
||||||
|
|
||||||
g_free(hdlc);
|
g_free(hdlc);
|
||||||
|
|
||||||
|
@ -482,7 +485,7 @@ static gboolean can_write_data(gpointer data)
|
||||||
buf = ring_buffer_read_ptr(write_buffer, 0);
|
buf = ring_buffer_read_ptr(write_buffer, 0);
|
||||||
|
|
||||||
bytes_written = g_at_io_write(hdlc->io, (gchar *) buf, len);
|
bytes_written = g_at_io_write(hdlc->io, (gchar *) buf, len);
|
||||||
hdlc_record(hdlc->record_fd, FALSE, buf, bytes_written);
|
hdlc_record(hdlc, FALSE, buf, bytes_written);
|
||||||
ring_buffer_drain(write_buffer, bytes_written);
|
ring_buffer_drain(write_buffer, bytes_written);
|
||||||
|
|
||||||
if (ring_buffer_len(write_buffer) > 0)
|
if (ring_buffer_len(write_buffer) > 0)
|
||||||
|
|
Loading…
Reference in New Issue