14. Windows CE — OpenSplice Getting Started Guide

### Navigation

- index
- next |
- previous |
- OpenSplice Getting Started Guide »

# 14. Windows CE

This chapter provides a brief description of how to deploy Vortex OpenSplice on Windows CE.

## 14.1. Prerequisites

Vortex OpenSplice requires certain environment variables to be present; as Windows CE does not support traditional environment variables, these are simulated by creating registry entries which contain the required data. References in this chapter to `environment variables’ are therefore actually references to values in the Windows CE registry.

The environment variables expected by Vortex OpenSplice are:

`PATH`
  The PATH variable must include the directory containing the Vortex OpenSplice executables that may be launched by the ospl utility.
`OSPL_URI`
  This variable contains the location of the default ospl.xml configuration file which is used when not otherwise specified.

The descriptions in this chapter assume that the values shown in the table below have been added to the registry key

`HKEY_LOCAL_MACHINE\Software\PrismTech\OpenSpliceDDS\<OpenSpliceVersion>`

Windows CE Registry keys

Name | Type | Data
--- | --- | ---
PATH | REG_SZ | NAND FlashOpenSpliceDDS\<OpenSpliceVersion>\HDE\armv4i.wince
OSPL_URI | REG_SZ | file://NAND Flash/OpenSpliceDDS/<OpenSpliceVersion>/HDE/armv4i.wince/etc/config/ospl.xml

  All Vortex OpenSplice dynamic link library (`dll`) files must also be copied into the `\Windows` directory on the Windows CE device prior to deployment.

## 14.2. Setting Registry Values with a CAB File

In development, a `CAB` file can be used to register the necessary variables in the registry. Place the `CAB` file in the Cold Boot directory on the target device (i.e. `\NAND Flash\ColdBootInit`) to make the registry settings available as soon as the device has booted.

### 14.2.1. Alternatives to CAB file

Microsoft’s Windows CE Remote Registry Editor can be used instead of a `CAB` file to set the necessary registry values. Alternatively, ADLINK also provides a convenient method of editing the registry variables by way of the `ospl` utility using the `getenv` and `putenv` parameters (described below).

Please refer to Microsoft’s Windows CE documentation for detailed information about `CAB` files and the Remote Registry Editor.

## 14.3. The Vortex OpenSplice Environment

Vortex OpenSplice requires the contents of the bin , lib and etc directories from within the Vortex OpenSplice installation to be available on the Windows CE target hardware. For development purposes, Microsoft’s ActiveSync can be used to load these on to the target system. The following description assumes that the `bin`, `lib` and `etc` directories have been copied from the Vortex OpenSplice installation onto the target at the following location:

`\NAND Flash\OpenSpliceDDS\<OpenSpliceVersion>\HDE\armv4i.wince`

For simplicity the whole `OpenSpliceDDS` installation directory can be copied to the `\Nand Flash` directory.

The following description explains deployment on Windows CE by using the Windows CE console. It is assumed that the console’s `PATH` variable has been set to point to the directory containing the Vortex OpenSplice executables. For example:

    PATH "\NAND Flash\OpenSpliceDDS\<OpenSpliceVersion>\
    HDE\armv4i.wince\bin";%PATH%

(All Vortex OpenSplice dynamic link library (`dll`) files must have been copied into the ``\Windows` directory on the Windows CE device prior to deployment.)

When running Vortex OpenSplice executables on the command prompt, it is useful to redirect any output to text files by using the `>` operator.

If the `PATH` and `OSPL_URI` variables have not already been set via a `CAB` file on device boot up, use the following commands to set those values manually:

    ospl putenv PATH "\NAND Flash\OpenSpliceDDS\<OpenSpliceVersion>\
    HDE\armv4i.wince\bin" > osplputenv-path.txt

    ospl putenv OSPL_URI "file://NAND Flash/OpenSpliceDDS/<OpenSpliceVersion>/
    HDE/armv4i.wince/etc/config/ospl.xml" > osplputenv-ospluri.txt

The values can be checked if required by using Microsoft’s Windows CE Remote Registry Editor, or by running the ospl getenv command:

`ospl getenv PATH > osplgetenv-path.txt`

## 14.4. Secure Networking

The secure networking service uses OpenSSL for cryptography support. To use this feature, the library `libeay32.dll` is required; it must be copied to the `\Windows` directory on the Windows CE device.

Vortex OpenSplice is tested against OpenSSL version 0.9.8i. This may be built as described below.

### 14.4.1. Building OpenSSL for Windows CE 6.0

This section describes the steps required to get an OpenSSL build for Windows CE. The version of OpenSSL used is 0.9.8i. The third-party library wcecompat is used, which also has to be built manually for Windows CE 6.0.

(The description that follows is based on the one given at
http://blog.csdn.net/sooner01/archive/2009/06/22/4289147.aspx.)

#### 14.4.1.1. Prerequisites

The following are needed to make an OpenSSL build for Windows CE 6.0:

- Microsoft Visual Studio 2005

    (VS2008 might also work but it has not been tested)

- An installed WinCE 6.0 SDK to be targeted

    In this description the target SDK is `'WinCE-GS3Target'`

- Perl

    You will need to install Active Perl, from http://www.activestate.com/ActivePerl. (Note that perl by MSYS does not create correct `makefiles`.)

- OpenSSL

    The OpenSSL sources can be downloaded from http://www.openssl.org/. In this description we use version 0.9.8i. Other versions might not work with the steps described here.

- wcecompat compatibility library

    The wcecompat library adds the functionality to the C Runtime Library implementation of Windows CE which is needed in order to build OpenSSL for Windows CE. Obtain this from http://github.com/mauricek/wcecompat. Note that you should not download the latest version; browse the history and download the version committed on November 21, 2008 named updates for OpenSSL 0.9.9 with commit number f77225b....

#### 14.4.1.2. Build wcecompat

Extract the wcecompat download to an appropriate location. In this description the location `C:\wcecompat` is used, but you can use any location you want.

Step 1

> Start Visual Studio 2005 and open a Visual Studio 2005 command prompt.

Step 2

> Go to the wcecompat directory (`C:\wcecompat`).

Step 3

> Set the building environment:

    set OSVERSION=WCE600

    set TARGETCPU=ARMV4I

    set PLATFORM=VC-CE

    set PATH=C:\Program Files\Microsoft Visual Studio 8\VC\ce\bin\x86_arm;
    C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;%PATH%

    set INCLUDE=C:\Program Files\Windows CE Tools\wce600\WinCE-GS3Target\
    include\ARMV4I

    set LIB=C:\Program Files\Windows CE Tools\wce600\WinCE-GS3Target\lib\
    ARMV4I;C:\Program Files\\Microsoft Visual Studio 8\VC\ce\lib\armv4

> If you target a different SDK, replace the text WinCE-GS3Target in the lines above with your own SDK.

Step 4

> Call perl config.pl to create the makefile configuration.

Step 5

> Call nmake to build the wcecompat library.

Step 6

> Exit the command prompt and exit Visual Studio to be sure of starting with a clean environment in the next stage.

#### 14.4.1.3. Build OpenSSL

Step 1

> Extract OpenSSL to any location you like.

Step 2

> Apply the OpenSSL WinCE patch which can be found at http://marc.info/?l=openssl-dev&m=122595397822893&w=2.

Step 3

> Start Visual Studio 2005 and open a command prompt.

Step 4

> Go to your openSSL directory.

Step 5

> Set the building environment:

    set OSVERSION=WCE600

    set TARGETCPU=ARMV4I

    set PLATFORM=VC-CE

    set PATH=C:\Program Files\Microsoft Visual Studio
    8\VC\ce\bin\x86\_arm;C:\Program Files\Microsoft Visual Studio
    8\VC\bin;C:\Program Files\Microsoft Visual Studio
    8\VC\PlatformSDK\bin;C:\Program Files\Microsoft Visual Studio
    8\Common7\Tools;C:\Program Files\Microsoft Visual Studio
    8\Common7\IDE;C:\Program Files\Microsoft Visual Studio
    8\Common\Tools;C:\Program Files\Microsoft Visual Studio
    8\Common\IDE;C:\Program Files\Microsoft Visual Studio 8\;%PATH%

    set INCLUDE=C:\Program Files\Microsoft Visual Studio
    8\VC\ce\include;C:\Program Files\Windows CE
    Tools\wce600\WinCE-GS3Target\include\ARMV4I;C:\Program
    Files\Windows CE Tools\wce600\WinCE-GS3Target\include;C:\Program
    Files\Microsoft Visual Studio 8\VC\ce\atlmfc\include;C:\Program
    Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL
    Server\Mobile\v3.0;

    set LIB=C:\Program Files\Windows CE
    Tools\wce600\WinCE-GS3Target\lib\ARMV4I;C:\Program Files\Microsoft
    Visual Studio 8\VC\ce\atlmfc\lib\ARMV4I;C:\Program
    Files\Microsoft Visual Studio 8\VC\ce\lib\ARMV4I

    set WCECOMPAT=C:\wcecompat

> If you target a different SDK, replace the text `WinCE-GS3Target` in the lines above with your own SDK. Also, change the wcecompat directory to your own if you used a different location.

Step 6

> Type `perl Configure VC-CE` to set up the compiler and OS.

Step 7

> Type `ms\do_ms` to build the makefile configuration.

Step 8

> Type `nmake -f ms\cedll.mak` to build the dynamic version of the library.

#### 14.4.1.4. Troubleshooting

If you get the following error message:

    PTO -c .\\crypto\\rsa\\rsa\_pss.c

    cl : Command line warning D9002 : ignoring unknown option '/MC'
    rsa\_pss.c

    f:\\openssl\\openssl98\\crypto\\rsa\\rsa\_pss.c(165) : error C2220:
    warning treated as error - no 'object' file generated

    f:\\openssl\\openssl98\\crypto\\rsa\\rsa\_pss.c(165) : warning C4748:
    /GS can not protect parameters and local variables from local buffer
    overrun because optimizations are disabled in function

    NMAKE : fatal error U1077: '"F:\\Program Files\\Microsoft Visual Studio
    8\\VC\\ce\\bin\\x86\_arm\\cl.EXE"' : return code '0x2'

    Stop.

Remove `/WX` in the makefile (`ce.mak`).

## 14.5. Deploying Vortex OpenSplice

`ospl start`

  This command will start the Vortex OpenSplice `splicedaemon` and Vortex OpenSplice services specified within the configuration referred to by the `OSPL_URI` variable:

  `ospl start > osplstart.txt`

  A different configuration file can be specified as an additional parameter; for example:

  `ospl start "file://NAND Flash/OpenSpliceDDS/<OpenSpliceVersion>/`
  `HDE/armv4i.wince/etc/config/ospl.xml" > osplstart.txt`
`ospl list`

  This command will list all the Vortex OpenSplice configurations that are currently running on the node.

  `ospl list > ospllist.txt`

`ospl stop`

  This command will stop the Vortex OpenSplice `splicedaemon` and Vortex OpenSplice services specified within the configuration referred to by the `OSPL_URI` variable:

  `ospl stop > osplstop.txt`

  A different configuration to be stopped can be specified as an additional parameter; for example:

  `ospl stop "file://NAND Flash/OpenSpliceDDS/<OpenSpliceVersion>/`
  `HDE/armv4i.wince/etc/config/ospl.xml" > osplstop.txt`

## 14.6. Using the mmstat Diagnostic Tool on Windows CE

To run `mmstat`, use this command:

> `start mmstat > mmstat.txt`

To see the full list of options, use this command:

> `start mmstat -h > mmstat-help.txt`

The mechanism for terminating `mmstat` on Windows CE is different from other operating systems. All running instances of `mmstat` can be terminated with this command:

> `start mmstat -q > mmstat-quit.txt`

If there are multiple instances of `mmstat` running, a particular instance can be terminated by specifying the process identifier:

> `start mmstat -q -x <process id> > mmstat-quit.txt`

where <process id> is displayed in the output for the particular instance of `mmstat`.

## 14.7. Vortex OpenSplice Examples

Please refer to the Examples section for descriptions of the Vortex OpenSplice examples.

### 14.7.1. Building the examples

There is a shortcut to load the examples into Microsoft Visual Studio which can be accessed from Start > Programs > OpenSpliceDDS <OpenSpliceVersion> armv4i.wince HDE > Examples.

Once the projects are open in Microsoft Visual Studio, click Build/Rebuild Solution at the appropriate level to build the required examples.

Copy the produced executable files to the Vortex OpenSplice `bin` directory (i.e. `\NAND Flash\OpenSpliceDDS\<OpenSpliceVersion>\HDE\armv4i.wince\bin`) on the Windows CE device. For the PingPong example the executable files are `Ping.exe` and `Pong.exe`. For the Tutorial example the files are `Chatter.exe`, `MessageBoard.exe`, and `UserLoad.exe`.

As an alternative to using the shortcut, to set up the environment for a new project perform the following steps:

Step 1

> Run the Vortex OpenSplice command prompt from the OpenSplice entry under the Windows Start button:

> Start > Programs > OpenSpliceDDS <OpenSpliceVersion> armv4i.wince HDE > OpenSpliceDDS command prompt

Step 2

> Copy the Windows Microsoft Visual Studio environment variables to the new command prompt. To obtain these, right-click on the Properties for the Visual Studio 2005 Command Prompt entry located at Start > Programs > Microsoft Visual Studio 2005 > Visual Studio Tools > Visual Studio 2005 Command Prompt , and paste the Shortcut Target entry into the Vortex OpenSplice command prompt. For example this could be

> `%comspec% /k ""C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"" x86`

Step 3

> Start Microsoft Visual Studio in this prompt:

> `devenv`

Step 4

> Open the solution file at

> `<OpenSpliceDDSInstallation>/examples/examples.sln`

### 14.7.2. Deploying the PingPong example

Start Vortex OpenSplice as described above. The Ping and Pong executables can then be started as follows:

> `start pong PongRead PongWrite > pong.txt`

> `start ping 100 100 m PongRead PongWrite > ping.txt`

The `ping.txt` file produced should contain the expected Ping Pong measurement statistics for 100 cycles. The `Pong` executable can be shut down by running the `ping shutdown` command:

> `start ping 1 1 t PongRead PongWrite > ping-shutdown.txt`

### 14.7.3. Deploying the Tutorial example

Start Vortex OpenSplice as described above. The Tutorial executables can then be started as follows:

> `start UserLoad > userload.txt`

> `start MessageBoard > messageboard.txt`

> `start Chatter 1 John > chatter.txt`

The `messageboard.txt` file produced should contain the messages received from the `Chatter` executable. The `MessageBoard` executable can be terminated by running `Chatter` again with the `-1` option:

> `start Chatter -1 > chatter-shutdown.txt`

### Navigation

- index
- next |
- previous |
- OpenSplice Getting Started Guide »