mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-08-01 20:29:00 +00:00
lte/alt1250: Fix bug that caused stack when executing the socket API
Fix a bug that caused the application to get stuck when executing the socket API after waking up from hibernation and before executing lte_hibernation_resume().
This commit is contained in:
parent
2ac0adf37d
commit
3650251c5e
22 changed files with 51 additions and 36 deletions
|
|
@ -245,7 +245,7 @@ static int send_internal_at_command(FAR struct alt1250_s *dev,
|
|||
|
||||
err_alt1250("Internal ATCMD : %s\n", dev->tx_buff);
|
||||
|
||||
ret = altdevice_send_command(dev->altfd, container, usock_result);
|
||||
ret = altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
if (ret == REP_NO_ACK)
|
||||
{
|
||||
/* In case of no error */
|
||||
|
|
|
|||
|
|
@ -92,10 +92,20 @@ FAR struct alt_container_s *altdevice_exchange_selcontainer(int fd,
|
|||
* name: altdevice_send_command
|
||||
****************************************************************************/
|
||||
|
||||
int altdevice_send_command(int fd, FAR struct alt_container_s *container,
|
||||
int altdevice_send_command(FAR struct alt1250_s *dev, int fd,
|
||||
FAR struct alt_container_s *container,
|
||||
FAR int32_t *usock_res)
|
||||
{
|
||||
int ret;
|
||||
|
||||
#ifdef CONFIG_LTE_ALT1250_ENABLE_HIBERNATION_MODE
|
||||
if (dev->is_resuming)
|
||||
{
|
||||
*usock_res = -EOPNOTSUPP;
|
||||
return REP_SEND_ACK;
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = ioctl_wrapper(fd, ALT1250_IOC_SEND, (unsigned long)container);
|
||||
if (ret < 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include <nuttx/modem/alt1250.h>
|
||||
#include "alt1250_daemon.h"
|
||||
|
||||
#define DEV_ALT1250 "/dev/alt1250"
|
||||
|
||||
|
|
@ -39,7 +40,8 @@ int init_alt1250_device(void);
|
|||
void finalize_alt1250_device(int fd);
|
||||
FAR struct alt_container_s *altdevice_exchange_selcontainer(int fd,
|
||||
FAR struct alt_container_s *container);
|
||||
int altdevice_send_command(int fd, FAR struct alt_container_s *container,
|
||||
int altdevice_send_command(FAR struct alt1250_s *dev, int fd,
|
||||
FAR struct alt_container_s *container,
|
||||
FAR int32_t *usock_res);
|
||||
int altdevice_powercontrol(int fd, uint32_t cmd);
|
||||
int altdevice_seteventbuff(int fd, FAR struct alt_evtbuffer_s *buffers);
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ static int send_getversion_onreset(FAR struct alt1250_s *dev,
|
|||
set_container_postproc(container, postproc_ponresetseq,
|
||||
(unsigned long)&reset_arg);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ static int send_select_command(FAR struct alt1250_s *dev,
|
|||
set_container_ids(&container, 0, LTE_CMDID_SELECT);
|
||||
set_container_argument(&container, in, nitems(in));
|
||||
|
||||
return altdevice_send_command(dev->altfd, &container, &usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, &container, &usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ static int send_close_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_accepterr, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
@ -188,7 +188,7 @@ static int send_accept_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_accept, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ static int send_bind_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_sockcommon, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ static int send_close_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_sockcommon, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ static int send_connect_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_connect, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ static int send_getsockname_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_getsockname, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ int send_getsockopt_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, func, priv);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ static int send_eventnotice_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, ltecmd->outparam, ltecmd->outparamlen);
|
||||
set_container_postproc(container, NULL, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -445,7 +445,7 @@ int usockreq_ioctl_fwupdate(FAR struct alt1250_s *dev,
|
|||
ltecmd->outparamlen);
|
||||
set_container_postproc(container, postproc_hdlr, postproc_priv);
|
||||
|
||||
ret = altdevice_send_command(dev->altfd, container, usock_result);
|
||||
ret = altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
|
||||
if (IS_NEED_CONTAINER_FREE(ret))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ static int send_actpdn_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_actpdn, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
@ -124,7 +124,7 @@ static int send_radio_command(FAR struct alt1250_s *dev,
|
|||
set_container_postproc(container,
|
||||
on ? postproc_radioon : postproc_radiooff, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
@ -369,7 +369,7 @@ int send_reportnet_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, func, priv);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -201,7 +201,7 @@ int send_lapi_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, ltecmd->outparam, ltecmd->outparamlen);
|
||||
set_container_postproc(container, hdlr, priv);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_LTE_ALT1250_ENABLE_HIBERNATION_MODE
|
||||
|
|
@ -238,7 +238,7 @@ static int send_getversion_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, alt1250_getevtarg(LTE_CMDID_GETVER), 2);
|
||||
set_container_postproc(container, postproc_fwgetversion, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
@ -257,7 +257,7 @@ static int send_register_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, ltecmd->outparam, ltecmd->outparamlen);
|
||||
set_container_postproc(container, postproc_setreport, index);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
@ -355,6 +355,13 @@ static int lte_context_resume(FAR struct alt1250_s *dev,
|
|||
goto error;
|
||||
}
|
||||
|
||||
/* After the retry mode is disabled, the ALT1250 daemon can receive
|
||||
* commands from the ALT1250 and the ALT1250 daemon is ready for normal
|
||||
* operation, so the "is_resuming" flag is disabled.
|
||||
*/
|
||||
|
||||
dev->is_resuming = false;
|
||||
|
||||
/* If the ALT1250 is not powered on, return Resume as failure. */
|
||||
|
||||
power = altdevice_powercontrol(dev->altfd, LTE_CMDID_GET_POWER_STAT);
|
||||
|
|
@ -376,10 +383,6 @@ static int lte_context_resume(FAR struct alt1250_s *dev,
|
|||
dbg_alt1250("Failed to send resume commands.\n");
|
||||
}
|
||||
|
||||
/* Resume phase is over */
|
||||
|
||||
dev->is_resuming = false;
|
||||
|
||||
return ret;
|
||||
|
||||
error:
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ static int send_listen_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_sockcommon, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ static int send_recvfrom_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx++);
|
||||
set_container_postproc(container, postproc_recvfrom, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ static int send_sendto_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_sockcommon, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ static int send_setsockopt_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_sockcommon, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ static int send_shutdown_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_sockcommon, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ static int send_smsinit_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, &dummy_output, 1);
|
||||
set_container_postproc(container, func, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
@ -197,7 +197,7 @@ static int send_smsfin_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, &dummy_output, 1);
|
||||
set_container_postproc(container, func, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
@ -239,7 +239,7 @@ static int send_smssend_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_smssend, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
@ -270,7 +270,7 @@ static int send_smsdelete_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, &dummy_output, 1);
|
||||
set_container_postproc(container, postproc_smsdelete, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
@ -286,7 +286,7 @@ static int send_smsreportrecv_command(FAR struct alt1250_s *dev,
|
|||
|
||||
set_container_ids(&container, 0, LTE_CMDID_SMS_REPORT_RECV);
|
||||
|
||||
return altdevice_send_command(dev->altfd, &container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, &container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ static int send_fctl_command(FAR struct alt1250_s *dev,
|
|||
set_container_postproc(container, cmd == ALTCOM_SETFL ? postproc_setfl :
|
||||
cmd == ALTCOM_GETFL ? postproc_getfl : NULL, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
@ -331,7 +331,7 @@ static int send_socket_command(FAR struct alt1250_s *dev,
|
|||
set_container_response(container, USOCKET_REP_RESPONSE(usock), idx);
|
||||
set_container_postproc(container, postproc_socket, 0);
|
||||
|
||||
return altdevice_send_command(dev->altfd, container, usock_result);
|
||||
return altdevice_send_command(dev, dev->altfd, container, usock_result);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue