mirror of git://git.sysmocom.de/ofono
qmimodem: extract network time from serving system
This commit is contained in:
parent
32dac2f677
commit
54bcf5e3c4
|
@ -150,6 +150,18 @@ struct qmi_nas_current_plmn {
|
||||||
#define QMI_NAS_REGISTRATION_STATE_DENIED 0x03
|
#define QMI_NAS_REGISTRATION_STATE_DENIED 0x03
|
||||||
#define QMI_NAS_REGISTRATION_STATE_UNKNOWN 0x04
|
#define QMI_NAS_REGISTRATION_STATE_UNKNOWN 0x04
|
||||||
|
|
||||||
|
#define QMI_NAS_RESULT_3GGP_DST 0x1b
|
||||||
|
#define QMI_NAS_RESULT_3GPP_TIME 0x1c
|
||||||
|
struct qmi_nas_3gpp_time {
|
||||||
|
uint16_t year;
|
||||||
|
uint8_t month;
|
||||||
|
uint8_t day;
|
||||||
|
uint8_t hour;
|
||||||
|
uint8_t minute;
|
||||||
|
uint8_t second;
|
||||||
|
uint8_t timezone;
|
||||||
|
} __attribute__((__packed__));
|
||||||
|
|
||||||
/* cs_state/ps_state */
|
/* cs_state/ps_state */
|
||||||
#define QMI_NAS_ATTACH_STATE_INVALID 0x00
|
#define QMI_NAS_ATTACH_STATE_INVALID 0x00
|
||||||
#define QMI_NAS_ATTACH_STATE_ATTACHED 0x01
|
#define QMI_NAS_ATTACH_STATE_ATTACHED 0x01
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <endian.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -43,6 +44,38 @@ struct netreg_data {
|
||||||
uint8_t current_rat;
|
uint8_t current_rat;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool extract_ss_info_time(
|
||||||
|
struct qmi_result *result,
|
||||||
|
struct ofono_network_time *time)
|
||||||
|
{
|
||||||
|
const struct qmi_nas_3gpp_time *time_3gpp= NULL;
|
||||||
|
uint8_t dst_3gpp;
|
||||||
|
bool dst_3gpp_valid;
|
||||||
|
uint16_t len;
|
||||||
|
|
||||||
|
/* parse 3gpp time & dst */
|
||||||
|
dst_3gpp_valid = qmi_result_get_uint8(result, QMI_NAS_RESULT_3GGP_DST,
|
||||||
|
&dst_3gpp);
|
||||||
|
|
||||||
|
time_3gpp = qmi_result_get(result, QMI_NAS_RESULT_3GPP_TIME, &len);
|
||||||
|
if (time_3gpp && len == sizeof(struct qmi_nas_3gpp_time) &&
|
||||||
|
dst_3gpp_valid) {
|
||||||
|
time->year = le16toh(time_3gpp->year);
|
||||||
|
time->mon = time_3gpp->month;
|
||||||
|
time->mday = time_3gpp->day;
|
||||||
|
time->hour = time_3gpp->hour;
|
||||||
|
time->min = time_3gpp->minute;
|
||||||
|
time->sec= time_3gpp->second;
|
||||||
|
time->utcoff = time_3gpp->timezone * 15 * 60;
|
||||||
|
time->dst = dst_3gpp;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: 3gpp2 */
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static bool extract_ss_info(struct qmi_result *result, int *status,
|
static bool extract_ss_info(struct qmi_result *result, int *status,
|
||||||
int *lac, int *cellid, int *tech,
|
int *lac, int *cellid, int *tech,
|
||||||
struct ofono_network_operator *operator)
|
struct ofono_network_operator *operator)
|
||||||
|
@ -124,11 +157,15 @@ static bool extract_ss_info(struct qmi_result *result, int *status,
|
||||||
static void ss_info_notify(struct qmi_result *result, void *user_data)
|
static void ss_info_notify(struct qmi_result *result, void *user_data)
|
||||||
{
|
{
|
||||||
struct ofono_netreg *netreg = user_data;
|
struct ofono_netreg *netreg = user_data;
|
||||||
|
struct ofono_network_time net_time;
|
||||||
struct netreg_data *data = ofono_netreg_get_data(netreg);
|
struct netreg_data *data = ofono_netreg_get_data(netreg);
|
||||||
int status, lac, cellid, tech;
|
int status, lac, cellid, tech;
|
||||||
|
|
||||||
DBG("");
|
DBG("");
|
||||||
|
|
||||||
|
if (extract_ss_info_time(result, &net_time))
|
||||||
|
ofono_netreg_time_notify(netreg, &net_time);
|
||||||
|
|
||||||
if (!extract_ss_info(result, &status, &lac, &cellid, &tech,
|
if (!extract_ss_info(result, &status, &lac, &cellid, &tech,
|
||||||
&data->operator))
|
&data->operator))
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue