# How to use the UART1 with an APP -- Development Studio 5.1

**URL:** https://forum.legato.io/t/how-to-use-the-uart1-with-an-app-development-studio-5-1/2532
**Category:** Legato Application Framework
**Created:** [July 12, 2017, 7:00am UTC](https://forum.legato.io/t/how-to-use-the-uart1-with-an-app-development-studio-5-1/2532 "2017-07-12T07:00:38Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![lumao](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.legato.io/lumao/32/167_2.png) [@lumao](https://forum.legato.io/u/lumao)
#### Post date: [July 12, 2017, 7:00am UTC](https://forum.legato.io/t/how-to-use-the-uart1-with-an-app-development-studio-5-1/2532/1 "2017-07-12T07:00:38Z")

</div>

Map service (​Customer Linux application) to uart1 by :

```
root@swi-mdm9x15:~# microcom -E /dev/ttyAT
AT!MAPUART?
!MAPUART: 1,16

OK
AT!MAPUART=17,1
OK
AT!MAPUART?
!MAPUART: 17,16

OK
root@swi-mdm9x15:~# reboot -n

```

To Built my app project with :  
uartStd.c:

```
#include"legato.h"
//#include"interface.h"

int open_port(void)
{
  int fd; /* File descriptor for the port */

  fd = open("/dev/ttyHS0", O_RDWR | O_NOCTTY | O_NDELAY); /*uart1*/
  //fd = open("/dev/ttyHSL1", O_RDWR | O_NOCTTY | O_NDELAY); /*uart2*/

  if (fd == -1)
  {
  /*
  * Could not open the port.
  */
    perror("open_port: Unable to open /dev/ttyHSL1 - ");
  }
  else
     fcntl(fd, F_SETFL, 0);

  return (fd);
}

void ledTimer(le_timer_Ref_t t)
{
	//to do
	//printf("==== hello UART test =====\r");
}
//--------------------------------------------------------------------------------------------------
/**
 * Main program starts here
 */
//--------------------------------------------------------------------------------------------------
COMPONENT_INIT
{
	LE_INFO("=============== Hello UART . ===============");
	int uart_fd = open_port();
	int n = write(uart_fd, "ATZ\r", 4);
	if (n < 0)
	    fputs("write() of 4 bytes failed!\n", stderr);

	LE_INFO("Attempt to output to UART produces: %d", n);

	le_timer_Ref_t ledTimerRef = le_timer_Create("LED Timer");
	le_timer_SetMsInterval(ledTimerRef, 1000);
	le_timer_SetRepeat(ledTimerRef, 0);
	le_timer_SetHandler(ledTimerRef,ledTimer);
	le_timer_Start(ledTimerRef);
}

```

Component.cdef :

```
sources:
{
    uartStd.c
}

requires:
{
    device:
    {
    	// Get read and write access to the UART1 port.
        [rw] /dev/ttyHS0 /dev/ttyHS0
    }
}

```

uartStd.adef :

```
version: 1.0.10

executables:
{
	uart1Ctrl = ( uartStdComponent )
}

processes:
{
	envVars:
	{
		LE_LOG_LEVEL = DEBUG
	}
	run:
	{
		( uart1Ctl )
	}
}

```

Run on the legato, output the logs:

```
Jan 6 00:37:42 | supervisor[464]/supervisor T=main | app.c CreateFileLink() 1504 | Created file link '/tmp/legato/serviceDirectoryClient' to '/legato/systems/current/appsWriteable/uartStd/tmp/legato/serviceDirectoryClient'.
Jan 6 00:37:42 | supervisor[464]/supervisor T=main | resourceLimits.c SetRLimitValue() 282 | Setting resource limit maxCoreDumpFileBytes to value 102400.
Jan 6 00:37:42 | supervisor[464]/supervisor T=main | resourceLimits.c SetRLimitValue() 282 | Setting resource limit maxFileBytes to value 102400.
Jan 6 00:37:42 | supervisor[464]/supervisor T=main | resourceLimits.c SetRLimitValue() 282 | Setting resource limit maxLockedMemoryBytes to value 8192.
Jan 6 00:37:42 | supervisor[464]/supervisor T=main | resourceLimits.c SetRLimitValue() 282 | Setting resource limit maxFileDescriptors to value 256.
Jan 6 00:37:42 | supervisor[464]/supervisor T=main | resourceLimits.c SetRLimitValue() 282 | Setting resource limit maxMQueueBytes to value 512.
Jan 6 00:37:42 | supervisor[464]/supervisor T=main | resourceLimits.c SetRLimitValue() 282 | Setting resource limit maxThreads to value 20.
Jan 6 00:37:42 | supervisor[464]/supervisor T=main | resourceLimits.c SetRLimitValue() 282 | Setting resource limit maxQueuedSignals to value 100.
Jan 6 00:37:42 | supervisor[464]/supervisor T=main | proc.c proc_Start() 1190 | Starting process 'uart1Ctl' with pid 7568
Jan 6 00:37:42 | supervisor[7568]/supervisor T=main | proc.c proc_Start() 1155 | Execing 'uart1Ctl'
Jan 6 00:37:42 | supervisor[7568]/supervisor T=main | proc.c proc_Start() 1167 | Could not exec 'uart1Ctl'. No such file or directory.
Jan 6 00:37:42 | supervisor[464]/supervisor T=main | proc.c proc_SigChildHandler() 1942 | Process 'uart1Ctl' (PID: 7568) has exited with exit code 1.
Jan 6 00:37:42 | supervisor[464]/supervisor T=main | proc.c GetFaultAction() 1744 | No fault action specified for process 'uart1Ctl'. Assuming 'ignore'.
Jan 6 00:37:43 | supervisor[464]/supervisor T=main | app.c app_SigChildHandler() 3221 | Process 'uart1Ctl' in app 'uartStd' faulted: Ignored.
Jan 6 00:37:43 | _appStopClient[7569]/framework T=main | LE_FILENAME CreateSocket() 550 | Socket opened as standard i/o file descriptor 2!
Jan 6 00:37:43 | supervisor[464]/supervisor T=main | apps.c DeactivateAppContainer() 340 | Application 'uartStd' has stopped.

```

Any advise for my issue, thanks.

Best Regards!

---

<div class="post-metadata">

### Author: ![CoRfr](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.legato.io/corfr/32/69_2.png) [@CoRfr](https://forum.legato.io/u/CoRfr)
#### Post date: [July 13, 2017, 8:32am UTC](https://forum.legato.io/t/how-to-use-the-uart1-with-an-app-development-studio-5-1/2532/2 "2017-07-13T08:32:52Z")

</div>

Hi @lumao,

Interesting issue, if you try `microcom /dev/ttyHS0` can it open the port?  
Which firmware version are you using?

Can you give the result of `cat /sys/devices/platform/msm_serial_hs.0/config` as well just to make sure.

Thanks

---

<div class="post-metadata">

### Author: ![lumao](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.legato.io/lumao/32/167_2.png) [@lumao](https://forum.legato.io/u/lumao)
#### Post date: [July 13, 2017, 8:57am UTC](https://forum.legato.io/t/how-to-use-the-uart1-with-an-app-development-studio-5-1/2532/3 "2017-07-13T08:57:43Z")

</div>

Hi,

```
root@swi-mdm9x15:~# microcom /dev/ttyHS0
root@swi-mdm9x15:~# microcom /dev/ttyHS0
root@swi-mdm9x15:~# cat /sys/devices/platform/msm_serial_hs.0/config 
APP
root@swi-mdm9x15:~# cat /sys/devices/platform/msm_serial_hs.0/config
APP
root@swi-mdm9x15:~# cm info
Device: WP8548
IMEI: 35xx7706004xxxx
FSN: LLxx2300101xxx
Firmware: SWI9X15Y_07.11.22.00 r33729 CARMD-EV-FRMWR1 2017/01/11 18:04:06
Bootloader: SWI9X15Y_07.11.22.00 r33729 CARMD-EV-FRMWR1 2017/01/11 18:04:06
priIdPn: 9906xx1
priIdRev: 01.00
skuId: 1103xxx
root@swi-mdm9x15:~# cm legato
This service does not exist.
root@swi-mdm9x15:~# legato version
16.10.1_a6a25fbda05738774857dccb9fd76a99_modified
root@swi-mdm9x15:~#

```

---

<div class="post-metadata">

### Author: ![lumao](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.legato.io/lumao/32/167_2.png) [@lumao](https://forum.legato.io/u/lumao)
#### Post date: [July 13, 2017, 9:00am UTC](https://forum.legato.io/t/how-to-use-the-uart1-with-an-app-development-studio-5-1/2532/4 "2017-07-13T09:00:58Z")

</div>

I don’t know how to open the uart port also.  
When I type :

```
`microcom /dev/ttyHS0`

```

it return nothing, so I type

```
`Ctrl +x` 

```

back to the command line.

---

<div class="post-metadata">

### Author: ![raf](https://avatars.discourse-cdn.com/v4/letter/r/848f3c/32.png) [@raf](https://forum.legato.io/u/raf)
#### Post date: [July 13, 2017, 11:39pm UTC](https://forum.legato.io/t/how-to-use-the-uart1-with-an-app-development-studio-5-1/2532/5 "2017-07-13T23:39:55Z")

</div>

HI @lumao,

Not sure if you’ve noticed but in `uartStd.adef` you have defined the executable **uart1Ctrl** but are trying to run the process **uart1Ctl** - they don’t match.

Try:

```auto
executables:
{
	uart1Ctrl = ( uartStdComponent )
}

processes:
{
	envVars:
	{
		LE_LOG_LEVEL = DEBUG
	}
	run:
	{
		( uart1Ctrl )
	}
}

```

Raf

---

<div class="post-metadata">

### Author: ![lumao](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.legato.io/lumao/32/167_2.png) [@lumao](https://forum.legato.io/u/lumao)
#### Post date: [July 14, 2017, 12:56am UTC](https://forum.legato.io/t/how-to-use-the-uart1-with-an-app-development-studio-5-1/2532/6 "2017-07-14T00:56:34Z")

</div>

Hi,  
It make sense.  
using ‘uartStd’ instead of ‘uartCtrl’ . Now it is working. Thank you for all of your help.

updated uartStd.adef :  
version: 1.0.10

```
executables:
{
	uartStd = ( uartStdComponent )
}

processes:
{
	envVars:
	{
		LE_LOG_LEVEL = DEBUG
	}
	run:
	{
		( uartStd )
	}
} 

```

regards.
