# Use legato API to open ttyUSB0 and got error

**URL:** <https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512>\
**Category:** FX30\
**Created:** [July 26, 2022, 7:58am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512 "2022-07-26T07:58:02Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![larry1](https://avatars.discourse-cdn.com/v4/letter/l/f14d63/32.png) [@larry1](https://forum.sierrawireless.com/u/larry1)\
**Post date:** [July 26, 2022, 7:58am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/1 "2022-07-26T07:58:02Z")

</div>

Hi,

I want to use legato API to read ttyUSB0, but i can’t open ttyUSB0.

#include “legato.h”  
#include “le\_tty.h”

COMPONENT\_INIT  
{  
int SerialPortFd = -1;  
int ret = 0 , num\_ret = 0;  
char buf[1024] = {0};

```
SerialPortFd = le_tty_Open("/dev/ttyUSB0" , O_RDWR | O_NOCTTY | O_NDELAY );
...

```

}

Error log  
 ![image](https://us1.discourse-cdn.com/flex025/uploads/sierrawireless/original/2X/1/13328b2fbc7aad7a1ce04dda3ea5d6d035300acc.png)

I can find my device like below:  
 ![image](https://us1.discourse-cdn.com/flex025/uploads/sierrawireless/original/2X/d/db9662399963bac9c76d32b6bdf1f8c75a32dfec.png)

I don’t know why!

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex025/user_avatar/forum.sierrawireless.com/jyijyi/32/4766_2.png) [@jyijyi](https://forum.sierrawireless.com/u/jyijyi)\
**Post date:** [July 26, 2022, 8:14am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/2 "2022-07-26T08:14:50Z")

</div>

are you using unsandboxed legato application?

---

<div class="post-metadata">

**Author:** ![larry1](https://avatars.discourse-cdn.com/v4/letter/l/f14d63/32.png) [@larry1](https://forum.sierrawireless.com/u/larry1)\
**Post date:** [July 26, 2022, 8:19am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/3 "2022-07-26T08:19:28Z")

</div>

> [@jyijyi](#):
>
> unsandboxed

Hi @jyijyi ,

I can’t understand what is “unsandboxed” ?

I follow APP doc to write myAPP.

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex025/user_avatar/forum.sierrawireless.com/jyijyi/32/4766_2.png) [@jyijyi](https://forum.sierrawireless.com/u/jyijyi)\
**Post date:** [July 26, 2022, 8:21am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/4 "2022-07-26T08:21:13Z")

</div>

if it is sandboxed, it cannot see there is /dev/ttyUSB0.  
you need to go to .adef and add:  
sandboxed: false

> **[Application Definition .adef - Legato Docs](https://docs.legato.io/latest/defFilesAdef.html#defFilesAdef_sandboxed)**
>
> legato™ is an open source Linux-based embedded platform designed to simplify connected IoT application development

If you still want to use sandboxed feature, you can see this application note:

> **[AirPrime - WP Series and FX30 - UART to TCP App](https://source.sierrawireless.com/resources/airprime/application_notes_and_code_samples/airprime_wp_series_and_fx30_uart_to_tcp_app/#sthash.FXImwru7.dpbs)**
>
> This package contains a simple app to open a TCP socket and connect it to a local UART, and a technical note that describes the app.

In .cdef, you need to add something like:

requires:  
{

```auto
   device:
   {
        [rw] /dev/ttyHSL1 /dev/ // WP UART2 mangOH debug Console
        [rw] /dev/ttyHS0 /dev/ // WP UART2 or IoT Connector UART
// [rw] /dev/ttyHSL0 /dev/ // FX30S UART   
   }
}

```

---

<div class="post-metadata">

**Author:** ![larry1](https://avatars.discourse-cdn.com/v4/letter/l/f14d63/32.png) [@larry1](https://forum.sierrawireless.com/u/larry1)\
**Post date:** [July 26, 2022, 8:33am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/5 "2022-07-26T08:33:46Z")

</div>

> [@jyijyi](#):
>
> requires:  
> {
> 
> ```auto
> device:
> {
> [rw] /dev/ttyHSL1 /dev/ // WP UART2 mangOH debug Console
> [rw] /dev/ttyHS0 /dev/ // WP UART2 or IoT Connector UART
> // [rw] /dev/ttyHSL0 /dev/ // FX30S UART   
> }
> }
> 
> ```

Hi @jyijyi ,

Thanks for your help.

I fixed the problem.

may I have other question about print log?

I want to use “printf” to print log on console, but it seems not work.

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex025/user_avatar/forum.sierrawireless.com/jyijyi/32/4766_2.png) [@jyijyi](https://forum.sierrawireless.com/u/jyijyi)\
**Post date:** [July 26, 2022, 8:41am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/6 "2022-07-26T08:41:46Z")

</div>

you can see here:

> **[\[Solved\]\[Systems\] need to know a command line](https://forum.mangoh.io/t/solved-systems-need-to-know-a-command-line/2136/13)**
>
> You can try attached hello1.rar using scanf(). hello1.rar (83.5 KB) root@swi-mdm9x28-wp:~# app runProc hello1 hello1 --exe=hello1 Enter any character 1 Entered character is 1 Enter any string ( upto 100 character ) qwert Entered string is qwert ^C...

---

<div class="post-metadata">

**Author:** ![larry1](https://avatars.discourse-cdn.com/v4/letter/l/f14d63/32.png) [@larry1](https://forum.sierrawireless.com/u/larry1)\
**Post date:** [July 26, 2022, 9:08am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/7 "2022-07-26T09:08:55Z")

</div>

Hi @jyijyi ,

Thanks for your help. I will read it.

Now I try to read ttyUSB0 like

num\_ret = read(SerialPortFd, buf, sizeof(buf));  
usleep ((7 + 25) \* 1000);  
buf[num\_ret+1] = ‘\0’;  
if (num\_ret \> 0) {  
LE\_ERROR(“read result: %s\n”, buf, num\_ret);  
sprintf(cmd, “echo "%s" \> /tmp/test.log”,buf);  
system(cmd);  
}

I can see the length \> 0, but i can’t get the string

but I can use “cat” to get result.

Why?

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex025/user_avatar/forum.sierrawireless.com/jyijyi/32/4766_2.png) [@jyijyi](https://forum.sierrawireless.com/u/jyijyi)\
**Post date:** [July 26, 2022, 9:12am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/8 "2022-07-26T09:12:15Z")

</div>

why don’t you print it out in LE\_INFO()?  
you can print the %i instead of %s as there might be NULL character

---

<div class="post-metadata">

**Author:** ![larry1](https://avatars.discourse-cdn.com/v4/letter/l/f14d63/32.png) [@larry1](https://forum.sierrawireless.com/u/larry1)\
**Post date:** [July 27, 2022, 1:51am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/9 "2022-07-27T01:51:23Z")

</div>

Hi @jyijyi

I got a error from update but I can’t find the detail log, please help me

 ![image](https://us1.discourse-cdn.com/flex025/uploads/sierrawireless/original/2X/5/5f1e0e013ff3a232d9d8a994844f041f4279f42e.png)

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex025/user_avatar/forum.sierrawireless.com/jyijyi/32/4766_2.png) [@jyijyi](https://forum.sierrawireless.com/u/jyijyi)\
**Post date:** [July 27, 2022, 1:54am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/10 "2022-07-27T01:54:06Z")

</div>

Not sure if you compiled with the correct legato version…

you can try with a simple helloworld application first which should be able to download to the module.  
If it works, port the code to it line by line and see which line makes the update failed.

---

<div class="post-metadata">

**Author:** ![larry1](https://avatars.discourse-cdn.com/v4/letter/l/f14d63/32.png) [@larry1](https://forum.sierrawireless.com/u/larry1)\
**Post date:** [July 27, 2022, 2:07am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/11 "2022-07-27T02:07:14Z")

</div>

Hi @jyijyi ,

I used it yesterday, but it can’t work now

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex025/user_avatar/forum.sierrawireless.com/jyijyi/32/4766_2.png) [@jyijyi](https://forum.sierrawireless.com/u/jyijyi)\
**Post date:** [July 27, 2022, 2:11am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/12 "2022-07-27T02:11:58Z")

</div>

does “logread” command show any reason on this?  
I never see this before, maybe you need to redownload FW?

---

<div class="post-metadata">

**Author:** ![larry1](https://avatars.discourse-cdn.com/v4/letter/l/f14d63/32.png) [@larry1](https://forum.sierrawireless.com/u/larry1)\
**Post date:** [July 27, 2022, 7:21am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/13 "2022-07-27T07:21:04Z")

</div>

Hi @jyijyi ,

I fixed it, I have other question about read result,

I use “stty” to set the com port and use “cat” to read result like below:  
 ![image](https://us1.discourse-cdn.com/flex025/uploads/sierrawireless/original/2X/f/f1fdb87954e05a041b0494b2002c018a08cd5f47.png)

But I use API it can not get the result.

SerialPortFd = le\_tty\_Open(“/dev/ttyUSB0” , O\_RDWR);  
ret = le\_tty\_SetBaudRate(SerialPortFd, LE\_TTY\_SPEED\_1152000);  
ret = le\_tty\_SetFraming(SerialPortFd, ‘N’, 8, 1);  
ret = le\_tty\_SetRaw(SerialPortFd, 0, 0);  
…  
num\_ret = read(SerialPortFd, buf, sizeof(buf));

Is my setting the same as “stty” ?

Please help me thanks.

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex025/user_avatar/forum.sierrawireless.com/jyijyi/32/4766_2.png) [@jyijyi](https://forum.sierrawireless.com/u/jyijyi)\
**Post date:** [July 27, 2022, 7:39am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/14 "2022-07-27T07:39:51Z")

</div>

The easiest way is you use unsandboxed legato app, and run system(“cat /dev/ttyUSB0 \> /tmp/test.txt”)  
After you can read the file in your app

---

<div class="post-metadata">

**Author:** ![larry1](https://avatars.discourse-cdn.com/v4/letter/l/f14d63/32.png) [@larry1](https://forum.sierrawireless.com/u/larry1)\
**Post date:** [July 27, 2022, 7:51am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/15 "2022-07-27T07:51:26Z")

</div>

> [@jyijyi](#):
>
> After

But I don’t want to use “cat” because I want to save the result in the buffer.

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex025/user_avatar/forum.sierrawireless.com/jyijyi/32/4766_2.png) [@jyijyi](https://forum.sierrawireless.com/u/jyijyi)\
**Post date:** [July 27, 2022, 7:58am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/16 "2022-07-27T07:58:06Z")

</div>

You can read the content of the file and save the result in your buffer…

BTW, you can try this UART\_TEST1 app and see if it works on your environment:

> **[\[WP7605\]\[SW\] Testing 8-wire UART1 by ioctrl( )](https://forum.legato.io/t/wp7605-sw-testing-8-wire-uart1-by-ioctrl/5533/3)**
>
> Yes I know, but Sierra requested whether R17 ioctrl() worked correctly as customer’s requirement. This is customer validation status. So we would like to know whether issue was caused by either source code or yocto FW. Sorry for inconvenient you,...

---

<div class="post-metadata">

**Author:** ![larry1](https://avatars.discourse-cdn.com/v4/letter/l/f14d63/32.png) [@larry1](https://forum.sierrawireless.com/u/larry1)\
**Post date:** [July 27, 2022, 8:17am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/17 "2022-07-27T08:17:11Z")

</div>

Hi @jyijyi ,

I think read and write the same file that is a problem in multi thread.

I will ty UART\_Test1.rar

---

<div class="post-metadata">

**Author:** ![larry1](https://avatars.discourse-cdn.com/v4/letter/l/f14d63/32.png) [@larry1](https://forum.sierrawireless.com/u/larry1)\
**Post date:** [July 28, 2022, 3:25am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/18 "2022-07-28T03:25:06Z")

</div>

Hi @jyijyi ,

I tested UART\_Test1.rar and I got some conclusions.

1. I only use OpenPort(), then it doesn’t work.
2. I only use le\_tty\_xxx API to setup and open, the it doesn’t work too.
3. I use OpenPort() + le\_tty\_SetRaw(), then it worked, so I want to know what diffrernt between le\_tty\_SetRaw and OpenPort() to set RAW step ?

Thanks!

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex025/user_avatar/forum.sierrawireless.com/jyijyi/32/4766_2.png) [@jyijyi](https://forum.sierrawireless.com/u/jyijyi)\
**Post date:** [July 28, 2022, 3:32am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/19 "2022-07-28T03:32:38Z")

</div>

I think it related to c\_iflag, c\_lflag and c\_oflag of the port setting.

you can see the source code of le\_tty\_SetRaw() here:

> <https://github.com/legatoproject/legato-af/blob/master/framework/liblegato/linux/tty.c>

---

<div class="post-metadata">

**Author:** ![larry1](https://avatars.discourse-cdn.com/v4/letter/l/f14d63/32.png) [@larry1](https://forum.sierrawireless.com/u/larry1)\
**Post date:** [July 28, 2022, 6:12am UTC](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512/20 "2022-07-28T06:12:46Z")

</div>

Hi @jyijyi ,

Thanks for your help and I keep try to find out which settings will affect.

And I have other question.

1. I can’t use printf to print to my ssh window by following hello1.rar, I use command “app runProc XXX XXX --exe=XXX” but I still can see the log in “logread”.
2. I print log to LE\_INFO, my question is that function have limit ? because I saw the log and check string length is 162 but it doesn’t show all the string.

 ![image](https://us1.discourse-cdn.com/flex025/uploads/sierrawireless/original/2X/8/8b8277ffdd323e9ce69c3094ed1635b6073eeb12.png)

[Next page](https://forum.sierrawireless.com/t/use-legato-api-to-open-ttyusb0-and-got-error/27512.md?page=2)
