About the Author |
|
xv | |
About the Technical Reviewer |
|
xvii | |
Acknowledgments |
|
xix | |
Introduction |
|
xxi | |
|
Introducing the .Net Micro Framework |
|
|
1 | (14) |
|
What is the .Net Micro Framework? |
|
|
1 | (1) |
|
.Net Micro Framework History |
|
|
1 | (2) |
|
|
3 | (6) |
|
Embedded Development in the Past |
|
|
3 | (1) |
|
|
4 | (1) |
|
|
4 | (1) |
|
Where the .Net Micro Framework Fits |
|
|
5 | (1) |
|
What the Framework is Not |
|
|
6 | (1) |
|
|
6 | (1) |
|
Benefits of the .Net Micro Framework |
|
|
6 | (1) |
|
The .Net Micro Framework and Windows SideShow |
|
|
7 | (2) |
|
|
9 | (4) |
|
Introducing the Bootable Runtime Environment |
|
|
9 | (1) |
|
|
10 | (1) |
|
Compiling for the .Net Micro Framework |
|
|
11 | (1) |
|
|
12 | (1) |
|
|
12 | (1) |
|
Links for Further Information |
|
|
13 | (1) |
|
|
13 | (2) |
|
|
15 | (20) |
|
Freescale I.MXS Development Kit |
|
|
15 | (2) |
|
Device Solutions Meridian and Tahoe |
|
|
17 | (2) |
|
|
17 | (2) |
|
|
19 | (1) |
|
Digi International's Embedded Development Products |
|
|
19 | (4) |
|
|
19 | (3) |
|
|
22 | (1) |
|
SJJ Embedded Micro Solutions Embedded Development Kit |
|
|
23 | (1) |
|
Crossbow Imote2.Net Edition |
|
|
24 | (3) |
|
|
25 | (1) |
|
|
26 | (1) |
|
|
26 | (1) |
|
|
27 | (3) |
|
|
27 | (1) |
|
|
28 | (2) |
|
Ghi Electronics Embedded Master |
|
|
30 | (3) |
|
The Embedded Master Module |
|
|
30 | (2) |
|
|
32 | (1) |
|
|
33 | (1) |
|
The Hico.Arm9-Core Module |
|
|
33 | (1) |
|
|
33 | (1) |
|
|
34 | (1) |
|
|
35 | (12) |
|
Getting Your System Ready |
|
|
35 | (1) |
|
|
35 | (1) |
|
Installing the .Net Micro Framework SDK |
|
|
36 | (1) |
|
Using Visual Studio and the .Net Micro Framework |
|
|
36 | (4) |
|
|
36 | (1) |
|
Your First .Net Micro Framework Application |
|
|
37 | (1) |
|
The Visual Studio Workspace |
|
|
38 | (1) |
|
Setting Project Properties |
|
|
39 | (1) |
|
Building, Deploying, Executing, and Debugging |
|
|
40 | (1) |
|
The .Net Micro Framework SDK |
|
|
40 | (6) |
|
|
40 | (1) |
|
The Base Class Library Runtime Assemblies |
|
|
41 | (1) |
|
|
41 | (4) |
|
|
45 | (1) |
|
|
46 | (1) |
|
Introducing the .NET Micro Framework Base Class Library |
|
|
47 | (26) |
|
Text Output for Diagnostics |
|
|
47 | (2) |
|
Pausing Program Execution |
|
|
49 | (1) |
|
Setting and Getting the System Time and Time Zone |
|
|
50 | (1) |
|
|
51 | (3) |
|
|
54 | (4) |
|
|
54 | (2) |
|
|
56 | (1) |
|
|
57 | (1) |
|
|
58 | (3) |
|
|
58 | (1) |
|
|
58 | (1) |
|
Extracting Ranges from Arrays |
|
|
59 | (1) |
|
Combining and Copying Nonbyte Arrays |
|
|
59 | (1) |
|
|
60 | (1) |
|
|
61 | (2) |
|
Understanding the ArrayList Class |
|
|
61 | (1) |
|
Using the ArrayList Class |
|
|
62 | (1) |
|
|
63 | (3) |
|
|
63 | (1) |
|
Hexadecimal Number Output |
|
|
63 | (1) |
|
|
64 | (2) |
|
|
66 | (1) |
|
|
67 | (5) |
|
|
68 | (1) |
|
|
69 | (1) |
|
|
70 | (1) |
|
Handling Multiple Exception Types |
|
|
70 | (1) |
|
Getting Information from an Exception |
|
|
71 | (1) |
|
|
71 | (1) |
|
|
72 | (1) |
|
|
73 | (44) |
|
|
73 | (10) |
|
|
74 | (3) |
|
|
77 | (2) |
|
|
79 | (1) |
|
|
80 | (1) |
|
|
81 | (1) |
|
|
82 | (1) |
|
|
83 | (5) |
|
|
83 | (2) |
|
|
85 | (1) |
|
|
86 | (1) |
|
The Request-Response Approach |
|
|
87 | (1) |
|
Pin Usage and Reservation |
|
|
88 | (3) |
|
|
88 | (1) |
|
The HardwareProvider Class |
|
|
88 | (1) |
|
Custom Hardware Providers |
|
|
89 | (2) |
|
|
91 | (10) |
|
Accessing I2C Devices with the .Net Micro Framework |
|
|
93 | (2) |
|
|
95 | (1) |
|
A Managed Driver for the TI TMP100 Temperature Sensor |
|
|
96 | (5) |
|
Hardware Providers for I2C |
|
|
101 | (1) |
|
|
101 | (7) |
|
Accessing SPI Devices with the .Net Micro Framework |
|
|
102 | (2) |
|
A Managed Driver for the AD124S101 AD Converter |
|
|
104 | (4) |
|
Hardware Providers for SPI |
|
|
108 | (1) |
|
|
108 | (1) |
|
|
108 | (1) |
|
Mass Storage Devices with a File System |
|
|
109 | (1) |
|
|
109 | (1) |
|
Obtaining Power Supply and Charging State Information |
|
|
109 | (4) |
|
Obtaining Processor Speed Information |
|
|
113 | (2) |
|
|
115 | (1) |
|
|
116 | (1) |
|
|
117 | (56) |
|
|
118 | (12) |
|
|
118 | (2) |
|
|
120 | (5) |
|
|
125 | (2) |
|
|
127 | (2) |
|
Learning More About Sockets |
|
|
129 | (1) |
|
|
130 | (40) |
|
|
130 | (1) |
|
|
131 | (1) |
|
|
131 | (22) |
|
|
153 | (14) |
|
|
167 | (3) |
|
|
170 | (1) |
|
|
170 | (3) |
|
|
173 | (6) |
|
|
173 | (1) |
|
|
174 | (1) |
|
|
175 | (1) |
|
|
176 | (1) |
|
Comparing Wireless Technologies |
|
|
177 | (1) |
|
Links to Bluetooth, ZigBee, and Z-Wave OEM Modules |
|
|
178 | (1) |
|
|
178 | (1) |
|
|
179 | (10) |
|
XTEA: A Symmetric Algorithm |
|
|
179 | (2) |
|
|
180 | (1) |
|
XTEA for the Full .Net and .Net Compact Frameworks |
|
|
181 | (1) |
|
RSA: An Asymmetric Algorithm |
|
|
181 | (6) |
|
Common Key Pair Scenarios |
|
|
181 | (2) |
|
Creating Private and Public Keys |
|
|
183 | (3) |
|
Encryption and Decryption with RSA |
|
|
186 | (1) |
|
Creating and Verifying Signatures |
|
|
186 | (1) |
|
|
187 | (2) |
|
Advanced .Net Micro Framework Programming |
|
|
189 | (24) |
|
Multithreading and Synchronization |
|
|
189 | (5) |
|
|
190 | (1) |
|
|
191 | (2) |
|
|
193 | (1) |
|
|
194 | (1) |
|
|
195 | (2) |
|
|
197 | (10) |
|
|
197 | (3) |
|
Storage Format and Configuration |
|
|
200 | (2) |
|
Configuring Serialization with Attributes |
|
|
202 | (4) |
|
Notes, Hints, and Lessons Learned |
|
|
206 | (1) |
|
Exchanging Data With Other Devices |
|
|
206 | (1) |
|
Storing Data Permanently in Flash Memory |
|
|
207 | (4) |
|
|
211 | (2) |
|
Globalization and Localization |
|
|
213 | (22) |
|
|
213 | (6) |
|
Creating and Editing Resources |
|
|
214 | (5) |
|
|
219 | (1) |
|
|
219 | (9) |
|
Creating and Installing Custom Cultures |
|
|
220 | (5) |
|
Formatting Dates, Times, and Numbers |
|
|
225 | (3) |
|
Persisting the Current Culture |
|
|
228 | (1) |
|
Multilingual Applications |
|
|
228 | (5) |
|
|
228 | (1) |
|
Creating Satellite Assemblies |
|
|
229 | (2) |
|
Changing the Language at Runtime |
|
|
231 | (2) |
|
|
233 | (2) |
|
Graphics and Graphical User Interfaces |
|
|
235 | (82) |
|
Drawing on the Display Using the Bitmap Class |
|
|
235 | (26) |
|
|
238 | (1) |
|
Flushing Bitmaps onto the Display |
|
|
239 | (1) |
|
|
240 | (5) |
|
|
245 | (5) |
|
|
250 | (1) |
|
|
250 | (5) |
|
|
255 | (6) |
|
Creating Complex User Interfaces with Interaction |
|
|
261 | (53) |
|
|
261 | (1) |
|
Your First WPF Application |
|
|
261 | (3) |
|
|
264 | (1) |
|
Display Element Hierarchy |
|
|
265 | (3) |
|
Laying Out Elements with a Panel Container |
|
|
268 | (7) |
|
Backgrounds for Controls Using Brushes |
|
|
275 | (3) |
|
Drawing Borders Around Elements |
|
|
278 | (4) |
|
|
282 | (1) |
|
|
283 | (1) |
|
|
284 | (3) |
|
|
287 | (4) |
|
|
291 | (16) |
|
Handling User Input and Events |
|
|
307 | (4) |
|
Creating Custom UI Elements |
|
|
311 | (3) |
|
|
314 | (3) |
|
|
317 | (44) |
|
Why Use Hardware Emulation? |
|
|
317 | (1) |
|
Which Hardware Can Be Emulated? |
|
|
317 | (1) |
|
User Interfaces for Emulators |
|
|
317 | (1) |
|
|
318 | (1) |
|
Getting Started with the Emulator |
|
|
318 | (4) |
|
Emulator Project Templates |
|
|
319 | (3) |
|
|
322 | (4) |
|
The EmulatorComponent Class |
|
|
323 | (1) |
|
Sharing Reusable Emulator Components |
|
|
324 | (1) |
|
Creating a New Library Project for Emulator Components |
|
|
325 | (1) |
|
|
326 | (22) |
|
Programmatic vs. XML Configuration |
|
|
326 | (2) |
|
|
328 | (5) |
|
Deleting or Updating Existing Components |
|
|
333 | (2) |
|
Component Properties with Simple Types |
|
|
335 | (2) |
|
|
337 | (2) |
|
|
339 | (1) |
|
|
339 | (2) |
|
|
341 | (2) |
|
|
343 | (3) |
|
|
346 | (2) |
|
|
348 | (11) |
|
Members of the Emulator Class |
|
|
348 | (2) |
|
The Emulator Start-up Process |
|
|
350 | (1) |
|
|
350 | (1) |
|
Addressing Registered Components |
|
|
351 | (1) |
|
|
351 | (4) |
|
|
355 | (1) |
|
The Emulator and the Registry |
|
|
356 | (3) |
|
|
359 | (2) |
|
|
361 | (48) |
|
|
361 | (7) |
|
|
361 | (1) |
|
|
362 | (1) |
|
|
363 | (2) |
|
Synchronizing the Emulator and GUI Thread |
|
|
365 | (1) |
|
The MaxPorts Property of GpioCollection |
|
|
366 | (2) |
|
|
368 | (15) |
|
Communication Between Emulator and Application |
|
|
369 | (3) |
|
Routing Data to and from Another Windows Application |
|
|
372 | (3) |
|
Exchanging Serial Data With a Real Hardware Component |
|
|
375 | (3) |
|
Exchanging Serial Data With Hyper Terminal |
|
|
378 | (3) |
|
Exchanging Data With Sockets Acting As a Client |
|
|
381 | (2) |
|
|
383 | (5) |
|
|
383 | (2) |
|
|
385 | (1) |
|
An Emulator Component for the TI TMP100 Temperature Sensor |
|
|
385 | (3) |
|
|
388 | (5) |
|
|
389 | (1) |
|
|
390 | (1) |
|
An Emulator Component for the ADC124S101 AD Converter |
|
|
391 | (2) |
|
|
393 | (15) |
|
Simulating the Processor Speed |
|
|
393 | (1) |
|
|
394 | (1) |
|
|
394 | (1) |
|
|
394 | (1) |
|
|
395 | (3) |
|
|
398 | (5) |
|
Emulating Persistent Flash Memory |
|
|
403 | (2) |
|
Simulating a Battery Cell |
|
|
405 | (1) |
|
|
406 | (2) |
|
|
408 | (1) |
Index |
|
409 | |