--- drivers/mbmmodem/location-reporting.c | 44 ++++++++++++++++++--------------- 1 files changed, 24 insertions(+), 20 deletions(-) diff --git a/drivers/mbmmodem/location-reporting.c b/drivers/mbmmodem/location-reporting.c index 941fac4..b671d71 100644 --- a/drivers/mbmmodem/location-reporting.c +++ b/drivers/mbmmodem/location-reporting.c @@ -48,7 +48,7 @@ static const char *e2gpsctl_prefix[] = { "*E2GPSCTL:", NULL }; struct gps_data { GAtChat *chat; - GAtChat *data_chat; + GIOChannel *data_channel; }; static void mbm_e2gpsctl_disable_cb(gboolean ok, GAtResult *result, @@ -70,7 +70,7 @@ static void mbm_e2gpsctl_disable_cb(gboolean ok, GAtResult *result, return; } - g_at_chat_unref(gd->data_chat); + g_io_channel_unref(gd->data_channel); CALLBACK_WITH_SUCCESS(cb, cbd->data); } @@ -94,33 +94,33 @@ static void mbm_location_reporting_disable(struct ofono_location_reporting *lr, g_free(cbd); } -static int mbm_create_data_chat(struct ofono_location_reporting *lr) +static GAtChat *mbm_create_data_chat(struct ofono_location_reporting *lr) { struct gps_data *gd = ofono_location_reporting_get_data(lr); struct ofono_modem *modem; const char *gps_dev; GAtSyntax *syntax; - GIOChannel *channel; - int fd; + GAtChat *chat; modem = ofono_location_reporting_get_modem(lr); gps_dev = ofono_modem_get_string(modem, "GPSDevice"); - channel = g_at_tty_open(gps_dev, NULL); - if (channel == NULL) - return -1; + gd->data_channel = g_at_tty_open(gps_dev, NULL); + if (gd->data_channel == NULL) + return NULL; syntax = g_at_syntax_new_gsm_permissive(); - gd->data_chat = g_at_chat_new(channel, syntax); - fd = g_io_channel_unix_get_fd(channel); + chat = g_at_chat_new(gd->data_channel, syntax); g_at_syntax_unref(syntax); - g_io_channel_unref(channel); - if (gd->data_chat == NULL) - return -1; + if (chat == NULL) { + g_io_channel_unref(gd->data_channel); + + return NULL; + } - return fd; + return chat; } static void mbm_e2gpsctl_enable_cb(gboolean ok, GAtResult *result, @@ -131,7 +131,7 @@ static void mbm_e2gpsctl_enable_cb(gboolean ok, GAtResult *result, struct ofono_location_reporting *lr = cbd->user; struct gps_data *gd = ofono_location_reporting_get_data(lr); struct ofono_error error; - int fd; + GAtChat *chat; DBG("lr=%p ok=%d", lr, ok); @@ -143,18 +143,22 @@ static void mbm_e2gpsctl_enable_cb(gboolean ok, GAtResult *result, return; } - fd = mbm_create_data_chat(lr); - - if (fd < 0) + chat = mbm_create_data_chat(lr); + if (chat == NULL) goto out; - if (g_at_chat_send(gd->data_chat, "AT*E2GPSNPD", NULL, NULL, NULL, - NULL) > 0) { + if (g_at_chat_send(chat, "AT*E2GPSNPD", NULL, NULL, NULL, NULL) > 0) { + int fd = g_io_channel_unix_get_fd(gd->data_channel); + + g_at_chat_unref(chat); cb(&error, fd, cbd->data); return; } + g_at_chat_unref(chat); + g_io_channel_unref(gd->data_channel); + out: CALLBACK_WITH_FAILURE(cb, -1, cbd->data); } -- 1.7.4.1