mirror of git://git.sysmocom.de/ofono
gatchat: Add support for sending HDLC frame start and end markers
This commit is contained in:
parent
ee19210585
commit
5fea0c006a
|
@ -70,6 +70,8 @@ struct _GAtHDLC {
|
||||||
int record_fd;
|
int record_fd;
|
||||||
gboolean in_read_handler;
|
gboolean in_read_handler;
|
||||||
gboolean destroyed;
|
gboolean destroyed;
|
||||||
|
gboolean wakeup_sent;
|
||||||
|
gboolean start_frame_marker;
|
||||||
gboolean no_carrier_detect;
|
gboolean no_carrier_detect;
|
||||||
GAtSuspendFunc suspend_func;
|
GAtSuspendFunc suspend_func;
|
||||||
gpointer suspend_data;
|
gpointer suspend_data;
|
||||||
|
@ -328,7 +330,6 @@ out:
|
||||||
GAtHDLC *g_at_hdlc_new_from_io(GAtIO *io)
|
GAtHDLC *g_at_hdlc_new_from_io(GAtIO *io)
|
||||||
{
|
{
|
||||||
GAtHDLC *hdlc;
|
GAtHDLC *hdlc;
|
||||||
unsigned char *buf;
|
|
||||||
struct ring_buffer* write_buffer;
|
struct ring_buffer* write_buffer;
|
||||||
|
|
||||||
if (io == NULL)
|
if (io == NULL)
|
||||||
|
@ -357,11 +358,6 @@ GAtHDLC *g_at_hdlc_new_from_io(GAtIO *io)
|
||||||
|
|
||||||
g_queue_push_tail(hdlc->write_queue, write_buffer);
|
g_queue_push_tail(hdlc->write_queue, write_buffer);
|
||||||
|
|
||||||
/* Write an initial 0x7e as wakeup character */
|
|
||||||
buf = ring_buffer_write_ptr(write_buffer, 0);
|
|
||||||
*buf = HDLC_FLAG;
|
|
||||||
ring_buffer_write_advance(write_buffer, 1);
|
|
||||||
|
|
||||||
hdlc->decode_buffer = g_try_malloc(BUFFER_SIZE);
|
hdlc->decode_buffer = g_try_malloc(BUFFER_SIZE);
|
||||||
if (!hdlc->decode_buffer)
|
if (!hdlc->decode_buffer)
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -563,6 +559,17 @@ gboolean g_at_hdlc_send(GAtHDLC *hdlc, const unsigned char *data, gsize size)
|
||||||
i = 0;
|
i = 0;
|
||||||
buf = ring_buffer_write_ptr(write_buffer, 0);
|
buf = ring_buffer_write_ptr(write_buffer, 0);
|
||||||
|
|
||||||
|
if (hdlc->start_frame_marker == TRUE) {
|
||||||
|
/* Protocol requires 0x7e as start marker */
|
||||||
|
*buf++ = HDLC_FLAG;
|
||||||
|
pos++;
|
||||||
|
} else if (hdlc->wakeup_sent == FALSE) {
|
||||||
|
/* Write an initial 0x7e as wakeup character */
|
||||||
|
*buf++ = HDLC_FLAG;
|
||||||
|
pos++;
|
||||||
|
hdlc->wakeup_sent = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
while (pos < avail && i < size) {
|
while (pos < avail && i < size) {
|
||||||
if (escape == TRUE) {
|
if (escape == TRUE) {
|
||||||
fcs = HDLC_FCS(fcs, data[i]);
|
fcs = HDLC_FCS(fcs, data[i]);
|
||||||
|
@ -616,6 +623,7 @@ gboolean g_at_hdlc_send(GAtHDLC *hdlc, const unsigned char *data, gsize size)
|
||||||
if (pos + 1 > avail)
|
if (pos + 1 > avail)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
/* Add 0x7e as end marker */
|
||||||
*buf = HDLC_FLAG;
|
*buf = HDLC_FLAG;
|
||||||
pos++;
|
pos++;
|
||||||
|
|
||||||
|
@ -626,6 +634,14 @@ gboolean g_at_hdlc_send(GAtHDLC *hdlc, const unsigned char *data, gsize size)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void g_at_hdlc_set_start_frame_marker(GAtHDLC *hdlc, gboolean marker)
|
||||||
|
{
|
||||||
|
if (hdlc == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
hdlc->start_frame_marker = marker;
|
||||||
|
}
|
||||||
|
|
||||||
void g_at_hdlc_set_no_carrier_detect(GAtHDLC *hdlc, gboolean detect)
|
void g_at_hdlc_set_no_carrier_detect(GAtHDLC *hdlc, gboolean detect)
|
||||||
{
|
{
|
||||||
if (hdlc == NULL)
|
if (hdlc == NULL)
|
||||||
|
|
|
@ -55,6 +55,7 @@ void g_at_hdlc_set_recording(GAtHDLC *hdlc, const char *filename);
|
||||||
|
|
||||||
GAtIO *g_at_hdlc_get_io(GAtHDLC *hdlc);
|
GAtIO *g_at_hdlc_get_io(GAtHDLC *hdlc);
|
||||||
|
|
||||||
|
void g_at_hdlc_set_start_frame_marker(GAtHDLC *hdlc, gboolean marker);
|
||||||
void g_at_hdlc_set_no_carrier_detect(GAtHDLC *hdlc, gboolean detect);
|
void g_at_hdlc_set_no_carrier_detect(GAtHDLC *hdlc, gboolean detect);
|
||||||
|
|
||||||
void g_at_hdlc_set_suspend_function(GAtHDLC *hdlc, GAtSuspendFunc func,
|
void g_at_hdlc_set_suspend_function(GAtHDLC *hdlc, GAtSuspendFunc func,
|
||||||
|
|
Loading…
Reference in New Issue