15#include <lte/lte_api.h>
16#include <nuttx/wireless/lte/lte.h>
18#include "dawn/debug.hxx"
19#include "dawn/porting/lte.hxx"
37int lte_port_set_psave(uint8_t mode)
45 lte_psm_setting_t psm;
46 lte_edrx_setting_t edrx;
49 std::memset(&psm, 0,
sizeof(psm));
50 std::memset(&edrx, 0,
sizeof(edrx));
59 psm.enable = LTE_ENABLE;
60 psm.req_active_time.unit = LTE_PSM_T3324_UNIT_2SEC;
61 psm.req_active_time.time_val = 3;
62 psm.ext_periodic_tau_time.unit = LTE_PSM_T3412_UNIT_10MIN;
63 psm.ext_periodic_tau_time.time_val = 6;
64 edrx.act_type = LTE_EDRX_ACTTYPE_NOTUSE;
65 edrx.enable = LTE_DISABLE;
71 psm.enable = LTE_DISABLE;
72 edrx.act_type = LTE_EDRX_ACTTYPE_WBS1;
73 edrx.enable = LTE_ENABLE;
74 edrx.edrx_cycle = LTE_EDRX_CYC_2048;
75 edrx.ptw_val = LTE_EDRX_PTW_512;
81 psm.enable = LTE_DISABLE;
82 edrx.act_type = LTE_EDRX_ACTTYPE_NOTUSE;
83 edrx.enable = LTE_DISABLE;
86 ret = lte_set_psm_sync(&psm);
89 DAWNERR(
"lte_set_psm_sync failed %d\n", ret);
92 ret = lte_set_edrx_sync(&edrx);
95 DAWNERR(
"lte_set_edrx_sync failed %d\n", ret);
105int lte_port_connect(
const struct dawn::SLteParams *params)
107 lte_apn_setting_t apn;
113 ret = lte_initialize();
114 if (ret < 0 && ret != -EALREADY)
116 DAWNERR(
"lte_initialize failed %d\n", ret);
122 ret = lte_power_on();
123 if (ret < 0 && ret != -EALREADY)
125 DAWNERR(
"lte_power_on failed %d\n", ret);
131 lte_port_set_psave(params->psave_mode);
135 ret = lte_radio_on_sync();
138 DAWNERR(
"lte_radio_on_sync failed %d\n", ret);
146 std::memset(&apn, 0,
sizeof(apn));
148 apn.apn =
const_cast<char *
>(params->apn !=
nullptr ? params->apn :
"");
149 apn.ip_type = params->ip_type;
150 apn.auth_type = params->auth_type;
151 apn.apn_type = LTE_APN_TYPE_DEFAULT | LTE_APN_TYPE_IA;
153 if (params->username !=
nullptr && params->username[0] !=
'\0')
155 apn.user_name =
const_cast<char *
>(params->username);
158 if (params->password !=
nullptr && params->password[0] !=
'\0')
160 apn.password =
const_cast<char *
>(params->password);
163 ret = lte_activate_pdn_sync(&apn, &pdn);
166 DAWNERR(
"lte_activate_pdn_sync failed %d (apn='%s')\n", ret, apn.apn);
170 DAWNINFO(
"LTE connected: session %d, %d address(es)\n", pdn.session_id, pdn.ipaddr_num);
181int lte_port_disconnect(
void)
185 ret = lte_power_off();
186 if (ret < 0 && ret != -EALREADY)
188 DAWNERR(
"lte_power_off failed %d\n", ret);
200int lte_port_status(uint32_t *status)
202 *status = g_lte_status;
215 ret = lte_get_quality_sync(&q);
221 quality->
valid = q.valid;
222 quality->
rsrp = q.rsrp;
223 quality->
rsrq = q.rsrq;
224 quality->
sinr = q.sinr;
225 quality->
rssi = q.rssi;
234int lte_port_get_cellinfo(
struct dawn::SLteCellinfo *info)
241 std::memset(&cell, 0,
sizeof(cell));
242 cell.nr_neighbor = 0;
243 cell.neighbors =
nullptr;
245 ret = lte_get_cellinfo_sync(&cell);
251 info->valid = cell.valid;
252 info->band =
static_cast<uint16_t
>(cell.earfcn);
Out-of-tree user-extension hooks for Dawn.
@ DAWN_LTE_PSAVE_EDRX
extended DRX
@ DAWN_LTE_PSAVE_PSM
Power Saving Mode.
@ DAWN_LTE_STATUS_CONNECTED
Connected (PDN active, IP assigned)
@ DAWN_LTE_STATUS_DOWN
Not connected.
Parameters used to bring up an LTE data connection.
bool valid
Values are meaningful only when true (RF on, camped).
int16_t rssi
Received Signal Strength Indicator, dBm.
int16_t rsrp
Reference Signal Received Power, dBm (-140..0).
int16_t sinr
Signal to Interference + Noise Ratio, dB (-128..40).
int16_t rsrq
Reference Signal Received Quality, dB (-60..0).