IceStorm available for Ice-E?

in Help Center
I currently have a position tracking application that runs on Windows CE and Linux devices.
I would like to port this application to be an IceStorm publisher. Is this possible using Ice-E?
There is no reference to IceStorm in the Ice-E source.
I would like to port this application to be an IceStorm publisher. Is this possible using Ice-E?
There is no reference to IceStorm in the Ice-E source.
0
Comments
It is possible to create an IceStorm publisher using Ice-E. In order to do this, you will need to translate the IceStorm Slice file using slice2cppe.
Take care,
- Mark
$ slice2cppe -I/opt/Ice/slice --ice /opt/Ice/slice/IceStorm/IceStorm.ice
Hope that helps.
- Mark
Thanks for the reply.
First I build Ice-E for the gumstix. Because development for the gumstix takes place using cross-compiler tools I had to make the following modifications:
1. Edit config/Make.rules.Linux and add "ifeq ($(CXX),arm-linux-g++) ..." for the cross compiler.
2. Edit include/IceE/Config.h to specify the endian for the gumstix platform.
Then sliced the IceStorm ice files:
$ slice2cppe -I<Ice src path>/slice --ice <Ice src path>/slice/IceStorm/IceStorm.ice
$ slice2cppe -I<Ice src path>/slice --ice <Ice src path>/slice/SliceChecksumDict.ice
I then simply compiled the resulting IceStorm.cpp and SliceChecksumDict.cpp into my application.
The only problem I have encountered is with doubles.
My slice file is:
{
long time;
double lat;
double lon;
int track;
double pitch;
double roll;
byte satCount;
bool averaged;
interface Monitor
{
In the struct Position the members arrive at the subscriber correctly EXCEPT the data members that are doubles.
If I build the publisher on the same platform as the subscriber (Fedora Core 4 x86) then the doubles arrive ok.
Any suggestions what I might be doing wrong?
Did you try to run the IceE/operations test (or any simple program that uses double parameters) between your embedded system and Ice-E on FC4?
Did you try with float instead of double?
Cheers,
Bernard
simple IceE embedded client -> simple IceE embedded server ...... doubles ok
simple Ice FC4 client -> simple IceE embedded server ...... doubles NOT ok
simple IceE FC4 client -> simple IceE embedded server ...... doubles NOT ok
IceE embedded publisher -> Ice FC4 subscriber ..... doubles NOT ok.
It is as if the packing or unpacking of doubles is not working when 2 different hosts are involved....
All of the IceE test work on my embedded platform except for the AliveTest in the thread test suit which fails with:
AliveTest.cpp:98: assertion `!c.isAlive()' failed
Aborted
After a little google search, it appears that doubles on ARM (or at least some ARM versions) have a special representations: the two words are big-endian even on small-endian platforms.
Note that current Linux/ARM is not an Ice-E supported platform. However I am unsure whether this issue affects Windows CE on ARM (a supported platform) or not... I am unable to verify right now.
Could you try to update the marshaling and demarshaling of doubles in src/IceE/BasicStream.cpp?
I suspect it should be something like:
This code is obviously completely untested! Please let me know if it makes a difference ... if it works, you'll have to fix the marshaling/demarshaling of vector<double> as well (in the same file).
Cheers,
Bernard
I will give your code change a try when back at work early in the new year. I will post the results in this thread.
I appreciate the help that you and Mark have given me for this problem.:)
Regards
Steven
Your code change suggestion works just fine.
Thanks again for your help.
Steven
I am glad this worked out!
For the benefit of other Ice-E users, could you describe the platform you're using (Linux version, GCC version, hardware)? Did you need to change anything else to run Ice-E on that platform?
Thanks,
Bernard
The gumstix device runs version 2.6.10 of the linux kernel.
All development is performed using cross compiler tools e.g GCC 3.4.2. More details of the gumstix SDK can be found at:
http://www.gumstix.org/tikiwiki/tiki-index.php?page=programming
Below is a description of the steps I had to take to enable me to build the IceE system and IceStorm based applications on the gumstix embedded linux platform.
Modify the following files in the IceE source tree:
config/Make.rules.Linux
config/Make.rules
include/IceE/Config.h
The IceE libs where then simply compiled by:
To allow IceStorm applications to be built I produced the appropriate source files by:
$ slice2cppe -I<Ice src path>/slice --ice <Ice src path>/slice/SliceChecksumDict.ice
I then simply compiled the resulting IceStorm.cpp and SliceChecksumDict.cpp into my application.