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.30.1.USB Server #

NAME

USB Embedded Host and Device server

SYNOPSIS

#include <sys.h>
#include <stdio.h>
#include <usb.h>
#include <device.h>

int usb_server(tUSB_config * config);

DESCRIPTION

The Unison USB server is complex USB OTG, Device and HOST solution. Depending of requirements it can provide USB HOST or USB Device or both Host+Device functionality. USB server can manage and switching USB roles.

USB server can be started as USB_DEVICE, USB_HOST or USB_OTG server.

Key Features:

· Automatic start usbh or usbd servers depending of start configuration
· Automatic detection and switching USB role by UBD_ID pin
· Manual switching between HOST and DEVICE roles

USB server structure

The usb server is instantiated with the command:
usb_server(&usb_config);

int usb_server(tUSB_config * config);

The main configuration is sended to usb server in tUSB_config config variable

typedef struct
{
	tUSB_core_conf *core_conf;
	pthread_t (* host)(void *);
	pthread_t (* dev) (void *);
} tUSB_config;

core_conf – configuration of USB ports (one or more). Each USB port can be configured to work in different mode.

pthread_t (* host)(void *), pthread_t (* dev) (void *) – are pointers to start functions for USB HOST and DEVICE. It must be a usbh_start and usbd_start.

If your want to use only USB HOST or only USB DEVICE on all available USB ports you must fill only host or dev field.

Example:

tUSB_config usb_config;
tUSB_core_conf usb_cores[2];

	usb_config.core_conf = usb_cores;
	usb_config.host = (void*)usbh_start;
	usb_config.dev  = (void*)usbd_start;

tUSB_core_conf – main configuration data for USB ports. It must be array of configuration for each port. In last array element field CoreID must be “-1” value.

typedef struct
{
	void(* usb_callback)(tUSB_event evt, void * param);
	signed char CoreID;
	int mode;
	usb_list_param param;
} tUSB_core_conf;

usb_callback – refers to the callback function for current port of USB server. This function is evoked by service events such as:

	_USBH_CON_EVT 			//USB HOST detect connected device to its port
	_USBH_DISCON_EVT  		//USB HOST detect disconnect device from its port
	_USBH_PWR_EVT     		//USB HOST detect power failure
	_USBH_VBUS_EVT    		//USB HOST detect vbus error event (overcurrent)
	_USBD_CON_EVT  			//USB DEVICE was connected to host
	_USBD_DISCON_EVT  		//USB DEVICE has been disconnected from host
	_USB_ROLE_HOST_EVT		//role changed to host
	_USB_ROLE_DEV_EVT 		//role changed to dev

CoreID – Core (port) number from message hsa received
mode – Work mode for current core. Mode can have another options:

1. USB role:
_USB_HOST - USB HOST only 
_USB_DEV  - USB DEVICE only 
_USB_OTG_A - USB OTG mode with HOST starting first
_USB_OTG_B - USB OTG mode with DEVICE starting first

USB_LS – Low speed USB_FS – Full speed USB_HS – High speed USB_SS – SuperSpeed speed

3. additional options

_USB_OTG_ID_PIN_DISABLE - If mode OTG is selected this option was disabling ID pin detection. 
In this case User can change USB roles manually 

Example

/*Select USB OTG mode with default Host started, Switch USB role by user. 
High speed FULL limitation*/

usb_cores[0].mode = _USB_OTG_A | _USB_OTG_ID_PIN_DISABLE | USB_FS;

2. USB HOST speed limitation(if controller is support this future)

usb_list_param param – additional parameters for usb host and device modes.

typedef struct
{
	void *host_param;
	void *dev_param;
} usb_list_param;

host_param and dev_param described in USB HOST and USB DEVICE manuals

EXAMPLE

Starting and configuring USB servers

/* USB server structs */
	tUSB_config usb_config;
	tUSB_core_conf usb_cores[2];	//USB have 1 core (last element should be empty with -1 core_ID)
	
/* USB device structures */
	tUSBD_port_info     usbd_port;
	tUSBD_configuration usbd_config;

	tUSBD_interface     usbd_interface;
	tUSBD_cdc_serial    usbd_cdc_serial;

/* configure USB DEVICE parameters*/
	usbd_port.idVendor          = 0x0123;                     // Vendor ID for the USB product
	usbd_port.idProduct         = 0x4567;                     // Product ID for the USB product-

	usbd_port.bcdDevice         = 0x0001;                     // Device release number in BCD format
	usbd_port.pManufacturer     = "RoweBots";                 // Manufacturer string descriptor
	usbd_port.pProduct          = "Unison RTOS USB Serial";   // Product string descriptor
	usbd_port.pSerialNumber     = "111004";                   // Serial number string descriptor
	usbd_port.pConfigurations   = &usbd_config;               // 
	usbd_port.NumConfigurations = 1;                          // Number of configurations for current port

	usbd_config.NumInterfaces  = 1;
	usbd_config.pInterfaces    = &usbd_interface;
	usbd_config.pStrConfiguration = "CDC Configuration";
	usbd_config.MaxPower          = 0x0;
	usbd_config.Attributes        = _DEFAULT | _SELF_POWER;

/* Setup serial device specific parameters*/
	usbd_cdc_serial.vport_num      = 3;  // ttyUSB3 
	usbd_cdc_serial.rx_buf_size    = 512;
	usbd_cdc_serial.tx_buf_size    = 512;

 	usbd_interface.type   =  USBD_CDC_SERIAL_DEVICE;
	usbd_interface.param  = &usbd_cdc_serial;

	usb_cores[0].param.dev_param = &usbd_port;

/* configure USB HOST parameters*/
	usb_cores[0].param.host_param = NULL;	// USB HOST doesn't have additional options

/* configure USB port */
	usb_cores[0].usb_callback = USBH_event;
	usb_cores[0].CoreID       = 0;			//physical USB controller number 
	usb_cores[0].mode         = _USB_OTG_A;	//USB mode OTG wih default HOST MODE 
	usb_cores[1].CoreID = -1;	//end of ports list
    
/* configure USB server */
	usb_config.core_conf = usb_cores;
	usb_config.host = (void*)usbh_start;
	usb_config.dev  = (void*)usbd_start;

/* add USB drivers */
	usbd_add_serial_driver();	//adding CDC driver for USB DEVICE role
	usbh_add_msc_driver();		//adding USB MSC driver for support Mass storage drives in USB HOST role


/* Start USB server */
	usb_server(&usb_config);

USB server control functions:

int usb_set_role(uint_8 core, uint_8 role);

Set role (_USB_HOST or _USB_DEV) for the specified core number;

Return 0 if role can be changed, -1 if error has accured. Role change i long process in time. When Role is changed _USB_ROLE_HOST_EVT or _USB_ROLE_DEV_EVT must be recived.

This function can be executed when _USB_OTG_ID_PIN_DISABLE option is set in mode field.

int usb_get_role(uint_8 core);

Get current role of USB. If command was succesfull then return current role: _USB_HOST or _USB_DEV. Return -1 if error.

Note

In project options in demo user must set predefined symbol _USB_OTG_ or _USB_HOST_ or _USB_DEVICE_ (see manual to your compiller)

SEE ALSO

usbh usbd

Suggest Edit

CONTACT US

TO GET YOUR PROJECT STARTED

TOP