FORGOT YOUR DETAILS?

CREATE ACCOUNT

Unison Help

  1. Unison Kernel
    1. Pthreads
      1. pthread_create()
      2. pthread_exit()
      3. pthread_self()
      4. pthread_equal()
      5. pthread_join()
      6. pthread_detach()
      7. pthread_setschedparam()
      8. pthread_getschedparam()
      9. pthread_attr_init()
      10. pthread_attr_destroy()
      11. pthread_attr_setstackaddr()
      12. pthread_attr_getstackaddr()
      13. pthread_attr_setstacksize()
      14. pthread_attr_getstacksize()
      15. pthread_attr_setschedparam()
      16. pthread_attr_getschedparam()
      17. pthread_attr_setdetachstate()
      18. pthread_attr_getdetachstate()
      19. pthread_stackinfo()
      20. pthread_setprio()
      21. pthread_getprio()
      22. sched_get_priority_max()
      23. sched_get_priority_min()
      24. sched_yield()
    2. Pthread Cancellation
      1. pthread_cleanup_pop()
      2. pthread_cleanup_push()
      3. pthread_cancel()
      4. pthread_setcanceltype()
      5. pthread_setcancelstate()
      6. pthread_testcancel()
    3. Mutex
      1. pthread_mutex_init()
      2. pthread_mutex_destroy()
      3. pthread_mutex_lock()
      4. pthread_mutex_trylock()
      5. pthread_mutex_unlock()
    4. Semaphores
      1. sem_open()
      2. sem_close()
      3. sem_unlink()
      4. sem_init()
      5. sem_destroy()
      6. sem_wait()
      7. sem_trywait()
      8. sem_timedwait()
      9. sem_post()
      10. sem_getvalue()
    5. Message Queues
      1. mq_open()
      2. mq_close()
      3. mq_unlink()
      4. mq_send()
      5. mq_receive()
      6. mq_notify()
      7. mq_setattr()
      8. mq_getattr()
      9. mq_timedreceive()
      10. mq_timedsend()
    6. Conditional Variables
      1. pthread_cond_init()
      2. pthread_cond_destroy()
      3. pthread_cond_wait()
      4. pthread_cond_timedwait()
      5. pthread_cond_signal()
      6. pthread_cond_broadcast()
      7. pthread_condattr_init()
      8. pthread_condattr_destroy()
    7. Barriers
      1. pthread_barrier_init()
      2. pthread_barrier_destroy()
      3. pthread_barrier_wait()
    8. Timers
      1. timer_create()
      2. timer_delete()
      3. timer_settime()
      4. timer_gettime()
      5. timer_getoverrun()
      6. timer_tick()
      7. nanosleep()
    9. Clocks
      1. time()
      2. uptime()
      3. sleep()
      4. clock_settime()
      5. clock_gettime()
      6. clock_getres()
      7. clock_init()
    10. Memory Allocation
      1. POSIX.1
        1. malloc()
        2. free()
      2. Variable Length (Pools)
        1. pool_create()
        2. pool_destroy()
        3. pool_alloc()
        4. pool_free()
      3. Fixed Length (Partitions)
        1. pt_create()
        2. pt_destroy()
        3. pt_getblock()
        4. pt_freeblock()
    11. Rendezvous
      1. mr_init()
      2. mr_send()
      3. mr_receive()
      4. mr_reply()
      5. mr_sigrecv()
      6. mr_sigpost()
    12. Interrupts
      1. interrupts
      2. i_disable()
      3. i_restore()
    13. Directory Services
      1. dir_register()
      2. dir_deregister()
      3. dir_lookup()
      4. dir_lookup_string()
    14. Miscellaneous
      1. checkIstack()
      2. NanoStart() or DSPexec_Start()
      3. _isrStackFill
      4. Kernel Scaling
      5. kfatal()
      6. kalloc()
      7. kfree()
      8. mpu or mmu
      9. pthreadStackFill
      10. thread_numb()
      11. thread_utilization_start()
      12. thread_utilization_stop()
      13. xprintf()
      14. xputs()
      15. xputchar()
  2. Unison I/O Library
    1. accept()
    2. bind()
    3. chmod()
    4. close()
    5. connect()
    6. creat()
    7. fstat()
    8. getpeername()
    9. getsockname()
    10. getsockopt()
    11. ioctl()
    12. link()
    13. listen()
    14. lseek()
    15. mkdir()
    16. mkfs()
    17. mount()
    18. open()
    19. read()
    20. recv()
    21. recvfrom()
    22. rename()
    23. renameat()
    24. rmdir()
    25. select()
    26. send()
    27. sendto()
    28. setsockopt()
    29. shutdown()
    30. socket()
    31. stat()
    32. sync()
    33. umount()
    34. unlink()
    35. write()
  3. Unison STDIO Library
    1. STDIO Library Calls
      1. clearerr()
      2. dprintf()
      3. fclose()
      4. fdopen()
      5. feof()
      6. ferror()
      7. fileno()
      8. fflush()
      9. fgetc()
      10. fgetpos()
      11. fgets()
      12. fopen()
      13. fprintf()
      14. fputc()
      15. fputs()
      16. fread()
      17. freopen()
      18. fscanf()
      19. fseek()
      20. fseeko()
      21. fsetpos()
      22. ftell()
      23. ftello()
      24. fwrite()
      25. getc()
      26. getc_unlocked()
      27. getchar()
      28. getchar_unlocked()
      29. getdelim()
      30. getline()
      31. gets()
      32. get_stderr_ptr()
      33. get_stdin_ptr()
      34. get_stdout_ptr()
      35. noperprintf()
      36. perprintf()
      37. perror()
      38. posix_compat()
      39. printf()
      40. putc()
      41. putc_unlocked()
      42. putchar()
      43. putchar_unlocked()
      44. puts()
      45. remove()
      46. rewind()
      47. scanf()
      48. setbuf()
      49. setvbuf()
      50. snprintf()
      51. sprintf()
      52. sscanf()
      53. stderr_init()
      54. stderr_close()
      55. stdin_init()
      56. stdin_close()
      57. stdout_init()
      58. stdout_close()
      59. vdprintf()
      60. vscanf()
      61. vsscanf()
      62. vfscanf()
      63. vprintf()
      64. vsnprintf()
      65. vsprintf()
      66. vfprintf()
      67. ungetc()
    2. Do-nothing Stubs
      1. ctermid()
      2. flockfile()
      3. fmemopen()
      4. ftrylockfile()
      5. open_memstream()
      6. pclose()
      7. popen()
      8. tempnam()
      9. tmpfile()
      10. tmpnam()
  4. Unison LIBC Library
    1. LIBC Library Calls
      1. assert()
      2. realloc()
      3. strcasecmp()
      4. strdup()
      5. strncasecmp()
      6. strftime()
    2. Do-nothing Stubs
      1. abort()
      2. execve()
      3. exit()
      4. _Exit()
      5. fork()
      6. getpid()
      7. isatty()
      8. kill()
      9. sbrk()
      10. times()
      11. wait()
    3. Do-nothing Wide-character Stubs
      1. <wchar.h>
      2. <wctype.h>
  5. Unison I/O Servers
    1. File Servers
      1. Multimedia File Server - fsys
      2. FAT File System - fatfs
      3. NAND File Server - nandfsys
      4. NOR File Server - norfsys
      5. Network File Server - nfs
  6. Graphics, Camera, Video, Audio
    1. Vendor Graphics
    2. Prism++ Graphics
    3. ADPCM Services - adpcmd
    4. Camera
  7. Network Protocols
    1. TCP and UDP Server - tcpd
      1. IPv4 only server
      2. IPv4/IPv6 server
    2. DHCP Client Service - dhcp client
    3. DHCP Server - dhcpd
    4. Telnet Server - telnetd
    5. Tiny FTP Server - tftpd
    6. Point to Point - pppd
    7. Network Translation - NAT with PAT
    8. Firewall
      1. Packet filter: pf
      2. Packet filter control: pfctl
      3. Fitler rules: pf.filtering
      4. Translation rules: pf.nat
    9. Tiny HTTP Server - thttpd
    10. Tiny HTTP Server with TLS
    11. POP3 Server
    12. Simple Mail Transfer Protocol Services (SMTP)
    13. Bootp Protocol
    14. File Transfer Protocol Server (FTP)
    15. File Transfer Client Services
    16. RPC / XDR
    17. DNS Client
    18. HTTP/HTTPS Client
    19. REST Client
    20. AutoIP Service - autoip client
    21. mDNS server - mdnsd
    22. SNTP Client
    23. SNMP Agent - Snmpd server
    24. SSL/TLS library
    25. SSH server
    26. IP security
      1. IPsec description
      2. IPsec administration: ipsecadm
      3. Virtual Private Network: VPN
    27. Power Control
      1. Motor and Motion Control Servers
      2. PWM, Encoders
    28. Serial I/O
      1. Asynchronous Serial I/O Server - ttyserver
      2. CAN Server - cand
      3. I2C Server - i2cd
      4. I2S Server - i2sd
    29. System Services
      1. Power Management Servers
      2. Login Service - login_services
      3. XML
      4. POSIX Shell and Login Service - posh
    30. Universal Serial Bus (USB)
      1. USB Server
      2. USB Device Server
      3. USB Embedded Host Server
    31. Wireless
      1. Wireless Servers and Drivers
      2. 802.15.4 Radio Servers
      3. TCP/v6 with 6loWPAN
      4. ZigBee
      5. BlueTooth Server
      6. 802.11 Wi-Fi
      7. GPRS, UHF and GPS Radio Servers
    32. Remedy Tools for Unison
      1. Remedy Data Logging and Event Display Tools
      2. Remedy Diagnostics
      3. Remedy Flash Downloader/Bootloader
      4. Remedy Power On Self Test - POST
      5. Remedy OS Object Viewer
      6. Remedy Remote Control Tools

7.28.1.Asynchronous Serial I/O Server - ttyserver #

NAME

Asynchronous Serial I/O – ttyserver

SYNOPSIS

#include <sys/ioctl.h>
#include <sys.h>
#include <fcntl.h>

pthread_create(&pid, &attr, &tty_shell, 0)

int _tty_server(char *init, int_8 *arg)

 

DESCRIPTION

The asynchronous serial I/O server or ttyserver provides the ability to input and output serial characters at baud rates upto and including 115200 using a variety of stop,

data and parity options. It has a variety of flow control choices which may be set including hardware flow control, software flow control and no flow control. It has a variety of setpoints

which can be used to generate early interrupts and achieve maximum throughput for the server.

The ttyserver provides the target with simple terminal communications in both the standard COOKED and RAW modes.

SPECIFIC OPTIONS (Compile time)

Option Default Description Values
TTY_RAW_SUPPORT 1 Enable/disable RAW discipline support. Dec: 0 | 1
TTY_NETDISC_SUPPORT 0 Enable/disable line discipline support for debugger. Dec: 0 | 1
TTY_PPP_SUPPORT 1 Enable/disable PPP discipline support. Dec: 0 | 1
TTY_RS485_RS422 1 Enable/disable RS-485/RS-422 support. Dec: 0 | 1
TTY_POLLING_TO 100 TTY polling timeout, in milliseconds. Decimal

 

Line Disciplines

The server supports specific ioctl() flags (commands) to initialize and control various line disiplines.

TIOCSETD

This option allows you to setup the terminal I/O line discipline. The following are arguments that can be used:

NETLDISC

This is a special option required to support communication with Remedy over serial lines.

TTYLDISC

This option sets the TTY line discipline for COOKED mode (regular edit mode). This means that backspace characters etc. will be performed by the TTY server in its receive buffer before the data is handed to the

user. It will only pass the data to the user when a carriage return has been received.

RAWLDISC

This line discipline is called RAW mode. This means that the server will not interpret received characters in any way before passing them to the user. This option also turns off flow control in RAW mode.

RAWFLDISC

This option turns on flow control in RAW mode.

ECHO

This option turns on local echo of characters being transmitted in COOKED mode.

NOECHO

This option turns off local echo of characters being transmitted in COOKED mode.

PPPLDISC

ppp discipline

PPPFSLDISC

ppp discipline with flow control software

PPPFHLDISC

ppp discipline with flow control hardware

SET_TTY_MODE

Allows you to set mode parameters for each serial port channel. Parameters are passed as members of the structure set_tty.

This structure can be found in the file ioctl.h

 struct set_tty {
       uint_8 csize;
       uint_8 parity;
       uint_8 flow;
       uint_32 speed;
       uint_8 stop_bits;
       uint_8 tty_int_level;
       uint_16 timeout_write;
       uint_16 rx_buf_size;
       uint_16 tx_buf_size;
 }

Note:

• The csize parameter specifies the character size to use. For example: 5,6,7 or 8.

• The parity parameter specifies the parity bits to use. This value should be: NO_PARITY, EVEN_PARITY or ODD_PARITY.

• The flow parameter specifies whether or not to use hardware flow control. Specify: NO_FLOWCONTROL, CTS_FLOWCONTROL, RTS_FLOWCONTROL, RTSCTS_FLOWCONTROL or XONXOFF_FLOWCONTROL.

• The speed parameter specifies the channel speed. This value will be written into the chip UART baudrate register, and must be calculated depending on the chip clock settings.

• The stop_bits parameter specifies the channel stop bits to use.

• The tty_int_level parameter must be set to the interrupt vector that the channel of the corresponding hardware UART will be using.

• The timeout_write parameter specifies the channel data write timeout. This value will be used if flow control is used. If the timeout_write parameter is set to zero, the timeout mechanism will not be used.

• The rx_buf_size is the size of the receive buffer.

• The tx_buf_size is the size of the transmit buffer.

 

Access Options

The server can be accessed in both blocking and non-blocking mode. By default the server is set to blocking mode. To use non-blocking I/O, use the O_NONBLOCK flag (defined in fcntl.h) with the open() function.

/* open path as read-only and non-blocking. */
open (path, O_RDONLY|O_NONBLOCK);

The server also supports use the select() function.

int tty0_fd;
fd_set read_fds;
struct timeval tv;
.
.
.
FD_ZERO (&read_fds);
FD_SET (tty0_fd, &read_fds);

/* set the timeout value (10 seconds). */
tv.tv_sec = 10; tv.tv_usec = 0;

/* block on a select */
select (tty0_fd+1, &read_fds, NULL, NULL, &tv));

 

Server Initialization

To initialize, the server is passed two parameters. The first parameter is an array of configuration structures for each of the ports that will be used.

For example:

        struct set_tty tty_setup[2];
        
        tty_setup[0].csize              = 8;
        tty_setup[0].parity             = NO_PARITY;
        tty_setup[0].flow               = NO_FLOWCONTROL;
        tty_setup[0].speed              = BAUD_VALUE;
        tty_setup[0].stop_bits          = 1;
        tty_setup[0].tty_int_level      = 5;
        tty_setup[0].timeout_write      = 0;
        tty_setup[0].rx_buf_size        = 64;
        tty_setup[0].tx_buf_size        = 32;

        tty_setup[1].csize              = 8;
        tty_setup[1].parity             = NO_PARITY;
        tty_setup[1].flow               = NO_FLOWCONTROL;
        tty_setup[1].speed              = BAUD_VALUE;
        tty_setup[1].stop_bits          = 1;
        tty_setup[1].tty_int_level      = 5;
        tty_setup[1].timeout_write      = 0;
        tty_setup[1].rx_buf_size        = 128;
        tty_setup[1].tx_buf_size        = 32;

The second parameter is an array of port numbers that will be initialized. Set the number of ports to initialize in an array with -1 terminating the list.

For example:

char tty_map[]= { 0, 2, …-1};

Where:

‘0’ – ttyS0 (UART0 on hardware)

‘2’ – ttyS2 (UART2 on hardware)

 

EXAMPLE

...
THREAD Main()
{
	pthread_t pid;
	pthread_attr_t attr;
	struct sched_param myNewPriority;
	pthread_t serverid;
	struct set_tty *set_tty;
	int ioctl_arg;
	
	pthread_attr_init(&attr);
	myNewPriority.sched_priority = 5; 
	pthread_attr_setschedparam(&attr, &myNewPriority); 
	pthread_attr_setstacksize(&attr,1024);
	
	
	if(pthread_create(&pid, &attr, &tty_shell, 0)!=0)
	{
		xprintf("pthread_create = %d\n", errno);
		pthread_exit(0);
	}       
	
	sched_yield();  // let tty server initialize before any sends to it
	if(dir_register("/dev/ttyS", pid, TYPE_SERVER)==0)
	{
		xprintf("dir_register = %d\n", errno);
		pthread_exit(0);
	}
	
	set_tty = malloc(sizeof(struct set_tty));
	
	set_tty->csize         = 8;
	set_tty->parity        = NO_PARITY;
	set_tty->flow          = NO_FLOWCONTROL;
	set_tty->speed         = BAUD_RATE;
	set_tty->stop_bits     = 1;
	set_tty->tty_int_level = 4;     
	set_tty->timeout_write = 0;     
	
	ioctl(fd1,SET_TTY_MODE,set_tty);
	
	ioctl_arg = ECHO;
	ioctl( fd1, TIOCSETD, &ioctl_arg);

...
}

THREAD tty_shell(void *arg)
{       
	struct set_tty tty_setup[1];
	
	int_8 tty_map[]= {1,-1};     /* ttyS1*/
	
	tty_setup[0].csize          = 8;
	tty_setup[0].parity         = NO_PARITY;
	tty_setup[0].flow           = NO_FLOWCONTROL;
	tty_setup[0].speed          = BAUD_VALUE;
	tty_setup[0].stop_bits      = 1;
	tty_setup[0].tty_int_level  = 5;
	tty_setup[0].timeout_write  = 0;
	tty_setup[0].rx_buf_size    = 64;
	tty_setup[0].tx_buf_size    = 32;
	
	/* Start tty server */
	if(_tty_server((char*)&tty_setup, &tty_map[0])==-1)
	{
		xprintf("Error init tty server ERRNO=%x\n",errno);
		pthread_exit(0);
	}

	return 0;     // just to avoid warning
}

 

NOTES

There is a demo available for the Unison and DSPnano Asynchronous Serial I/O which can be found in installdir/demos.

 

SEE ALSO

close(), open(), read(), write(), ioctl(), select()

Suggest Edit

CONTACT US

TO GET YOUR PROJECT STARTED

TOP