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.32.6.Remedy Remote Control Tools #

OVERVIEW

The Remedy Remote Control Tools consists from two components:
Remote Control Tool: host side component.
Remote Control Server: target side component.

The Remote Control Tool is host IDE specific tool, therefore it is described in a separate file: see directory installdir/manuals.

The Remote Control Server is an IDE independent target component. Its operation is described below.


NAME

Remote Control Server – RCS

SYNOPSIS

#include <rcs.h>

pthread_create(&rcsTid, &rcsattr, (void *)rcs, (void *)&rcs_init);
THREAD rcs(struct rcs_settings *rcs_init);

DESCRIPTION

The RCS provides remote control of target variables. RCS works together with the IDE RemoteControl plugin. This plugin sends commands to RCS and gets responses using the network UDP protocol.

The RemoteControl plugin may read and write target variables only if it knows and uses their addresses. User can make a target source code structure with a variables description to provide information for the target variables to be controlled. This information will be passed to the RemoteControl plugin and the plugin will have all necessery information about the variables being controlled.

The RCS structure for variables to be controlled is described in the file <rcs.h>:

// RCS variable description
struct RCS_variable
{
    uchar VarName[16];
    uchar VarType;
    uchar VarAccessBits;
    uint_32 VarAddress;
};

The RemoteControl plugin will display the symbolic variable name specified by VarName.

For each variable, the user sets the variable bit width (or size in bits) and it’s address size in bits. This information writes in the field VarType:
type_int32_32:  32-bits variable / 32-bits address;
type_int16_32:  16-bits variable / 32-bits address;
type_int8_32:    8-bits variable / 32-bits address;
type_bool_32:    bool variable / 32-bits address;
type_int32_16:  32-bits variable / 16-bits address;
type_int16_16:  16-bits variable / 16-bits address;
type_int8_16:    8-bits variable / 16-bits address;
type_bool_16:    bool variable / 16-bits address.

Each variable has access permissions. This access information is written to the field VarAccessBits:
acc_read: read only;
acc_write: write only;
acc_rdwr: read/write.


RCS initialization

The RCS initiatization structure can be found in the file <rcs.h>:

//
// RCS initialization structure
//
struct rcs_settings
{
    struct RCS_variable *RCS_vars;  // RCS control variables
    u_char RCS_vars_numb;           // RCS control variables numbers

    void *dlog_control_funcs;       // pointer to dlog control functions structure

    u_short server_port;            // RCS port
};

For the RemoteControl plugin, the user can create a structure with a variable description for each controlled variable. The address of first element this structure is written in *RCS_vars. In the field RCS_vars_numb write the number of structure elements.

RCS has integration with dlog server. The Dlog server sends the events log to IDE Event Viewer. With help of RCS the user can do remote dlog management. To activate this control we need to write in the *dlog_control_funcs value with the address of structure of dlog control functions.

RCS receives commands from the IDE RemoteControl plugin on port server_port.

EXAMPLE

This partial example shows the creation and registration of the RCS.

#include <dlog.h>
#include <rcs.h>

// RCS control variables
int_32 var32_rw = 32;
int_16 var16_rw = 16;
int_8 var8_rw = 8;

const int_32 var32_ro = 0x12345678;
const int_16 var16_ro = 0x7890;
const int_8 var8_ro = 0x55;

struct RCS_variable RCS_var_array[] =
{
	{"var32_rw", type_int32_32, acc_rdwr, (uint_32)&var32_rw},
	{"var16_rw", type_int16_32, acc_rdwr, (uint_32)&var16_rw},
	{"var8_rw", type_int8_32, acc_rdwr, (uint_32)&var8_rw},

	{"var32_ro", type_int32_32, acc_read, (uint_32)&var32_ro},
	{"var16_ro", type_int16_32, acc_read, (uint_32)&var16_ro},
	{"var8_ro", type_int8_32, acc_read, (uint_32)&var8_ro}
};


/*
 * rcs variables and start routine
 */
struct rcs_settings rcs_init;

void rcs_start(void)
{
	pthread_t rcsTid;
	pthread_attr_t rcsattr;
	struct sched_param rcsPriority;


	// Fill parameters
	rcs_init.RCS_vars = &RCS_var_array[0];
	rcs_init.RCS_vars_numb = sizeof(RCS_var_array)/sizeof(struct RCS_variable);

	rcs_init.dlog_control_funcs = (void *)&dlog_ctrl_funcs;

	rcs_init.server_port = 16000;


	pthread_attr_init(&rcsattr);
	pthread_attr_setstacksize(&rcsattr, 1400);
	rcsPriority.sched_priority = 7;
	pthread_attr_setschedparam(&rcsattr, &rcsPriority);

	pthread_create(&rcsTid, &rcsattr, (void *)rcs, (void *)&rcs_init);
	pthread_attr_destroy(&rcsattr);
}

NOTES

There is a demo available for the Unison and DSPnano RCS which is found in installdir/demos.

SEE ALSO

Remedy Event and Data Logging Tools

Suggest Edit

CONTACT US

TO GET YOUR PROJECT STARTED

TOP