* [PATCHv3 1/4] quectel: add dbus hardware interface @ 2019-07-19 12:39 Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-19 12:39 ` [PATCHv3 2/4] doc: add documentaion for Quectel hardware API Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= @ 2019-07-19 12:39 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 6543 bytes --] For now the interface only exposes the modem supply voltage, but is added as a preparation for signaling power events. --- Changes since v2: * updated commit message Changes since v1: * use and export int32_t for all three properties * place dbus functions below close_serial() * remove doc/ changes * update comments for charge status and level * unregister dbus api after canceling/unregister at chats plugins/quectel.c | 158 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/plugins/quectel.c b/plugins/quectel.c index 9cac92fa..efdb7617 100644 --- a/plugins/quectel.c +++ b/plugins/quectel.c @@ -37,6 +37,7 @@ #include <gattty.h> #define OFONO_API_SUBJECT_TO_CHANGE +#include <ofono.h> #include <ofono/plugin.h> #include <ofono/modem.h> #include <ofono/devinfo.h> @@ -49,12 +50,16 @@ #include <ofono/gprs.h> #include <ofono/gprs-context.h> #include <ofono/log.h> +#include <ofono/dbus.h> + +#include <gdbus/gdbus.h> #include <drivers/atmodem/atutil.h> #include <drivers/atmodem/vendor.h> static const char *cfun_prefix[] = { "+CFUN:", NULL }; static const char *cpin_prefix[] = { "+CPIN:", NULL }; +static const char *cbc_prefix[] = { "+CBC:", NULL }; static const char *qinistat_prefix[] = { "+QINISTAT:", NULL }; static const char *cgmm_prefix[] = { "UC15", "Quectel_M95", "Quectel_MC60", NULL }; @@ -95,6 +100,16 @@ struct quectel_data { struct l_gpio_writer *gpio; }; +struct dbus_hw { + DBusMessage *msg; + struct ofono_modem *modem; + int32_t charge_status; + int32_t charge_level; + int32_t voltage; +}; + +static const char dbus_hw_interface[] = OFONO_SERVICE ".quectel.Hardware"; + static void quectel_debug(const char *str, void *user_data) { const char *prefix = user_data; @@ -227,6 +242,142 @@ static void close_serial(struct ofono_modem *modem) ofono_modem_set_powered(modem, false); } +static void dbus_hw_reply_properties(struct dbus_hw *hw) +{ + struct quectel_data *data = ofono_modem_get_data(hw->modem); + DBusMessage *reply; + DBusMessageIter dbus_iter; + DBusMessageIter dbus_dict; + + DBG("%p", hw->modem); + + reply = dbus_message_new_method_return(hw->msg); + dbus_message_iter_init_append(reply, &dbus_iter); + dbus_message_iter_open_container(&dbus_iter, DBUS_TYPE_ARRAY, + OFONO_PROPERTIES_ARRAY_SIGNATURE, + &dbus_dict); + + /* + * the charge status/level received from m95 and mc60 are invalid so + * only return those for the UC15 modem. + */ + if (data->model == QUECTEL_UC15) { + ofono_dbus_dict_append(&dbus_dict, "ChargeStatus", + DBUS_TYPE_INT32, &hw->charge_status); + + ofono_dbus_dict_append(&dbus_dict, "ChargeLevel", + DBUS_TYPE_INT32, &hw->charge_level); + } + + ofono_dbus_dict_append(&dbus_dict, "Voltage", DBUS_TYPE_INT32, + &hw->voltage); + + dbus_message_iter_close_container(&dbus_iter, &dbus_dict); + + __ofono_dbus_pending_reply(&hw->msg, reply); +} + +static void cbc_cb(gboolean ok, GAtResult *result, gpointer user_data) +{ + struct dbus_hw *hw = user_data; + GAtResultIter iter; + + DBG("%p", hw->modem); + + if (!hw->msg) + return; + + if (!ok) + goto error; + + g_at_result_iter_init(&iter, result); + + if (!g_at_result_iter_next(&iter, "+CBC:")) + goto error; + + /* the returned charge status is valid only for uc15 */ + if (!g_at_result_iter_next_number(&iter, &hw->charge_status)) + goto error; + + /* the returned charge level is valid only for uc15 */ + if (!g_at_result_iter_next_number(&iter, &hw->charge_level)) + goto error; + + /* now comes the millivolts */ + if (!g_at_result_iter_next_number(&iter, &hw->voltage)) + goto error; + + dbus_hw_reply_properties(hw); + + return; + +error: + __ofono_dbus_pending_reply(&hw->msg, __ofono_error_failed(hw->msg)); +} + +static DBusMessage *dbus_hw_get_properties(DBusConnection *conn, + DBusMessage *msg, + void *user_data) +{ + struct dbus_hw *hw = user_data; + struct quectel_data *data = ofono_modem_get_data(hw->modem); + + DBG("%p", hw->modem); + + if (hw->msg != NULL) + return __ofono_error_busy(msg); + + if (!g_at_chat_send(data->aux, "AT+CBC", cbc_prefix, cbc_cb, hw, NULL)) + return __ofono_error_failed(msg); + + hw->msg = dbus_message_ref(msg); + + return NULL; +} + +static const GDBusMethodTable dbus_hw_methods[] = { + { GDBUS_ASYNC_METHOD("GetProperties", + NULL, GDBUS_ARGS({ "properties", "a{sv}" }), + dbus_hw_get_properties) }, + {} +}; + +static void dbus_hw_cleanup(void *data) +{ + struct dbus_hw *hw = data; + + DBG("%p", hw->modem); + + if (hw->msg) + __ofono_dbus_pending_reply(&hw->msg, + __ofono_error_canceled(hw->msg)); + + l_free(hw); +} + +static void dbus_hw_enable(struct ofono_modem *modem) +{ + DBusConnection *conn = ofono_dbus_get_connection(); + const char *path = ofono_modem_get_path(modem); + struct dbus_hw *hw; + + DBG("%p", modem); + + hw = l_new(struct dbus_hw, 1); + hw->modem = modem; + + if (!g_dbus_register_interface(conn, path, dbus_hw_interface, + dbus_hw_methods, NULL, NULL, + hw, dbus_hw_cleanup)) { + ofono_error("Could not register %s interface under %s", + dbus_hw_interface, path); + l_free(hw); + return; + } + + ofono_modem_add_interface(modem, dbus_hw_interface); +} + static void cpin_notify(GAtResult *result, gpointer user_data) { struct ofono_modem *modem = user_data; @@ -253,6 +404,8 @@ static void cpin_notify(GAtResult *result, gpointer user_data) g_at_chat_unregister(data->aux, data->cpin_ready); data->cpin_ready = 0; + + dbus_hw_enable(modem); } static void cpin_query(gboolean ok, GAtResult *result, gpointer user_data) @@ -650,6 +803,8 @@ static void cfun_disable(gboolean ok, GAtResult *result, gpointer user_data) static int quectel_disable(struct ofono_modem *modem) { struct quectel_data *data = ofono_modem_get_data(modem); + DBusConnection *conn = ofono_dbus_get_connection(); + const char *path = ofono_modem_get_path(modem); DBG("%p", modem); @@ -659,6 +814,9 @@ static int quectel_disable(struct ofono_modem *modem) g_at_chat_cancel_all(data->aux); g_at_chat_unregister_all(data->aux); + if (g_dbus_unregister_interface(conn, path, dbus_hw_interface)) + ofono_modem_remove_interface(modem, dbus_hw_interface); + g_at_chat_send(data->aux, "AT+CFUN=0", cfun_prefix, cfun_disable, modem, NULL); -- 2.22.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCHv3 2/4] doc: add documentaion for Quectel hardware API 2019-07-19 12:39 [PATCHv3 1/4] quectel: add dbus hardware interface Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= @ 2019-07-19 12:39 ` Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-22 7:48 ` Denis Kenzior 2019-07-19 12:39 ` [PATCHv3 3/4] quectel: implement dbus signals for modem power notifications Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-19 12:39 ` [PATCHv3 4/4] doc: document power-event signals for quectel Hardware API Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2 siblings, 1 reply; 7+ messages in thread From: Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= @ 2019-07-19 12:39 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1306 bytes --] --- Changes since v2: * none Changes since v1: * new patch split out from PATCHv1 6/7 * added documentation of charge status and level doc/quectel-hardware-api.txt | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 doc/quectel-hardware-api.txt diff --git a/doc/quectel-hardware-api.txt b/doc/quectel-hardware-api.txt new file mode 100644 index 00000000..6aafbfd8 --- /dev/null +++ b/doc/quectel-hardware-api.txt @@ -0,0 +1,33 @@ +Hardware hierarchy +================== + +Service org.ofono +Interface org.ofono.quectel.Hardware +Object path /{device0,device1,...} + +Methods array{string,variant} GetProperties + + Returns hardware properties for the modem object. See + the properties section for available properties. + +Properties int32 Voltage [readonly] + + Integer with the modem supply voltage in mV. + + int32 ChargeStatus [readonly,optional] + + Integer with one of either: + + 0: Modem is not charging + 1: Modem is charging + 2: Charging is finished + + This property is available on UC15 + + int32 ChargeLevel [readonly,optional] + + Integer representing the battery charge level in + percent (from 0 to 100). + + This property is available on UC15 + -- 2.22.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCHv3 2/4] doc: add documentaion for Quectel hardware API 2019-07-19 12:39 ` [PATCHv3 2/4] doc: add documentaion for Quectel hardware API Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= @ 2019-07-22 7:48 ` Denis Kenzior 2019-07-22 8:46 ` Pavel Machek 0 siblings, 1 reply; 7+ messages in thread From: Denis Kenzior @ 2019-07-22 7:48 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1537 bytes --] Hi Martin, On 7/19/19 7:39 AM, Martin Hundebøll wrote: > --- > > Changes since v2: > * none > > Changes since v1: > * new patch split out from PATCHv1 6/7 > * added documentation of charge status and level > > doc/quectel-hardware-api.txt | 33 +++++++++++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) > create mode 100644 doc/quectel-hardware-api.txt > > diff --git a/doc/quectel-hardware-api.txt b/doc/quectel-hardware-api.txt > new file mode 100644 > index 00000000..6aafbfd8 > --- /dev/null > +++ b/doc/quectel-hardware-api.txt > @@ -0,0 +1,33 @@ > +Hardware hierarchy > +================== > + > +Service org.ofono > +Interface org.ofono.quectel.Hardware > +Object path /{device0,device1,...} > + > +Methods array{string,variant} GetProperties > + > + Returns hardware properties for the modem object. See > + the properties section for available properties. > + > +Properties int32 Voltage [readonly] > + > + Integer with the modem supply voltage in mV. > + > + int32 ChargeStatus [readonly,optional] > + > + Integer with one of either: > + > + 0: Modem is not charging > + 1: Modem is charging > + 2: Charging is finished > + > + This property is available on UC15 > + > + int32 ChargeLevel [readonly,optional] > + > + Integer representing the battery charge level in > + percent (from 0 to 100). > + > + This property is available on UC15 > + > So just a nitpick, but should these be unsigned? Regards, -Denis ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCHv3 2/4] doc: add documentaion for Quectel hardware API 2019-07-22 7:48 ` Denis Kenzior @ 2019-07-22 8:46 ` Pavel Machek 0 siblings, 0 replies; 7+ messages in thread From: Pavel Machek @ 2019-07-22 8:46 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1144 bytes --] Hi! > >+Hardware hierarchy > >+================== > >+ > >+Service org.ofono > >+Interface org.ofono.quectel.Hardware > >+Object path /{device0,device1,...} > >+ > >+Methods array{string,variant} GetProperties > >+ > >+ Returns hardware properties for the modem object. See > >+ the properties section for available properties. > >+ > >+Properties int32 Voltage [readonly] > >+ > >+ Integer with the modem supply voltage in mV. > >+ > >+ int32 ChargeStatus [readonly,optional] > >+ > >+ Integer with one of either: > >+ > >+ 0: Modem is not charging > >+ 1: Modem is charging > >+ 2: Charging is finished > >+ > >+ This property is available on UC15 > >+ > >+ int32 ChargeLevel [readonly,optional] > >+ > >+ Integer representing the battery charge level in > >+ percent (from 0 to 100). > >+ > >+ This property is available on UC15 > >+ Maybe more resolution than percent would be useful? From 0 to 1000? Best regards, Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 181 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCHv3 3/4] quectel: implement dbus signals for modem power notifications 2019-07-19 12:39 [PATCHv3 1/4] quectel: add dbus hardware interface Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-19 12:39 ` [PATCHv3 2/4] doc: add documentaion for Quectel hardware API Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= @ 2019-07-19 12:39 ` Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-19 12:39 ` [PATCHv3 4/4] doc: document power-event signals for quectel Hardware API Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2 siblings, 0 replies; 7+ messages in thread From: Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= @ 2019-07-19 12:39 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 5983 bytes --] The Quectel modems issues unsolicited strings in case of power related events. The UC15 uses +QIND: for the events, while M95 and MC60 uses descriptive strings. (UC15 also uses a string for normal power down). Register listeners for these strings/codes. The handler emits an appropriate dbus signal, and closes down the modem if needed. --- Changes since v2: * Use Voltage{High,Low} instead of {High,Low}Power Changes since v1: * remove doc/ changes * place dbus functions below close_serial() plugins/quectel.c | 146 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 145 insertions(+), 1 deletion(-) diff --git a/plugins/quectel.c b/plugins/quectel.c index efdb7617..79316d45 100644 --- a/plugins/quectel.c +++ b/plugins/quectel.c @@ -108,6 +108,14 @@ struct dbus_hw { int32_t voltage; }; +enum quectel_power_event { + LOW_POWER_DOWN = -2, + LOW_WARNING = -1, + NORMAL_POWER_DOWN = 0, + HIGH_WARNING = 1, + HIGH_POWER_DOWN = 2, +}; + static const char dbus_hw_interface[] = OFONO_SERVICE ".quectel.Hardware"; static void quectel_debug(const char *str, void *user_data) @@ -335,6 +343,110 @@ static DBusMessage *dbus_hw_get_properties(DBusConnection *conn, return NULL; } +static void voltage_handle(struct ofono_modem *modem, + enum quectel_power_event event) +{ + DBusConnection *conn = ofono_dbus_get_connection(); + DBusMessage *signal; + DBusMessageIter iter; + const char *path = ofono_modem_get_path(modem); + const char *name; + const char *reason; + bool close; + + DBG("%p", modem); + + switch (event) { + case LOW_POWER_DOWN: + close = true; + name = "PowerDown"; + reason = "VoltageLow"; + break; + case LOW_WARNING: + close = false; + name = "PowerWarning"; + reason = "VoltageLow"; + break; + case NORMAL_POWER_DOWN: + close = true; + name = "PowerDown"; + reason = "Normal"; + break; + case HIGH_WARNING: + close = false; + name = "PowerWarning"; + reason = "VoltageHigh"; + break; + case HIGH_POWER_DOWN: + close = true; + name = "PowerDown"; + reason = "VoltageHigh"; + break; + default: + return; + } + + signal = dbus_message_new_signal(path, dbus_hw_interface, name); + if (signal) { + dbus_message_iter_init_append(signal, &iter); + dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, + &reason); + g_dbus_send_message(conn, signal); + } + + if (close) + close_serial(modem); +} + +static void qind_notify(GAtResult *result, void *user_data) +{ + struct dbus_hw *hw = user_data; + GAtResultIter iter; + enum quectel_power_event event; + const char *type; + + DBG("%p", hw->modem); + + g_at_result_iter_init(&iter, result); + g_at_result_iter_next(&iter, "+QIND:"); + + if (!g_at_result_iter_next_string(&iter, &type)) + return; + + if (!g_at_result_iter_next_number(&iter, &event)) + return; + + voltage_handle(hw->modem, event); +} + +static void power_notify(GAtResult *result, void *user_data) +{ + struct dbus_hw *hw = user_data; + GAtResultIter iter; + const char *event; + + DBG("%p", hw->modem); + + g_at_result_iter_init(&iter, result); + g_at_result_iter_next(&iter, NULL); + + if (!g_at_result_iter_next_unquoted_string(&iter, &event)) + return; + + DBG("event: %s", event); + + if (g_strcmp0(event, "UNDER_VOLTAGE POWER DOWN") == 0) + voltage_handle(hw->modem, LOW_POWER_DOWN); + else if (g_strcmp0(event, "UNDER_VOLTAGE WARNING") == 0) + voltage_handle(hw->modem, LOW_WARNING); + else if (g_strcmp0(event, "NORMAL POWER DOWN") == 0) + voltage_handle(hw->modem, NORMAL_POWER_DOWN); + else if (g_strcmp0(event, "OVER_VOLTAGE WARNING") == 0) + voltage_handle(hw->modem, HIGH_WARNING); + else if (g_strcmp0(event, "OVER_VOLTAGE POWER DOWN") == 0) + voltage_handle(hw->modem, HIGH_POWER_DOWN); +} + static const GDBusMethodTable dbus_hw_methods[] = { { GDBUS_ASYNC_METHOD("GetProperties", NULL, GDBUS_ARGS({ "properties", "a{sv}" }), @@ -342,6 +454,14 @@ static const GDBusMethodTable dbus_hw_methods[] = { {} }; +static const GDBusSignalTable dbus_hw_signals[] = { + { GDBUS_SIGNAL("PowerDown", + GDBUS_ARGS({ "reason", "s" })) }, + { GDBUS_SIGNAL("PowerWarning", + GDBUS_ARGS({ "reason", "s" })) }, + { } +}; + static void dbus_hw_cleanup(void *data) { struct dbus_hw *hw = data; @@ -358,6 +478,7 @@ static void dbus_hw_cleanup(void *data) static void dbus_hw_enable(struct ofono_modem *modem) { DBusConnection *conn = ofono_dbus_get_connection(); + struct quectel_data *data = ofono_modem_get_data(modem); const char *path = ofono_modem_get_path(modem); struct dbus_hw *hw; @@ -367,7 +488,7 @@ static void dbus_hw_enable(struct ofono_modem *modem) hw->modem = modem; if (!g_dbus_register_interface(conn, path, dbus_hw_interface, - dbus_hw_methods, NULL, NULL, + dbus_hw_methods, dbus_hw_signals, NULL, hw, dbus_hw_cleanup)) { ofono_error("Could not register %s interface under %s", dbus_hw_interface, path); @@ -375,6 +496,29 @@ static void dbus_hw_enable(struct ofono_modem *modem) return; } + g_at_chat_register(data->aux, "NORMAL POWER DOWN", power_notify, FALSE, + hw, NULL); + + switch (data->model) { + case QUECTEL_UC15: + g_at_chat_register(data->aux, "+QIND", qind_notify, FALSE, hw, + NULL); + break; + case QUECTEL_M95: + case QUECTEL_MC60: + g_at_chat_register(data->aux, "OVER_VOLTAGE POWER DOWN", + power_notify, FALSE, hw, NULL); + g_at_chat_register(data->aux, "UNDER_VOLTAGE POWER DOWN", + power_notify, FALSE, hw, NULL); + g_at_chat_register(data->aux, "OVER_VOLTAGE WARNING", + power_notify, FALSE, hw, NULL); + g_at_chat_register(data->aux, "UNDER_VOLTAGE WARNING", + power_notify, FALSE, hw, NULL); + break; + case QUECTEL_UNKNOWN: + break; + } + ofono_modem_add_interface(modem, dbus_hw_interface); } -- 2.22.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCHv3 4/4] doc: document power-event signals for quectel Hardware API 2019-07-19 12:39 [PATCHv3 1/4] quectel: add dbus hardware interface Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-19 12:39 ` [PATCHv3 2/4] doc: add documentaion for Quectel hardware API Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-19 12:39 ` [PATCHv3 3/4] quectel: implement dbus signals for modem power notifications Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= @ 2019-07-19 12:39 ` Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-22 7:50 ` Denis Kenzior 2 siblings, 1 reply; 7+ messages in thread From: Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= @ 2019-07-19 12:39 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1258 bytes --] --- Changes since v2: * Use Voltage{High,Low} instead of {High,Low}Power Changes since v1: * new patch split out from PATCHv1 7/7 doc/quectel-hardware-api.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/doc/quectel-hardware-api.txt b/doc/quectel-hardware-api.txt index 6aafbfd8..8795ef40 100644 --- a/doc/quectel-hardware-api.txt +++ b/doc/quectel-hardware-api.txt @@ -10,6 +10,25 @@ Methods array{string,variant} GetProperties Returns hardware properties for the modem object. See the properties section for available properties. +Signals PowerDown(string reason) + + This signal is emitted on gracefull shutdowns initiated + by the modem. + + Possible reasons: + "VoltageLow" The supply voltage is too low + "Normal" The PWRKEY pin was asserted + "VoltageHigh" The supply voltage is too high + + PowerWarning(string reason) + + This signal is emitted when the modem detects its supply + voltage is close to its supported limits. + + Possible reasons: + "VoltageLow" The supply voltage is low + "VoltageHigh" The supply voltage is high + Properties int32 Voltage [readonly] Integer with the modem supply voltage in mV. -- 2.22.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCHv3 4/4] doc: document power-event signals for quectel Hardware API 2019-07-19 12:39 ` [PATCHv3 4/4] doc: document power-event signals for quectel Hardware API Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= @ 2019-07-22 7:50 ` Denis Kenzior 0 siblings, 0 replies; 7+ messages in thread From: Denis Kenzior @ 2019-07-22 7:50 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1585 bytes --] Hi Martin, On 7/19/19 7:39 AM, Martin Hundebøll wrote: > --- > > Changes since v2: > * Use Voltage{High,Low} instead of {High,Low}Power > > Changes since v1: > * new patch split out from PATCHv1 7/7 > > doc/quectel-hardware-api.txt | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/doc/quectel-hardware-api.txt b/doc/quectel-hardware-api.txt > index 6aafbfd8..8795ef40 100644 > --- a/doc/quectel-hardware-api.txt > +++ b/doc/quectel-hardware-api.txt > @@ -10,6 +10,25 @@ Methods array{string,variant} GetProperties > Returns hardware properties for the modem object. See > the properties section for available properties. > > +Signals PowerDown(string reason) > + > + This signal is emitted on gracefull shutdowns initiated > + by the modem. > + > + Possible reasons: > + "VoltageLow" The supply voltage is too low > + "Normal" The PWRKEY pin was asserted > + "VoltageHigh" The supply voltage is too high > + > + PowerWarning(string reason) > + > + This signal is emitted when the modem detects its supply > + voltage is close to its supported limits. > + > + Possible reasons: > + "VoltageLow" The supply voltage is low > + "VoltageHigh" The supply voltage is high So just another nitpick, but our APIs use CamelCase for Property names and Member names (signals, method calls). However, the values are always lower case. > + > Properties int32 Voltage [readonly] > > Integer with the modem supply voltage in mV. > Regards, -Denis ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-07-22 8:46 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-07-19 12:39 [PATCHv3 1/4] quectel: add dbus hardware interface Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-19 12:39 ` [PATCHv3 2/4] doc: add documentaion for Quectel hardware API Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-22 7:48 ` Denis Kenzior 2019-07-22 8:46 ` Pavel Machek 2019-07-19 12:39 ` [PATCHv3 3/4] quectel: implement dbus signals for modem power notifications Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-19 12:39 ` [PATCHv3 4/4] doc: document power-event signals for quectel Hardware API Martin =?unknown-8bit?q?Hundeb=C3=B8ll?= 2019-07-22 7:50 ` Denis Kenzior
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.