void javanotify_carddevice_event(javacall_carddevice_event event,
                                 void *context) {
    midp_jc_event_union e;

    e.eventType = MIDP_JC_EVENT_CARDDEVICE;
    switch (event) {
    case JAVACALL_CARDDEVICE_RESET:
        e.data.carddeviceEvent.eventType = MIDP_CARDDEVICE_RESET;
        e.data.carddeviceEvent.handle = (int)context;
        break;
    case JAVACALL_CARDDEVICE_XFER:
        e.data.carddeviceEvent.eventType = MIDP_CARDDEVICE_XFER;
        e.data.carddeviceEvent.handle = (int)context;
        break;
    case JAVACALL_CARDDEVICE_UNLOCK:
        e.data.carddeviceEvent.eventType = MIDP_CARDDEVICE_UNLOCK;
        e.data.carddeviceEvent.handle = 0;
        break;
    default:
        /* TODO: report error */
        return;
    }
    javacall_event_send((unsigned char *) &e, sizeof(midp_jc_event_union));
    return;
}
/**
 * A helper function to 
 * @param event a pointer to midp_javacall_event_union
 * @return javacall_event_send() operation result
 */
static javacall_result
midp_jc_event_send(midp_jc_event_union *event) {
    return 
        javacall_event_send(
                            (unsigned char *)event,
                            sizeof(midp_jc_event_union)
        );
}
/**
 * Sends midp event throught javacall event subsystem
 * @param event a pointer to midp_javacall_event_union
 * @return  operation result
 */
javacall_result
midp_jc_event_send(midp_jc_event_union *event) {
#if !ENABLE_CDC
    return javacall_event_send((unsigned char *)event,
                               sizeof(midp_jc_event_union));
#else
    return javacall_event_send_cvm(MIDP_EVENT_QUEUE_ID, (unsigned char *)event,
                               sizeof(midp_jc_event_union));
#endif
}