mirror of
https://gitlab.com/mobian1/eg25-manager.git
synced 2025-08-29 07:12:08 +02:00
src: format using clang-format
This commit is contained in:
32
src/at.c
32
src/at.c
@@ -6,9 +6,9 @@
|
||||
|
||||
#include "at.h"
|
||||
#include "config.h"
|
||||
#include "suspend.h"
|
||||
#include "gpio.h"
|
||||
#include "gnss.h"
|
||||
#include "gpio.h"
|
||||
#include "suspend.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
@@ -86,16 +86,22 @@ gboolean at_send_command(struct EG25Manager *manager)
|
||||
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);
|
||||
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) {
|
||||
g_warning("snprintf(3) failed");
|
||||
at_next_command(manager);
|
||||
return FALSE;
|
||||
}
|
||||
else if (len >= sizeof(command)) {
|
||||
} else if (len >= sizeof(command)) {
|
||||
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);
|
||||
return FALSE;
|
||||
}
|
||||
@@ -117,8 +123,7 @@ gboolean at_send_command(struct EG25Manager *manager)
|
||||
at_next_command(manager);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
len -= ret;
|
||||
pos += ret;
|
||||
}
|
||||
@@ -176,8 +181,7 @@ static void retry_at_command(struct EG25Manager *manager)
|
||||
}
|
||||
}
|
||||
|
||||
void at_process_result(struct EG25Manager *manager,
|
||||
const char *response)
|
||||
void at_process_result(struct EG25Manager *manager, const char *response)
|
||||
{
|
||||
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 *value,
|
||||
const char *expected,
|
||||
void (*callback)
|
||||
(struct EG25Manager *manager,
|
||||
const char *response))
|
||||
void (*callback)(struct EG25Manager *manager, const char *response))
|
||||
{
|
||||
struct AtCommand *at_cmd = calloc(1, sizeof(struct AtCommand));
|
||||
|
||||
@@ -227,9 +229,7 @@ int at_append_command(struct EG25Manager *manager,
|
||||
|
||||
#define READ_BUFFER_SIZE 256
|
||||
|
||||
static gboolean modem_response(gint fd,
|
||||
GIOCondition event,
|
||||
gpointer data)
|
||||
static gboolean modem_response(gint fd, GIOCondition event, gpointer data)
|
||||
{
|
||||
struct EG25Manager *manager = data;
|
||||
char response[READ_BUFFER_SIZE * 4 + 1];
|
||||
|
7
src/at.h
7
src/at.h
@@ -20,8 +20,7 @@ typedef struct AtCommand {
|
||||
int at_init(struct EG25Manager *manager, toml_table_t *config[]);
|
||||
void at_destroy(struct EG25Manager *manager);
|
||||
|
||||
void at_process_result(struct EG25Manager *manager,
|
||||
const char *response);
|
||||
void at_process_result(struct EG25Manager *manager, const char *response);
|
||||
void at_next_command(struct EG25Manager *manager);
|
||||
gboolean at_send_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 *value,
|
||||
const char *expected,
|
||||
void (*callback)
|
||||
(struct EG25Manager *manager,
|
||||
const char *response));
|
||||
void (*callback)(struct EG25Manager *manager, const char *response));
|
||||
|
||||
void at_sequence_configure(struct EG25Manager *manager);
|
||||
void at_sequence_suspend(struct EG25Manager *manager);
|
||||
|
104
src/gnss.c
104
src/gnss.c
@@ -4,14 +4,14 @@
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gnss.h"
|
||||
#include "manager.h"
|
||||
#include "at.h"
|
||||
#include "config.h"
|
||||
#include "manager.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/sendfile.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define BUFFER_SIZE 256
|
||||
#define UPLOAD_DELAY_US 25000
|
||||
@@ -29,17 +29,16 @@ gboolean gnss_upload_assistance_data(struct EG25Manager *manager)
|
||||
|
||||
if (manager->gnss_assistance_step < EG25_GNSS_STEP_LAST) {
|
||||
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;
|
||||
}
|
||||
|
||||
/* data upload isn't necessary to bring the modem onine, so we should wait
|
||||
* until we've finished the rest of our configuration */
|
||||
if (!manager->modem_iface ||
|
||||
manager->modem_state < EG25_STATE_CONFIGURED ||
|
||||
if (!manager->modem_iface || manager->modem_state < EG25_STATE_CONFIGURED ||
|
||||
manager->modem_state > EG25_STATE_CONNECTED) {
|
||||
g_message ("Rescheduling upload since modem isn't online yet, in %ds",
|
||||
RESCHEDULE_IN_SECS);
|
||||
g_message("Rescheduling upload since modem isn't online yet, in %ds", RESCHEDULE_IN_SECS);
|
||||
manager->gnss_assistance_step = EG25_GNSS_STEP_LAST;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -96,8 +95,7 @@ void gnss_init(struct EG25Manager *manager, toml_table_t *config[])
|
||||
|
||||
/* Initialize state and schedule upload */
|
||||
manager->gnss_assistance_step = EG25_GNSS_STEP_LAST;
|
||||
g_timeout_add_seconds(RESCHEDULE_IN_SECS,
|
||||
G_SOURCE_FUNC(gnss_upload_assistance_data), manager);
|
||||
g_timeout_add_seconds(RESCHEDULE_IN_SECS, G_SOURCE_FUNC(gnss_upload_assistance_data), manager);
|
||||
}
|
||||
|
||||
void gnss_destroy(struct EG25Manager *manager)
|
||||
@@ -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_NMEA;
|
||||
sources &= ~MM_MODEM_LOCATION_SOURCE_GPS_UNMANAGED;
|
||||
mm_modem_location_setup_sync(manager->mm_location, sources,
|
||||
signals_location, NULL, &error);
|
||||
mm_modem_location_setup_sync(manager->mm_location, sources, signals_location, NULL, &error);
|
||||
if (error != NULL) {
|
||||
g_warning("Unable to disable GNSS engine through ModemManager: %s",
|
||||
error->message);
|
||||
g_warning("Unable to disable GNSS engine through ModemManager: %s", error->message);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void disable_at_gnss_cb(struct EG25Manager *manager,
|
||||
const char *response)
|
||||
static void disable_at_gnss_cb(struct EG25Manager *manager, const char *response)
|
||||
{
|
||||
/* Clear QGPSEND AT command and process next */
|
||||
at_next_command(manager);
|
||||
@@ -210,16 +205,14 @@ static void fetch_assistance_data(struct EG25Manager *manager)
|
||||
/* Fetch assistance data with curl */
|
||||
tmp_file = fdopen(manager->gnss_assistance_fd, "wb+");
|
||||
if (tmp_file == NULL) {
|
||||
g_critical("Unable to open file to save assistance data: %s",
|
||||
g_strerror(errno));
|
||||
g_critical("Unable to open file to save assistance data: %s", g_strerror(errno));
|
||||
goto bail;
|
||||
}
|
||||
|
||||
lseek(manager->gnss_assistance_fd, 0, SEEK_SET);
|
||||
if (ftruncate(manager->gnss_assistance_fd, 0) < 0)
|
||||
g_warning("Unable to truncate file, assistance data might be invalid!");
|
||||
url = g_strconcat(manager->gnss_assistance_url, "/",
|
||||
manager->gnss_assistance_file, NULL);
|
||||
url = g_strconcat(manager->gnss_assistance_url, "/", manager->gnss_assistance_file, NULL);
|
||||
|
||||
curl = curl_easy_init();
|
||||
if (!curl) {
|
||||
@@ -237,7 +230,8 @@ static void fetch_assistance_data(struct EG25Manager *manager)
|
||||
response = curl_easy_perform(curl);
|
||||
if (response != CURLE_OK) {
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -268,8 +262,7 @@ bail:
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
static void init_assistance_data_upload_ready(struct EG25Manager *manager,
|
||||
const char *response)
|
||||
static void init_assistance_data_upload_ready(struct EG25Manager *manager, const char *response)
|
||||
{
|
||||
/* Search for 'CONNECT' in response to start upload */
|
||||
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,
|
||||
const char *response)
|
||||
static void init_assistance_data_upload_start(struct EG25Manager *manager, const char *response)
|
||||
{
|
||||
gchar value[BUFFER_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);
|
||||
|
||||
/* Start upload */
|
||||
g_snprintf(value, BUFFER_SIZE, "\"RAM:%s\",%ld,%d",
|
||||
manager->gnss_assistance_file, size, UPLOAD_TIMEOUT_S);
|
||||
g_snprintf(value,
|
||||
BUFFER_SIZE,
|
||||
"\"RAM:%s\",%ld,%d",
|
||||
manager->gnss_assistance_file,
|
||||
size,
|
||||
UPLOAD_TIMEOUT_S);
|
||||
g_message("Initiate GNSS assistance data upload: %s", value);
|
||||
at_append_command(manager, "QFUPL", NULL, value, NULL,
|
||||
init_assistance_data_upload_ready);
|
||||
at_append_command(manager, "QFUPL", NULL, value, NULL, init_assistance_data_upload_ready);
|
||||
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
|
||||
* and start uploading the latest one to RAM.
|
||||
*/
|
||||
at_append_command(manager, "QFDEL", NULL, "\"RAM:*\"\r\n",
|
||||
NULL, init_assistance_data_upload_start);
|
||||
at_append_command(manager, "QFDEL", NULL, "\"RAM:*\"\r\n", NULL, init_assistance_data_upload_start);
|
||||
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,
|
||||
const char *response)
|
||||
static void finish_assistance_data_upload_cb(struct EG25Manager *manager, const char *response)
|
||||
{
|
||||
/* Process 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();
|
||||
timestring = g_date_time_format(datetime, "0,\"%Y/%m/%d,%H:%M:%S\"");
|
||||
g_message("Setting GNSS assistance UTC clock to: %s", timestring);
|
||||
at_append_command(manager, "QGPSXTRATIME", NULL, timestring, NULL,
|
||||
at_process_result);
|
||||
at_append_command(manager, "QGPSXTRATIME", NULL, timestring, NULL, at_process_result);
|
||||
|
||||
/* Configure GNSS engine to use uploaded GNSS assistance data */
|
||||
g_snprintf(value, BUFFER_SIZE, "\"RAM:%s\"",
|
||||
manager->gnss_assistance_file);
|
||||
g_snprintf(value, BUFFER_SIZE, "\"RAM:%s\"", manager->gnss_assistance_file);
|
||||
g_message("Setting GNSS assistance file to: %s", value);
|
||||
at_append_command(manager, "QGPSXTRADATA", NULL, value, NULL,
|
||||
finish_assistance_data_upload_cb);
|
||||
at_append_command(manager, "QGPSXTRADATA", NULL, value, NULL, finish_assistance_data_upload_cb);
|
||||
at_send_command(manager);
|
||||
}
|
||||
|
||||
@@ -407,11 +397,9 @@ static void enable_mm_gnss(struct EG25Manager *manager)
|
||||
if (manager->gnss_sources & EG25_GNSS_SOURCE_RAW)
|
||||
sources |= MM_MODEM_LOCATION_SOURCE_GPS_RAW;
|
||||
|
||||
mm_modem_location_setup_sync(manager->mm_location, sources,
|
||||
signal_location, NULL, &error);
|
||||
mm_modem_location_setup_sync(manager->mm_location, sources, signal_location, NULL, &error);
|
||||
if (error != NULL)
|
||||
g_warning("Unable to enable GNSS engine through ModemManager: %s",
|
||||
error->message);
|
||||
g_warning("Unable to enable GNSS engine through ModemManager: %s", error->message);
|
||||
}
|
||||
#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)
|
||||
{
|
||||
if (manager->gnss_sources & EG25_GNSS_SOURCE_QGPS) {
|
||||
at_append_command(manager, "QGPS", NULL, "1", NULL,
|
||||
enable_at_gnss_cb);
|
||||
at_append_command(manager, "QGPS", NULL, "1", NULL, enable_at_gnss_cb);
|
||||
at_send_command(manager);
|
||||
return;
|
||||
}
|
||||
@@ -446,7 +433,8 @@ void gnss_step(struct EG25Manager *manager)
|
||||
case EG25_GNSS_STEP_FETCH_ASSISTANCE_DATA:
|
||||
g_message("GNSS assistance upload step (%d/%d): "
|
||||
"fetching assistance data",
|
||||
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST);
|
||||
manager->gnss_assistance_step,
|
||||
EG25_GNSS_STEP_LAST);
|
||||
fetch_assistance_data(manager);
|
||||
break;
|
||||
|
||||
@@ -455,7 +443,8 @@ void gnss_step(struct EG25Manager *manager)
|
||||
if (manager->modem_iface == MODEM_IFACE_MODEMMANAGER) {
|
||||
g_message("GNSS assistance upload step (%d/%d): "
|
||||
"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);
|
||||
}
|
||||
manager->gnss_assistance_step++;
|
||||
@@ -465,26 +454,30 @@ void gnss_step(struct EG25Manager *manager)
|
||||
case EG25_GNSS_STEP_AT_GNSS_DISABLE:
|
||||
g_message("GNSS assistance upload step (%d/%d): "
|
||||
"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);
|
||||
break;
|
||||
|
||||
case EG25_GNSS_STEP_INIT_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);
|
||||
break;
|
||||
|
||||
case EG25_GNSS_STEP_UPLOAD:
|
||||
g_message("GNSS assistance upload step (%d/%d): "
|
||||
"uploading assistance data",
|
||||
manager->gnss_assistance_step, EG25_GNSS_STEP_LAST);
|
||||
manager->gnss_assistance_step,
|
||||
EG25_GNSS_STEP_LAST);
|
||||
upload_assistance_data(manager);
|
||||
break;
|
||||
|
||||
case EG25_GNSS_STEP_FINISH_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);
|
||||
break;
|
||||
|
||||
@@ -493,7 +486,8 @@ void gnss_step(struct EG25Manager *manager)
|
||||
if (manager->modem_iface == MODEM_IFACE_MODEMMANAGER) {
|
||||
g_message("GNSS assistance upload step (%d/%d): "
|
||||
"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);
|
||||
}
|
||||
manager->gnss_assistance_step++;
|
||||
@@ -503,13 +497,15 @@ void gnss_step(struct EG25Manager *manager)
|
||||
case EG25_GNSS_STEP_AT_QGPS_ENABLE:
|
||||
g_message("GNSS assistance upload step (%d/%d): "
|
||||
"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);
|
||||
break;
|
||||
|
||||
case EG25_GNSS_STEP_LAST:
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@@ -6,9 +6,9 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
#include "manager.h"
|
||||
|
||||
|
52
src/gpio.c
52
src/gpio.c
@@ -4,12 +4,12 @@
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gpio.h"
|
||||
#include "config.h"
|
||||
|
||||
#include <unistd.h>
|
||||
#include <dirent.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* Those defines are used for legacy config files only */
|
||||
#define GPIO_CHIP1_LABEL "1c20800.pinctrl"
|
||||
@@ -42,7 +42,8 @@ static char *gpio_in_names[] = {
|
||||
"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;
|
||||
unsigned int offset;
|
||||
|
||||
@@ -56,7 +57,8 @@ enum gpiod_line_value gpio_line_get_value(struct EG25Manager *manager, int line)
|
||||
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;
|
||||
int ret;
|
||||
|
||||
@@ -65,8 +67,7 @@ int gpio_line_set_value(struct EG25Manager *manager, int line, enum gpiod_line_v
|
||||
if (ret) {
|
||||
g_warning("gpio: couldn't set value %d on line %d", value, line);
|
||||
return -1;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
manager->gpio_out_value[line] = value;
|
||||
return 0;
|
||||
}
|
||||
@@ -159,7 +160,11 @@ int gpio_sequence_sleep(struct EG25Manager *manager)
|
||||
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_settings *settings;
|
||||
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)
|
||||
return 0;
|
||||
|
||||
if ((lstat(path, &sb) == 0) && (!S_ISLNK(sb.st_mode)) &&
|
||||
gpiod_is_gpiochip_device(path))
|
||||
if ((lstat(path, &sb) == 0) && (!S_ISLNK(sb.st_mode)) && gpiod_is_gpiochip_device(path))
|
||||
ret = 1;
|
||||
|
||||
free(path);
|
||||
@@ -273,6 +277,7 @@ struct gpiod_chip *gpio_chip_open_by_label(const char *label)
|
||||
clabel = gpiod_chip_info_get_label(cinfo);
|
||||
|
||||
if (strcmp(label, clabel) == 0) {
|
||||
free(paths);
|
||||
return chip;
|
||||
}
|
||||
|
||||
@@ -280,10 +285,14 @@ clean_chip_open:
|
||||
gpiod_chip_close(chip);
|
||||
}
|
||||
|
||||
if (paths)
|
||||
free(paths);
|
||||
|
||||
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_info *info;
|
||||
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
|
||||
* 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;
|
||||
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))
|
||||
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])
|
||||
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))
|
||||
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])
|
||||
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;
|
||||
}
|
||||
|
||||
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])
|
||||
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;
|
||||
}
|
||||
|
||||
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])
|
||||
g_error("Unable to get input GPIO %d", i);
|
||||
}
|
||||
|
@@ -4,19 +4,19 @@
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
#include "manager.h"
|
||||
#include "at.h"
|
||||
#include "config.h"
|
||||
#include "gpio.h"
|
||||
#include "manager.h"
|
||||
|
||||
#ifdef HAVE_MMGLIB
|
||||
#include "mm-iface.h"
|
||||
#endif
|
||||
|
||||
#include "gnss.h"
|
||||
#include "ofono-iface.h"
|
||||
#include "suspend.h"
|
||||
#include "udev.h"
|
||||
#include "gnss.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
@@ -168,7 +168,9 @@ static gboolean modem_at_reset_done(struct EG25Manager* manager)
|
||||
g_message("AT reset failed, falling back to GPIO reset");
|
||||
|
||||
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;
|
||||
}
|
||||
@@ -271,7 +273,9 @@ error:
|
||||
at_sequence_reset(manager);
|
||||
|
||||
// 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;
|
||||
}
|
||||
@@ -324,9 +328,11 @@ static toml_table_t *parse_config_file(char *config_file, gboolean force_default
|
||||
for (pos = 0; pos < compat->len; pos++) {
|
||||
g_autofree gchar *filename = NULL;
|
||||
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
|
||||
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) {
|
||||
g_message("Opening config file: %s", filename);
|
||||
|
@@ -41,7 +41,6 @@ typedef enum {
|
||||
EG25_GNSS_SOURCE_QGPS = 1 << 3,
|
||||
} EG25GNSSSource;
|
||||
|
||||
|
||||
enum EG25State {
|
||||
EG25_STATE_INIT = 0,
|
||||
EG25_STATE_POWERED, // Power-on sequence has been executed, but the modem isn't on yet
|
||||
|
@@ -78,7 +78,8 @@ static void interface_added_cb (struct EG25Manager *manager,
|
||||
|
||||
info = g_dbus_interface_get_info(interface);
|
||||
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)
|
||||
add_modem(manager, object);
|
||||
@@ -87,7 +88,6 @@ static void interface_added_cb (struct EG25Manager *manager,
|
||||
add_modem_location(manager, object);
|
||||
}
|
||||
|
||||
|
||||
static void interface_removed_cb(struct EG25Manager *manager,
|
||||
GDBusObject *object,
|
||||
GDBusInterface *interface)
|
||||
@@ -104,7 +104,6 @@ static void interface_removed_cb(struct EG25Manager *manager,
|
||||
manager->mm_modem = NULL;
|
||||
}
|
||||
|
||||
|
||||
static void add_mm_object(struct EG25Manager *manager, GDBusObject *object)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
static void add_mm_objects(struct EG25Manager *manager)
|
||||
{
|
||||
GList *objects, *node;
|
||||
@@ -128,14 +126,12 @@ static void add_mm_objects(struct EG25Manager *manager)
|
||||
g_list_free_full(objects, g_object_unref);
|
||||
}
|
||||
|
||||
|
||||
static void object_added_cb(struct EG25Manager *manager, GDBusObject *object)
|
||||
{
|
||||
g_message("ModemManager object `%s' added", g_dbus_object_get_object_path(object));
|
||||
add_mm_object(manager, object);
|
||||
}
|
||||
|
||||
|
||||
static void object_removed_cb(struct EG25Manager *manager, GDBusObject *object)
|
||||
{
|
||||
const gchar *path;
|
||||
@@ -146,7 +142,6 @@ static void object_removed_cb(struct EG25Manager *manager, GDBusObject *object)
|
||||
manager->mm_modem = NULL;
|
||||
}
|
||||
|
||||
|
||||
static void mm_manager_new_cb(GDBusConnection *connection,
|
||||
GAsyncResult *res,
|
||||
struct EG25Manager *manager)
|
||||
@@ -158,13 +153,21 @@ static void mm_manager_new_cb(GDBusConnection *connection,
|
||||
g_critical("Error creating ModemManager Manager: %s", error->message);
|
||||
|
||||
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),
|
||||
"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),
|
||||
"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),
|
||||
"object-removed", G_CALLBACK(object_removed_cb), manager);
|
||||
"object-removed",
|
||||
G_CALLBACK(object_removed_cb),
|
||||
manager);
|
||||
|
||||
add_mm_objects(manager);
|
||||
}
|
||||
@@ -177,13 +180,18 @@ static void mm_appeared_cb(GDBusConnection *connection,
|
||||
g_message("ModemManager appeared on D-Bus");
|
||||
|
||||
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;
|
||||
}
|
||||
manager->modem_iface = MODEM_IFACE_MODEMMANAGER;
|
||||
|
||||
mm_manager_new(connection, G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
|
||||
NULL, (GAsyncReadyCallback)mm_manager_new_cb, manager);
|
||||
mm_manager_new(connection,
|
||||
G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
|
||||
NULL,
|
||||
(GAsyncReadyCallback)mm_manager_new_cb,
|
||||
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,
|
||||
const gchar *name,
|
||||
struct EG25Manager *manager)
|
||||
static void mm_vanished_cb(GDBusConnection *connection, const gchar *name, struct EG25Manager *manager)
|
||||
{
|
||||
g_message("ModemManager vanished from D-Bus");
|
||||
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[])
|
||||
{
|
||||
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,
|
||||
(GBusNameAppearedCallback)mm_appeared_cb,
|
||||
(GBusNameVanishedCallback)mm_vanished_cb,
|
||||
manager, NULL);
|
||||
manager,
|
||||
NULL);
|
||||
}
|
||||
|
||||
void mm_iface_destroy(struct EG25Manager *manager)
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
static void modem_removed_cb(GDBOManager *manager_proxy,
|
||||
const gchar *path,
|
||||
struct EG25Manager *manager)
|
||||
static void modem_removed_cb(GDBOManager *manager_proxy, const gchar *path, struct EG25Manager *manager)
|
||||
{
|
||||
}
|
||||
|
||||
static void get_modems_cb(GDBOManager *manager_proxy,
|
||||
GAsyncResult *res,
|
||||
struct EG25Manager *manager)
|
||||
static void get_modems_cb(GDBOManager *manager_proxy, GAsyncResult *res, struct EG25Manager *manager)
|
||||
{
|
||||
gboolean ok;
|
||||
GVariant *modems;
|
||||
@@ -61,8 +57,7 @@ static void get_modems_cb(GDBOManager *manager_proxy,
|
||||
const gchar *path;
|
||||
GVariant *properties;
|
||||
|
||||
ok = gdbo_manager_call_get_modems_finish(manager_proxy, &modems,
|
||||
res, &error);
|
||||
ok = gdbo_manager_call_get_modems_finish(manager_proxy, &modems, res, &error);
|
||||
if (!ok) {
|
||||
g_warning("Error getting modems from ofono manager: %s", error->message);
|
||||
return;
|
||||
@@ -87,7 +82,9 @@ static void ofono_appeared_cb(GDBusConnection *connection,
|
||||
g_message("oFono appeared on D-Bus");
|
||||
|
||||
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;
|
||||
}
|
||||
/* now connect to oFono! */
|
||||
@@ -105,10 +102,8 @@ static void ofono_appeared_cb(GDBusConnection *connection,
|
||||
|
||||
manager->modem_iface = MODEM_IFACE_OFONO;
|
||||
|
||||
g_signal_connect(manager->ofono_manager, "modem-added",
|
||||
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-added", G_CALLBACK(modem_added_cb), manager);
|
||||
g_signal_connect(manager->ofono_manager, "modem-removed", G_CALLBACK(modem_removed_cb), manager);
|
||||
|
||||
gdbo_manager_call_get_modems(manager->ofono_manager,
|
||||
NULL,
|
||||
@@ -130,11 +125,13 @@ static void ofono_vanished_cb(GDBusConnection *connection,
|
||||
|
||||
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,
|
||||
(GBusNameAppearedCallback)ofono_appeared_cb,
|
||||
(GBusNameVanishedCallback)ofono_vanished_cb,
|
||||
manager, NULL);
|
||||
manager,
|
||||
NULL);
|
||||
}
|
||||
|
||||
void ofono_iface_destroy(struct EG25Manager *manager)
|
||||
|
@@ -50,8 +50,7 @@ static gboolean drop_inhibitor(struct EG25Manager *manager, gboolean block)
|
||||
manager->suspend_block_fd = -1;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (manager->suspend_delay_fd >= 0) {
|
||||
g_message("dropping systemd sleep delay inhibitor");
|
||||
close(manager->suspend_delay_fd);
|
||||
@@ -62,9 +61,7 @@ static gboolean drop_inhibitor(struct EG25Manager *manager, gboolean block)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void inhibit_done_delay(GObject *source,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
static void inhibit_done_delay(GObject *source, GAsyncResult *result, gpointer user_data)
|
||||
{
|
||||
GDBusProxy *suspend_proxy = G_DBUS_PROXY(source);
|
||||
struct EG25Manager *manager = user_data;
|
||||
@@ -72,8 +69,7 @@ static void inhibit_done_delay(GObject *source,
|
||||
GVariant *res;
|
||||
GUnixFDList *fd_list;
|
||||
|
||||
res = g_dbus_proxy_call_with_unix_fd_list_finish(suspend_proxy, &fd_list,
|
||||
result, &error);
|
||||
res = g_dbus_proxy_call_with_unix_fd_list_finish(suspend_proxy, &fd_list, result, &error);
|
||||
if (!res) {
|
||||
g_warning("inhibit failed: %s", error->message);
|
||||
} else {
|
||||
@@ -88,9 +84,7 @@ static void inhibit_done_delay(GObject *source,
|
||||
}
|
||||
}
|
||||
|
||||
static void inhibit_done_block(GObject *source,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
static void inhibit_done_block(GObject *source, GAsyncResult *result, gpointer user_data)
|
||||
{
|
||||
GDBusProxy *suspend_proxy = G_DBUS_PROXY(source);
|
||||
struct EG25Manager *manager = user_data;
|
||||
@@ -98,8 +92,7 @@ static void inhibit_done_block(GObject *source,
|
||||
GVariant *res;
|
||||
GUnixFDList *fd_list;
|
||||
|
||||
res = g_dbus_proxy_call_with_unix_fd_list_finish(suspend_proxy, &fd_list,
|
||||
result, &error);
|
||||
res = g_dbus_proxy_call_with_unix_fd_list_finish(suspend_proxy, &fd_list, result, &error);
|
||||
if (!res) {
|
||||
g_warning("inhibit failed: %s", error->message);
|
||||
} else {
|
||||
@@ -136,30 +129,45 @@ static void take_inhibitor(struct EG25Manager *manager, gboolean block)
|
||||
if (manager->suspend_block_fd != -1)
|
||||
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",
|
||||
"block");
|
||||
|
||||
g_message("taking systemd sleep inhibitor (blocking)");
|
||||
g_dbus_proxy_call_with_unix_fd_list(manager->suspend_proxy, "Inhibit",
|
||||
variant_arg, 0, G_MAXINT, NULL, NULL,
|
||||
inhibit_done_block, manager);
|
||||
g_dbus_proxy_call_with_unix_fd_list(manager->suspend_proxy,
|
||||
"Inhibit",
|
||||
variant_arg,
|
||||
0,
|
||||
G_MAXINT,
|
||||
NULL,
|
||||
NULL,
|
||||
inhibit_done_block,
|
||||
manager);
|
||||
manager->modem_boot_timer = g_timeout_add_seconds(manager->modem_boot_timeout,
|
||||
G_SOURCE_FUNC(modem_fully_booted),
|
||||
manager);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (manager->suspend_delay_fd != -1)
|
||||
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",
|
||||
"delay");
|
||||
|
||||
g_message("taking systemd sleep inhibitor");
|
||||
g_dbus_proxy_call_with_unix_fd_list(manager->suspend_proxy, "Inhibit",
|
||||
variant_arg, 0, G_MAXINT, NULL, NULL,
|
||||
inhibit_done_delay, manager);
|
||||
g_dbus_proxy_call_with_unix_fd_list(manager->suspend_proxy,
|
||||
"Inhibit",
|
||||
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,
|
||||
GParamSpec *pspec,
|
||||
gpointer user_data)
|
||||
static void name_owner_cb(GObject *object, GParamSpec *pspec, gpointer user_data)
|
||||
{
|
||||
GDBusProxy *proxy = G_DBUS_PROXY(object);
|
||||
struct EG25Manager *manager = user_data;
|
||||
@@ -227,9 +233,7 @@ static void name_owner_cb(GObject *object,
|
||||
}
|
||||
}
|
||||
|
||||
static void on_proxy_acquired(GObject *object,
|
||||
GAsyncResult *res,
|
||||
struct EG25Manager *manager)
|
||||
static void on_proxy_acquired(GObject *object, GAsyncResult *res, struct EG25Manager *manager)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
char *owner;
|
||||
@@ -240,10 +244,8 @@ static void on_proxy_acquired(GObject *object,
|
||||
return;
|
||||
}
|
||||
|
||||
g_signal_connect(manager->suspend_proxy, "notify::g-name-owner",
|
||||
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, "notify::g-name-owner", G_CALLBACK(name_owner_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);
|
||||
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_FLAGS_DO_NOT_AUTO_START |
|
||||
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
|
||||
NULL, SD_NAME, SD_PATH, SD_INTERFACE, NULL,
|
||||
(GAsyncReadyCallback)on_proxy_acquired, manager);
|
||||
NULL,
|
||||
SD_NAME,
|
||||
SD_PATH,
|
||||
SD_INTERFACE,
|
||||
NULL,
|
||||
(GAsyncReadyCallback)on_proxy_acquired,
|
||||
manager);
|
||||
}
|
||||
|
||||
void suspend_destroy(struct EG25Manager *manager)
|
||||
|
677
src/toml.c
677
src/toml.c
File diff suppressed because it is too large
Load Diff
21
src/toml.h
21
src/toml.h
@@ -25,10 +25,8 @@
|
||||
#ifndef TOML_H
|
||||
#define TOML_H
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define TOML_EXTERN extern "C"
|
||||
@@ -44,9 +42,7 @@ typedef struct toml_datum_t toml_datum_t;
|
||||
/* Parse a file. Return a table on success, or 0 otherwise.
|
||||
* Caller must toml_free(the-return-value) after use.
|
||||
*/
|
||||
TOML_EXTERN toml_table_t* toml_parse_file(FILE* fp,
|
||||
char* errbuf,
|
||||
int errbufsz);
|
||||
TOML_EXTERN toml_table_t *toml_parse_file(FILE *fp, char *errbuf, int errbufsz);
|
||||
|
||||
/* Parse a string containing the full config.
|
||||
* Return a table on success, or 0 otherwise.
|
||||
@@ -62,7 +58,6 @@ TOML_EXTERN toml_table_t* toml_parse(char* conf, /* NUL terminated, please. */
|
||||
*/
|
||||
TOML_EXTERN void toml_free(toml_table_t *tab);
|
||||
|
||||
|
||||
/* Timestamp types. The year, month, day, hour, minute, second, z
|
||||
* fields may be NULL if they are not relevant. e.g. In a DATE
|
||||
* type, the hour, minute, second and z fields will be NULLs.
|
||||
@@ -78,7 +73,6 @@ struct toml_timestamp_t {
|
||||
char *z;
|
||||
};
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------
|
||||
* Enhanced access methods
|
||||
*/
|
||||
@@ -116,10 +110,8 @@ 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_timestamp_in(const toml_table_t *arr, const char *key);
|
||||
/* .. retrieve array or table using key. */
|
||||
TOML_EXTERN toml_array_t* toml_array_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);
|
||||
TOML_EXTERN toml_array_t *toml_array_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
|
||||
@@ -153,9 +145,7 @@ TOML_EXTERN const char* toml_table_key(const toml_table_t* tab);
|
||||
*/
|
||||
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 void toml_set_memutil(void* (*xxmalloc)(size_t),
|
||||
void (*xxfree)(void*));
|
||||
|
||||
TOML_EXTERN void toml_set_memutil(void *(*xxmalloc)(size_t), void (*xxfree)(void *));
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
* deprecated
|
||||
@@ -171,5 +161,4 @@ 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_rtots(toml_raw_t s, toml_timestamp_t *ret);
|
||||
|
||||
|
||||
#endif /* TOML_H */
|
||||
|
@@ -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
|
||||
*/
|
||||
if (!manager->modem_usb_id ||
|
||||
strcmp(g_udev_device_get_name(device), manager->modem_usb_id) != 0) {
|
||||
if (!manager->modem_usb_id || strcmp(g_udev_device_get_name(device), manager->modem_usb_id) != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -42,10 +41,8 @@ static void udev_event_cb(GUdevClient *client, gchar *action, GUdevDevice *devic
|
||||
manager->modem_state = EG25_STATE_UPDATING;
|
||||
}
|
||||
|
||||
if (strcmp(action, "unbind") != 0 ||
|
||||
manager->modem_state == EG25_STATE_UPDATING ||
|
||||
manager->modem_state == EG25_STATE_RESETTING ||
|
||||
manager->complete_reset_timer != 0 ||
|
||||
if (strcmp(action, "unbind") != 0 || manager->modem_state == EG25_STATE_UPDATING ||
|
||||
manager->modem_state == EG25_STATE_RESETTING || manager->complete_reset_timer != 0 ||
|
||||
manager->schedule_reset_timer != 0) {
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user