mirror of
https://gitlab.com/mobian1/eg25-manager.git
synced 2025-08-30 07:42:23 +02:00
RI won't be accessible due to it being used by the kernel as an interrupt source, so we can check the STATUS pin (CE only) which will allow us to know precisely when the modem is shut down.
58 lines
1.7 KiB
C
58 lines
1.7 KiB
C
/*
|
|
* Copyright (C) 2020 Arnaud Ferraris <arnaud.ferraris@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <glib.h>
|
|
#include <gpiod.h>
|
|
#include <libmm-glib.h>
|
|
|
|
enum EG25State {
|
|
EG25_STATE_INIT = 0,
|
|
EG25_STATE_POWERED, // Power-on sequence has been executed, but the modem isn't on yet
|
|
EG25_STATE_STARTED, // Modem has been started and declared itdata ready
|
|
EG25_STATE_ACQUIRED, // Modem has been probed by ModemManager
|
|
EG25_STATE_CONFIGURED, // Modem has been configured through AT commands
|
|
EG25_STATE_SUSPENDING, // System is going into suspend
|
|
EG25_STATE_RESUMING, // System is being resumed, waiting for modem to come back
|
|
EG25_STATE_REGISTERED, // Modem is unlocked and registered to a network provider
|
|
EG25_STATE_CONNECTED, // Modem is connected (data connection active)
|
|
EG25_STATE_RESETTING, // Something went wrong, we're restarting the modem
|
|
EG25_STATE_FINISHING
|
|
};
|
|
|
|
struct EG25Manager {
|
|
GMainLoop *loop;
|
|
|
|
enum EG25State modem_state;
|
|
gchar *modem_usb_id;
|
|
gboolean braveheart;
|
|
|
|
guint mm_watch;
|
|
MMManager *mm_manager;
|
|
MMModem *mm_modem;
|
|
|
|
GDBusProxy *suspend_proxy;
|
|
int suspend_inhibit_fd;
|
|
guint suspend_source;
|
|
|
|
|
|
int at_fd;
|
|
guint at_source;
|
|
GList *at_cmds;
|
|
|
|
struct gpiod_chip *gpiochip[2];
|
|
struct gpiod_line *gpio_out[5];
|
|
struct gpiod_line *gpio_in[2];
|
|
};
|
|
|
|
void modem_configure(struct EG25Manager *data);
|
|
void modem_reset(struct EG25Manager *data);
|
|
void modem_suspend(struct EG25Manager *data);
|
|
void modem_resume_pre(struct EG25Manager *data);
|
|
void modem_resume_post(struct EG25Manager *data);
|
|
void modem_update_state(struct EG25Manager *data, MMModemState state);
|