src: format using clang-format

This commit is contained in:
Arnaud Ferraris
2024-10-29 14:04:59 +01:00
parent 57142c2c11
commit 9f6178dafd
17 changed files with 2364 additions and 2231 deletions

View File

@@ -6,9 +6,9 @@
#include "at.h" #include "at.h"
#include "config.h" #include "config.h"
#include "suspend.h"
#include "gpio.h"
#include "gnss.h" #include "gnss.h"
#include "gpio.h"
#include "suspend.h"
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
@@ -82,20 +82,26 @@ gboolean at_send_command(struct EG25Manager *manager)
else if (at_cmd->subcmd == NULL && at_cmd->value == NULL) else if (at_cmd->subcmd == NULL && at_cmd->value == NULL)
len = snprintf(command, sizeof(command), "AT+%s?\r\n", at_cmd->cmd); len = snprintf(command, sizeof(command), "AT+%s?\r\n", at_cmd->cmd);
else if (at_cmd->subcmd == NULL && at_cmd->value) else if (at_cmd->subcmd == NULL && at_cmd->value)
len = snprintf(command, sizeof(command),"AT+%s=%s\r\n", at_cmd->cmd, at_cmd->value); len = snprintf(command, sizeof(command), "AT+%s=%s\r\n", at_cmd->cmd, at_cmd->value);
else if (at_cmd->subcmd && at_cmd->value == NULL) else if (at_cmd->subcmd && at_cmd->value == NULL)
len = snprintf(command, sizeof(command), "AT+%s=\"%s\"\r\n", at_cmd->cmd, at_cmd->subcmd); len = snprintf(command, sizeof(command), "AT+%s=\"%s\"\r\n", at_cmd->cmd, at_cmd->subcmd);
else if (at_cmd->subcmd && at_cmd->value) else if (at_cmd->subcmd && at_cmd->value)
len = snprintf(command, sizeof(command), "AT+%s=\"%s\",%s\r\n", at_cmd->cmd, at_cmd->subcmd, at_cmd->value); len = snprintf(command,
sizeof(command),
"AT+%s=\"%s\",%s\r\n",
at_cmd->cmd,
at_cmd->subcmd,
at_cmd->value);
if (len < 0) { if (len < 0) {
g_warning("snprintf(3) failed"); g_warning("snprintf(3) failed");
at_next_command(manager); at_next_command(manager);
return FALSE; return FALSE;
} } else if (len >= sizeof(command)) {
else if (len >= sizeof(command)) {
g_warning("AT command does not fit into buffer " g_warning("AT command does not fit into buffer "
"(%d bytes required, %zu available)", len, sizeof(command)); "(%d bytes required, %zu available)",
len,
sizeof(command));
at_next_command(manager); at_next_command(manager);
return FALSE; return FALSE;
} }
@@ -117,8 +123,7 @@ gboolean at_send_command(struct EG25Manager *manager)
at_next_command(manager); at_next_command(manager);
return FALSE; return FALSE;
} }
} } else {
else {
len -= ret; len -= ret;
pos += ret; pos += ret;
} }
@@ -176,8 +181,7 @@ static void retry_at_command(struct EG25Manager *manager)
} }
} }
void at_process_result(struct EG25Manager *manager, void at_process_result(struct EG25Manager *manager, const char *response)
const char *response)
{ {
struct AtCommand *at_cmd = manager->at_cmds ? g_list_nth_data(manager->at_cmds, 0) : NULL; struct AtCommand *at_cmd = manager->at_cmds ? g_list_nth_data(manager->at_cmds, 0) : NULL;
@@ -201,9 +205,7 @@ int at_append_command(struct EG25Manager *manager,
const char *subcmd, const char *subcmd,
const char *value, const char *value,
const char *expected, const char *expected,
void (*callback) void (*callback)(struct EG25Manager *manager, const char *response))
(struct EG25Manager *manager,
const char *response))
{ {
struct AtCommand *at_cmd = calloc(1, sizeof(struct AtCommand)); struct AtCommand *at_cmd = calloc(1, sizeof(struct AtCommand));
@@ -227,12 +229,10 @@ int at_append_command(struct EG25Manager *manager,
#define READ_BUFFER_SIZE 256 #define READ_BUFFER_SIZE 256
static gboolean modem_response(gint fd, static gboolean modem_response(gint fd, GIOCondition event, gpointer data)
GIOCondition event,
gpointer data)
{ {
struct EG25Manager *manager = data; struct EG25Manager *manager = data;
char response[READ_BUFFER_SIZE*4+1]; char response[READ_BUFFER_SIZE * 4 + 1];
char tmp[READ_BUFFER_SIZE]; char tmp[READ_BUFFER_SIZE];
ssize_t ret, pos = 0; ssize_t ret, pos = 0;

View File

@@ -20,8 +20,7 @@ typedef struct AtCommand {
int at_init(struct EG25Manager *manager, toml_table_t *config[]); int at_init(struct EG25Manager *manager, toml_table_t *config[]);
void at_destroy(struct EG25Manager *manager); void at_destroy(struct EG25Manager *manager);
void at_process_result(struct EG25Manager *manager, void at_process_result(struct EG25Manager *manager, const char *response);
const char *response);
void at_next_command(struct EG25Manager *manager); void at_next_command(struct EG25Manager *manager);
gboolean at_send_command(struct EG25Manager *manager); gboolean at_send_command(struct EG25Manager *manager);
int at_append_command(struct EG25Manager *manager, int at_append_command(struct EG25Manager *manager,
@@ -29,9 +28,7 @@ int at_append_command(struct EG25Manager *manager,
const char *subcmd, const char *subcmd,
const char *value, const char *value,
const char *expected, const char *expected,
void (*callback) void (*callback)(struct EG25Manager *manager, const char *response));
(struct EG25Manager *manager,
const char *response));
void at_sequence_configure(struct EG25Manager *manager); void at_sequence_configure(struct EG25Manager *manager);
void at_sequence_suspend(struct EG25Manager *manager); void at_sequence_suspend(struct EG25Manager *manager);

View File

@@ -9,7 +9,7 @@
gboolean config_get_bool(toml_table_t **config, const gchar *key, gboolean *result) gboolean config_get_bool(toml_table_t **config, const gchar *key, gboolean *result)
{ {
toml_datum_t value = { .ok = 0 }; toml_datum_t value = {.ok = 0};
if (config[EG25_CONFIG_USER]) if (config[EG25_CONFIG_USER])
value = toml_bool_in(config[EG25_CONFIG_USER], key); value = toml_bool_in(config[EG25_CONFIG_USER], key);
@@ -23,7 +23,7 @@ gboolean config_get_bool(toml_table_t **config, const gchar *key, gboolean *resu
gboolean config_get_int(toml_table_t **config, const gchar *key, gint *result) gboolean config_get_int(toml_table_t **config, const gchar *key, gint *result)
{ {
toml_datum_t value = { .ok = 0 }; toml_datum_t value = {.ok = 0};
if (config[EG25_CONFIG_USER]) if (config[EG25_CONFIG_USER])
value = toml_int_in(config[EG25_CONFIG_USER], key); value = toml_int_in(config[EG25_CONFIG_USER], key);
@@ -49,14 +49,14 @@ gboolean config_get_uint(toml_table_t **config, const gchar *key, guint *result)
} }
if (found && result) if (found && result)
*result = (guint) value; *result = (guint)value;
return found; return found;
} }
gboolean config_get_string(toml_table_t **config, const gchar *key, gchar **result) gboolean config_get_string(toml_table_t **config, const gchar *key, gchar **result)
{ {
toml_datum_t value = { .ok = 0 }; toml_datum_t value = {.ok = 0};
if (config[EG25_CONFIG_USER]) if (config[EG25_CONFIG_USER])
value = toml_string_in(config[EG25_CONFIG_USER], key); value = toml_string_in(config[EG25_CONFIG_USER], key);

View File

@@ -4,14 +4,14 @@
* SPDX-License-Identifier: GPL-3.0-or-later * SPDX-License-Identifier: GPL-3.0-or-later
*/ */
#include "config.h"
#include "gnss.h" #include "gnss.h"
#include "manager.h"
#include "at.h" #include "at.h"
#include "config.h"
#include "manager.h"
#include <errno.h>
#include <sys/sendfile.h> #include <sys/sendfile.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <errno.h>
#define BUFFER_SIZE 256 #define BUFFER_SIZE 256
#define UPLOAD_DELAY_US 25000 #define UPLOAD_DELAY_US 25000
@@ -29,25 +29,24 @@ gboolean gnss_upload_assistance_data(struct EG25Manager *manager)
if (manager->gnss_assistance_step < EG25_GNSS_STEP_LAST) { if (manager->gnss_assistance_step < EG25_GNSS_STEP_LAST) {
g_warning("GNSS assistance data upload already in process (%d/%d)", g_warning("GNSS assistance data upload already in process (%d/%d)",
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST); manager->gnss_assistance_step,
EG25_GNSS_STEP_LAST);
return FALSE; return FALSE;
} }
/* data upload isn't necessary to bring the modem onine, so we should wait /* data upload isn't necessary to bring the modem onine, so we should wait
* until we've finished the rest of our configuration */ * until we've finished the rest of our configuration */
if (!manager->modem_iface || if (!manager->modem_iface || manager->modem_state < EG25_STATE_CONFIGURED ||
manager->modem_state < EG25_STATE_CONFIGURED ||
manager->modem_state > EG25_STATE_CONNECTED) { manager->modem_state > EG25_STATE_CONNECTED) {
g_message ("Rescheduling upload since modem isn't online yet, in %ds", g_message("Rescheduling upload since modem isn't online yet, in %ds", RESCHEDULE_IN_SECS);
RESCHEDULE_IN_SECS);
manager->gnss_assistance_step = EG25_GNSS_STEP_LAST; manager->gnss_assistance_step = EG25_GNSS_STEP_LAST;
return TRUE; return TRUE;
} }
#ifdef HAVE_MMGLIB #ifdef HAVE_MMGLIB
/* ModemManager's Location is only available after unlocking */ /* ModemManager's Location is only available after unlocking */
if(manager->modem_iface == MODEM_IFACE_MODEMMANAGER && !manager->mm_location) { if (manager->modem_iface == MODEM_IFACE_MODEMMANAGER && !manager->mm_location) {
g_message ("Rescheduling upload since Location interface is not available, in %ds", g_message("Rescheduling upload since Location interface is not available, in %ds",
RESCHEDULE_IN_SECS); RESCHEDULE_IN_SECS);
manager->gnss_assistance_step = EG25_GNSS_STEP_LAST; manager->gnss_assistance_step = EG25_GNSS_STEP_LAST;
return TRUE; return TRUE;
@@ -62,7 +61,7 @@ gboolean gnss_upload_assistance_data(struct EG25Manager *manager)
void gnss_init(struct EG25Manager *manager, toml_table_t *config[]) void gnss_init(struct EG25Manager *manager, toml_table_t *config[])
{ {
toml_table_t *gnss_config[EG25_CONFIG_COUNT]; toml_table_t *gnss_config[EG25_CONFIG_COUNT];
g_autoptr (GError) error = NULL; g_autoptr(GError) error = NULL;
for (int i = 0; i < EG25_CONFIG_COUNT; i++) for (int i = 0; i < EG25_CONFIG_COUNT; i++)
gnss_config[i] = config[i] ? toml_table_in(config[i], "gnss") : NULL; gnss_config[i] = config[i] ? toml_table_in(config[i], "gnss") : NULL;
@@ -92,12 +91,11 @@ void gnss_init(struct EG25Manager *manager, toml_table_t *config[])
/* Create temporary file to store assistance data */ /* Create temporary file to store assistance data */
manager->gnss_assistance_fd = g_file_open_tmp(NULL, NULL, &error); manager->gnss_assistance_fd = g_file_open_tmp(NULL, NULL, &error);
if (error != NULL) if (error != NULL)
g_error ("Unable to create temporary file: %s", error->message); g_error("Unable to create temporary file: %s", error->message);
/* Initialize state and schedule upload */ /* Initialize state and schedule upload */
manager->gnss_assistance_step = EG25_GNSS_STEP_LAST; manager->gnss_assistance_step = EG25_GNSS_STEP_LAST;
g_timeout_add_seconds(RESCHEDULE_IN_SECS, g_timeout_add_seconds(RESCHEDULE_IN_SECS, G_SOURCE_FUNC(gnss_upload_assistance_data), manager);
G_SOURCE_FUNC(gnss_upload_assistance_data), manager);
} }
void gnss_destroy(struct EG25Manager *manager) void gnss_destroy(struct EG25Manager *manager)
@@ -114,7 +112,7 @@ static void disable_mm_gnss(struct EG25Manager *manager)
{ {
MMModemLocationSource sources; MMModemLocationSource sources;
gboolean signals_location; gboolean signals_location;
g_autoptr (GError) error = NULL; g_autoptr(GError) error = NULL;
sources = mm_modem_location_get_enabled(manager->mm_location); sources = mm_modem_location_get_enabled(manager->mm_location);
signals_location = mm_modem_location_signals_location(manager->mm_location); signals_location = mm_modem_location_signals_location(manager->mm_location);
@@ -140,17 +138,14 @@ static void disable_mm_gnss(struct EG25Manager *manager)
sources &= ~MM_MODEM_LOCATION_SOURCE_GPS_RAW; sources &= ~MM_MODEM_LOCATION_SOURCE_GPS_RAW;
sources &= ~MM_MODEM_LOCATION_SOURCE_GPS_NMEA; sources &= ~MM_MODEM_LOCATION_SOURCE_GPS_NMEA;
sources &= ~MM_MODEM_LOCATION_SOURCE_GPS_UNMANAGED; sources &= ~MM_MODEM_LOCATION_SOURCE_GPS_UNMANAGED;
mm_modem_location_setup_sync(manager->mm_location, sources, mm_modem_location_setup_sync(manager->mm_location, sources, signals_location, NULL, &error);
signals_location, NULL, &error);
if (error != NULL) { if (error != NULL) {
g_warning("Unable to disable GNSS engine through ModemManager: %s", g_warning("Unable to disable GNSS engine through ModemManager: %s", error->message);
error->message);
} }
} }
#endif #endif
static void disable_at_gnss_cb(struct EG25Manager *manager, static void disable_at_gnss_cb(struct EG25Manager *manager, const char *response)
const char *response)
{ {
/* Clear QGPSEND AT command and process next */ /* Clear QGPSEND AT command and process next */
at_next_command(manager); at_next_command(manager);
@@ -210,16 +205,14 @@ static void fetch_assistance_data(struct EG25Manager *manager)
/* Fetch assistance data with curl */ /* Fetch assistance data with curl */
tmp_file = fdopen(manager->gnss_assistance_fd, "wb+"); tmp_file = fdopen(manager->gnss_assistance_fd, "wb+");
if (tmp_file == NULL) { if (tmp_file == NULL) {
g_critical("Unable to open file to save assistance data: %s", g_critical("Unable to open file to save assistance data: %s", g_strerror(errno));
g_strerror(errno));
goto bail; goto bail;
} }
lseek(manager->gnss_assistance_fd, 0, SEEK_SET); lseek(manager->gnss_assistance_fd, 0, SEEK_SET);
if (ftruncate(manager->gnss_assistance_fd, 0) < 0) if (ftruncate(manager->gnss_assistance_fd, 0) < 0)
g_warning("Unable to truncate file, assistance data might be invalid!"); g_warning("Unable to truncate file, assistance data might be invalid!");
url = g_strconcat(manager->gnss_assistance_url, "/", url = g_strconcat(manager->gnss_assistance_url, "/", manager->gnss_assistance_file, NULL);
manager->gnss_assistance_file, NULL);
curl = curl_easy_init(); curl = curl_easy_init();
if (!curl) { if (!curl) {
@@ -237,7 +230,8 @@ static void fetch_assistance_data(struct EG25Manager *manager)
response = curl_easy_perform(curl); response = curl_easy_perform(curl);
if (response != CURLE_OK) { if (response != CURLE_OK) {
g_warning("Unable to fetch GNSS assistance data from %s: %s", g_warning("Unable to fetch GNSS assistance data from %s: %s",
url, strlen(errbuf) ? errbuf : curl_easy_strerror(response)); url,
strlen(errbuf) ? errbuf : curl_easy_strerror(response));
goto bail; goto bail;
} }
@@ -268,8 +262,7 @@ bail:
/******************************************************************************/ /******************************************************************************/
static void init_assistance_data_upload_ready(struct EG25Manager *manager, static void init_assistance_data_upload_ready(struct EG25Manager *manager, const char *response)
const char *response)
{ {
/* Search for 'CONNECT' in response to start upload */ /* Search for 'CONNECT' in response to start upload */
if (strstr(response, "CONNECT")) { if (strstr(response, "CONNECT")) {
@@ -285,8 +278,7 @@ static void init_assistance_data_upload_ready(struct EG25Manager *manager,
} }
} }
static void init_assistance_data_upload_start(struct EG25Manager *manager, static void init_assistance_data_upload_start(struct EG25Manager *manager, const char *response)
const char *response)
{ {
gchar value[BUFFER_SIZE]; gchar value[BUFFER_SIZE];
off_t size; off_t size;
@@ -305,11 +297,14 @@ static void init_assistance_data_upload_start(struct EG25Manager *manager,
lseek(manager->gnss_assistance_fd, 0, SEEK_SET); lseek(manager->gnss_assistance_fd, 0, SEEK_SET);
/* Start upload */ /* Start upload */
g_snprintf(value, BUFFER_SIZE, "\"RAM:%s\",%ld,%d", g_snprintf(value,
manager->gnss_assistance_file, size, UPLOAD_TIMEOUT_S); BUFFER_SIZE,
"\"RAM:%s\",%ld,%d",
manager->gnss_assistance_file,
size,
UPLOAD_TIMEOUT_S);
g_message("Initiate GNSS assistance data upload: %s", value); g_message("Initiate GNSS assistance data upload: %s", value);
at_append_command(manager, "QFUPL", NULL, value, NULL, at_append_command(manager, "QFUPL", NULL, value, NULL, init_assistance_data_upload_ready);
init_assistance_data_upload_ready);
at_send_command(manager); at_send_command(manager);
} }
@@ -319,8 +314,7 @@ static void init_assistance_data_upload(struct EG25Manager *manager)
* Delete all previous GNSS assistance data files in RAM * Delete all previous GNSS assistance data files in RAM
* and start uploading the latest one to RAM. * and start uploading the latest one to RAM.
*/ */
at_append_command(manager, "QFDEL", NULL, "\"RAM:*\"\r\n", at_append_command(manager, "QFDEL", NULL, "\"RAM:*\"\r\n", NULL, init_assistance_data_upload_start);
NULL, init_assistance_data_upload_start);
at_send_command(manager); at_send_command(manager);
} }
@@ -357,8 +351,7 @@ static void upload_assistance_data(struct EG25Manager *manager)
} }
} }
static void finish_assistance_data_upload_cb(struct EG25Manager *manager, static void finish_assistance_data_upload_cb(struct EG25Manager *manager, const char *response)
const char *response)
{ {
/* Process response */ /* Process response */
at_process_result(manager, response); at_process_result(manager, response);
@@ -379,15 +372,12 @@ static void finish_assistance_data_upload(struct EG25Manager *manager)
datetime = g_date_time_new_now_utc(); datetime = g_date_time_new_now_utc();
timestring = g_date_time_format(datetime, "0,\"%Y/%m/%d,%H:%M:%S\""); timestring = g_date_time_format(datetime, "0,\"%Y/%m/%d,%H:%M:%S\"");
g_message("Setting GNSS assistance UTC clock to: %s", timestring); g_message("Setting GNSS assistance UTC clock to: %s", timestring);
at_append_command(manager, "QGPSXTRATIME", NULL, timestring, NULL, at_append_command(manager, "QGPSXTRATIME", NULL, timestring, NULL, at_process_result);
at_process_result);
/* Configure GNSS engine to use uploaded GNSS assistance data */ /* Configure GNSS engine to use uploaded GNSS assistance data */
g_snprintf(value, BUFFER_SIZE, "\"RAM:%s\"", g_snprintf(value, BUFFER_SIZE, "\"RAM:%s\"", manager->gnss_assistance_file);
manager->gnss_assistance_file);
g_message("Setting GNSS assistance file to: %s", value); g_message("Setting GNSS assistance file to: %s", value);
at_append_command(manager, "QGPSXTRADATA", NULL, value, NULL, at_append_command(manager, "QGPSXTRADATA", NULL, value, NULL, finish_assistance_data_upload_cb);
finish_assistance_data_upload_cb);
at_send_command(manager); at_send_command(manager);
} }
@@ -396,7 +386,7 @@ static void finish_assistance_data_upload(struct EG25Manager *manager)
#ifdef HAVE_MMGLIB #ifdef HAVE_MMGLIB
static void enable_mm_gnss(struct EG25Manager *manager) static void enable_mm_gnss(struct EG25Manager *manager)
{ {
g_autoptr (GError) error = NULL; g_autoptr(GError) error = NULL;
MMModemLocationSource sources = mm_modem_location_get_enabled(manager->mm_location); MMModemLocationSource sources = mm_modem_location_get_enabled(manager->mm_location);
gboolean signal_location = mm_modem_location_signals_location(manager->mm_location); gboolean signal_location = mm_modem_location_signals_location(manager->mm_location);
@@ -407,11 +397,9 @@ static void enable_mm_gnss(struct EG25Manager *manager)
if (manager->gnss_sources & EG25_GNSS_SOURCE_RAW) if (manager->gnss_sources & EG25_GNSS_SOURCE_RAW)
sources |= MM_MODEM_LOCATION_SOURCE_GPS_RAW; sources |= MM_MODEM_LOCATION_SOURCE_GPS_RAW;
mm_modem_location_setup_sync(manager->mm_location, sources, mm_modem_location_setup_sync(manager->mm_location, sources, signal_location, NULL, &error);
signal_location, NULL, &error);
if (error != NULL) if (error != NULL)
g_warning("Unable to enable GNSS engine through ModemManager: %s", g_warning("Unable to enable GNSS engine through ModemManager: %s", error->message);
error->message);
} }
#endif #endif
@@ -424,8 +412,7 @@ static void enable_at_gnss_cb(struct EG25Manager *manager, const char *response)
static void enable_at_gnss(struct EG25Manager *manager) static void enable_at_gnss(struct EG25Manager *manager)
{ {
if (manager->gnss_sources & EG25_GNSS_SOURCE_QGPS) { if (manager->gnss_sources & EG25_GNSS_SOURCE_QGPS) {
at_append_command(manager, "QGPS", NULL, "1", NULL, at_append_command(manager, "QGPS", NULL, "1", NULL, enable_at_gnss_cb);
enable_at_gnss_cb);
at_send_command(manager); at_send_command(manager);
return; return;
} }
@@ -437,7 +424,7 @@ static void enable_at_gnss(struct EG25Manager *manager)
void gnss_step(struct EG25Manager *manager) void gnss_step(struct EG25Manager *manager)
{ {
switch(manager->gnss_assistance_step) { switch (manager->gnss_assistance_step) {
case EG25_GNSS_STEP_FIRST: case EG25_GNSS_STEP_FIRST:
manager->gnss_assistance_step++; manager->gnss_assistance_step++;
g_message("GNSS assistance upload started..."); g_message("GNSS assistance upload started...");
@@ -446,7 +433,8 @@ void gnss_step(struct EG25Manager *manager)
case EG25_GNSS_STEP_FETCH_ASSISTANCE_DATA: case EG25_GNSS_STEP_FETCH_ASSISTANCE_DATA:
g_message("GNSS assistance upload step (%d/%d): " g_message("GNSS assistance upload step (%d/%d): "
"fetching assistance data", "fetching assistance data",
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST); manager->gnss_assistance_step,
EG25_GNSS_STEP_LAST);
fetch_assistance_data(manager); fetch_assistance_data(manager);
break; break;
@@ -455,7 +443,8 @@ void gnss_step(struct EG25Manager *manager)
if (manager->modem_iface == MODEM_IFACE_MODEMMANAGER) { if (manager->modem_iface == MODEM_IFACE_MODEMMANAGER) {
g_message("GNSS assistance upload step (%d/%d): " g_message("GNSS assistance upload step (%d/%d): "
"disabling GNSS engine through ModemManager", "disabling GNSS engine through ModemManager",
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST); manager->gnss_assistance_step,
EG25_GNSS_STEP_LAST);
disable_mm_gnss(manager); disable_mm_gnss(manager);
} }
manager->gnss_assistance_step++; manager->gnss_assistance_step++;
@@ -465,26 +454,30 @@ void gnss_step(struct EG25Manager *manager)
case EG25_GNSS_STEP_AT_GNSS_DISABLE: case EG25_GNSS_STEP_AT_GNSS_DISABLE:
g_message("GNSS assistance upload step (%d/%d): " g_message("GNSS assistance upload step (%d/%d): "
"disabling GNSS engine through AT+QGPS", "disabling GNSS engine through AT+QGPS",
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST); manager->gnss_assistance_step,
EG25_GNSS_STEP_LAST);
state_at_gnss(manager); state_at_gnss(manager);
break; break;
case EG25_GNSS_STEP_INIT_UPLOAD: case EG25_GNSS_STEP_INIT_UPLOAD:
g_message("GNSS assistance upload step (%d/%d): initiating upload", g_message("GNSS assistance upload step (%d/%d): initiating upload",
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST); manager->gnss_assistance_step,
EG25_GNSS_STEP_LAST);
init_assistance_data_upload(manager); init_assistance_data_upload(manager);
break; break;
case EG25_GNSS_STEP_UPLOAD: case EG25_GNSS_STEP_UPLOAD:
g_message("GNSS assistance upload step (%d/%d): " g_message("GNSS assistance upload step (%d/%d): "
"uploading assistance data", "uploading assistance data",
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST); manager->gnss_assistance_step,
EG25_GNSS_STEP_LAST);
upload_assistance_data(manager); upload_assistance_data(manager);
break; break;
case EG25_GNSS_STEP_FINISH_UPLOAD: case EG25_GNSS_STEP_FINISH_UPLOAD:
g_message("GNSS assistance upload step (%d/%d): finishing upload", g_message("GNSS assistance upload step (%d/%d): finishing upload",
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST); manager->gnss_assistance_step,
EG25_GNSS_STEP_LAST);
finish_assistance_data_upload(manager); finish_assistance_data_upload(manager);
break; break;
@@ -493,7 +486,8 @@ void gnss_step(struct EG25Manager *manager)
if (manager->modem_iface == MODEM_IFACE_MODEMMANAGER) { if (manager->modem_iface == MODEM_IFACE_MODEMMANAGER) {
g_message("GNSS assistance upload step (%d/%d): " g_message("GNSS assistance upload step (%d/%d): "
"re-enabling GNSS through ModemManager", "re-enabling GNSS through ModemManager",
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST); manager->gnss_assistance_step,
EG25_GNSS_STEP_LAST);
enable_mm_gnss(manager); enable_mm_gnss(manager);
} }
manager->gnss_assistance_step++; manager->gnss_assistance_step++;
@@ -503,13 +497,15 @@ void gnss_step(struct EG25Manager *manager)
case EG25_GNSS_STEP_AT_QGPS_ENABLE: case EG25_GNSS_STEP_AT_QGPS_ENABLE:
g_message("GNSS assistance upload step (%d/%d): " g_message("GNSS assistance upload step (%d/%d): "
"re-enabling GNSS through AT+QGPS", "re-enabling GNSS through AT+QGPS",
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST); manager->gnss_assistance_step,
EG25_GNSS_STEP_LAST);
enable_at_gnss(manager); enable_at_gnss(manager);
break; break;
case EG25_GNSS_STEP_LAST: case EG25_GNSS_STEP_LAST:
g_message("GNSS assistance upload step (%d/%d): finished", g_message("GNSS assistance upload step (%d/%d): finished",
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST); manager->gnss_assistance_step,
EG25_GNSS_STEP_LAST);
break; break;
} }
} }

View File

@@ -6,9 +6,9 @@
#pragma once #pragma once
#include <curl/curl.h>
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#include <curl/curl.h>
#include "manager.h" #include "manager.h"

View File

@@ -4,12 +4,12 @@
* SPDX-License-Identifier: GPL-3.0-or-later * SPDX-License-Identifier: GPL-3.0-or-later
*/ */
#include "config.h"
#include "gpio.h" #include "gpio.h"
#include "config.h"
#include <unistd.h>
#include <dirent.h> #include <dirent.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h>
/* Those defines are used for legacy config files only */ /* Those defines are used for legacy config files only */
#define GPIO_CHIP1_LABEL "1c20800.pinctrl" #define GPIO_CHIP1_LABEL "1c20800.pinctrl"
@@ -42,7 +42,8 @@ static char *gpio_in_names[] = {
"status", "status",
}; };
enum gpiod_line_value gpio_line_get_value(struct EG25Manager *manager, int line) { enum gpiod_line_value gpio_line_get_value(struct EG25Manager *manager, int line)
{
enum gpiod_line_value value; enum gpiod_line_value value;
unsigned int offset; unsigned int offset;
@@ -56,7 +57,8 @@ enum gpiod_line_value gpio_line_get_value(struct EG25Manager *manager, int line)
return value; return value;
} }
int gpio_line_set_value(struct EG25Manager *manager, int line, enum gpiod_line_value value) { int gpio_line_set_value(struct EG25Manager *manager, int line, enum gpiod_line_value value)
{
unsigned int offset; unsigned int offset;
int ret; int ret;
@@ -65,8 +67,7 @@ int gpio_line_set_value(struct EG25Manager *manager, int line, enum gpiod_line_v
if (ret) { if (ret) {
g_warning("gpio: couldn't set value %d on line %d", value, line); g_warning("gpio: couldn't set value %d on line %d", value, line);
return -1; return -1;
} } else {
else {
manager->gpio_out_value[line] = value; manager->gpio_out_value[line] = value;
return 0; return 0;
} }
@@ -159,7 +160,11 @@ int gpio_sequence_sleep(struct EG25Manager *manager)
return 0; return 0;
} }
struct gpiod_line_request *gpio_request_line(struct EG25Manager *manager, int chip, unsigned int line, enum gpiod_line_direction direction) { struct gpiod_line_request *gpio_request_line(struct EG25Manager *manager,
int chip,
unsigned int line,
enum gpiod_line_direction direction)
{
struct gpiod_line_request *request = NULL; struct gpiod_line_request *request = NULL;
struct gpiod_line_settings *settings; struct gpiod_line_settings *settings;
struct gpiod_line_config *line_cfg; struct gpiod_line_config *line_cfg;
@@ -208,8 +213,7 @@ static int gpio_chip_dir_filter(const struct dirent *entry)
if (asprintf(&path, "/dev/%s", entry->d_name) < 0) if (asprintf(&path, "/dev/%s", entry->d_name) < 0)
return 0; return 0;
if ((lstat(path, &sb) == 0) && (!S_ISLNK(sb.st_mode)) && if ((lstat(path, &sb) == 0) && (!S_ISLNK(sb.st_mode)) && gpiod_is_gpiochip_device(path))
gpiod_is_gpiochip_device(path))
ret = 1; ret = 1;
free(path); free(path);
@@ -273,6 +277,7 @@ struct gpiod_chip *gpio_chip_open_by_label(const char *label)
clabel = gpiod_chip_info_get_label(cinfo); clabel = gpiod_chip_info_get_label(cinfo);
if (strcmp(label, clabel) == 0) { if (strcmp(label, clabel) == 0) {
free(paths);
return chip; return chip;
} }
@@ -280,10 +285,14 @@ clean_chip_open:
gpiod_chip_close(chip); gpiod_chip_close(chip);
} }
if (paths)
free(paths);
return NULL; return NULL;
} }
unsigned int gpio_chip_num_lines(struct EG25Manager *manager, unsigned int chip_num) { unsigned int gpio_chip_num_lines(struct EG25Manager *manager, unsigned int chip_num)
{
struct gpiod_chip *chip = manager->gpiochip[chip_num]; struct gpiod_chip *chip = manager->gpiochip[chip_num];
struct gpiod_chip_info *info; struct gpiod_chip_info *info;
unsigned int num_lines; unsigned int num_lines;
@@ -321,8 +330,7 @@ int gpio_init(struct EG25Manager *manager, toml_table_t *config[])
* format, but error out if user config overrides gpios using the * format, but error out if user config overrides gpios using the
* old format * old format
*/ */
if (!gpio_config[EG25_CONFIG_USER] || toml_array_in(gpio_config[EG25_CONFIG_USER], "chips")) if (!gpio_config[EG25_CONFIG_USER] || toml_array_in(gpio_config[EG25_CONFIG_USER], "chips")) {
{
int numchips; int numchips;
toml_array_t *chipslist = NULL; toml_array_t *chipslist = NULL;
@@ -354,7 +362,10 @@ int gpio_init(struct EG25Manager *manager, toml_table_t *config[])
if (!line.ok || line.u.i < 0 || line.u.i > gpio_chip_num_lines(manager, chip.u.i)) if (!line.ok || line.u.i < 0 || line.u.i > gpio_chip_num_lines(manager, chip.u.i))
g_error("Wrong line ID for output GPIO '%s'", gpio_out_names[i]); g_error("Wrong line ID for output GPIO '%s'", gpio_out_names[i]);
manager->gpio_out[i] = gpio_request_line(manager, chip.u.i, line.u.i, GPIOD_LINE_DIRECTION_OUTPUT); manager->gpio_out[i] = gpio_request_line(manager,
chip.u.i,
line.u.i,
GPIOD_LINE_DIRECTION_OUTPUT);
if (!manager->gpio_out[i]) if (!manager->gpio_out[i])
g_error("Unable to get output GPIO %d", i); g_error("Unable to get output GPIO %d", i);
} }
@@ -378,7 +389,10 @@ int gpio_init(struct EG25Manager *manager, toml_table_t *config[])
if (!line.ok || line.u.i < 0 || line.u.i > gpio_chip_num_lines(manager, chip.u.i)) if (!line.ok || line.u.i < 0 || line.u.i > gpio_chip_num_lines(manager, chip.u.i))
g_error("Wrong line ID for input GPIO '%s'", gpio_in_names[i]); g_error("Wrong line ID for input GPIO '%s'", gpio_in_names[i]);
manager->gpio_in[i] = gpio_request_line(manager, chip.u.i, line.u.i, GPIOD_LINE_DIRECTION_INPUT); manager->gpio_in[i] = gpio_request_line(manager,
chip.u.i,
line.u.i,
GPIOD_LINE_DIRECTION_INPUT);
if (!manager->gpio_in[i]) if (!manager->gpio_in[i])
g_error("Unable to get input GPIO %d", i); g_error("Unable to get input GPIO %d", i);
} }
@@ -406,7 +420,10 @@ int gpio_init(struct EG25Manager *manager, toml_table_t *config[])
chipidx = 1; chipidx = 1;
} }
manager->gpio_out[i] = gpio_request_line(manager, chipidx, offset, GPIOD_LINE_DIRECTION_OUTPUT); manager->gpio_out[i] = gpio_request_line(manager,
chipidx,
offset,
GPIOD_LINE_DIRECTION_OUTPUT);
if (!manager->gpio_out[i]) if (!manager->gpio_out[i])
g_error("Unable to get output GPIO %d", i); g_error("Unable to get output GPIO %d", i);
} }
@@ -423,7 +440,10 @@ int gpio_init(struct EG25Manager *manager, toml_table_t *config[])
chipidx = 1; chipidx = 1;
} }
manager->gpio_in[i] = gpio_request_line(manager, chipidx, offset, GPIOD_LINE_DIRECTION_INPUT); manager->gpio_in[i] = gpio_request_line(manager,
chipidx,
offset,
GPIOD_LINE_DIRECTION_INPUT);
if (!manager->gpio_in[i]) if (!manager->gpio_in[i])
g_error("Unable to get input GPIO %d", i); g_error("Unable to get input GPIO %d", i);
} }

View File

@@ -4,19 +4,19 @@
* SPDX-License-Identifier: GPL-3.0-or-later * SPDX-License-Identifier: GPL-3.0-or-later
*/ */
#include "manager.h"
#include "at.h" #include "at.h"
#include "config.h" #include "config.h"
#include "gpio.h" #include "gpio.h"
#include "manager.h"
#ifdef HAVE_MMGLIB #ifdef HAVE_MMGLIB
#include "mm-iface.h" #include "mm-iface.h"
#endif #endif
#include "gnss.h"
#include "ofono-iface.h" #include "ofono-iface.h"
#include "suspend.h" #include "suspend.h"
#include "udev.h" #include "udev.h"
#include "gnss.h"
#include <fcntl.h> #include <fcntl.h>
#include <signal.h> #include <signal.h>
@@ -154,7 +154,7 @@ static gboolean modem_gpio_reset_done(struct EG25Manager *manager)
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }
static gboolean modem_at_reset_done(struct EG25Manager* manager) static gboolean modem_at_reset_done(struct EG25Manager *manager)
{ {
/* /*
* If the modem was successfully rebooted, then we should have received * If the modem was successfully rebooted, then we should have received
@@ -168,12 +168,14 @@ static gboolean modem_at_reset_done(struct EG25Manager* manager)
g_message("AT reset failed, falling back to GPIO reset"); g_message("AT reset failed, falling back to GPIO reset");
gpio_sequence_shutdown(manager); gpio_sequence_shutdown(manager);
manager->complete_reset_timer = g_timeout_add_seconds(30, G_SOURCE_FUNC(modem_gpio_reset_done), manager); manager->complete_reset_timer = g_timeout_add_seconds(30,
G_SOURCE_FUNC(modem_gpio_reset_done),
manager);
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }
static gboolean modem_rebind_done(struct EG25Manager* manager) static gboolean modem_rebind_done(struct EG25Manager *manager)
{ {
manager->modem_state = EG25_STATE_RESUMING; manager->modem_state = EG25_STATE_RESUMING;
manager->complete_reset_timer = 0; manager->complete_reset_timer = 0;
@@ -271,7 +273,9 @@ error:
at_sequence_reset(manager); at_sequence_reset(manager);
// Setup timer for making sure we don't queue other reset commands // Setup timer for making sure we don't queue other reset commands
manager->complete_reset_timer = g_timeout_add_seconds(45, G_SOURCE_FUNC(modem_at_reset_done), manager); manager->complete_reset_timer = g_timeout_add_seconds(45,
G_SOURCE_FUNC(modem_at_reset_done),
manager);
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }
@@ -309,7 +313,7 @@ static toml_table_t *parse_config_file(char *config_file, gboolean force_default
if (config_file) { if (config_file) {
f = fopen(config_file, "r"); f = fopen(config_file, "r");
} else if (g_file_get_contents("/proc/device-tree/compatible", &compatible, &len, NULL)) { } else if (g_file_get_contents("/proc/device-tree/compatible", &compatible, &len, NULL)) {
g_autoptr (GPtrArray) compat = g_ptr_array_new(); g_autoptr(GPtrArray) compat = g_ptr_array_new();
gsize pos = 0; gsize pos = 0;
/* /*
@@ -324,9 +328,11 @@ static toml_table_t *parse_config_file(char *config_file, gboolean force_default
for (pos = 0; pos < compat->len; pos++) { for (pos = 0; pos < compat->len; pos++) {
g_autofree gchar *filename = NULL; g_autofree gchar *filename = NULL;
if (force_default) if (force_default)
filename = g_strdup_printf(EG25_DATADIR "/%s.toml", (gchar *)g_ptr_array_index(compat, pos)); filename = g_strdup_printf(EG25_DATADIR "/%s.toml",
(gchar *)g_ptr_array_index(compat, pos));
else else
filename = g_strdup_printf(EG25_CONFDIR "/%s.toml", (gchar *)g_ptr_array_index(compat, pos)); filename = g_strdup_printf(EG25_CONFDIR "/%s.toml",
(gchar *)g_ptr_array_index(compat, pos));
if (access(filename, F_OK) == 0) { if (access(filename, F_OK) == 0) {
g_message("Opening config file: %s", filename); g_message("Opening config file: %s", filename);
@@ -361,9 +367,9 @@ int main(int argc, char *argv[])
toml_table_t *toml_config[EG25_CONFIG_COUNT]; toml_table_t *toml_config[EG25_CONFIG_COUNT];
toml_table_t *manager_config[EG25_CONFIG_COUNT]; toml_table_t *manager_config[EG25_CONFIG_COUNT];
const GOptionEntry options[] = { const GOptionEntry options[] = {
{ "config", 'c', 0, G_OPTION_ARG_STRING, &config_file, "Config file to use.", NULL }, {"config", 'c', 0, G_OPTION_ARG_STRING, &config_file, "Config file to use.", NULL},
{ "version", 'v', 0, G_OPTION_ARG_NONE, &show_version, "Display version information and exit.", NULL }, {"version", 'v', 0, G_OPTION_ARG_NONE, &show_version, "Display version information and exit.", NULL},
{ NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL } {NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL}
}; };
memset(&manager, 0, sizeof(manager)); memset(&manager, 0, sizeof(manager));
@@ -372,10 +378,10 @@ int main(int argc, char *argv[])
manager.suspend_delay_fd = -1; manager.suspend_delay_fd = -1;
manager.suspend_block_fd = -1; manager.suspend_block_fd = -1;
opt_context = g_option_context_new ("- Power management for the Quectel EG25 modem"); opt_context = g_option_context_new("- Power management for the Quectel EG25 modem");
g_option_context_add_main_entries (opt_context, options, NULL); g_option_context_add_main_entries(opt_context, options, NULL);
if (!g_option_context_parse (opt_context, &argc, &argv, &err)) { if (!g_option_context_parse(opt_context, &argc, &argv, &err)) {
g_warning ("%s", err->message); g_warning("%s", err->message);
return 1; return 1;
} }

View File

@@ -41,7 +41,6 @@ typedef enum {
EG25_GNSS_SOURCE_QGPS = 1 << 3, EG25_GNSS_SOURCE_QGPS = 1 << 3,
} EG25GNSSSource; } EG25GNSSSource;
enum EG25State { enum EG25State {
EG25_STATE_INIT = 0, EG25_STATE_INIT = 0,
EG25_STATE_POWERED, // Power-on sequence has been executed, but the modem isn't on yet EG25_STATE_POWERED, // Power-on sequence has been executed, but the modem isn't on yet

View File

@@ -30,7 +30,7 @@ static void add_modem(struct EG25Manager *manager, GDBusObject *object)
path = g_dbus_object_get_object_path(object); path = g_dbus_object_get_object_path(object);
g_message("Adding new modem `%s'", path); g_message("Adding new modem `%s'", path);
g_assert(MM_IS_OBJECT (object)); g_assert(MM_IS_OBJECT(object));
manager->mm_modem = mm_object_get_modem(MM_OBJECT(object)); manager->mm_modem = mm_object_get_modem(MM_OBJECT(object));
g_assert_nonnull(manager->mm_modem); g_assert_nonnull(manager->mm_modem);
@@ -70,7 +70,7 @@ static void add_modem_location(struct EG25Manager *manager, GDBusObject *object)
g_assert_nonnull(manager->mm_location); g_assert_nonnull(manager->mm_location);
} }
static void interface_added_cb (struct EG25Manager *manager, static void interface_added_cb(struct EG25Manager *manager,
GDBusObject *object, GDBusObject *object,
GDBusInterface *interface) GDBusInterface *interface)
{ {
@@ -78,7 +78,8 @@ static void interface_added_cb (struct EG25Manager *manager,
info = g_dbus_interface_get_info(interface); info = g_dbus_interface_get_info(interface);
g_message("ModemManager interface `%s' found on object `%s'", g_message("ModemManager interface `%s' found on object `%s'",
info->name, g_dbus_object_get_object_path(object)); info->name,
g_dbus_object_get_object_path(object));
if (g_strcmp0(info->name, MM_DBUS_INTERFACE_MODEM) == 0) if (g_strcmp0(info->name, MM_DBUS_INTERFACE_MODEM) == 0)
add_modem(manager, object); add_modem(manager, object);
@@ -87,7 +88,6 @@ static void interface_added_cb (struct EG25Manager *manager,
add_modem_location(manager, object); add_modem_location(manager, object);
} }
static void interface_removed_cb(struct EG25Manager *manager, static void interface_removed_cb(struct EG25Manager *manager,
GDBusObject *object, GDBusObject *object,
GDBusInterface *interface) GDBusInterface *interface)
@@ -104,7 +104,6 @@ static void interface_removed_cb(struct EG25Manager *manager,
manager->mm_modem = NULL; manager->mm_modem = NULL;
} }
static void add_mm_object(struct EG25Manager *manager, GDBusObject *object) static void add_mm_object(struct EG25Manager *manager, GDBusObject *object)
{ {
GList *ifaces, *node; GList *ifaces, *node;
@@ -116,7 +115,6 @@ static void add_mm_object(struct EG25Manager *manager, GDBusObject *object)
g_list_free_full(ifaces, g_object_unref); g_list_free_full(ifaces, g_object_unref);
} }
static void add_mm_objects(struct EG25Manager *manager) static void add_mm_objects(struct EG25Manager *manager)
{ {
GList *objects, *node; GList *objects, *node;
@@ -128,14 +126,12 @@ static void add_mm_objects(struct EG25Manager *manager)
g_list_free_full(objects, g_object_unref); g_list_free_full(objects, g_object_unref);
} }
static void object_added_cb(struct EG25Manager *manager, GDBusObject *object) static void object_added_cb(struct EG25Manager *manager, GDBusObject *object)
{ {
g_message("ModemManager object `%s' added", g_dbus_object_get_object_path(object)); g_message("ModemManager object `%s' added", g_dbus_object_get_object_path(object));
add_mm_object(manager, object); add_mm_object(manager, object);
} }
static void object_removed_cb(struct EG25Manager *manager, GDBusObject *object) static void object_removed_cb(struct EG25Manager *manager, GDBusObject *object)
{ {
const gchar *path; const gchar *path;
@@ -146,25 +142,32 @@ static void object_removed_cb(struct EG25Manager *manager, GDBusObject *object)
manager->mm_modem = NULL; manager->mm_modem = NULL;
} }
static void mm_manager_new_cb(GDBusConnection *connection, static void mm_manager_new_cb(GDBusConnection *connection,
GAsyncResult *res, GAsyncResult *res,
struct EG25Manager *manager) struct EG25Manager *manager)
{ {
g_autoptr (GError) error = NULL; g_autoptr(GError) error = NULL;
manager->mm_manager = mm_manager_new_finish(res, &error); manager->mm_manager = mm_manager_new_finish(res, &error);
if (!manager->mm_manager) if (!manager->mm_manager)
g_critical("Error creating ModemManager Manager: %s", error->message); g_critical("Error creating ModemManager Manager: %s", error->message);
g_signal_connect_swapped(G_DBUS_OBJECT_MANAGER(manager->mm_manager), g_signal_connect_swapped(G_DBUS_OBJECT_MANAGER(manager->mm_manager),
"interface-added", G_CALLBACK(interface_added_cb), manager); "interface-added",
G_CALLBACK(interface_added_cb),
manager);
g_signal_connect_swapped(G_DBUS_OBJECT_MANAGER(manager->mm_manager), g_signal_connect_swapped(G_DBUS_OBJECT_MANAGER(manager->mm_manager),
"interface-removed", G_CALLBACK(interface_removed_cb), manager); "interface-removed",
G_CALLBACK(interface_removed_cb),
manager);
g_signal_connect_swapped(G_DBUS_OBJECT_MANAGER(manager->mm_manager), g_signal_connect_swapped(G_DBUS_OBJECT_MANAGER(manager->mm_manager),
"object-added", G_CALLBACK(object_added_cb), manager); "object-added",
G_CALLBACK(object_added_cb),
manager);
g_signal_connect_swapped(G_DBUS_OBJECT_MANAGER(manager->mm_manager), g_signal_connect_swapped(G_DBUS_OBJECT_MANAGER(manager->mm_manager),
"object-removed", G_CALLBACK(object_removed_cb), manager); "object-removed",
G_CALLBACK(object_removed_cb),
manager);
add_mm_objects(manager); add_mm_objects(manager);
} }
@@ -177,13 +180,18 @@ static void mm_appeared_cb(GDBusConnection *connection,
g_message("ModemManager appeared on D-Bus"); g_message("ModemManager appeared on D-Bus");
if (manager->modem_iface != MODEM_IFACE_NONE) { if (manager->modem_iface != MODEM_IFACE_NONE) {
g_critical("Modem interface already found! Make sure to only run either of ModemManager or oFono."); g_critical("Modem interface already found! Make sure to only run either of "
"ModemManager or "
"oFono.");
return; return;
} }
manager->modem_iface = MODEM_IFACE_MODEMMANAGER; manager->modem_iface = MODEM_IFACE_MODEMMANAGER;
mm_manager_new(connection, G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE, mm_manager_new(connection,
NULL, (GAsyncReadyCallback)mm_manager_new_cb, manager); G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
NULL,
(GAsyncReadyCallback)mm_manager_new_cb,
manager);
} }
static void mm_iface_clean(struct EG25Manager *manager) static void mm_iface_clean(struct EG25Manager *manager)
@@ -201,9 +209,7 @@ static void mm_iface_clean(struct EG25Manager *manager)
} }
} }
static void mm_vanished_cb(GDBusConnection *connection, static void mm_vanished_cb(GDBusConnection *connection, const gchar *name, struct EG25Manager *manager)
const gchar *name,
struct EG25Manager *manager)
{ {
g_message("ModemManager vanished from D-Bus"); g_message("ModemManager vanished from D-Bus");
mm_iface_clean(manager); mm_iface_clean(manager);
@@ -211,11 +217,13 @@ static void mm_vanished_cb(GDBusConnection *connection,
void mm_iface_init(struct EG25Manager *manager, toml_table_t *config[]) void mm_iface_init(struct EG25Manager *manager, toml_table_t *config[])
{ {
manager->mm_watch = g_bus_watch_name(G_BUS_TYPE_SYSTEM, MM_DBUS_SERVICE, manager->mm_watch = g_bus_watch_name(G_BUS_TYPE_SYSTEM,
MM_DBUS_SERVICE,
G_BUS_NAME_WATCHER_FLAGS_AUTO_START, G_BUS_NAME_WATCHER_FLAGS_AUTO_START,
(GBusNameAppearedCallback)mm_appeared_cb, (GBusNameAppearedCallback)mm_appeared_cb,
(GBusNameVanishedCallback)mm_vanished_cb, (GBusNameVanishedCallback)mm_vanished_cb,
manager, NULL); manager,
NULL);
} }
void mm_iface_destroy(struct EG25Manager *manager) void mm_iface_destroy(struct EG25Manager *manager)

View File

@@ -43,15 +43,11 @@ static void modem_added_cb(GDBOManager *manager_proxy,
manager->modem_usb_id = g_strdup(strrchr(g_variant_dup_string(modem_path, NULL), '/') + 1); manager->modem_usb_id = g_strdup(strrchr(g_variant_dup_string(modem_path, NULL), '/') + 1);
} }
static void modem_removed_cb(GDBOManager *manager_proxy, static void modem_removed_cb(GDBOManager *manager_proxy, const gchar *path, struct EG25Manager *manager)
const gchar *path,
struct EG25Manager *manager)
{ {
} }
static void get_modems_cb(GDBOManager *manager_proxy, static void get_modems_cb(GDBOManager *manager_proxy, GAsyncResult *res, struct EG25Manager *manager)
GAsyncResult *res,
struct EG25Manager *manager)
{ {
gboolean ok; gboolean ok;
GVariant *modems; GVariant *modems;
@@ -61,15 +57,14 @@ static void get_modems_cb(GDBOManager *manager_proxy,
const gchar *path; const gchar *path;
GVariant *properties; GVariant *properties;
ok = gdbo_manager_call_get_modems_finish(manager_proxy, &modems, ok = gdbo_manager_call_get_modems_finish(manager_proxy, &modems, res, &error);
res, &error);
if (!ok) { if (!ok) {
g_warning("Error getting modems from ofono manager: %s", error->message); g_warning("Error getting modems from ofono manager: %s", error->message);
return; return;
} }
g_variant_get(modems, "a(oa{sv})", &modems_iter); g_variant_get(modems, "a(oa{sv})", &modems_iter);
while(g_variant_iter_loop(modems_iter, "(&o@a{sv})", &path, &properties)) { while (g_variant_iter_loop(modems_iter, "(&o@a{sv})", &path, &properties)) {
g_debug("Got modem object path '%s'", path); g_debug("Got modem object path '%s'", path);
modem_added_cb(manager_proxy, path, properties, manager); modem_added_cb(manager_proxy, path, properties, manager);
} }
@@ -87,7 +82,9 @@ static void ofono_appeared_cb(GDBusConnection *connection,
g_message("oFono appeared on D-Bus"); g_message("oFono appeared on D-Bus");
if (manager->modem_iface != MODEM_IFACE_NONE) { if (manager->modem_iface != MODEM_IFACE_NONE) {
g_critical("Modem interface already found! Make sure to only run either of ModemManager or oFono."); g_critical("Modem interface already found! Make sure to only run either of "
"ModemManager or "
"oFono.");
return; return;
} }
/* now connect to oFono! */ /* now connect to oFono! */
@@ -105,14 +102,12 @@ static void ofono_appeared_cb(GDBusConnection *connection,
manager->modem_iface = MODEM_IFACE_OFONO; manager->modem_iface = MODEM_IFACE_OFONO;
g_signal_connect(manager->ofono_manager, "modem-added", g_signal_connect(manager->ofono_manager, "modem-added", G_CALLBACK(modem_added_cb), manager);
G_CALLBACK(modem_added_cb), manager); g_signal_connect(manager->ofono_manager, "modem-removed", G_CALLBACK(modem_removed_cb), manager);
g_signal_connect(manager->ofono_manager, "modem-removed",
G_CALLBACK(modem_removed_cb), manager);
gdbo_manager_call_get_modems(manager->ofono_manager, gdbo_manager_call_get_modems(manager->ofono_manager,
NULL, NULL,
(GAsyncReadyCallback) get_modems_cb, (GAsyncReadyCallback)get_modems_cb,
manager); manager);
} }
@@ -130,11 +125,13 @@ static void ofono_vanished_cb(GDBusConnection *connection,
void ofono_iface_init(struct EG25Manager *manager, toml_table_t *config[]) void ofono_iface_init(struct EG25Manager *manager, toml_table_t *config[])
{ {
manager->ofono_watch = g_bus_watch_name(G_BUS_TYPE_SYSTEM, OFONO_SERVICE, manager->ofono_watch = g_bus_watch_name(G_BUS_TYPE_SYSTEM,
OFONO_SERVICE,
G_BUS_NAME_WATCHER_FLAGS_AUTO_START, G_BUS_NAME_WATCHER_FLAGS_AUTO_START,
(GBusNameAppearedCallback)ofono_appeared_cb, (GBusNameAppearedCallback)ofono_appeared_cb,
(GBusNameVanishedCallback)ofono_vanished_cb, (GBusNameVanishedCallback)ofono_vanished_cb,
manager, NULL); manager,
NULL);
} }
void ofono_iface_destroy(struct EG25Manager *manager) void ofono_iface_destroy(struct EG25Manager *manager)

View File

@@ -50,8 +50,7 @@ static gboolean drop_inhibitor(struct EG25Manager *manager, gboolean block)
manager->suspend_block_fd = -1; manager->suspend_block_fd = -1;
return TRUE; return TRUE;
} }
} } else {
else {
if (manager->suspend_delay_fd >= 0) { if (manager->suspend_delay_fd >= 0) {
g_message("dropping systemd sleep delay inhibitor"); g_message("dropping systemd sleep delay inhibitor");
close(manager->suspend_delay_fd); close(manager->suspend_delay_fd);
@@ -62,18 +61,15 @@ static gboolean drop_inhibitor(struct EG25Manager *manager, gboolean block)
return FALSE; return FALSE;
} }
static void inhibit_done_delay(GObject *source, static void inhibit_done_delay(GObject *source, GAsyncResult *result, gpointer user_data)
GAsyncResult *result,
gpointer user_data)
{ {
GDBusProxy *suspend_proxy = G_DBUS_PROXY(source); GDBusProxy *suspend_proxy = G_DBUS_PROXY(source);
struct EG25Manager *manager = user_data; struct EG25Manager *manager = user_data;
g_autoptr (GError) error = NULL; g_autoptr(GError) error = NULL;
GVariant *res; GVariant *res;
GUnixFDList *fd_list; GUnixFDList *fd_list;
res = g_dbus_proxy_call_with_unix_fd_list_finish(suspend_proxy, &fd_list, res = g_dbus_proxy_call_with_unix_fd_list_finish(suspend_proxy, &fd_list, result, &error);
result, &error);
if (!res) { if (!res) {
g_warning("inhibit failed: %s", error->message); g_warning("inhibit failed: %s", error->message);
} else { } else {
@@ -88,18 +84,15 @@ static void inhibit_done_delay(GObject *source,
} }
} }
static void inhibit_done_block(GObject *source, static void inhibit_done_block(GObject *source, GAsyncResult *result, gpointer user_data)
GAsyncResult *result,
gpointer user_data)
{ {
GDBusProxy *suspend_proxy = G_DBUS_PROXY(source); GDBusProxy *suspend_proxy = G_DBUS_PROXY(source);
struct EG25Manager *manager = user_data; struct EG25Manager *manager = user_data;
g_autoptr (GError) error = NULL; g_autoptr(GError) error = NULL;
GVariant *res; GVariant *res;
GUnixFDList *fd_list; GUnixFDList *fd_list;
res = g_dbus_proxy_call_with_unix_fd_list_finish(suspend_proxy, &fd_list, res = g_dbus_proxy_call_with_unix_fd_list_finish(suspend_proxy, &fd_list, result, &error);
result, &error);
if (!res) { if (!res) {
g_warning("inhibit failed: %s", error->message); g_warning("inhibit failed: %s", error->message);
} else { } else {
@@ -133,33 +126,48 @@ static void take_inhibitor(struct EG25Manager *manager, gboolean block)
GVariant *variant_arg; GVariant *variant_arg;
if (block) { if (block) {
if(manager->suspend_block_fd != -1) if (manager->suspend_block_fd != -1)
drop_inhibitor(manager, TRUE); drop_inhibitor(manager, TRUE);
variant_arg = g_variant_new ("(ssss)", "sleep", "eg25manager", variant_arg = g_variant_new("(ssss)",
"sleep",
"eg25manager",
"eg25manager needs to wait for modem to be fully booted", "eg25manager needs to wait for modem to be fully booted",
"block"); "block");
g_message("taking systemd sleep inhibitor (blocking)"); g_message("taking systemd sleep inhibitor (blocking)");
g_dbus_proxy_call_with_unix_fd_list(manager->suspend_proxy, "Inhibit", g_dbus_proxy_call_with_unix_fd_list(manager->suspend_proxy,
variant_arg, 0, G_MAXINT, NULL, NULL, "Inhibit",
inhibit_done_block, manager); variant_arg,
0,
G_MAXINT,
NULL,
NULL,
inhibit_done_block,
manager);
manager->modem_boot_timer = g_timeout_add_seconds(manager->modem_boot_timeout, manager->modem_boot_timer = g_timeout_add_seconds(manager->modem_boot_timeout,
G_SOURCE_FUNC(modem_fully_booted), G_SOURCE_FUNC(modem_fully_booted),
manager); manager);
} } else {
else { if (manager->suspend_delay_fd != -1)
if(manager->suspend_delay_fd != -1)
drop_inhibitor(manager, FALSE); drop_inhibitor(manager, FALSE);
variant_arg = g_variant_new ("(ssss)", "sleep", "eg25manager", variant_arg = g_variant_new("(ssss)",
"sleep",
"eg25manager",
"eg25manager needs to prepare modem for sleep", "eg25manager needs to prepare modem for sleep",
"delay"); "delay");
g_message("taking systemd sleep inhibitor"); g_message("taking systemd sleep inhibitor");
g_dbus_proxy_call_with_unix_fd_list(manager->suspend_proxy, "Inhibit", g_dbus_proxy_call_with_unix_fd_list(manager->suspend_proxy,
variant_arg, 0, G_MAXINT, NULL, NULL, "Inhibit",
inhibit_done_delay, manager); variant_arg,
0,
G_MAXINT,
NULL,
NULL,
inhibit_done_delay,
manager);
} }
} }
@@ -208,9 +216,7 @@ static void signal_cb(GDBusProxy *proxy,
} }
} }
static void name_owner_cb(GObject *object, static void name_owner_cb(GObject *object, GParamSpec *pspec, gpointer user_data)
GParamSpec *pspec,
gpointer user_data)
{ {
GDBusProxy *proxy = G_DBUS_PROXY(object); GDBusProxy *proxy = G_DBUS_PROXY(object);
struct EG25Manager *manager = user_data; struct EG25Manager *manager = user_data;
@@ -227,11 +233,9 @@ static void name_owner_cb(GObject *object,
} }
} }
static void on_proxy_acquired(GObject *object, static void on_proxy_acquired(GObject *object, GAsyncResult *res, struct EG25Manager *manager)
GAsyncResult *res,
struct EG25Manager *manager)
{ {
g_autoptr (GError) error = NULL; g_autoptr(GError) error = NULL;
char *owner; char *owner;
manager->suspend_proxy = g_dbus_proxy_new_for_bus_finish(res, &error); manager->suspend_proxy = g_dbus_proxy_new_for_bus_finish(res, &error);
@@ -240,10 +244,8 @@ static void on_proxy_acquired(GObject *object,
return; return;
} }
g_signal_connect(manager->suspend_proxy, "notify::g-name-owner", g_signal_connect(manager->suspend_proxy, "notify::g-name-owner", G_CALLBACK(name_owner_cb), manager);
G_CALLBACK(name_owner_cb), manager); g_signal_connect(manager->suspend_proxy, "g-signal", G_CALLBACK(signal_cb), manager);
g_signal_connect(manager->suspend_proxy, "g-signal",
G_CALLBACK(signal_cb), manager);
owner = g_dbus_proxy_get_name_owner(manager->suspend_proxy); owner = g_dbus_proxy_get_name_owner(manager->suspend_proxy);
if (owner) { if (owner) {
@@ -282,8 +284,13 @@ void suspend_init(struct EG25Manager *manager, toml_table_t *config[])
g_dbus_proxy_new_for_bus(G_BUS_TYPE_SYSTEM, g_dbus_proxy_new_for_bus(G_BUS_TYPE_SYSTEM,
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
NULL, SD_NAME, SD_PATH, SD_INTERFACE, NULL, NULL,
(GAsyncReadyCallback)on_proxy_acquired, manager); SD_NAME,
SD_PATH,
SD_INTERFACE,
NULL,
(GAsyncReadyCallback)on_proxy_acquired,
manager);
} }
void suspend_destroy(struct EG25Manager *manager) void suspend_destroy(struct EG25Manager *manager)

View File

@@ -8,7 +8,7 @@
#include "manager.h" #include "manager.h"
void suspend_init (struct EG25Manager *data, toml_table_t *config[]); void suspend_init(struct EG25Manager *data, toml_table_t *config[]);
void suspend_destroy (struct EG25Manager *data); void suspend_destroy(struct EG25Manager *data);
void suspend_inhibit (struct EG25Manager *data, gboolean inhibit, gboolean block); void suspend_inhibit(struct EG25Manager *data, gboolean inhibit, gboolean block);

1115
src/toml.c

File diff suppressed because it is too large Load Diff

View File

@@ -25,10 +25,8 @@
#ifndef TOML_H #ifndef TOML_H
#define TOML_H #define TOML_H
#include <stdio.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h>
#ifdef __cplusplus #ifdef __cplusplus
#define TOML_EXTERN extern "C" #define TOML_EXTERN extern "C"
@@ -44,24 +42,21 @@ typedef struct toml_datum_t toml_datum_t;
/* Parse a file. Return a table on success, or 0 otherwise. /* Parse a file. Return a table on success, or 0 otherwise.
* Caller must toml_free(the-return-value) after use. * Caller must toml_free(the-return-value) after use.
*/ */
TOML_EXTERN toml_table_t* toml_parse_file(FILE* fp, TOML_EXTERN toml_table_t *toml_parse_file(FILE *fp, char *errbuf, int errbufsz);
char* errbuf,
int errbufsz);
/* Parse a string containing the full config. /* Parse a string containing the full config.
* Return a table on success, or 0 otherwise. * Return a table on success, or 0 otherwise.
* Caller must toml_free(the-return-value) after use. * Caller must toml_free(the-return-value) after use.
*/ */
TOML_EXTERN toml_table_t* toml_parse(char* conf, /* NUL terminated, please. */ TOML_EXTERN toml_table_t *toml_parse(char *conf, /* NUL terminated, please. */
char* errbuf, char *errbuf,
int errbufsz); int errbufsz);
/* Free the table returned by toml_parse() or toml_parse_file(). Once /* Free the table returned by toml_parse() or toml_parse_file(). Once
* this function is called, any handles accessed through this tab * this function is called, any handles accessed through this tab
* directly or indirectly are no longer valid. * directly or indirectly are no longer valid.
*/ */
TOML_EXTERN void toml_free(toml_table_t* tab); TOML_EXTERN void toml_free(toml_table_t *tab);
/* Timestamp types. The year, month, day, hour, minute, second, z /* Timestamp types. The year, month, day, hour, minute, second, z
* fields may be NULL if they are not relevant. e.g. In a DATE * fields may be NULL if they are not relevant. e.g. In a DATE
@@ -75,18 +70,17 @@ struct toml_timestamp_t {
} __buffer; } __buffer;
int *year, *month, *day; int *year, *month, *day;
int *hour, *minute, *second, *millisec; int *hour, *minute, *second, *millisec;
char* z; char *z;
}; };
/*----------------------------------------------------------------- /*-----------------------------------------------------------------
* Enhanced access methods * Enhanced access methods
*/ */
struct toml_datum_t { struct toml_datum_t {
int ok; int ok;
union { union {
toml_timestamp_t* ts; /* ts must be freed after use */ toml_timestamp_t *ts; /* ts must be freed after use */
char* s; /* string value. s must be freed after use */ char *s; /* string value. s must be freed after use */
int b; /* bool value */ int b; /* bool value */
int64_t i; /* int value */ int64_t i; /* int value */
double d; /* double value */ double d; /* double value */
@@ -95,81 +89,76 @@ struct toml_datum_t {
/* on arrays: */ /* on arrays: */
/* ... retrieve size of array. */ /* ... retrieve size of array. */
TOML_EXTERN int toml_array_nelem(const toml_array_t* arr); TOML_EXTERN int toml_array_nelem(const toml_array_t *arr);
/* ... retrieve values using index. */ /* ... retrieve values using index. */
TOML_EXTERN toml_datum_t toml_string_at(const toml_array_t* arr, int idx); TOML_EXTERN toml_datum_t toml_string_at(const toml_array_t *arr, int idx);
TOML_EXTERN toml_datum_t toml_bool_at(const toml_array_t* arr, int idx); TOML_EXTERN toml_datum_t toml_bool_at(const toml_array_t *arr, int idx);
TOML_EXTERN toml_datum_t toml_int_at(const toml_array_t* arr, int idx); TOML_EXTERN toml_datum_t toml_int_at(const toml_array_t *arr, int idx);
TOML_EXTERN toml_datum_t toml_double_at(const toml_array_t* arr, int idx); TOML_EXTERN toml_datum_t toml_double_at(const toml_array_t *arr, int idx);
TOML_EXTERN toml_datum_t toml_timestamp_at(const toml_array_t* arr, int idx); TOML_EXTERN toml_datum_t toml_timestamp_at(const toml_array_t *arr, int idx);
/* ... retrieve array or table using index. */ /* ... retrieve array or table using index. */
TOML_EXTERN toml_array_t* toml_array_at(const toml_array_t* arr, int idx); TOML_EXTERN toml_array_t *toml_array_at(const toml_array_t *arr, int idx);
TOML_EXTERN toml_table_t* toml_table_at(const toml_array_t* arr, int idx); TOML_EXTERN toml_table_t *toml_table_at(const toml_array_t *arr, int idx);
/* on tables: */ /* on tables: */
/* ... retrieve the key in table at keyidx. Return 0 if out of range. */ /* ... retrieve the key in table at keyidx. Return 0 if out of range. */
TOML_EXTERN const char* toml_key_in(const toml_table_t* tab, int keyidx); TOML_EXTERN const char *toml_key_in(const toml_table_t *tab, int keyidx);
/* ... retrieve values using key. */ /* ... retrieve values using key. */
TOML_EXTERN toml_datum_t toml_string_in(const toml_table_t* arr, const char* key); TOML_EXTERN toml_datum_t toml_string_in(const toml_table_t *arr, const char *key);
TOML_EXTERN toml_datum_t toml_bool_in(const toml_table_t* arr, const char* key); TOML_EXTERN toml_datum_t toml_bool_in(const toml_table_t *arr, const char *key);
TOML_EXTERN toml_datum_t toml_int_in(const toml_table_t* arr, const char* key); TOML_EXTERN toml_datum_t toml_int_in(const toml_table_t *arr, const char *key);
TOML_EXTERN toml_datum_t toml_double_in(const toml_table_t* arr, const char* key); TOML_EXTERN toml_datum_t toml_double_in(const toml_table_t *arr, const char *key);
TOML_EXTERN toml_datum_t toml_timestamp_in(const toml_table_t* arr, const char* key); TOML_EXTERN toml_datum_t toml_timestamp_in(const toml_table_t *arr, const char *key);
/* .. retrieve array or table using key. */ /* .. retrieve array or table using key. */
TOML_EXTERN toml_array_t* toml_array_in(const toml_table_t* tab, TOML_EXTERN toml_array_t *toml_array_in(const toml_table_t *tab, const char *key);
const char* key); TOML_EXTERN toml_table_t *toml_table_in(const toml_table_t *tab, const char *key);
TOML_EXTERN toml_table_t* toml_table_in(const toml_table_t* tab,
const char* key);
/*----------------------------------------------------------------- /*-----------------------------------------------------------------
* lesser used * lesser used
*/ */
/* Return the array kind: 't'able, 'a'rray, 'v'alue */ /* Return the array kind: 't'able, 'a'rray, 'v'alue */
TOML_EXTERN char toml_array_kind(const toml_array_t* arr); TOML_EXTERN char toml_array_kind(const toml_array_t *arr);
/* For array kind 'v'alue, return the type of values /* For array kind 'v'alue, return the type of values
i:int, d:double, b:bool, s:string, t:time, D:date, T:timestamp i:int, d:double, b:bool, s:string, t:time, D:date, T:timestamp
0 if unknown 0 if unknown
*/ */
TOML_EXTERN char toml_array_type(const toml_array_t* arr); TOML_EXTERN char toml_array_type(const toml_array_t *arr);
/* Return the key of an array */ /* Return the key of an array */
TOML_EXTERN const char* toml_array_key(const toml_array_t* arr); TOML_EXTERN const char *toml_array_key(const toml_array_t *arr);
/* Return the number of key-values in a table */ /* Return the number of key-values in a table */
TOML_EXTERN int toml_table_nkval(const toml_table_t* tab); TOML_EXTERN int toml_table_nkval(const toml_table_t *tab);
/* Return the number of arrays in a table */ /* Return the number of arrays in a table */
TOML_EXTERN int toml_table_narr(const toml_table_t* tab); TOML_EXTERN int toml_table_narr(const toml_table_t *tab);
/* Return the number of sub-tables in a table */ /* Return the number of sub-tables in a table */
TOML_EXTERN int toml_table_ntab(const toml_table_t* tab); TOML_EXTERN int toml_table_ntab(const toml_table_t *tab);
/* Return the key of a table*/ /* Return the key of a table*/
TOML_EXTERN const char* toml_table_key(const toml_table_t* tab); TOML_EXTERN const char *toml_table_key(const toml_table_t *tab);
/*-------------------------------------------------------------- /*--------------------------------------------------------------
* misc * misc
*/ */
TOML_EXTERN int toml_utf8_to_ucs(const char* orig, int len, int64_t* ret); TOML_EXTERN int toml_utf8_to_ucs(const char *orig, int len, int64_t *ret);
TOML_EXTERN int toml_ucs_to_utf8(int64_t code, char buf[6]); TOML_EXTERN int toml_ucs_to_utf8(int64_t code, char buf[6]);
TOML_EXTERN void toml_set_memutil(void* (*xxmalloc)(size_t), TOML_EXTERN void toml_set_memutil(void *(*xxmalloc)(size_t), void (*xxfree)(void *));
void (*xxfree)(void*));
/*-------------------------------------------------------------- /*--------------------------------------------------------------
* deprecated * deprecated
*/ */
/* A raw value, must be processed by toml_rto* before using. */ /* A raw value, must be processed by toml_rto* before using. */
typedef const char* toml_raw_t; typedef const char *toml_raw_t;
TOML_EXTERN toml_raw_t toml_raw_in(const toml_table_t* tab, const char* key); TOML_EXTERN toml_raw_t toml_raw_in(const toml_table_t *tab, const char *key);
TOML_EXTERN toml_raw_t toml_raw_at(const toml_array_t* arr, int idx); TOML_EXTERN toml_raw_t toml_raw_at(const toml_array_t *arr, int idx);
TOML_EXTERN int toml_rtos(toml_raw_t s, char** ret); TOML_EXTERN int toml_rtos(toml_raw_t s, char **ret);
TOML_EXTERN int toml_rtob(toml_raw_t s, int* ret); TOML_EXTERN int toml_rtob(toml_raw_t s, int *ret);
TOML_EXTERN int toml_rtoi(toml_raw_t s, int64_t* ret); TOML_EXTERN int toml_rtoi(toml_raw_t s, int64_t *ret);
TOML_EXTERN int toml_rtod(toml_raw_t s, double* ret); TOML_EXTERN int toml_rtod(toml_raw_t s, double *ret);
TOML_EXTERN int toml_rtod_ex(toml_raw_t s, double* ret, char* buf, int buflen); TOML_EXTERN int toml_rtod_ex(toml_raw_t s, double *ret, char *buf, int buflen);
TOML_EXTERN int toml_rtots(toml_raw_t s, toml_timestamp_t* ret); TOML_EXTERN int toml_rtots(toml_raw_t s, toml_timestamp_t *ret);
#endif /* TOML_H */ #endif /* TOML_H */

View File

@@ -17,8 +17,7 @@ static void udev_event_cb(GUdevClient *client, gchar *action, GUdevDevice *devic
/* /*
* Act only if the device is the one identified as a modem by MM/ofono * Act only if the device is the one identified as a modem by MM/ofono
*/ */
if (!manager->modem_usb_id || if (!manager->modem_usb_id || strcmp(g_udev_device_get_name(device), manager->modem_usb_id) != 0) {
strcmp(g_udev_device_get_name(device), manager->modem_usb_id) != 0) {
return; return;
} }
@@ -42,10 +41,8 @@ static void udev_event_cb(GUdevClient *client, gchar *action, GUdevDevice *devic
manager->modem_state = EG25_STATE_UPDATING; manager->modem_state = EG25_STATE_UPDATING;
} }
if (strcmp(action, "unbind") != 0 || if (strcmp(action, "unbind") != 0 || manager->modem_state == EG25_STATE_UPDATING ||
manager->modem_state == EG25_STATE_UPDATING || manager->modem_state == EG25_STATE_RESETTING || manager->complete_reset_timer != 0 ||
manager->modem_state == EG25_STATE_RESETTING ||
manager->complete_reset_timer != 0 ||
manager->schedule_reset_timer != 0) { manager->schedule_reset_timer != 0) {
return; return;
} }
@@ -54,9 +51,9 @@ static void udev_event_cb(GUdevClient *client, gchar *action, GUdevDevice *devic
manager->schedule_reset_timer = g_timeout_add_seconds(3, G_SOURCE_FUNC(modem_reset), manager); manager->schedule_reset_timer = g_timeout_add_seconds(3, G_SOURCE_FUNC(modem_reset), manager);
} }
void udev_init (struct EG25Manager *manager, toml_table_t *config[]) void udev_init(struct EG25Manager *manager, toml_table_t *config[])
{ {
const char * const subsystems[] = { "usb", NULL }; const char *const subsystems[] = {"usb", NULL};
manager->udev = g_udev_client_new(subsystems); manager->udev = g_udev_client_new(subsystems);
g_signal_connect(manager->udev, "uevent", G_CALLBACK(udev_event_cb), manager); g_signal_connect(manager->udev, "uevent", G_CALLBACK(udev_event_cb), manager);
@@ -64,7 +61,7 @@ void udev_init (struct EG25Manager *manager, toml_table_t *config[])
return; return;
} }
void udev_destroy (struct EG25Manager *manager) void udev_destroy(struct EG25Manager *manager)
{ {
if (manager->udev) { if (manager->udev) {
g_object_unref(manager->udev); g_object_unref(manager->udev);

View File

@@ -8,5 +8,5 @@
#include "manager.h" #include "manager.h"
void udev_init (struct EG25Manager *data, toml_table_t *config[]); void udev_init(struct EG25Manager *data, toml_table_t *config[]);
void udev_destroy (struct EG25Manager *data); void udev_destroy(struct EG25Manager *data);