1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
|
===
=== FaCE (Front-end for ACE CE)
===
=== Object Computing, Inc. <http://www.ociweb.com>
=== St. Louis, Missouri
=== Copyright (C) 2002. All rights reserved.
===
=== V1.01, March 30th, 2002
===
== What's FaCE?
FaCE is a simple front-end framework for testing and debugging non-Windows
CE applications on the Pocket PC 2002 platform. Originally, FaCE was
developed to test ACE and TAO components internally in Object Computing, Inc.
However, since it has shown dramatic increase of productivity in a lot
shorter amount of time, it has been prepared as a package for all programmers
who want to test and run existing codes (non-WinCE native codes) on Pocket PC
2002 and WinCE 3.0.
The features of FaCE are:
1. command line parameter support
2. command line history support (never type in same command line again)
3. output displayed on the windows screen
4. output to file (with append and overwrite support)
5. does not use MFC
6. almost no modification to existing user code
7. easy to enable and disable after install
* Default project files only contain Pocket PC 2002 platform configuration.
A new configuration can be added for other WinCE 3.0 platform from eVC.
== Package Contents
Files contained in FaCE package are:
Main Framework Files for both ACE users and non-ACE users
- ACE_Racer.bmp
- FaCE.h & cpp
- FaCE.ico
- FaCE.rc
- newres.h
- resource.h
- TAO.bmp
ACE entry point definition file
- FaCE_OS.h
Additional Framework files for non-ACE users
- CE_ARGV.h & cpp
- CE_Screen_Output.h & cpp
Files for loading skeleton FaCE from eVC
- FaCE.vcp & vcw : FaCE Project files for ACE users
- FaCENOACE.vcp & vcw : FaCE Project files for non-ACE users
- Main.cpp : almost empty entry point function
Misc. Files
- ACE.ico : a bonus icon of ACE logo
- License.txt : license and warranty information
- ReadMe.txt : this document
== Requirement
- Microsoft(C) eMbedded Visual Studio/C++ (eVC) 3.0
- Pocket PC 2002 SDK
** For ACE-users only:
- ACE+TAO installed and configured for WinCE build only for ACE-users
- ace and ace_os libraries built for WinCE and loaded on machine
== Important Note
It has been reported that certain Pocket PC 2002 machines with ARM processor
can be totally dead and will not even respond to the hard reset. While the
real cause of this problem is unknown, HP has released a patch for this
problem. We have tested it, and it seems working fine on our machine (HP
Jornada 568), which is our 5th machine that has been running fine for the
longest time.
As this has been identified by hardware manufacturer and can be fixed as HP
did, Object Computing, Inc. (OCI) or any member of ACE+TAO community cannot
be responsible for this problem. If this problem happens during debugging,
contact your hardware manufacturer for fix or replacement. It has found
that almost all Pocket PC 2002 machines regardless of manufacturers have same
problem.
Also, Phil Mesnier at OCI has found that virtual function calls under certain
situation can cause a problem that randomly changes parameter and pointer
values over function calls. This is due to the incorrect instructions
generated by eVC for ARM processor. So far, no solution or patch has been
released by compiler vendor, although vendor is aware of this problem.
Since Pocket PC 2002 is based on WinCE 3.0, ACE+TAO as well as FaCE should
be able to run on any WinCE 3.0 platform by adding a new configuration with
minimal change.
== Installation & Setup
1. Create a subdirectory named 'FaCE' (or anything in your taste) under
your current project directory.
2. Copy FaCE_OS.h to the ACE_ROOT/ace directory, and add following line at
the end of your ACE_ROOT/ace/config.h file:
#include "FaCE_OS.h"
3. Copy main framework files listed above and add them into "your" project
(NOT FaCE.vcw/vcp). For non-ACE users, copy additional framework files
for non-ACE users in addition to the main framework files.
It would be a good idea to create a new folder in your project and put
all FaCE files into it. This way, it will be easy to disable FaCE by
setting the folder excluded from the build on the folder property option.
** IMPORTANT! **
FaCE does NOT use MFC. Thus, if your project is already set for
'Not using MFC', then do not change the setting.
* Note: Make sure those files are not shared by multiple executables.
Each project must have its own copy of those files.
It is a good idea to create a separate folder on your project
and put FaCE related files into that folder. In that case,
if you want to disable FaCE and run by using normal 'main',
then you can simply set the whole FaCE folder excluded from
build in the project setting menu.
4. Change your 'main()' function part similar to the following example.
int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) // ACE normal entry point
Change the directory name for "FaCE/FaCE.h" if necessary.
== Possible Additional Change
Above change will be the only change if your program compiles and links
fine under eVC. It does not mean that your program is WinCE-ready but
just means that your program does not include the libraries that are not
supported by WinCE, such as iostream.
For ACE users, good examples will be the ACE test programs under
$ACE_ROOT/test.
For non-ACE users, I highly recommend to create a project for WinCE first
if it has not already been done and write your code using wmain.
Try compile and link your program without FaCE to check your program does
not include any libraries not supported by WinCE. FaCE supports text output
by aliasing 'cout' in FaCE.h; however, it is NOT a real iostream but an alias
for CE_Screen_Output class. You may need to use '#ifdef UNDER_CE' for your
iostream includes, if you want to share the code among different platforms.
Also, it is important to match the parameter types for 'wmain' function.
For WinCE, it MUST be in the format of:
int FaCE_MAIN (int, wchar_t**)
and you can leave your original wmain type as it was for non-CE platform
definition.
5. Go to 'ResourceView' or double-click on the 'FaCE.rc'. Open 'String Table ->
String Table' from the resource browse view, and change the string value (caption)
defined for 'IDS_APP_TITLE' from 'FaCE' to your program name. This will
help identifying multiple FaCE-fied applications when you browse them
through system memory -> running programs in case of crash.
6. That's it!
** Optionally, you can personalize the icons defined for FaCE for your own.
To do this easily, load "FaCE.vcw" (requires ACE library) or "FaCENOACE.vcw"
from eVC. Also, FaCENOACE.vcw can be used as 'hello world'-type starting
frame-work for non-WinCE programmers.
** Non-ACE users may see the warning messages saying, "Could not find the file xxx",
for ace.h, Log_Msg.h, OS.h, and CE_Screen_Output.h. This is due to the eVC's
not-so-perfect precompilation file checking and totally harmless.
** Later if you don't want to use FaCE anymore, simply restore your original
main function and remove FaCE files from your project (or exclude FaCE files
from build). ACE library does not have to be rebuilt as FaCE_OS.h only
contains macro.
== Running FaCE
1. Command line option
User can specify the command line option for the program by using 'Settings ->
Command Line' from the FaCE menu. FaCE will automatically save all user-entered
command line parameters as a ASCII format file named 'Parameters.txt' in the
root directory of WinCE device/emulator. User can edit and change by opening
this file from any text editor and save as a ASCII text file with DOS standard
CR/LF combo. This will greatly save time especially when you are working on the
Pocket PC machine that does not have keyboard. Remember NOT to convert file
format to Unicode; it must be standard DOS ASCII text file.
2. Output Saving
You can save output to file by selecting 'Tools -> Save To File'. By default,
FaCE will not create/save any file. Also, any output received before setting
up this feature will not be saved.
If the file with specified name exists, FaCE will ask whether you want to
append to the end of file or erase and overwrite. All output files will be
saved in the root directory of the system.
3. Running Your Program
'Setting -> Run' will execute your program. Two tags, 'START' and 'END'
indicate the beginning and end of your code.
For ACE users, any log message sent to ACE message log (ACE_DEBUG, for example)
will be displayed on the screen. Also, if you have setup to save to file,
the same contents will be saved to the file as well. Note that the output will
NOT have ACE internal tags (i.e. Dec 04 14:51:12.000 2001@LM_DEBUG@) because
FaCE uses callback message function, and ACE does not pass those tags along
with the output message.
For non-ACE users, you can declare your own local copy of CE_Screen_Output
object. For example, you can declare CE_Screen_Output object in your cpp file
like:
CE_Screen_Output cout;
and use it like,
int a = 100;
wchar_t* strTemp = L"Hello, world!";
cout << L"String : " << strTemp << L"a = " << a << endl;
Remember, CE_Screen_Output is just a simple text output function and does not
have the full capabilities of iostream, which is not available for WinCE 3.0.
4. In case of crash
If you have started your code, but the code crashes, which can be easily
identified by looking for the 'END' tag, then you can use Windows CE's memory
program to kill the process (Start -> Settings -> System tag -> Memory ->
Running Programs tag). If you have changed IDS_APP_TITLE in the resource
viewer, then you will see the name you have specified; otherwise, FaCE will be
listed. You can select the name and stop the process by clicking 'Stop' button.
Sometimes, you may need to reset the machine if you cannot access memory program.
== Note
- This FaCE framework does not use any MFC; it only uses general Win32
API, thus, your project setting does not have to be changed.
- FaCE is for the 'legacy' Unix/DOS style console applications that
do not use any Win32 and MFC for Windows OS. Programs that are already
using native Windows/WinCE API's will not need FaCE framework.
- If you run your application from FaCE (Settings -> Run), 'START' and
'END' will appear at the beginning and end of output messages from your
application. If you see 'END' lable after execution, you can run your
program again without exit and start up FaCE again.
- Make sure to terminate FaCE by selecting 'Settings -> Exit'. It will
completely terminate FaCE session; Clicking on the 'X' button
at the top-left corner of the screen will not, just like most WinCE programs.
- FaCE_MAIN is only for the WinCE port of ACE, ensuring proper windows system
message filtering along with proper registraion so that user can see the
process from memory setting and task switcher applications.
- ACE and FaCE do not overrides native WinMain. If you are developing for
Windows OS only, your WinMain should be just safe from any overrides.
In this case, of course, you don't need to use FaCE package.
== Question or Comment
If you have question and/or comment specific to the FaCE, please contact
Si Park at spark@ociweb.com or Justin Michel at michel_j@ociweb.com.
|