Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lte_send_atcmd_sync says inappropriate I/O for device #12309

Open
gcmurray1990 opened this issue May 9, 2024 · 11 comments
Open

lte_send_atcmd_sync says inappropriate I/O for device #12309

gcmurray1990 opened this issue May 9, 2024 · 11 comments

Comments

@gcmurray1990
Copy link

I am using NuttX 12.2.1 on an stm32 nucleo f103rb with a SIM7600G-H to try to use an AT command (via the LTE library).

This is how I am using the AT command:
int customhello_main(int argc, char *argv[])
{
char respbuff[15];
int x = lte_send_atcmd_sync("AT\r", 3,
respbuff, 15,
15);

printf("%s", respbuff);
printf("%d",x);

return 0;
}

In summary I am just sending an AT command hoping to get “OK”, but instead am getting the error code -25 (inappropriate i/o for device). I tried finding more info on this error but it is very general.

How do I set up IO appropriately for AT commands and avoid these issues?

More details:

  • For configuration: I have GPIO debug features enabled. Under stm32 peripheral support, I have USART2 enabled for the SIM . Under I/O I have FILE stream enabled. Under networking, I have late driver init, udp, and tcp enabled. Under LTE I have deprecated API enabled.

  • I have tried using USART1 instead of USART2, but I am getting the same error.

  • Also, when running make, I am seeing this:

CC: chip/stm32_dumpgpio.c In file included from chip/stm32_dumpgpio.c:34:
chip/stm32_dumpgpio.c: In function 'stm32_dumpgpio':
chip/stm32_dumpgpio.c:110:9: warning: format '%x' expects argument of type 'unsigned int', but argument 4 has type 'uint32_t' {aka 'long unsigned int'} [-Wformat=]
110 | _info("GPIO%c pinset: %08x base: %08x -- %s\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
111 | g_portchar[port], pinset, base, msg);
| ~~~~~~
| |
| uint32_t {aka long unsigned int}
chip/stm32_dumpgpio.c:110:28: note: format string is defined here
110 | _info("GPIO%c pinset: %08x base: %08x -- %s\n",
| ~~~^
| |
| unsigned int
| %08lx

@acassis
Copy link
Contributor

acassis commented May 10, 2024

Hi @gcmurray1990 thanks for bring this issue to our attention.

About the warning you can fix using: %"PRIx32"

@SPRESENSE @masayuki2009 any idea why this error is happening?

@gcmurray1990
Copy link
Author

@acassis Thank you for the quick reply. I understand that you all are busy, but is there anything I can do to help, or something I can clarify?

@acassis
Copy link
Contributor

acassis commented May 21, 2024

@gcmurray1990 I never used that LTE API, so I'm not much useful here, however looking the function lte_send_atcmd_sync() at apps/lte/lapi/src/lapi_other.c is seems like it doesn't apply directly to a serial line (this is way you saw -25 error: NOTTY). Look at lapi_req() it communicates with some socket, that is really strange.

I suspect this LTE is not a generic LTE libray, but something specific for Sony ALT1250. If that is the case I think we need to move apps/lte to apps/modem/alt1250.

@SPRESENSE since you are the author of that library, could you please help here?

@SPRESENSE
Copy link
Contributor

Hi, @gcmurray1990
The LTE API is a method to request some to the user-sock daemon which is supporting LTE, like WAPI(Wireless API) of NuttX.
And the user-sock daemon is provided for each network devices which is supporting TCP/IP protocol layer.
Now, the LTE Usersock daemon in NuttX is only for Alt1250.
So, as @acassis said, currently the lapi is only for Sony Alt1250 device.

Please see document below to find a network stack structure in NuttX.
https://github.com/apache/nuttx/blob/master/Documentation/components/net/index.rst

@raiden00pl
Copy link
Contributor

With some changes, LTE lib works also with nrf91 (you just need to get rid of alt1250 specific code).

@acassis
Copy link
Contributor

acassis commented May 23, 2024

@raiden00pl did you get it working?

@raiden00pl
Copy link
Contributor

yes, but this lib is designed to work with socket interface, not a simple serial device. To make this work you have to implement usersock device with LTE_CMDID ioctls like here

static int nrf91_ioctl_ltecmd(int fd, int cmd, unsigned long arg)
(in this case lte_send_atcmd_sync() that uses LTE_CMDID_SENDATCMD is not supported)

@acassis
Copy link
Contributor

acassis commented May 23, 2024

Nice! Thank you @raiden00pl !!! Maybe it could be a reference for @gcmurray1990 !!!

@acassis
Copy link
Contributor

acassis commented May 23, 2024

Maybe we need some board profile example to nRF91, when I git grep CONFIG_LTE_LAPI it only returns boards/arm/cxd56xx/spresense/configs/lte/defconfig

@gcmurray1990
Copy link
Author

@raiden00pl , @acassis , and @SPRESENSE Thank you all for being so helpful and looking into this. I appreciate everyone's time very much.

@acassis
Copy link
Contributor

acassis commented May 23, 2024

You are welcome, if you face some issue integrating usrsocket to support SIM7600G-H please let us know

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants