Sun Microsystems 2 Wireless Office Headset User Manual


 
10 Multitasking Guide May 2007
*/
extern void mw_cook(MWCB callback, void *context);
Typical usage of this API is shown in CODE EXAMPLE 2-2.
CODE EXAMPLE 2-2 Typical usage of the microwave
void cb_popcorn(MWSTATUS status, void *context) {
if (status == MW_INTERRUPTED) {
/* tell the user that the popcorn isn't finished */
} else {
...
}
}
void cook_popcorn() {
mw_init();
mw_settime(180);
mw_setpower(100);
mw_cook(cb_popcorn, NULL);
}
For the sake of discussion, assume that this native library is extremely simplistic. If
the mw_init() function is called twice, the system breaks. Or, if mw_cook() is
called while the microwave is cooking, the system breaks.
A straightforward binding of Java programming language APIs (Java APIs) for the
microwave library might be as shown in
CODE EXAMPLE 2-3.
CODE EXAMPLE 2-3 Simple Java API for the Microwave Oven
package javax.microwave.oven;
public class Microwave {
public static native void init();
public static native void setTime(int nsecs);
public static native void setPower(int power);
public static native int cook();
private Microwave() { } /* prevent instance creation */
}
The implementation of these native methods is straightforward and is not shown
here. See the K Native Interface (KNI) Specification, Version 1.0 for further information
about writing native methods.
To make this a nice Java API, assume that instead of being callback-based, the
cook() method blocks the calling thread until the operation completes or is
interrupted. This can be accomplished using SNI_BlockThread, and the native
callback can set a flag to cause JVMSPI_CheckEvents to call
SNI_UnblockThread. See the CLDC HotSpot Implementation Porting Guide for more
information.