7f574210a7
ALT1250 driver to support shutdown.
276 lines
10 KiB
C
276 lines
10 KiB
C
/****************************************************************************
|
|
* drivers/modem/alt1250/altcom_hdlr.c
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership. The
|
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* Included Files
|
|
****************************************************************************/
|
|
|
|
#include <nuttx/config.h>
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include <nuttx/modem/alt1250.h>
|
|
#include <nuttx/wireless/lte/lte_ioctl.h>
|
|
|
|
#include "altcom_pkt.h"
|
|
#include "altcom_hdlr_pdn.h"
|
|
#include "altcom_hdlr_radio.h"
|
|
#include "altcom_hdlr_net.h"
|
|
#include "altcom_hdlr_psave.h"
|
|
#include "altcom_hdlr_sim.h"
|
|
#include "altcom_hdlr_pin.h"
|
|
#include "altcom_hdlr_socket.h"
|
|
#include "altcom_hdlr_sms.h"
|
|
#include "altcom_hdlr_firmware.h"
|
|
#include "altcom_hdlr_log.h"
|
|
#include "altcom_hdlr_other.h"
|
|
|
|
/****************************************************************************
|
|
* Pre-processor Definitions
|
|
****************************************************************************/
|
|
|
|
#ifndef ARRAY_SZ
|
|
# define ARRAY_SZ(array) (sizeof(array)/sizeof(array[0]))
|
|
#endif
|
|
|
|
/****************************************************************************
|
|
* Private Types
|
|
****************************************************************************/
|
|
|
|
typedef struct compose_inst_s
|
|
{
|
|
uint32_t cmdid;
|
|
compose_handler_t hdlr;
|
|
} compose_inst_t;
|
|
|
|
typedef struct parse_inst_s
|
|
{
|
|
uint16_t altcid;
|
|
parse_handler_t hdlr;
|
|
} parse_inst_t;
|
|
|
|
/****************************************************************************
|
|
* Private Data
|
|
****************************************************************************/
|
|
|
|
#define CTABLE_CONTENT(cmdid, hdlrname) \
|
|
{ LTE_CMDID_##cmdid, hdlrname##_pkt_compose }
|
|
#define PTABLE_CONTENT(altcid, hdlrname) \
|
|
{ APICMDID_##altcid, hdlrname##_pkt_parse }
|
|
|
|
static compose_inst_t g_composehdlrs[] =
|
|
{
|
|
CTABLE_CONTENT(GETVER, altcom_getver),
|
|
CTABLE_CONTENT(GETPHONE, altcom_getphone),
|
|
CTABLE_CONTENT(GETIMSI, altcom_getimsi),
|
|
CTABLE_CONTENT(GETIMEI, altcom_getimei),
|
|
CTABLE_CONTENT(GETPINSET, altcom_getpinset),
|
|
CTABLE_CONTENT(PINENABLE, altcom_setpinlock),
|
|
CTABLE_CONTENT(CHANGEPIN, altcom_setpincode),
|
|
CTABLE_CONTENT(ENTERPIN, altcom_enterpin),
|
|
CTABLE_CONTENT(GETLTIME, altcom_getltime),
|
|
CTABLE_CONTENT(GETOPER, altcom_getoper),
|
|
CTABLE_CONTENT(REPQUAL, altcom_setrepqual),
|
|
CTABLE_CONTENT(REPCELL, altcom_setrepcell),
|
|
CTABLE_CONTENT(REPSIMSTAT, altcom_setrepevt),
|
|
CTABLE_CONTENT(REPLTIME, altcom_setrepevt),
|
|
CTABLE_CONTENT(GETEDRX, altcom_getedrx),
|
|
CTABLE_CONTENT(SETEDRX, altcom_setedrx),
|
|
CTABLE_CONTENT(GETPSM, altcom_getpsm),
|
|
CTABLE_CONTENT(SETPSM, altcom_setpsm),
|
|
CTABLE_CONTENT(GETCE, altcom_getce),
|
|
CTABLE_CONTENT(SETCE, altcom_setce),
|
|
CTABLE_CONTENT(RADIOON, altcom_radioon),
|
|
CTABLE_CONTENT(RADIOOFF, altcom_radiooff),
|
|
CTABLE_CONTENT(ACTPDN, altcom_actpdn),
|
|
CTABLE_CONTENT(DEACTPDN, altcom_deactpdn),
|
|
CTABLE_CONTENT(GETNETINFO, altcom_getnetinfo),
|
|
CTABLE_CONTENT(IMSCAP, altcom_getimscap),
|
|
CTABLE_CONTENT(REPNETINFO, altcom_setrepnet),
|
|
CTABLE_CONTENT(GETSIMINFO, altcom_getsiminfo),
|
|
CTABLE_CONTENT(GETCEDRX, altcom_getdedrx),
|
|
CTABLE_CONTENT(GETCPSM, altcom_getdpsm),
|
|
CTABLE_CONTENT(GETQUAL, altcom_getqual),
|
|
CTABLE_CONTENT(ACTPDNCAN, altcom_actpdncancel),
|
|
CTABLE_CONTENT(GETCELL, altcom_getcell),
|
|
CTABLE_CONTENT(GETRAT, altcom_getrat),
|
|
CTABLE_CONTENT(GETRATINFO, altcom_getrat),
|
|
CTABLE_CONTENT(SETRAT, altcom_setrat),
|
|
CTABLE_CONTENT(ACCEPT, altcom_accept),
|
|
CTABLE_CONTENT(BIND, altcom_bind),
|
|
CTABLE_CONTENT(CLOSE, altcom_close),
|
|
CTABLE_CONTENT(CONNECT, altcom_connect),
|
|
CTABLE_CONTENT(FCNTL, altcom_fcntl),
|
|
CTABLE_CONTENT(GETSOCKNAME, altcom_getsockname),
|
|
CTABLE_CONTENT(GETSOCKOPT, altcom_getsockopt),
|
|
CTABLE_CONTENT(LISTEN, altcom_listen),
|
|
CTABLE_CONTENT(RECVFROM, altcom_recvfrom),
|
|
CTABLE_CONTENT(SELECT, altcom_select),
|
|
CTABLE_CONTENT(SENDTO, altcom_sendto),
|
|
CTABLE_CONTENT(SHUTDOWN, altcom_shutdown),
|
|
CTABLE_CONTENT(SOCKET, altcom_socket),
|
|
CTABLE_CONTENT(SETSOCKOPT, altcom_setsockopt),
|
|
CTABLE_CONTENT(SENDATCMD, altcom_sendatcmd),
|
|
CTABLE_CONTENT(INJECTIMAGE, altcom_injectimage),
|
|
CTABLE_CONTENT(GETIMAGELEN, altcom_getimagelen),
|
|
CTABLE_CONTENT(EXEUPDATE, altcom_execupdate),
|
|
CTABLE_CONTENT(GETUPDATERES, altcom_getupdateres),
|
|
CTABLE_CONTENT(SMS_INIT, altcom_smsinit),
|
|
CTABLE_CONTENT(SMS_FIN, altcom_smsfin),
|
|
CTABLE_CONTENT(SMS_SEND, altcom_smssend),
|
|
CTABLE_CONTENT(SMS_DELETE, altcom_smsdelete),
|
|
CTABLE_CONTENT(SMS_REPORT_RECV, altcom_smsreportrecv),
|
|
CTABLE_CONTENT(SAVE_LOG, altcom_logsave),
|
|
CTABLE_CONTENT(GET_LOGLIST, altcom_loglist),
|
|
#ifdef CONFIG_MODEM_ALT1250_LOG_ACCESS
|
|
CTABLE_CONTENT(LOGOPEN, altcom_logopen),
|
|
CTABLE_CONTENT(LOGCLOSE, altcom_logclose),
|
|
CTABLE_CONTENT(LOGREAD, altcom_logread),
|
|
CTABLE_CONTENT(LOGLSEEK, altcom_loglseek),
|
|
CTABLE_CONTENT(LOGREMOVE, altcom_logremove),
|
|
#endif /* CONFIG_MODEM_ALT1250_LOG_ACCESS */
|
|
};
|
|
|
|
static parse_inst_t g_parsehdlrs[] =
|
|
{
|
|
PTABLE_CONTENT(ERRINFO, altcom_errinfo),
|
|
PTABLE_CONTENT(GET_VERSION, altcom_getver),
|
|
PTABLE_CONTENT(GET_PHONENO, altcom_getphone),
|
|
PTABLE_CONTENT(GET_IMSI, altcom_getimsi),
|
|
PTABLE_CONTENT(GET_IMEI, altcom_getimei),
|
|
PTABLE_CONTENT(GET_PINSET, altcom_getpinset),
|
|
PTABLE_CONTENT(SET_PIN_LOCK, altcom_setpinlock),
|
|
PTABLE_CONTENT(SET_PIN_CODE, altcom_setpincode),
|
|
PTABLE_CONTENT(ENTER_PIN, altcom_enterpin),
|
|
PTABLE_CONTENT(GET_LTIME, altcom_getltime),
|
|
PTABLE_CONTENT(GET_OPERATOR, altcom_getoper),
|
|
PTABLE_CONTENT(SET_REP_QUALITY, altcom_setrepqual),
|
|
PTABLE_CONTENT(SET_REP_CELLINFO, altcom_setrepcell),
|
|
PTABLE_CONTENT(SET_REP_EVT, altcom_setrepevt),
|
|
PTABLE_CONTENT(REPORT_EVT, altcom_repevt),
|
|
PTABLE_CONTENT(REPORT_QUALITY, altcom_repqual),
|
|
PTABLE_CONTENT(REPORT_CELLINFO, altcom_repcell),
|
|
PTABLE_CONTENT(GET_EDRX, altcom_getedrx),
|
|
PTABLE_CONTENT(SET_EDRX, altcom_setedrx),
|
|
PTABLE_CONTENT(GET_PSM, altcom_getpsm),
|
|
PTABLE_CONTENT(SET_PSM, altcom_setpsm),
|
|
PTABLE_CONTENT(GET_CE, altcom_getce),
|
|
PTABLE_CONTENT(SET_CE, altcom_setce),
|
|
PTABLE_CONTENT(RADIO_ON, altcom_radioon),
|
|
PTABLE_CONTENT(RADIO_OFF, altcom_radiooff),
|
|
PTABLE_CONTENT(ACTIVATE_PDN, altcom_actpdn),
|
|
PTABLE_CONTENT(DEACTIVATE_PDN, altcom_deactpdn),
|
|
PTABLE_CONTENT(GET_NETINFO, altcom_getnetinfo),
|
|
PTABLE_CONTENT(GET_IMS_CAP, altcom_getimscap),
|
|
PTABLE_CONTENT(SETREP_NETINFO, altcom_setrepnet),
|
|
PTABLE_CONTENT(REPORT_NETINFO, altcom_repnet),
|
|
PTABLE_CONTENT(GET_SIMINFO, altcom_getsiminfo),
|
|
PTABLE_CONTENT(GET_DYNAMICEDRX, altcom_getdedrx),
|
|
PTABLE_CONTENT(GET_DYNAMICPSM, altcom_getdpsm),
|
|
PTABLE_CONTENT(GET_QUALITY, altcom_getqual),
|
|
PTABLE_CONTENT(ACTIVATE_PDN_CANCEL, altcom_actpdncancel),
|
|
PTABLE_CONTENT(GET_CELLINFO, altcom_getcell),
|
|
PTABLE_CONTENT(GET_RAT, altcom_getrat),
|
|
PTABLE_CONTENT(SET_RAT, altcom_setrat),
|
|
PTABLE_CONTENT(SOCK_ACCEPT, altcom_scokaddr),
|
|
PTABLE_CONTENT(SOCK_BIND, altcom_sockcomm),
|
|
PTABLE_CONTENT(SOCK_CLOSE, altcom_sockcomm),
|
|
PTABLE_CONTENT(SOCK_CONNECT, altcom_sockcomm),
|
|
PTABLE_CONTENT(SOCK_FCNTL, altcom_sockcomm),
|
|
PTABLE_CONTENT(SOCK_GETSOCKNAME, altcom_scokaddr),
|
|
PTABLE_CONTENT(SOCK_GETSOCKOPT, altcom_getsockopt),
|
|
PTABLE_CONTENT(SOCK_LISTEN, altcom_sockcomm),
|
|
PTABLE_CONTENT(SOCK_RECVFROM, altcom_recvfrom),
|
|
PTABLE_CONTENT(SOCK_SELECT, altcom_select),
|
|
PTABLE_CONTENT(SOCK_SENDTO, altcom_sockcomm),
|
|
PTABLE_CONTENT(SOCK_SHUTDOWN, altcom_sockcomm),
|
|
PTABLE_CONTENT(SOCK_SOCKET, altcom_sockcomm),
|
|
PTABLE_CONTENT(SOCK_SETSOCKOPT, altcom_sockcomm),
|
|
PTABLE_CONTENT(SEND_ATCMD, altcom_sendatcmd),
|
|
PTABLE_CONTENT(FW_INJECTDELTAIMG, altcom_fwcommon),
|
|
PTABLE_CONTENT(FW_GETDELTAIMGLEN, altcom_fwcommon),
|
|
PTABLE_CONTENT(FW_EXECDELTAUPDATE, altcom_fwcommon),
|
|
PTABLE_CONTENT(FW_GETUPDATERESULT, altcom_fwcommon),
|
|
PTABLE_CONTENT(SMS_INIT, altcom_smscommon),
|
|
PTABLE_CONTENT(SMS_FIN, altcom_smscommon),
|
|
PTABLE_CONTENT(SMS_SEND, altcom_smssend),
|
|
PTABLE_CONTENT(SMS_DELETE, altcom_smscommon),
|
|
PTABLE_CONTENT(SMS_REPORT_RECV, altcom_smsreportrecv),
|
|
PTABLE_CONTENT(URC_EVENT, altcom_urc_event),
|
|
PTABLE_CONTENT(CLOGS, altcom_logsave),
|
|
PTABLE_CONTENT(LOGLIST, altcom_loglist),
|
|
#ifdef CONFIG_MODEM_ALT1250_LOG_ACCESS
|
|
PTABLE_CONTENT(LOGOPEN, altcom_logcommon),
|
|
PTABLE_CONTENT(LOGCLOSE, altcom_logcommon),
|
|
PTABLE_CONTENT(LOGREAD, altcom_logread),
|
|
PTABLE_CONTENT(LOGLSEEK, altcom_logcommon),
|
|
PTABLE_CONTENT(LOGREMOVE, altcom_logcommon),
|
|
#endif /* CONFIG_MODEM_ALT1250_LOG_ACCESS */
|
|
};
|
|
|
|
/****************************************************************************
|
|
* Public Functions
|
|
****************************************************************************/
|
|
|
|
compose_handler_t alt1250_composehdlr(uint32_t cmdid)
|
|
{
|
|
int i;
|
|
compose_handler_t ret = NULL;
|
|
|
|
for (i = 0; i < ARRAY_SZ(g_composehdlrs); i++)
|
|
{
|
|
if (g_composehdlrs[i].cmdid == cmdid)
|
|
{
|
|
ret = g_composehdlrs[i].hdlr;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
parse_handler_t alt1250_parsehdlr(uint16_t altcid, uint8_t altver)
|
|
{
|
|
int i;
|
|
parse_handler_t ret = NULL;
|
|
|
|
altcid &= ~ALTCOM_CMDID_REPLY_BIT;
|
|
|
|
if (altver == ALTCOM_VER4)
|
|
{
|
|
/* Change the command ID to Version 1 */
|
|
|
|
altcid = convert_cid2v1(altcid);
|
|
if (altcid == APICMDID_UNKNOWN)
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < ARRAY_SZ(g_parsehdlrs); i++)
|
|
{
|
|
if (g_parsehdlrs[i].altcid == altcid)
|
|
{
|
|
ret = g_parsehdlrs[i].hdlr;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|