About the QNX CAR platform
Getting Started Guide
Getting Ready
A Guided Tour of the HMI
Home
Navigation
Media Player
Settings screen
Communications screen
App Launcher screen
Push-to-Talk
Automatic Speech Recognition
Using Bluetooth
Pairing a smartphone
Making a phone call
Accessing the phone's email
Viewing the phone's contacts
Viewing the phone's text messages
Using Pandora Radio
Recalibrating the Touchscreen
Developing a Native App
Connecting the IDE to the target
Creating a native "hello world" application
Debugging a native application
Checking out a project from SVN
Building a native application in the IDE
Building a native application on the command line
Software Updates
Generating an update
Applying an update from the HMI
Applying an update from the command line
Controlling System Startup
Modifying the Startup Script
System Launch and Monitor (SLM)
Running the SLM service
Realtime Clock Synchronization
Architecture Guide
Top Level Design
Common Mechanisms
Ecosystem
Platform Layer
QNX Neutrino RTOS
Microkernel
Instant Device Activation
Networking
Fast boot
Fault detection
High Availability
Adaptive Partitioning
Resource Manager framework
OpenGL ES
Software Update
Middleware Layer
Multimedia
Navigation
Automatic Speech Recognition
Radio
Mobile Device Gateway
Android interfaces
Bluetooth
DLNA
HTML5 interface
Apple iOS interfaces
MirrorLink
Network interfaces
USB
HTML5 HMI Layer
Browser Engine
HTML5 application model
Application management
Getting Started Guide
Getting Ready
A Guided Tour of the HMI
Home
Navigation
Media Player
Settings screen
Communications screen
App Launcher screen
Push-to-Talk
Automatic Speech Recognition
Using Bluetooth
Pairing a smartphone
Making a phone call
Accessing the phone's email
Viewing the phone's contacts
Viewing the phone's text messages
Using Pandora Radio
Recalibrating the Touchscreen
Developing a Native App
Connecting the IDE to the target
Creating a native "hello world" application
Debugging a native application
Checking out a project from SVN
Building a native application in the IDE
Building a native application on the command line
Software Updates
Generating an update
Applying an update from the HMI
Applying an update from the command line
Controlling System Startup
Modifying the Startup Script
System Launch and Monitor (SLM)
Running the SLM service
Realtime Clock Synchronization
Architecture Guide
Top Level Design
Common Mechanisms
Ecosystem
Platform Layer
QNX Neutrino RTOS
Microkernel
Instant Device Activation
Networking
Fast boot
Fault detection
High Availability
Adaptive Partitioning
Resource Manager framework
OpenGL ES
Software Update
Middleware Layer
Multimedia
Navigation
Automatic Speech Recognition
Radio
Mobile Device Gateway
Android interfaces
Bluetooth
DLNA
HTML5 interface
Apple iOS interfaces
MirrorLink
Network interfaces
USB
HTML5 HMI Layer
Browser Engine
HTML5 application model
Application management
Developing for the QNX CAR platform
HMI Developer's Guide
Navigator
Introduction to Navigator
Navigator prerequisite knowledge
Navigator window management
Navigator interfaces
Navigator reference implementation
Creating a new Navigator
Authman and Launcher
Developing HTML5 Apps with WebWorks
The HTML5 Development Tools
Obtaining the development tools
Ripple Emulator
Installing the Ripple emulator
Sencha Touch 2 framework
HTML5 Web Application Framework
WebGL
jQuery support
Creating an app
Creating a basic "Hello World" app
Creating a configuration document (config.xml)
Creating an entry point for your app (index.html)
Running "Hello World" in Ripple
Creating your own extension
Using the JavaScript Framework
JavaScript extension example
Creating the JavaScript for the extension
Details about the JavaScript part of the extension
Using the PPS interface
Running your modified app
Deploying "Hello World"
Packaging
Installing to a device
Enhancing performance
Uninstalling a package
JavaScript Framework Reference
blackberry.bridge
qnx.application
qnx.application.event
qnx.audiomixer
qnx.audioplayer
qnx.bluetooth
qnx.bluetooth.pbap
qnx.gears
qnx.hvac
qnx.info
qnx.keyboard
qnx.locale
qnx.medialibrary
qnx.mediasource
qnx.message
qnx.navigation
qnx.navigation.tcs
qnx.navigator
qnx.navigator.overlay
qnx.network
qnx.phone
qnx.radio
qnx.sensors
qnx.settings
qnx.systemupdate
qnx.theme
qnx.user
qnx.voice
qnx.volume
PPS Objects Reference
Overview of the PPS Service
Setting Up Your Own Objects
PPS Objects Reference Pages
/pps/accounts/
/pps/accounts/1000/telenav/
/pps/applications/mediaplayer
/pps/applications/weathernetwork/
/pps/qnx/dbnotify/dbs
/pps/qnx/device/<device>
/pps/qnx/device/<device>_ctrl
/pps/qnx/driver/<pid>
/pps/qnx/mount/<device>
/pps/qnx/qdb/config/<dbname>
/pps/qnx/qdb/status/<dbname>
/pps/qnxcar/hvac
/pps/qnxcar/locale
/pps/qnxcar/navigation/control
/pps/qnxcar/navigation/geolocation
/pps/qnxcar/navigation/options
/pps/qnxcar/navigation/status
/pps/qnxcar/profile/theme
/pps/qnxcar/profile/user
/pps/qnxcar/radio/control
/pps/qnxcar/radio/status
/pps/qnxcar/radio/ti_control
/pps/qnxcar/radio/ti_rds
/pps/qnxcar/radio/ti_status
/pps/qnxcar/radio/tuners
/pps/qnxcar/sensors
/pps/qnxcar/system/info
/pps/qnxcar/system/settings
/pps/servicedata/schedule
/pps/services/alarm/control
/pps/services/alarm/status-<clientlabel>
/pps/services/app-launcher
/pps/services/asr/control
/pps/services/audio/audio_router_control
/pps/services/audio/audio_router_status
/pps/services/audio/control
/pps/services/audio/devices/
/pps/services/audio/status
/pps/services/audio/types/
/pps/services/audio/voice_status
/pps/services/bluetooth/control
/pps/services/bluetooth/messages/control
/pps/services/bluetooth/messages/notification
/pps/services/bluetooth/messages/status
/pps/services/bluetooth/paired_devices/<mac_addr>
/pps/services/bluetooth/phonebook/control
/pps/services/bluetooth/phonebook/status
/pps/services/bluetooth/remote_devices/<mac_addr>
/pps/services/bluetooth/services
/pps/services/bluetooth/settings
/pps/services/bluetooth/status
/pps/services/clock/control
/pps/services/clock/status
/pps/services/confstr/
/pps/services/deviceproperties
/pps/services/dlna/dmcclient/control
/pps/services/dlna/dmcclient/dmr/networkstate/<dmr_uuid>
/pps/services/dlna/dmcclient/dmr/playstate/<dmr_uuid>
/pps/services/dlna/dmcclient/dms/networkstate/<dms_uuid>
/pps/services/gears/control
/pps/services/gears/status
/pps/services/handsfree/control
/pps/services/handsfree/status
/pps/services/launcher/control
/pps/services/mediaserver/settings
/pps/services/mm-control/control
/pps/services/mm-control/<playername>/status
/pps/services/mm-detect/status
/pps/services/multimedia/renderer/component/
/pps/services/multimedia/renderer/context/<contextname>
/pps/services/multimedia/renderer/context/<contextname>/input
/pps/services/multimedia/renderer/context/<contextname>/metadata
/pps/services/multimedia/renderer/context/<contextname>/output#
/pps/services/multimedia/renderer/context/<contextname>/p#
/pps/services/multimedia/renderer/context/<contextname>/param
/pps/services/multimedia/renderer/context/<contextname>/play-queue
/pps/services/multimedia/renderer/context/<contextname>/q#
/pps/services/multimedia/renderer/context/<contextname>/state
/pps/services/multimedia/renderer/context/<contextname>/status
/pps/services/multimedia/renderer/control
/pps/services/navigator/
/pps/services/networking/all/interfaces/<interface>
/pps/services/networking/all/proxy
/pps/services/networking/all/status_public
/pps/services/networking/control
/pps/services/networking/proxy
/pps/services/networking/proxyserver
/pps/services/networking/status
/pps/services/networking/status_public
/pps/services/private/deviceproperties
/pps/services/update/control
/pps/services/update/status
/pps/system/authorization/control
/pps/system/keyboard/control
/pps/system/keyboard/status
/pps/system/navigator/command
/pps/system/navigator/windowgroup
/pps/system/navigator/windowparams
/pps/system/ppsnetd/control
/pps/tcs/
Appendix: List of Objects Used Internally
Multimedia Detector Configuration Guide
Multimedia Detector Overview
Deciding whether to run mm-detect
Customizing media detection and synchronization
Running mm-detect
Restarting mm-detect manually
Preventing mm-detect from running
mm-detect SLM specification
mm-detect command line
Device tracking and media information management
Device insertion handling
Media synchronization thread actions
Device removal handling
PPS devices information object
PPS synchronization status object
Multimedia Controller Configuration Guide
Multimedia Controller Overview
Deciding whether to run mm-control
mm-control components
Running mm-control
Restarting mm-control manually
Preventing mm-control from running
mm-control SLM specification
mm-control command line
mm-control configuration file
Setup and Command Monitoring
Media command processing
HMI Developer's Guide
Navigator
Introduction to Navigator
Navigator prerequisite knowledge
Navigator window management
Navigator interfaces
Navigator reference implementation
Creating a new Navigator
Authman and Launcher
Developing HTML5 Apps with WebWorks
The HTML5 Development Tools
Obtaining the development tools
Ripple Emulator
Installing the Ripple emulator
Sencha Touch 2 framework
HTML5 Web Application Framework
WebGL
jQuery support
Creating an app
Creating a basic "Hello World" app
Creating a configuration document (config.xml)
Creating an entry point for your app (index.html)
Running "Hello World" in Ripple
Creating your own extension
Using the JavaScript Framework
JavaScript extension example
Creating the JavaScript for the extension
Details about the JavaScript part of the extension
Using the PPS interface
Running your modified app
Deploying "Hello World"
Packaging
Installing to a device
Enhancing performance
Uninstalling a package
JavaScript Framework Reference
blackberry.bridge
qnx.application
qnx.application.event
qnx.audiomixer
qnx.audioplayer
qnx.bluetooth
qnx.bluetooth.pbap
qnx.gears
qnx.hvac
qnx.info
qnx.keyboard
qnx.locale
qnx.medialibrary
qnx.mediasource
qnx.message
qnx.navigation
qnx.navigation.tcs
qnx.navigator
qnx.navigator.overlay
qnx.network
qnx.phone
qnx.radio
qnx.sensors
qnx.settings
qnx.systemupdate
qnx.theme
qnx.user
qnx.voice
qnx.volume
PPS Objects Reference
Overview of the PPS Service
Setting Up Your Own Objects
PPS Objects Reference Pages
/pps/accounts/
/pps/accounts/1000/telenav/
/pps/applications/mediaplayer
/pps/applications/weathernetwork/
/pps/qnx/dbnotify/dbs
/pps/qnx/device/<device>
/pps/qnx/device/<device>_ctrl
/pps/qnx/driver/<pid>
/pps/qnx/mount/<device>
/pps/qnx/qdb/config/<dbname>
/pps/qnx/qdb/status/<dbname>
/pps/qnxcar/hvac
/pps/qnxcar/locale
/pps/qnxcar/navigation/control
/pps/qnxcar/navigation/geolocation
/pps/qnxcar/navigation/options
/pps/qnxcar/navigation/status
/pps/qnxcar/profile/theme
/pps/qnxcar/profile/user
/pps/qnxcar/radio/control
/pps/qnxcar/radio/status
/pps/qnxcar/radio/ti_control
/pps/qnxcar/radio/ti_rds
/pps/qnxcar/radio/ti_status
/pps/qnxcar/radio/tuners
/pps/qnxcar/sensors
/pps/qnxcar/system/info
/pps/qnxcar/system/settings
/pps/servicedata/schedule
/pps/services/alarm/control
/pps/services/alarm/status-<clientlabel>
/pps/services/app-launcher
/pps/services/asr/control
/pps/services/audio/audio_router_control
/pps/services/audio/audio_router_status
/pps/services/audio/control
/pps/services/audio/devices/
/pps/services/audio/status
/pps/services/audio/types/
/pps/services/audio/voice_status
/pps/services/bluetooth/control
/pps/services/bluetooth/messages/control
/pps/services/bluetooth/messages/notification
/pps/services/bluetooth/messages/status
/pps/services/bluetooth/paired_devices/<mac_addr>
/pps/services/bluetooth/phonebook/control
/pps/services/bluetooth/phonebook/status
/pps/services/bluetooth/remote_devices/<mac_addr>
/pps/services/bluetooth/services
/pps/services/bluetooth/settings
/pps/services/bluetooth/status
/pps/services/clock/control
/pps/services/clock/status
/pps/services/confstr/
/pps/services/deviceproperties
/pps/services/dlna/dmcclient/control
/pps/services/dlna/dmcclient/dmr/networkstate/<dmr_uuid>
/pps/services/dlna/dmcclient/dmr/playstate/<dmr_uuid>
/pps/services/dlna/dmcclient/dms/networkstate/<dms_uuid>
/pps/services/gears/control
/pps/services/gears/status
/pps/services/handsfree/control
/pps/services/handsfree/status
/pps/services/launcher/control
/pps/services/mediaserver/settings
/pps/services/mm-control/control
/pps/services/mm-control/<playername>/status
/pps/services/mm-detect/status
/pps/services/multimedia/renderer/component/
/pps/services/multimedia/renderer/context/<contextname>
/pps/services/multimedia/renderer/context/<contextname>/input
/pps/services/multimedia/renderer/context/<contextname>/metadata
/pps/services/multimedia/renderer/context/<contextname>/output#
/pps/services/multimedia/renderer/context/<contextname>/p#
/pps/services/multimedia/renderer/context/<contextname>/param
/pps/services/multimedia/renderer/context/<contextname>/play-queue
/pps/services/multimedia/renderer/context/<contextname>/q#
/pps/services/multimedia/renderer/context/<contextname>/state
/pps/services/multimedia/renderer/context/<contextname>/status
/pps/services/multimedia/renderer/control
/pps/services/navigator/
/pps/services/networking/all/interfaces/<interface>
/pps/services/networking/all/proxy
/pps/services/networking/all/status_public
/pps/services/networking/control
/pps/services/networking/proxy
/pps/services/networking/proxyserver
/pps/services/networking/status
/pps/services/networking/status_public
/pps/services/private/deviceproperties
/pps/services/update/control
/pps/services/update/status
/pps/system/authorization/control
/pps/system/keyboard/control
/pps/system/keyboard/status
/pps/system/navigator/command
/pps/system/navigator/windowgroup
/pps/system/navigator/windowparams
/pps/system/ppsnetd/control
/pps/tcs/
Appendix: List of Objects Used Internally
Multimedia Detector Configuration Guide
Multimedia Detector Overview
Deciding whether to run mm-detect
Customizing media detection and synchronization
Running mm-detect
Restarting mm-detect manually
Preventing mm-detect from running
mm-detect SLM specification
mm-detect command line
Device tracking and media information management
Device insertion handling
Media synchronization thread actions
Device removal handling
PPS devices information object
PPS synchronization status object
Multimedia Controller Configuration Guide
Multimedia Controller Overview
Deciding whether to run mm-control
mm-control components
Running mm-control
Restarting mm-control manually
Preventing mm-control from running
mm-control SLM specification
mm-control command line
mm-control configuration file
Setup and Command Monitoring
Media command processing
UI and Media API References
Audio Manager Library Reference
Audio manager routing priority
Supported routing paths
Linking with audio manager
Audio Concurrency (audio_manager_concurrency.h)
Data types in audio_manager_concurrency.h
audio_manager_concurrency_t
Functions in audio_manager_concurrency.h
audio_manager_get_audio_type_concurrency_status()
audio_manager_get_current_audio_handle_concurrency_status()
Audio Devices (audio_manager_device.h)
Constants in audio_manager_device.h
Definitions in audio_manager_device.h
Data types in audio_manager_device.h
audio_manager_channel_config_t
audio_manager_channel_t
audio_manager_device_capabilities_t
audio_manager_device_capability_t
audio_manager_device_headset_button_t
audio_manager_device_t
audio_manager_device_volume_control_t
audio_manager_device_audio_config_t
audio_manager_headset_button_state_t
Functions in audio_manager_device.h
audio_manager_get_default_device()
audio_manager_get_default_input_device()
audio_manager_get_device_audio_capabilities()
audio_manager_get_device_audio_config()
audio_manager_get_device_audio_path()
audio_manager_get_device_audio_public()
audio_manager_get_device_button_states()
audio_manager_get_device_capability()
audio_manager_get_device_dependency()
audio_manager_get_device_from_name()
audio_manager_get_device_name()
audio_manager_get_device_volume_control()
audio_manager_get_preferred_audio_input_path()
audio_manager_get_preferred_audio_output_path()
audio_manager_is_device_connected()
audio_manager_is_device_kept_alive()
audio_manager_is_device_supported()
audio_manager_is_device_suspended()
audio_manager_is_hdmi_in_mirror_mode()
audio_manager_set_device_connected()
audio_manager_set_device_keep_alive()
audio_manager_set_device_suspended()
audio_manager_set_hdmi_mirror_mode()
Audio Events (audio_manager_event.h)
Data types in audio_manager_event.h
audio_manager_event_context_t
audio_manager_event_type_t
audio_manager_voice_status_volume_change_t
audio_manager_device_button_change_t
audio_manager_device_change_t
audio_manager_concurrency_change_t
audio_manager_routing_change_t
audio_manager_stat_change_t
audio_manager_status_headphone_boost_change_t
audio_manager_status_headphone_unsafe_zone_change_t
audio_manager_status_volume_change_t
audio_manager_voice_audio_option_change_t
audio_manager_voice_service_change_t
Functions in audio_manager_event.h
audio_manager_add_concurrency_change_event()
audio_manager_add_device_button_change_event()
audio_manager_add_device_change_event()
audio_manager_add_routing_change_event()
audio_manager_add_stat_change_event()
audio_manager_add_status_hp_boost_change_event()
audio_manager_add_status_hp_unsafe_zone_change_event()
audio_manager_add_voice_audio_option_change_event()
audio_manager_add_voice_service_change_event()
audio_manager_add_voice_volume_change_event()
audio_manager_add_volume_change_event()
audio_manager_dispatch_event()
audio_manager_get_event()
audio_manager_get_event_context()
audio_manager_get_event_fd()
audio_manager_peek_event()
audio_manager_release_event_context()
audio_manager_remove_concurrency_change_event()
audio_manager_remove_device_button_change_event()
audio_manager_remove_device_change_event()
audio_manager_remove_routing_change_event()
audio_manager_remove_stat_change_event()
audio_manager_remove_status_hp_boost_change_event()
audio_manager_remove_status_hp_unsafe_zone_change_event()
audio_manager_remove_voice_audio_option_change_event()
audio_manager_remove_voice_service_change_event()
audio_manager_remove_voice_volume_change_event()
audio_manager_remove_volume_change_event()
audio_manager_wait_for_initialization()
Audio Routing (audio_manager_routing.h)
Constants in audio_manager_routing.h
Definitions in audio_manager_routing.h
Data types in audio_manager_routing.h
audio_manager_audio_type_t
audio_manager_settings_reset_condition_t
Functions in audio_manager_routing.h
audio_manager_activate_handle()
audio_manager_free_handle()
audio_manager_get_alias_handle()
audio_manager_get_handle()
audio_manager_get_handle_status()
audio_manager_get_handle_type()
audio_manager_get_name_from_type()
audio_manager_get_type_from_name()
audio_manager_set_handle_routing_conditions()
audio_manager_set_handle_type()
audio_manager_snd_pcm_open()
audio_manager_snd_pcm_open_name()
audio_manager_snd_pcm_open_preferred()
audio_manager_suspend_handle()
Audio Voice Services (audio_manager_voice_service.h)
Constants in audio_manager_voice_service.h
Definitions in audio_manager_voice_service.h
Data types in audio_manager_voice_service.h
audio_manager_voice_option_t
audio_manager_voice_service_status_t
audio_manager_voice_service_t
Functions in audio_manager_voice_service.h
audio_manager_get_voice_service_from_name()
audio_manager_get_voice_service_name()
audio_manager_get_voice_service_option()
audio_manager_get_voice_service_option_from_name()
audio_manager_get_voice_service_option_name()
audio_manager_get_voice_service_status()
audio_manager_get_voice_service_status_from_name()
audio_manager_get_voice_service_status_name()
audio_manager_set_voice_service_option()
audio_manager_set_voice_service_status()
Audio Volume (audio_manager_volume.h)
Data types in audio_manager_volume.h
audio_manager_headphone_volume_override_status_t
Functions in audio_manager_volume.h
audio_manager_adjust_input_level()
audio_manager_adjust_output_level()
audio_manager_adjust_voice_output_level()
audio_manager_clear_stat_counter()
audio_manager_decrease_output_level()
audio_manager_decrease_voice_output_level()
audio_manager_get_headphone_boost_status()
audio_manager_get_headphone_override()
audio_manager_get_headphone_unsafe_zone_status()
audio_manager_get_input_level()
audio_manager_get_input_mute()
audio_manager_get_output_level()
audio_manager_get_output_mute()
audio_manager_get_output_volume_steps()
audio_manager_get_stat_counter()
audio_manager_get_voice_input_mute()
audio_manager_get_voice_output_level()
audio_manager_get_voice_output_mute()
audio_manager_get_voice_output_volume_steps()
audio_manager_increase_output_level()
audio_manager_increase_voice_output_level()
audio_manager_set_headphone_override()
audio_manager_set_headphone_volume_boost()
audio_manager_set_headphone_volume_unsafe_zone()
audio_manager_set_input_level()
audio_manager_set_input_mute()
audio_manager_set_output_level()
audio_manager_set_output_mute()
audio_manager_set_voice_input_mute()
audio_manager_set_voice_output_level()
audio_manager_set_voice_output_mute()
audio_manager_toggle_input_mute()
audio_manager_toggle_output_mute()
audio_manager_toggle_voice_output_mute()
Gestures Library Reference
Gesture Buckets (bucket.h)
Definitions in bucket.h
Definitions in bucket.h
Enumerations in bucket.h
events_bucket_mode_e
events_bucket_t
gestures_bucket_t
Functions in bucket.h
gestures_bucket_add()
gestures_bucket_clear()
gestures_bucket_count()
gestures_bucket_del()
gestures_bucket_get()
gestures_bucket_init()
Global Settings (defaults.h)
Definitions in defaults.h
Definitions in defaults.h
Double Tap (double_tap.h)
Data types in double_tap.h
double_tap_params_t
double_tap_state_e
gesture_double_tap_t
Functions in double_tap.h
double_tap_gesture_alloc()
double_tap_gesture_default_params()
Event Lists (event_list.h)
Data types in event_list.h
event_list_item
event_list_item_t
Functions in event_list.h
event_list_add()
event_list_alloc()
event_list_alloc_copy()
event_list_clear()
event_list_copy()
event_list_free()
event_list_get_first()
Long Press (long_press.h)
Data types in long_press.h
gesture_long_press_t
long_press_params_t
Functions in long_press.h
long_press_gesture_alloc()
long_press_gesture_default_params()
Pinch Gestures (pinch.h)
Data types in pinch.h
gesture_pinch_t
pinch_params_t
Functions in pinch.h
pinch_gesture_alloc()
pinch_gesture_default_params()
Press and Tap (press_and_tap.h)
Data types in press_and_tap.h
gesture_pt_t
pt_params_t
Functions in press_and_tap.h
pt_gesture_alloc()
pt_gesture_default_params()
Rotate Gesture (rotate.h)
Data types in rotate.h
gesture_rotate_t
rotate_params_t
Functions in rotate.h
rotate_gesture_alloc()
rotate_gesture_default_params()
Gesture Sets (set.h)
Data types in set.h
gestures_set_fail_f
Functions in set.h
gestures_set_add()
gestures_set_alloc()
gestures_set_free()
gestures_set_process_event()
gestures_set_process_event_list()
gestures_set_register_fail_cb()
Swipe Gesture (swipe.h)
Data types in swipe.h
gesture_swipe_t
swipe_params_t
Functions in swipe.h
swipe_gesture_alloc()
swipe_gesture_default_params()
Tap Gesture (tap.h)
Data types in tap.h
gesture_tap_t
tap_params_t
Functions in tap.h
tap_gesture_alloc()
tap_gesture_default_params()
Gesture Timers (timer.h)
Data types in timer.h
gesture_timer_callback_t
Functions in timer.h
gesture_timer_clear()
gesture_timer_create()
gesture_timer_destroy()
gesture_timer_query()
gesture_timer_set_event()
gesture_timer_set_ms()
gesture_timer_set_now()
Triple Tap (triple_tap.h)
Data types in triple_tap.h
gesture_triple_tap_t
triple_tap_state_e
triple_tap_params_t
Functions in triple_tap.h
triple_tap_gesture_alloc()
triple_tap_gesture_default_params()
Two Finger Pan (two_finger_pan.h)
Data types in two_finger_pan.h
gesture_tfpan_t
tfpan_params_t
Functions in two_finger_pan.h
tfpan_gesture_alloc()
tfpan_gesture_default_params()
Two Finger Tap (two_finger_tap.h)
Data types in two_finger_tap.h
gesture_tft_t
tft_params_t
Functions in two_finger_tap.h
tft_gesture_alloc()
tft_gesture_default_params()
Data Types and Helper Functions (types.h)
Constants in types.h
Definitions in types.h
Data types in types.h
gesture_base
gesture_base_t
gesture_coords_t
gesture_callback_f
gesture_e
gesture_funcs_t
gesture_state_e
Functions in types.h
gesture_base_init()
gesture_add_mustfail()
save_coords()
diff_time_ms()
max_displacement_abs()
map_contact_id()
Glview Library Reference
Constants in glview.h
Definitions in glview.h
Data types in glview.h
glview_api_t
background_callback
display_once_callback
event_callback
finalize_callback
foreground_callback
frame_callback
initialize_callback
resize_callback
Functions in glview.h
glview_display_once()
glview_get_callback_data()
glview_get_size()
glview_get_version()
glview_get_vsync()
glview_initialize()
glview_loop()
glview_register_background_callback()
glview_register_event_callback()
glview_register_finalize_callback()
glview_register_foreground_callback()
glview_register_frame_callback()
glview_register_initialize_callback()
glview_register_resize_callback()
glview_set_callback_data()
glview_set_vsync()
Image Library Reference
Working with Images
Attaching to the image library
Loading the image
Cleaning up
Image API
Data types in img.h
img_decode_callouts_t
img_encode_callouts_t
img_format_t
img_t
Functions in img.h
img_cfg_read()
img_codec_get_criteria()
img_codec_list()
img_codec_list_byext()
img_codec_list_bymime()
img_convert_data()
img_convert_getfunc()
img_crop()
img_decode_begin()
img_decode_finish()
img_decode_frame()
img_decode_validate()
img_dtransform()
img_dtransform_apply()
img_dtransform_create()
img_dtransform_free()
img_encode_begin()
img_encode_finish()
img_encode_frame()
img_expand_getfunc()
IMG_FMT_BPL()
IMG_FMT_BPP()
img_lib_attach()
img_lib_detach()
img_load()
img_load_file()
img_load_resize_file()
img_resize_fs()
img_rotate_ortho()
img_write()
img_write_file()
Input Events Library Reference
Event types (event_types.h)
Data types in event_types.h
input_class_e
input_event_e
mtouch_event
Screen helpers (screen_helpers.h)
Functions in screen_helpers.h
screen_get_mtouch_event()
Metadata Provider Library Reference
Metadata Provider Overview
Architecture of libmd
Metadata providers
MDP ratings
Metadata extraction
Included MDPs
Metadata extraction sessions
Configuring Metadata Providers
Configuration file
Metadata Provider API
md.h
Data types in md.h
mmmd_error_info_t
mmmd_flags_t
mmmd_hdl_t
Functions in md.h
mmmd_error_info()
mmmd_flags_set()
mmmd_get()
mmmd_init()
mmmd_mdps_list()
mmmd_session_close()
mmmd_session_open()
mmmd_session_params_set()
mmmd_terminate()
md_errors.h
Data types in md_errors.h
mmmd_errcode
Functions in md_errors.h
mmmd_error_str()
Multimedia Renderer Developer's Guide
Multimedia Renderer Architecture
Supported media
Abstraction layers
Contexts
Outputs
Inputs
Plugins
Using the Multimedia Renderer
Starting the multimedia renderer
mm-renderer configuration file
mm-renderer command line
Working with contexts
Closing context handles
Defining Parameters
Playing media
Play states
Play speed
Seeking to positions
Managing video windows
Recording audio data
PPS objects
Context state
Play state, warnings, and errors
Input metadata
Playlist window
Supported file and MIME types
Multimedia Renderer Client API
Data types in renderer.h and types.h
mm_error_code_t
mmr_connection_t
mmr_context_t
mmr_error_info_t
Functions in renderer.h
mmr_command_send()
mmr_connect()
mmr_context_close()
mmr_context_create()
mmr_context_destroy()
mmr_context_open()
mmr_context_parameters()
mmr_disconnect()
mmr_error_info()
mmr_input_attach()
mmr_input_detach()
mmr_input_parameters()
mmr_list_change()
mmr_output_attach()
mmr_output_detach()
mmr_output_parameters()
mmr_play()
mmr_seek()
mmr_speed_set()
mmr_stop()
mmr_track_parameters()
Multimedia Renderer Event API
Data types in events.h
mmr_event_t
mmr_event::details
mmr_event::data
mmr_event_type_t
mmr_state_t
Functions in events.h
mmr_event_arm()
mmr_event_data_set()
mmr_event_get()
mmr_event_wait()
Dictionary Object API
Data types in strm.h
strm_dict_t
strm_string_t
Functions in strm.h
strm_dict_clone()
strm_dict_compare()
strm_dict_destroy()
strm_dict_find_index()
strm_dict_find_rstr()
strm_dict_find_value()
strm_dict_index_delete()
strm_dict_key_delete()
strm_dict_key_get()
strm_dict_key_rstr()
strm_dict_new()
strm_dict_set()
strm_dict_set_rstr()
strm_dict_size()
strm_dict_subtract()
strm_dict_value_get()
strm_dict_value_rstr()
strm_string_alloc()
strm_string_clone()
strm_string_destroy()
strm_string_get()
strm_string_make()
strm_string_modify()
Multimedia Synchronizer Developer's Guide
Multimedia Synchronization Overview
The synchronization process
Synchronizer selection
Synchronization passes
Mediastore filesystem traversal
Database cleanup
Optimization of synchronization for slow devices
Full, directed, and file synchronizations
Setting up the Multimedia Synchronizer Environment
mm-sync command line
mmsyncclient command utility
Working with Synchronizations
Synchronizing multimedia content
Maintaining database persistence
Tracking synchronization progress
Setting a priority folder
Repairing database inconsistencies
Configuring Mediastore Synchronization
Configuration file contents
The <Configuration> element
The <Configuration>/<Database> element
The <Configuration>/<Database>/<Synchronization>
element
The <Configuration>/<Database>/<Synchronization>/<ConfigurableMetadata>
element
The <Configuration>/<Database>/<Synchronization>/<MSS>
element
The <Configuration>/<Database>/<Synchronization>/<PLSS>
element
The <Configuration>/<Database>/<Prune> element
Synchronization thread priorities
Skipping files based on their names
Limiting the number of items read
Maintaining the same IDs for updated files and playlists
Filtering synchronization by file type
Multimedia Synchronizer API
Client interface
Constants in mmsyncclient.h, interface.h, and types.h
Defines in mmsyncclient.h
Defines in interface.h
Defines in types.h
Data types in types.h
mmsync_hdl_t
mmsync_status_t
Functions in mmsyncclient.h
mm_sync_cancel()
mm_sync_connect()
mm_sync_control()
mm_sync_debug_set()
mm_sync_disconnect()
mm_sync_resume()
mm_sync_start()
mm_sync_status_get()
mm_sync_status_get_bydbname()
mm_sync_status_get_byid()
mm_sync_status_get_dbname()
mm_sync_suspend()
Configuration constants
Defines in config.h
Media file categories
Data types in interface.h
mm_ftypes_t
Event interface
Data types in event.h
mmsync_event_type_t
mmsync_event_t
mmsync_sync_data_t
mmsync_first_fid_data_t
mmsync_event_metadata_licensing_t
mmsync_ms_update_data_t
mmsync_folder_sync_data_t
mmsync_event_queue_size_t
Functions in mmsyncclient.h
mm_sync_events_get()
mm_sync_events_register()
Error information
Data types in event.h
mmsync_sync_error_type_t
mmsync_sync_error_t
Screen and Windowing Developer's Guide
Contexts
Create a context
Context types
Set a context property
Windows
Window types
Position a window
Create a window
Create a child window
Pixel formats
Displays
Multiple displays
Complete Sample: Using Multiple Displays
Event types
Screen and Windowing
Installation and Configuration
Install Screen and Windowing
Apply your Screen and Windowing
patch
Troubleshooting
Configure Screen and Windowing
Configure khronos section
Configure egl display
egl display configuration parameters
Configure wfd device
Configure winmgr section
Configure globals
globals configuration parameters
Configure display display_id
display configuration parameters
Configure class
class configuration parameters
Configure mtouch
mtouch configuration parameters
Apply your Screen and Windowing
configuration
Troubleshooting
Screen and Windowing
Library Reference
Function safety
Function execution types
Immediate execution
Flushing execution
Delayed execution
Apply execution
Function types
General (screen.h)
Constants in screen.h
Definitions in screen.h
Data types in screen.h
_screen_mode
Screen property types
Screen object types
Screen power mode types
Screen Idle Mode types
Screen mirror types
Screen alpha mode types
Screen pixel format types
Screen usage flag types
Screen transparency types
Screen sensitivity types
Screen sensitivity masks
Screen scaling quality types
Screen CBABC mode types
Screen flushing types
Screen mouse button types
Screen touch types
Contexts (screen.h)
Data types in screen.h
screen_context_t
Screen context types
Functions in screen.h
screen_create_context()
screen_set_context_property_cv()
screen_set_context_property_iv()
screen_set_context_property_llv()
screen_set_context_property_pv()
screen_get_context_property_cv()
screen_get_context_property_iv()
screen_get_context_property_llv()
screen_get_context_property_pv()
screen_destroy_context()
Windows (screen.h)
Data types in screen.h
screen_window_t
Screen window types
Screen window metric counts
Functions in screen.h
screen_create_window()
screen_create_window_type()
screen_create_window_buffers()
screen_attach_window_buffers()
screen_share_window_buffers()
screen_create_window_group()
screen_join_window_group()
screen_leave_window_group()
screen_ref_window()
screen_unref_window()
screen_post_window()
screen_wait_post()
screen_read_window()
screen_discard_window_regions()
screen_set_window_property_cv()
screen_set_window_property_iv()
screen_set_window_property_llv()
screen_set_window_property_pv()
screen_get_window_property_cv()
screen_get_window_property_iv()
screen_get_window_property_llv()
screen_get_window_property_pv()
screen_destroy_window_buffers()
screen_destroy_window()
Pixmaps (screen.h)
Data types in screen.h
screen_pixmap_t
Screen pixmap metric counts
Functions in screen.h
screen_create_pixmap()
screen_attach_pixmap_buffer()
screen_create_pixmap_buffer()
screen_destroy_pixmap()
screen_destroy_pixmap_buffer()
screen_get_pixmap_property_cv()
screen_get_pixmap_property_iv()
screen_get_pixmap_property_llv()
screen_get_pixmap_property_pv()
screen_join_pixmap_group()
screen_leave_pixmap_group()
screen_set_pixmap_property_cv()
screen_set_pixmap_property_iv()
screen_set_pixmap_property_llv()
screen_set_pixmap_property_pv()
Buffers (screen.h)
Data types in screen.h
screen_buffer_t
Functions in screen.h
screen_create_buffer()
screen_set_buffer_property_cv()
screen_set_buffer_property_iv()
screen_set_buffer_property_llv()
screen_set_buffer_property_pv()
screen_get_buffer_property_cv()
screen_get_buffer_property_iv()
screen_get_buffer_property_llv()
screen_get_buffer_property_pv()
screen_destroy_buffer()
Groups (screen.h)
Data types in screen.h
screen_group_t
Functions in screen.h
screen_create_group()
screen_set_group_property_cv()
screen_set_group_property_iv()
screen_set_group_property_llv()
screen_set_group_property_pv()
screen_get_group_property_cv()
screen_get_group_property_iv()
screen_get_group_property_llv()
screen_get_group_property_pv()
screen_destroy_group()
Events (screen.h)
Data types in screen.h
screen_event_t
Screen event types
Functions in screen.h
screen_create_event()
screen_inject_event()
screen_send_event()
screen_get_event()
screen_set_event_property_cv()
screen_set_event_property_iv()
screen_set_event_property_llv()
screen_set_event_property_pv()
screen_get_event_property_cv()
screen_get_event_property_iv()
screen_get_event_property_llv()
screen_get_event_property_pv()
screen_destroy_event()
Displays (screen.h)
Data types in screen.h
screen_display_t
screen_display_mode_t
Screen display mode types
Screen display types
Screen display metric count types
Functions in screen.h
screen_set_display_property_cv()
screen_set_display_property_iv()
screen_set_display_property_llv()
screen_set_display_property_pv()
screen_get_display_property_cv()
screen_get_display_property_iv()
screen_get_display_property_llv()
screen_get_display_property_pv()
screen_get_display_modes()
screen_read_display()
screen_share_display_buffers()
screen_wait_vsync()
Devices (screen.h)
Data types in screen.h
screen_device_t
Screen device metric counts
Functions in screen.h
screen_create_device_type()
screen_set_device_property_cv()
screen_set_device_property_iv()
screen_set_device_property_llv()
screen_set_device_property_pv()
screen_get_device_property_cv()
screen_get_device_property_iv()
screen_get_device_property_llv()
screen_get_device_property_pv()
screen_destroy_device()
Blits (screen.h)
Data types in screen.h
Screen blit types
Functions in screen.h
screen_blit()
screen_fill()
screen_flush_blits()
screen_flush_context()
Effects (screen.h, effects.h)
Data types in effects.h
Screen effect types
Screen effect property types
Screen effect flip axis types
Screen effect flip direction types
Screen effect rotate direction types
Screen effect page curl types
Screen effect reveal types
Functions in screen.h
screen_prepare_effect()
screen_start_effect()
screen_stop_effect()
screen_set_effect_property_fv()
screen_set_effect_property_iv()
Debugging (screen.h)
Data types in screen.h
Screen debug graph types
Screen packet types
Functions in screen.h
screen_print_packet()
Tutorial: Draw and perform vysnc operation using windows
Create the background window
Create the child windows
Create the main() function
Complete Sample: A vsync application using windows
Tutorial: Draw and perform vsync operations using blits, pixmaps, and buffers
Create a context and initialize a window
Create buffers and a pixmap
Combine buffers with blit functions and properties
Complete Sample: A vsync application using blits, pixmaps and buffers
Tutorial: Write an application using OpenGL ES
Use OpenGL ES in a windowed vsync application
Complete Sample: A windowed vsync application using OpenGL ES
Tutorial: Screenshots
Capture a window screenshot
Complete sample: a window screenshot example
Capture a display screenshot
Complete Sample: A Display screen shot example
String Pattern Library Reference
Constants in strpattern.h
Definitions in strpattern.h
Data types in strpattern.h
strpattern_analyze_callback_func
strpattern_context
strpattern_match
strpattern_regex_registration
Functions in strpattern.h
strpattern_analyze()
strpattern_analyzeUTF8()
strpattern_cancel()
strpattern_context_delete()
strpattern_context_new()
strpattern_context_set_sync()
strpattern_context_sync()
strpattern_errstr()
strpattern_init()
strpattern_match_delete()
strpattern_match_delete_all()
strpattern_match_end_index()
strpattern_match_invoke_action()
strpattern_match_invoke_count()
strpattern_match_invoke_data()
strpattern_match_invoke_data_type()
strpattern_match_invoke_default()
strpattern_match_invoke_target()
strpattern_match_invoke_uri()
strpattern_match_start_index()
Audio Manager Library Reference
Audio manager routing priority
Supported routing paths
Linking with audio manager
Audio Concurrency (audio_manager_concurrency.h)
Data types in audio_manager_concurrency.h
audio_manager_concurrency_t
Functions in audio_manager_concurrency.h
audio_manager_get_audio_type_concurrency_status()
audio_manager_get_current_audio_handle_concurrency_status()
Audio Devices (audio_manager_device.h)
Constants in audio_manager_device.h
Definitions in audio_manager_device.h
Data types in audio_manager_device.h
audio_manager_channel_config_t
audio_manager_channel_t
audio_manager_device_capabilities_t
audio_manager_device_capability_t
audio_manager_device_headset_button_t
audio_manager_device_t
audio_manager_device_volume_control_t
audio_manager_device_audio_config_t
audio_manager_headset_button_state_t
Functions in audio_manager_device.h
audio_manager_get_default_device()
audio_manager_get_default_input_device()
audio_manager_get_device_audio_capabilities()
audio_manager_get_device_audio_config()
audio_manager_get_device_audio_path()
audio_manager_get_device_audio_public()
audio_manager_get_device_button_states()
audio_manager_get_device_capability()
audio_manager_get_device_dependency()
audio_manager_get_device_from_name()
audio_manager_get_device_name()
audio_manager_get_device_volume_control()
audio_manager_get_preferred_audio_input_path()
audio_manager_get_preferred_audio_output_path()
audio_manager_is_device_connected()
audio_manager_is_device_kept_alive()
audio_manager_is_device_supported()
audio_manager_is_device_suspended()
audio_manager_is_hdmi_in_mirror_mode()
audio_manager_set_device_connected()
audio_manager_set_device_keep_alive()
audio_manager_set_device_suspended()
audio_manager_set_hdmi_mirror_mode()
Audio Events (audio_manager_event.h)
Data types in audio_manager_event.h
audio_manager_event_context_t
audio_manager_event_type_t
audio_manager_voice_status_volume_change_t
audio_manager_device_button_change_t
audio_manager_device_change_t
audio_manager_concurrency_change_t
audio_manager_routing_change_t
audio_manager_stat_change_t
audio_manager_status_headphone_boost_change_t
audio_manager_status_headphone_unsafe_zone_change_t
audio_manager_status_volume_change_t
audio_manager_voice_audio_option_change_t
audio_manager_voice_service_change_t
Functions in audio_manager_event.h
audio_manager_add_concurrency_change_event()
audio_manager_add_device_button_change_event()
audio_manager_add_device_change_event()
audio_manager_add_routing_change_event()
audio_manager_add_stat_change_event()
audio_manager_add_status_hp_boost_change_event()
audio_manager_add_status_hp_unsafe_zone_change_event()
audio_manager_add_voice_audio_option_change_event()
audio_manager_add_voice_service_change_event()
audio_manager_add_voice_volume_change_event()
audio_manager_add_volume_change_event()
audio_manager_dispatch_event()
audio_manager_get_event()
audio_manager_get_event_context()
audio_manager_get_event_fd()
audio_manager_peek_event()
audio_manager_release_event_context()
audio_manager_remove_concurrency_change_event()
audio_manager_remove_device_button_change_event()
audio_manager_remove_device_change_event()
audio_manager_remove_routing_change_event()
audio_manager_remove_stat_change_event()
audio_manager_remove_status_hp_boost_change_event()
audio_manager_remove_status_hp_unsafe_zone_change_event()
audio_manager_remove_voice_audio_option_change_event()
audio_manager_remove_voice_service_change_event()
audio_manager_remove_voice_volume_change_event()
audio_manager_remove_volume_change_event()
audio_manager_wait_for_initialization()
Audio Routing (audio_manager_routing.h)
Constants in audio_manager_routing.h
Definitions in audio_manager_routing.h
Data types in audio_manager_routing.h
audio_manager_audio_type_t
audio_manager_settings_reset_condition_t
Functions in audio_manager_routing.h
audio_manager_activate_handle()
audio_manager_free_handle()
audio_manager_get_alias_handle()
audio_manager_get_handle()
audio_manager_get_handle_status()
audio_manager_get_handle_type()
audio_manager_get_name_from_type()
audio_manager_get_type_from_name()
audio_manager_set_handle_routing_conditions()
audio_manager_set_handle_type()
audio_manager_snd_pcm_open()
audio_manager_snd_pcm_open_name()
audio_manager_snd_pcm_open_preferred()
audio_manager_suspend_handle()
Audio Voice Services (audio_manager_voice_service.h)
Constants in audio_manager_voice_service.h
Definitions in audio_manager_voice_service.h
Data types in audio_manager_voice_service.h
audio_manager_voice_option_t
audio_manager_voice_service_status_t
audio_manager_voice_service_t
Functions in audio_manager_voice_service.h
audio_manager_get_voice_service_from_name()
audio_manager_get_voice_service_name()
audio_manager_get_voice_service_option()
audio_manager_get_voice_service_option_from_name()
audio_manager_get_voice_service_option_name()
audio_manager_get_voice_service_status()
audio_manager_get_voice_service_status_from_name()
audio_manager_get_voice_service_status_name()
audio_manager_set_voice_service_option()
audio_manager_set_voice_service_status()
Audio Volume (audio_manager_volume.h)
Data types in audio_manager_volume.h
audio_manager_headphone_volume_override_status_t
Functions in audio_manager_volume.h
audio_manager_adjust_input_level()
audio_manager_adjust_output_level()
audio_manager_adjust_voice_output_level()
audio_manager_clear_stat_counter()
audio_manager_decrease_output_level()
audio_manager_decrease_voice_output_level()
audio_manager_get_headphone_boost_status()
audio_manager_get_headphone_override()
audio_manager_get_headphone_unsafe_zone_status()
audio_manager_get_input_level()
audio_manager_get_input_mute()
audio_manager_get_output_level()
audio_manager_get_output_mute()
audio_manager_get_output_volume_steps()
audio_manager_get_stat_counter()
audio_manager_get_voice_input_mute()
audio_manager_get_voice_output_level()
audio_manager_get_voice_output_mute()
audio_manager_get_voice_output_volume_steps()
audio_manager_increase_output_level()
audio_manager_increase_voice_output_level()
audio_manager_set_headphone_override()
audio_manager_set_headphone_volume_boost()
audio_manager_set_headphone_volume_unsafe_zone()
audio_manager_set_input_level()
audio_manager_set_input_mute()
audio_manager_set_output_level()
audio_manager_set_output_mute()
audio_manager_set_voice_input_mute()
audio_manager_set_voice_output_level()
audio_manager_set_voice_output_mute()
audio_manager_toggle_input_mute()
audio_manager_toggle_output_mute()
audio_manager_toggle_voice_output_mute()
Gestures Library Reference
Gesture Buckets (bucket.h)
Definitions in bucket.h
Definitions in bucket.h
Enumerations in bucket.h
events_bucket_mode_e
events_bucket_t
gestures_bucket_t
Functions in bucket.h
gestures_bucket_add()
gestures_bucket_clear()
gestures_bucket_count()
gestures_bucket_del()
gestures_bucket_get()
gestures_bucket_init()
Global Settings (defaults.h)
Definitions in defaults.h
Definitions in defaults.h
Double Tap (double_tap.h)
Data types in double_tap.h
double_tap_params_t
double_tap_state_e
gesture_double_tap_t
Functions in double_tap.h
double_tap_gesture_alloc()
double_tap_gesture_default_params()
Event Lists (event_list.h)
Data types in event_list.h
event_list_item
event_list_item_t
Functions in event_list.h
event_list_add()
event_list_alloc()
event_list_alloc_copy()
event_list_clear()
event_list_copy()
event_list_free()
event_list_get_first()
Long Press (long_press.h)
Data types in long_press.h
gesture_long_press_t
long_press_params_t
Functions in long_press.h
long_press_gesture_alloc()
long_press_gesture_default_params()
Pinch Gestures (pinch.h)
Data types in pinch.h
gesture_pinch_t
pinch_params_t
Functions in pinch.h
pinch_gesture_alloc()
pinch_gesture_default_params()
Press and Tap (press_and_tap.h)
Data types in press_and_tap.h
gesture_pt_t
pt_params_t
Functions in press_and_tap.h
pt_gesture_alloc()
pt_gesture_default_params()
Rotate Gesture (rotate.h)
Data types in rotate.h
gesture_rotate_t
rotate_params_t
Functions in rotate.h
rotate_gesture_alloc()
rotate_gesture_default_params()
Gesture Sets (set.h)
Data types in set.h
gestures_set_fail_f
Functions in set.h
gestures_set_add()
gestures_set_alloc()
gestures_set_free()
gestures_set_process_event()
gestures_set_process_event_list()
gestures_set_register_fail_cb()
Swipe Gesture (swipe.h)
Data types in swipe.h
gesture_swipe_t
swipe_params_t
Functions in swipe.h
swipe_gesture_alloc()
swipe_gesture_default_params()
Tap Gesture (tap.h)
Data types in tap.h
gesture_tap_t
tap_params_t
Functions in tap.h
tap_gesture_alloc()
tap_gesture_default_params()
Gesture Timers (timer.h)
Data types in timer.h
gesture_timer_callback_t
Functions in timer.h
gesture_timer_clear()
gesture_timer_create()
gesture_timer_destroy()
gesture_timer_query()
gesture_timer_set_event()
gesture_timer_set_ms()
gesture_timer_set_now()
Triple Tap (triple_tap.h)
Data types in triple_tap.h
gesture_triple_tap_t
triple_tap_state_e
triple_tap_params_t
Functions in triple_tap.h
triple_tap_gesture_alloc()
triple_tap_gesture_default_params()
Two Finger Pan (two_finger_pan.h)
Data types in two_finger_pan.h
gesture_tfpan_t
tfpan_params_t
Functions in two_finger_pan.h
tfpan_gesture_alloc()
tfpan_gesture_default_params()
Two Finger Tap (two_finger_tap.h)
Data types in two_finger_tap.h
gesture_tft_t
tft_params_t
Functions in two_finger_tap.h
tft_gesture_alloc()
tft_gesture_default_params()
Data Types and Helper Functions (types.h)
Constants in types.h
Definitions in types.h
Data types in types.h
gesture_base
gesture_base_t
gesture_coords_t
gesture_callback_f
gesture_e
gesture_funcs_t
gesture_state_e
Functions in types.h
gesture_base_init()
gesture_add_mustfail()
save_coords()
diff_time_ms()
max_displacement_abs()
map_contact_id()
Glview Library Reference
Constants in glview.h
Definitions in glview.h
Data types in glview.h
glview_api_t
background_callback
display_once_callback
event_callback
finalize_callback
foreground_callback
frame_callback
initialize_callback
resize_callback
Functions in glview.h
glview_display_once()
glview_get_callback_data()
glview_get_size()
glview_get_version()
glview_get_vsync()
glview_initialize()
glview_loop()
glview_register_background_callback()
glview_register_event_callback()
glview_register_finalize_callback()
glview_register_foreground_callback()
glview_register_frame_callback()
glview_register_initialize_callback()
glview_register_resize_callback()
glview_set_callback_data()
glview_set_vsync()
Image Library Reference
Working with Images
Attaching to the image library
Loading the image
Cleaning up
Image API
Data types in img.h
img_decode_callouts_t
img_encode_callouts_t
img_format_t
img_t
Functions in img.h
img_cfg_read()
img_codec_get_criteria()
img_codec_list()
img_codec_list_byext()
img_codec_list_bymime()
img_convert_data()
img_convert_getfunc()
img_crop()
img_decode_begin()
img_decode_finish()
img_decode_frame()
img_decode_validate()
img_dtransform()
img_dtransform_apply()
img_dtransform_create()
img_dtransform_free()
img_encode_begin()
img_encode_finish()
img_encode_frame()
img_expand_getfunc()
IMG_FMT_BPL()
IMG_FMT_BPP()
img_lib_attach()
img_lib_detach()
img_load()
img_load_file()
img_load_resize_file()
img_resize_fs()
img_rotate_ortho()
img_write()
img_write_file()
Input Events Library Reference
Event types (event_types.h)
Data types in event_types.h
input_class_e
input_event_e
mtouch_event
Screen helpers (screen_helpers.h)
Functions in screen_helpers.h
screen_get_mtouch_event()
Metadata Provider Library Reference
Metadata Provider Overview
Architecture of libmd
Metadata providers
MDP ratings
Metadata extraction
Included MDPs
Metadata extraction sessions
Configuring Metadata Providers
Configuration file
Metadata Provider API
md.h
Data types in md.h
mmmd_error_info_t
mmmd_flags_t
mmmd_hdl_t
Functions in md.h
mmmd_error_info()
mmmd_flags_set()
mmmd_get()
mmmd_init()
mmmd_mdps_list()
mmmd_session_close()
mmmd_session_open()
mmmd_session_params_set()
mmmd_terminate()
md_errors.h
Data types in md_errors.h
mmmd_errcode
Functions in md_errors.h
mmmd_error_str()
Multimedia Renderer Developer's Guide
Multimedia Renderer Architecture
Supported media
Abstraction layers
Contexts
Outputs
Inputs
Plugins
Using the Multimedia Renderer
Starting the multimedia renderer
mm-renderer configuration file
mm-renderer command line
Working with contexts
Closing context handles
Defining Parameters
Playing media
Play states
Play speed
Seeking to positions
Managing video windows
Recording audio data
PPS objects
Context state
Play state, warnings, and errors
Input metadata
Playlist window
Supported file and MIME types
Multimedia Renderer Client API
Data types in renderer.h and types.h
mm_error_code_t
mmr_connection_t
mmr_context_t
mmr_error_info_t
Functions in renderer.h
mmr_command_send()
mmr_connect()
mmr_context_close()
mmr_context_create()
mmr_context_destroy()
mmr_context_open()
mmr_context_parameters()
mmr_disconnect()
mmr_error_info()
mmr_input_attach()
mmr_input_detach()
mmr_input_parameters()
mmr_list_change()
mmr_output_attach()
mmr_output_detach()
mmr_output_parameters()
mmr_play()
mmr_seek()
mmr_speed_set()
mmr_stop()
mmr_track_parameters()
Multimedia Renderer Event API
Data types in events.h
mmr_event_t
mmr_event::details
mmr_event::data
mmr_event_type_t
mmr_state_t
Functions in events.h
mmr_event_arm()
mmr_event_data_set()
mmr_event_get()
mmr_event_wait()
Dictionary Object API
Data types in strm.h
strm_dict_t
strm_string_t
Functions in strm.h
strm_dict_clone()
strm_dict_compare()
strm_dict_destroy()
strm_dict_find_index()
strm_dict_find_rstr()
strm_dict_find_value()
strm_dict_index_delete()
strm_dict_key_delete()
strm_dict_key_get()
strm_dict_key_rstr()
strm_dict_new()
strm_dict_set()
strm_dict_set_rstr()
strm_dict_size()
strm_dict_subtract()
strm_dict_value_get()
strm_dict_value_rstr()
strm_string_alloc()
strm_string_clone()
strm_string_destroy()
strm_string_get()
strm_string_make()
strm_string_modify()
Multimedia Synchronizer Developer's Guide
Multimedia Synchronization Overview
The synchronization process
Synchronizer selection
Synchronization passes
Mediastore filesystem traversal
Database cleanup
Optimization of synchronization for slow devices
Full, directed, and file synchronizations
Setting up the Multimedia Synchronizer Environment
mm-sync command line
mmsyncclient command utility
Working with Synchronizations
Synchronizing multimedia content
Maintaining database persistence
Tracking synchronization progress
Setting a priority folder
Repairing database inconsistencies
Configuring Mediastore Synchronization
Configuration file contents
The <Configuration> element
The <Configuration>/<Database> element
The <Configuration>/<Database>/<Synchronization>
element
The <Configuration>/<Database>/<Synchronization>/<ConfigurableMetadata>
element
The <Configuration>/<Database>/<Synchronization>/<MSS>
element
The <Configuration>/<Database>/<Synchronization>/<PLSS>
element
The <Configuration>/<Database>/<Prune> element
Synchronization thread priorities
Skipping files based on their names
Limiting the number of items read
Maintaining the same IDs for updated files and playlists
Filtering synchronization by file type
Multimedia Synchronizer API
Client interface
Constants in mmsyncclient.h, interface.h, and types.h
Defines in mmsyncclient.h
Defines in interface.h
Defines in types.h
Data types in types.h
mmsync_hdl_t
mmsync_status_t
Functions in mmsyncclient.h
mm_sync_cancel()
mm_sync_connect()
mm_sync_control()
mm_sync_debug_set()
mm_sync_disconnect()
mm_sync_resume()
mm_sync_start()
mm_sync_status_get()
mm_sync_status_get_bydbname()
mm_sync_status_get_byid()
mm_sync_status_get_dbname()
mm_sync_suspend()
Configuration constants
Defines in config.h
Media file categories
Data types in interface.h
mm_ftypes_t
Event interface
Data types in event.h
mmsync_event_type_t
mmsync_event_t
mmsync_sync_data_t
mmsync_first_fid_data_t
mmsync_event_metadata_licensing_t
mmsync_ms_update_data_t
mmsync_folder_sync_data_t
mmsync_event_queue_size_t
Functions in mmsyncclient.h
mm_sync_events_get()
mm_sync_events_register()
Error information
Data types in event.h
mmsync_sync_error_type_t
mmsync_sync_error_t
Screen and Windowing Developer's Guide
Contexts
Create a context
Context types
Set a context property
Windows
Window types
Position a window
Create a window
Create a child window
Pixel formats
Displays
Multiple displays
Complete Sample: Using Multiple Displays
Event types
Screen and Windowing
Installation and Configuration
Install Screen and Windowing
Apply your Screen and Windowing
patch
Troubleshooting
Configure Screen and Windowing
Configure khronos section
Configure egl display
egl display configuration parameters
Configure wfd device
Configure winmgr section
Configure globals
globals configuration parameters
Configure display display_id
display configuration parameters
Configure class
class configuration parameters
Configure mtouch
mtouch configuration parameters
Apply your Screen and Windowing
configuration
Troubleshooting
Screen and Windowing
Library Reference
Function safety
Function execution types
Immediate execution
Flushing execution
Delayed execution
Apply execution
Function types
General (screen.h)
Constants in screen.h
Definitions in screen.h
Data types in screen.h
_screen_mode
Screen property types
Screen object types
Screen power mode types
Screen Idle Mode types
Screen mirror types
Screen alpha mode types
Screen pixel format types
Screen usage flag types
Screen transparency types
Screen sensitivity types
Screen sensitivity masks
Screen scaling quality types
Screen CBABC mode types
Screen flushing types
Screen mouse button types
Screen touch types
Contexts (screen.h)
Data types in screen.h
screen_context_t
Screen context types
Functions in screen.h
screen_create_context()
screen_set_context_property_cv()
screen_set_context_property_iv()
screen_set_context_property_llv()
screen_set_context_property_pv()
screen_get_context_property_cv()
screen_get_context_property_iv()
screen_get_context_property_llv()
screen_get_context_property_pv()
screen_destroy_context()
Windows (screen.h)
Data types in screen.h
screen_window_t
Screen window types
Screen window metric counts
Functions in screen.h
screen_create_window()
screen_create_window_type()
screen_create_window_buffers()
screen_attach_window_buffers()
screen_share_window_buffers()
screen_create_window_group()
screen_join_window_group()
screen_leave_window_group()
screen_ref_window()
screen_unref_window()
screen_post_window()
screen_wait_post()
screen_read_window()
screen_discard_window_regions()
screen_set_window_property_cv()
screen_set_window_property_iv()
screen_set_window_property_llv()
screen_set_window_property_pv()
screen_get_window_property_cv()
screen_get_window_property_iv()
screen_get_window_property_llv()
screen_get_window_property_pv()
screen_destroy_window_buffers()
screen_destroy_window()
Pixmaps (screen.h)
Data types in screen.h
screen_pixmap_t
Screen pixmap metric counts
Functions in screen.h
screen_create_pixmap()
screen_attach_pixmap_buffer()
screen_create_pixmap_buffer()
screen_destroy_pixmap()
screen_destroy_pixmap_buffer()
screen_get_pixmap_property_cv()
screen_get_pixmap_property_iv()
screen_get_pixmap_property_llv()
screen_get_pixmap_property_pv()
screen_join_pixmap_group()
screen_leave_pixmap_group()
screen_set_pixmap_property_cv()
screen_set_pixmap_property_iv()
screen_set_pixmap_property_llv()
screen_set_pixmap_property_pv()
Buffers (screen.h)
Data types in screen.h
screen_buffer_t
Functions in screen.h
screen_create_buffer()
screen_set_buffer_property_cv()
screen_set_buffer_property_iv()
screen_set_buffer_property_llv()
screen_set_buffer_property_pv()
screen_get_buffer_property_cv()
screen_get_buffer_property_iv()
screen_get_buffer_property_llv()
screen_get_buffer_property_pv()
screen_destroy_buffer()
Groups (screen.h)
Data types in screen.h
screen_group_t
Functions in screen.h
screen_create_group()
screen_set_group_property_cv()
screen_set_group_property_iv()
screen_set_group_property_llv()
screen_set_group_property_pv()
screen_get_group_property_cv()
screen_get_group_property_iv()
screen_get_group_property_llv()
screen_get_group_property_pv()
screen_destroy_group()
Events (screen.h)
Data types in screen.h
screen_event_t
Screen event types
Functions in screen.h
screen_create_event()
screen_inject_event()
screen_send_event()
screen_get_event()
screen_set_event_property_cv()
screen_set_event_property_iv()
screen_set_event_property_llv()
screen_set_event_property_pv()
screen_get_event_property_cv()
screen_get_event_property_iv()
screen_get_event_property_llv()
screen_get_event_property_pv()
screen_destroy_event()
Displays (screen.h)
Data types in screen.h
screen_display_t
screen_display_mode_t
Screen display mode types
Screen display types
Screen display metric count types
Functions in screen.h
screen_set_display_property_cv()
screen_set_display_property_iv()
screen_set_display_property_llv()
screen_set_display_property_pv()
screen_get_display_property_cv()
screen_get_display_property_iv()
screen_get_display_property_llv()
screen_get_display_property_pv()
screen_get_display_modes()
screen_read_display()
screen_share_display_buffers()
screen_wait_vsync()
Devices (screen.h)
Data types in screen.h
screen_device_t
Screen device metric counts
Functions in screen.h
screen_create_device_type()
screen_set_device_property_cv()
screen_set_device_property_iv()
screen_set_device_property_llv()
screen_set_device_property_pv()
screen_get_device_property_cv()
screen_get_device_property_iv()
screen_get_device_property_llv()
screen_get_device_property_pv()
screen_destroy_device()
Blits (screen.h)
Data types in screen.h
Screen blit types
Functions in screen.h
screen_blit()
screen_fill()
screen_flush_blits()
screen_flush_context()
Effects (screen.h, effects.h)
Data types in effects.h
Screen effect types
Screen effect property types
Screen effect flip axis types
Screen effect flip direction types
Screen effect rotate direction types
Screen effect page curl types
Screen effect reveal types
Functions in screen.h
screen_prepare_effect()
screen_start_effect()
screen_stop_effect()
screen_set_effect_property_fv()
screen_set_effect_property_iv()
Debugging (screen.h)
Data types in screen.h
Screen debug graph types
Screen packet types
Functions in screen.h
screen_print_packet()
Tutorial: Draw and perform vysnc operation using windows
Create the background window
Create the child windows
Create the main() function
Complete Sample: A vsync application using windows
Tutorial: Draw and perform vsync operations using blits, pixmaps, and buffers
Create a context and initialize a window
Create buffers and a pixmap
Combine buffers with blit functions and properties
Complete Sample: A vsync application using blits, pixmaps and buffers
Tutorial: Write an application using OpenGL ES
Use OpenGL ES in a windowed vsync application
Complete Sample: A windowed vsync application using OpenGL ES
Tutorial: Screenshots
Capture a window screenshot
Complete sample: a window screenshot example
Capture a display screenshot
Complete Sample: A Display screen shot example
String Pattern Library Reference
Constants in strpattern.h
Definitions in strpattern.h
Data types in strpattern.h
strpattern_analyze_callback_func
strpattern_context
strpattern_match
strpattern_regex_registration
Functions in strpattern.h
strpattern_analyze()
strpattern_analyzeUTF8()
strpattern_cancel()
strpattern_context_delete()
strpattern_context_new()
strpattern_context_set_sync()
strpattern_context_sync()
strpattern_errstr()
strpattern_init()
strpattern_match_delete()
strpattern_match_delete_all()
strpattern_match_end_index()
strpattern_match_invoke_action()
strpattern_match_invoke_count()
strpattern_match_invoke_data()
strpattern_match_invoke_data_type()
strpattern_match_invoke_default()
strpattern_match_invoke_target()
strpattern_match_invoke_uri()
strpattern_match_start_index()
QNX Momentics IDE User's Guide
Assumptions
IDE Concepts
What is an IDE?
Build embedded systems using the IDE
Perspectives
Views
Editors
Use alternate editors
Change editors
Refresh the resources
Disable automatic syntax annotation highlighting
Projects in the IDE
Considerations for project development
How the IDE characterizes projects using natures
The IDE Workspace
Specify a workspace location
Host and target machines
Target agent (the qconn daemon)
Launcher
Resources
Wizards
Keyboard shortcuts
Version coexistence
Specify which OS version to build for
Environment variables
Getting Started
Start the IDE
The IDE welcomes you
Start the IDE for the first time
Start the IDE from the command line
Use the workbench
Use the QNX help system
Open the online help from the IDE
Navigate the online help
Create help bookmarks
Tips and Tricks
Create a project
Create a simple project
Rename a project
Create a target system project
Create a QNX target system Project
Create a launch configuration
Run your application
Delete a project
Troubleshoot the IDE
Prepare Your Target
Host-target communications
Types of target processors
IP communications
Serial communications
Configure a target for serial communication
qconn over Qnet
securing qconn
Install the qconn update
Copy a new version of qconn to a target system
Network QNX Neutrino using PPP
Verify a serial connection
Prepare an embedded system for a Windows target
QNX Networking
Link an embedded system running QNX Neutrino to a Windows network connection
Verify a network connection
Develop C/C++ Programs
The C/C++ perspective
Understand projects in the IDE
The IDE project model
Supported project types in the IDE
Container project
Scenarios for creating a project for the first time
Check out a partial source tree
Share projects
Check out existing projects
Set build properties for a project
Create a project in the IDE
Create a simple project
Create a make project
Managed make projects
Create a Makefile to build outside of the IDE
Choose an indexer
Working with projects
Opening files
Create files from scratch
Filter files
Open projects
Close projects
View outlines of source and binary files
Write code
C/C++ editor layout
Assistance with function names
Access source files for functions
Use code templates
Insert code templates
Create a custom template
Edit a code template
Add include directives
Use hover help
Add and remove comments in code
Customize the C/C++ editor
Change fonts, background color, or the visibility of line numbers
Change tabs into spaces, highlight, and folding options
Set Content Assist options
Use other editors
Use an external editor outside of the IDE
Use another editor within the IDE
Build projects
Enable the autobuild feature for QNX C/C++ projects
Enable the autobuild feature for non QNX C/C++ projects
Configure automated builds
Example #1: the Makefile is in the root
Build all projects
Configure the project build order
Build a single project
Build selected projects
Build from the command line
Clean and rebuild all projects
Clean selected projects
Autosave before building
Create custom make targets
Build a project with a custom make target
Remove a make target
Add a use message
Add a usage message when using a QNX C/C++ Project
Add a usage message when using a Makefile Project
More development features
Track remaining work
Error markers
Jump to errors
Filtering errors
Track tasks
Set reminders
Associate tasks with resources
Remove a task
Code synopsis
Toolbar icons
Outline view icons
Filter and group in the Outline view
Use Working Sets
Check your build
Customize the Console view
Open headers
Set the include paths and define directives (C/C++ Make project)
Navigate using Go To Type
Manage Source Code
SVN and the IDE
CVS and the IDE
Local history feature
Project files (.project and .cproject)
Use the core Eclipse source control documentation in the IDE
SVN documentation
CVS documentation
Use a Launch Configuration to Run and Debug Your Application
What is a launch configuration?
Launch configuration types
Create a launch configuration
Run and debug for the first time
Debug a program the first time
Run and debug subsequent times
Launch a selected program (fast)
Launch from a list of favorites (faster)
Launch the last-launched program (fastest)
Launch Group type
Set execution options
Main tab
Arguments tab
Environment tab
Upload tab
Debugger tab
Source tab
Common tab
Tools tab
Debugging a program in the IDE
Debug a program (build an executable for debugging)
Debug a child process
Control your session
Debug view
Debug view icons
Use the controls
Toolbar icons
Use hotkeys
Control your session
From the Debug view
From the C/C++ editor
Disassembly mode
Debug launch controls
Jump to a memory address in the Disassembly view
More debugging features
Inspect variables
Change variable values
Control the display of variables
Change a variable to a different type
View variables in memory
Use breakpoints and watchpoints
Add breakpoints
Add watchpoints
Set an action for the breakpoint
Add event breakpoints
Set properties of breakpoints and watchpoints
Disable/enable breakpoints and watchpoints
Remove breakpoints and watchpoints
Evaluate your expressions
Inspect your registers
Toolbar icons
Menu commands
Modify registers
Chang the number system for register values
Inspect a process's memory
View memory
Inspect memory
Configure output format
Change memory
Menu commands
Menu commands for the Monitors pane
Menu commands for the Rendering pane
Inspect shared-library usage
Load a Library's symbol
Monitor signal handling
Change how the debugger handles signals
Send a signal to a suspended program
View your output
Interact with GDB
Enable the QNX GDB Console view
Use the QNX GDB Console view
Use JTAG debugging
JTAG: Using the Abatron BDI2000 JTAG Debugger with a QNX Neutrino kernel image
Prerequisites
Connect the Abatron BDI2000 JTAG Debugger to your host
Update the Abatron firmware
Connect the Abatron BDI2000 Debugger to your target
Build a system image
Create a launch configuration
Debug the startup binary
JTAG: Using the Lauterbach Trace32 In-Circuit Debugger with a QNX Neutrino kernel image
Prerequisites
Install the Lauterbach Trace32 In-Circuit Debugger software
Install the Lauterbach Trace32 Eclipse plug-in software
Connect the Lauterbach Trace32 In-Circuit Debugger
Configure the Lauterbach Trace32 In-Circuit Debugger
Create a launch configuration for the target hardware
Createa startup script for the Lauterbach Trace32 In-Circuit software
Create multicore launch configurations
Use the debugger
JTAG: Using the Macraigor Usb2Demon Debugger with a QNX Neutrino kernel image
Prerequisites
Install the Macraigor hardware support package
Connect the Macraigor Usb2Demon Debugger to your host
Connect the Macraigor Usb2Demon Debugger to your target
Start the OCDremote
Build a system image
Create a launch configuration
Debug a startup binary
Import and Export
Import preferences
Export preferences
Import existing source code into the IDE
Projects within projects
Step 1: Create a project for your source code
Step 2: Create a new project for each existing project or component in your source code tree
Step 3: Link the projects to a directory in the source tree
Step 4: Build the component project in the linked folder
Import code into the IDE
Import a C/C++ project from CVS
Import C/C++ code that doesn't have the project metadata in CVS
Import C/C++ code from CVS into an existing project
Import a C/C++ Project from SVN
Import C/C++ code that doesn't have the project metadata for SVN
Import C/C++ code from SVN into an existing project
Import wizard
Filesystem drag-and-drop
Add linked resources
Import a BSP or other QNX source packages
QNX BSP perspective
Import a BSP package from Foundry27
Check out BSP packages directly from the SVN Repositories view
Set export options for a BSP
Export projects
Use the Export command
Build OS and Flash Images
Introducing the QNX System Builder
Toolbar buttons
Binary Inspector
Boot script files
Overview of images
Components of an image, in order of booting
Types of images you can create
BSP filename conventions
OS image (.ifs file)
Flash filesystem image (.efs file)
Combined image
Padding after the IPL
Project layout
Workflow of image creation
Create a new QNX System Builder project for an OS image
Create a project for a flash filesystem image (an .efs file)
Build an OS image
Create a new image
Combine images
Add an IPL to the start of your image
Add an EFS to your image
Set the final format of your OS image
Download an image to your target
Download
Open a terminal
Communicate with your target
Use the QNX Send File button
Download using TFTP
Transfer a file
Transfer files that aren't in Images
Transfer an image
Settings for the TFTP server
Set font and color preferences
Download using other methods
Configure your QNX System Builder projects
Manage your images
Determine the shared libraries and DLLs are required for an executable
Add files to your image
Delete files
Add directories
Delete directories
Configure image properties
Image properties
Directories
General
System (.ifs)
System (.efs)
Item properties
General
Combine
Memory
Permissions
Configure project properties
Search Paths
Manage your search paths
Search path variables
Optimize your system
Optimize all libraries in your image
Optimize a single library
Restore a slimmed-down library
Move files between the host and target
Move files to the target
Move files from the target to the host
Export a System Builder project to a mkxfs build file(s)
Profiling an Application
Types of profiling
Statistical sample profiling (sampling)
Function Instrumentation profiling
Sampling and Call Count instrumentation profiling
Postmortem profiling for Call Count and Function Instrumentation profiling
Profile your programs
Build a program for profiling
Build with profiling enabled
Run and profile a process
Profile a running process
Postmortem profiling for Call Count and sampling
Application Profiler tab
Control your profiling sessions
Understand your profiling data
Profiler Sessions view
Toolbar options
Pause and resume a profiling session
Take a snapshot of a profile session
Create a sample profile session
Export a profiler session
Debug view
Execution Time view
Column descriptions
Interpret Tree mode column information by profiling type
Toolbar options
Context menu navigation options
Take Snapshot and Watch Difference
Show Threads Tree
Show Table mode
Show Calls
Show Reverse Calls
Show Call Graphs
Show Source
Duplicate a view
View history
Grouping
Set preferences
Copy to the clipboard
Filter
Search
Annotated source editor
Use the Application Profiler
Use Function Instrumentation with the Application Profiler
Use Sampling and Call Count instrumentation mode
Use Function Instrumentation mode for a single application
Use Function Instrumentation in the System Profiler
Create an Application Profiler session
Create a profiler session by importing profiler data
Profile a single-threaded application
Profile a running process for an existing project
Use postmortem profiling for Call Count and Sampling
Postmortem profiling
Run an instrumented binary with profiling from a command prompt (Function Instrumentation mode)
Take a snapshot of a profiling session
Compare profiles
Using Code Coverage
Types of code coverage in the IDE
How the coverage tool works
Enable code coverage
Enable code coverage for make projects
Start a coverage-enabled program
Import gcc code coverage data from a project
Associated views
Code Coverage Sessions view
Combine Code Coverage sessions
Examine data line-by-line
Code Coverage Properties view
Code Coverage Report view
Analyze Memory Usage and Find Errors
Memory management in QNX Neutrino
Virtual memory
Memory optimization
Process memory
Inspect your process memory distribution
Performance of heap allocations
Prepare for a memory profiling session
Analyze allocation patterns
Optimize heap memory
Memory leaks
Enable memory leak detection
Inspect outstanding allocations
Types of allocation overhead
Estimate the average allocation size
Tune the allocator
Optimize static and stack memory
Find memory errors and leaks
Test an application for memory leaks using the System Information Tool
Use Memory Analysis tooling
Memory leaks
Enable leak detection
Detect leaks on demand during program execution
Interpret leaks
Memory errors
Configure the IDE for error analysis
Change error detection options at runtime
Interpret memory errors
Use Mudflap
Configure Mudflap to find errors
Options for Mudflap
Mudflap Violations view
Interpret Mudflap output
The Memory Analysis tool
Advanced topics
Analyze a running program
Memory analysis of shared objects
GUI interface options and environment variables for the Memory Analysis Tool
Launch your program with Memory Analysis
Launch from the command line with Memory Analysis enabled
Perform a postmortem memory analysis
Attach to a running process
The Memory Analysis tooling API
View Memory Analysis data
Memory Analysis editor
Select data
Control the page layout
Control the overview
Control the detail pane
Allocations tab
Bins tab
Bands tab
Usage tab
Settings tab
Memory Problems view
Memory Problems Filter
Memory Problems Preferences
View statistics for memory problems
Memory Events view
Memory Events Filter
Memory Events Preferences
View statistics for memory events
Memory Backtrace view
Inspect outstanding allocations
Interpret errors during memory analysis
Illegal deallocation of memory
NULL pointer dereference
Buffer overflow
Use freed memory
Read uninitialized memory
Resource (memory) leaks
Functions checked for memory errors during memory analysis
Summary of error messages for Memory Analysis
Managing Memory Analysis sessions: The Session view
Open a session
Delete a session
Close a session
Export session data
Filter information for a session
Import session information
Show information about a session
Rename a session
Import memory analysis data
Import session information from an XML file
Import event information
Export memory analysis data
Export memory analysis session data
Memory result formats
Get System Information
Introduction
What the System Information perspective reveals
Log system information
Associated views
Control your system information session
Send a signal
Examine your target system's attributes
System Specifications pane
System Memory pane
Processes panes
Watch your processes
Thread Details pane
Environment Variables pane
Process Properties pane
Examining your target system's memory (inspect virtual address space)
Track heap usage
Observe changes in memory usage (allocations and deallocations)
Outstanding allocations
Allocation deltas
Deallocation deltas
Outstanding allocation deltas
Examine process signals
Get channel information
Track file descriptors
Track resource usage
Track the use of adaptive partitions
Associated views
Analyze Your System with Kernel Tracing
Overview of the QNX System Profiler
Before you begin
Configure a target for system profiling
Launch the Log Configuration dialog
Address translation
Configure your kernel event trace
Capture instrumentation data in event log files
View and interpret the captured data
System Profiler editor
Timeline view
Add bookmarks
Timeline State Colors view
Zoom
Filter profile data
Raw Event Data view
Trace Event Log view
Properties view
Trace Header tab
Address Translation tab
Start Date tab
Timeline Event Labels tab
User Event Data tab
Track events
Trace Search
Bookmarks view
Gather statistics from trace data
General Statistics view
Event Owner Statistics view
Client/Server CPU Statistics view
Overview view
Condition Statistics view
Thread Call Stack view
Determine thread state behavior
Thread State Snapshot view
Why Running? view
Analyze multiprocessor systems
CPU Migration pane
Analyze systems with Adaptive Partitioning scheduling
Partition Summary pane
Using Function Instrumentation mode with the System Profiler
Import part of a kernel trace into the Application Profiler
System Profiler use cases
Locate sources of high CPU usage
Map and isolate client CPU load from server CPU load
Examine interrupt latency
Locate events of interest
Project and Wizard Properties Reference
Introduction
Wizard properties
Options tab
Build Variants tab
General tab
Library tab
Compiler tab
Linker tab
General options
Extra library paths
Extra libraries
Extra object files
Make Builder tab
Error Parsers tab
Project properties
Projects tab
Resource panel
Builders panel
C/C++ Build panel
Behaviour tab
Discovery options tab
Environment tab
Settings panel
Tool settings tab
Build steps tab
Build artifact tab
Binary Parser tab
Error parsers tab
Indexer tab
Creating projects
Create a C/C++ project
How to create a C/C++ project
Create a C Makefile project
Create a make project
Create a make project that can be launched outside the IDE
Use container projects
Create a container project
Set up a build configuration
Edit existing configurations
Edit using project properties
Edit using Build Container Configuration
Build a container project
Convert projects
Convert a QNX project to a managed make C/C++ project
Convert a regular project to a managed make C/C++ project
Convert to a QNX project
Convert a project to a different type
Post-build actions
Import projects
Import an existing container project into a workspace
Import an existing project into a workspace
Import from a filesystem
Import GCC coverage data from a project
Import a QNX Source Package
Copy a QNX source package
Import a QNX mkifs Buildfile
Import a team project set
Import an archive file
Breakpoints
Launch configurations
Preferences
General preferences
Appearance page
Color and font page
Label Decorations page
Compare/Patch page
Content Types page
Editors page
File Associations page
Text Editors page
Accessibility page
Annotations page
Hyperlinking page
QNX preferences
Tutorials
Before you start
Tutorial 1: Create a C/C++ project
Tutorial 2: Create a QNX C/C++ project
Tutorial 3: Import an existing project into the IDE
Tutorial 4: Import a QNX BSP into the IDE
Where Files Are Stored
Utilities used by the IDE
IDE Administration
Install new software
Use older toolchains with the IDE
Copy a new version of qconn to a target system
Update qconn on a development system
Glossary
Assumptions
IDE Concepts
What is an IDE?
Build embedded systems using the IDE
Perspectives
Views
Editors
Use alternate editors
Change editors
Refresh the resources
Disable automatic syntax annotation highlighting
Projects in the IDE
Considerations for project development
How the IDE characterizes projects using natures
The IDE Workspace
Specify a workspace location
Host and target machines
Target agent (the qconn daemon)
Launcher
Resources
Wizards
Keyboard shortcuts
Version coexistence
Specify which OS version to build for
Environment variables
Getting Started
Start the IDE
The IDE welcomes you
Start the IDE for the first time
Start the IDE from the command line
Use the workbench
Use the QNX help system
Open the online help from the IDE
Navigate the online help
Create help bookmarks
Tips and Tricks
Create a project
Create a simple project
Rename a project
Create a target system project
Create a QNX target system Project
Create a launch configuration
Run your application
Delete a project
Troubleshoot the IDE
Prepare Your Target
Host-target communications
Types of target processors
IP communications
Serial communications
Configure a target for serial communication
qconn over Qnet
securing qconn
Install the qconn update
Copy a new version of qconn to a target system
Network QNX Neutrino using PPP
Verify a serial connection
Prepare an embedded system for a Windows target
QNX Networking
Link an embedded system running QNX Neutrino to a Windows network connection
Verify a network connection
Develop C/C++ Programs
The C/C++ perspective
Understand projects in the IDE
The IDE project model
Supported project types in the IDE
Container project
Scenarios for creating a project for the first time
Check out a partial source tree
Share projects
Check out existing projects
Set build properties for a project
Create a project in the IDE
Create a simple project
Create a make project
Managed make projects
Create a Makefile to build outside of the IDE
Choose an indexer
Working with projects
Opening files
Create files from scratch
Filter files
Open projects
Close projects
View outlines of source and binary files
Write code
C/C++ editor layout
Assistance with function names
Access source files for functions
Use code templates
Insert code templates
Create a custom template
Edit a code template
Add include directives
Use hover help
Add and remove comments in code
Customize the C/C++ editor
Change fonts, background color, or the visibility of line numbers
Change tabs into spaces, highlight, and folding options
Set Content Assist options
Use other editors
Use an external editor outside of the IDE
Use another editor within the IDE
Build projects
Enable the autobuild feature for QNX C/C++ projects
Enable the autobuild feature for non QNX C/C++ projects
Configure automated builds
Example #1: the Makefile is in the root
Build all projects
Configure the project build order
Build a single project
Build selected projects
Build from the command line
Clean and rebuild all projects
Clean selected projects
Autosave before building
Create custom make targets
Build a project with a custom make target
Remove a make target
Add a use message
Add a usage message when using a QNX C/C++ Project
Add a usage message when using a Makefile Project
More development features
Track remaining work
Error markers
Jump to errors
Filtering errors
Track tasks
Set reminders
Associate tasks with resources
Remove a task
Code synopsis
Toolbar icons
Outline view icons
Filter and group in the Outline view
Use Working Sets
Check your build
Customize the Console view
Open headers
Set the include paths and define directives (C/C++ Make project)
Navigate using Go To Type
Manage Source Code
SVN and the IDE
CVS and the IDE
Local history feature
Project files (.project and .cproject)
Use the core Eclipse source control documentation in the IDE
SVN documentation
CVS documentation
Use a Launch Configuration to Run and Debug Your Application
What is a launch configuration?
Launch configuration types
Create a launch configuration
Run and debug for the first time
Debug a program the first time
Run and debug subsequent times
Launch a selected program (fast)
Launch from a list of favorites (faster)
Launch the last-launched program (fastest)
Launch Group type
Set execution options
Main tab
Arguments tab
Environment tab
Upload tab
Debugger tab
Source tab
Common tab
Tools tab
Debugging a program in the IDE
Debug a program (build an executable for debugging)
Debug a child process
Control your session
Debug view
Debug view icons
Use the controls
Toolbar icons
Use hotkeys
Control your session
From the Debug view
From the C/C++ editor
Disassembly mode
Debug launch controls
Jump to a memory address in the Disassembly view
More debugging features
Inspect variables
Change variable values
Control the display of variables
Change a variable to a different type
View variables in memory
Use breakpoints and watchpoints
Add breakpoints
Add watchpoints
Set an action for the breakpoint
Add event breakpoints
Set properties of breakpoints and watchpoints
Disable/enable breakpoints and watchpoints
Remove breakpoints and watchpoints
Evaluate your expressions
Inspect your registers
Toolbar icons
Menu commands
Modify registers
Chang the number system for register values
Inspect a process's memory
View memory
Inspect memory
Configure output format
Change memory
Menu commands
Menu commands for the Monitors pane
Menu commands for the Rendering pane
Inspect shared-library usage
Load a Library's symbol
Monitor signal handling
Change how the debugger handles signals
Send a signal to a suspended program
View your output
Interact with GDB
Enable the QNX GDB Console view
Use the QNX GDB Console view
Use JTAG debugging
JTAG: Using the Abatron BDI2000 JTAG Debugger with a QNX Neutrino kernel image
Prerequisites
Connect the Abatron BDI2000 JTAG Debugger to your host
Update the Abatron firmware
Connect the Abatron BDI2000 Debugger to your target
Build a system image
Create a launch configuration
Debug the startup binary
JTAG: Using the Lauterbach Trace32 In-Circuit Debugger with a QNX Neutrino kernel image
Prerequisites
Install the Lauterbach Trace32 In-Circuit Debugger software
Install the Lauterbach Trace32 Eclipse plug-in software
Connect the Lauterbach Trace32 In-Circuit Debugger
Configure the Lauterbach Trace32 In-Circuit Debugger
Create a launch configuration for the target hardware
Createa startup script for the Lauterbach Trace32 In-Circuit software
Create multicore launch configurations
Use the debugger
JTAG: Using the Macraigor Usb2Demon Debugger with a QNX Neutrino kernel image
Prerequisites
Install the Macraigor hardware support package
Connect the Macraigor Usb2Demon Debugger to your host
Connect the Macraigor Usb2Demon Debugger to your target
Start the OCDremote
Build a system image
Create a launch configuration
Debug a startup binary
Import and Export
Import preferences
Export preferences
Import existing source code into the IDE
Projects within projects
Step 1: Create a project for your source code
Step 2: Create a new project for each existing project or component in your source code tree
Step 3: Link the projects to a directory in the source tree
Step 4: Build the component project in the linked folder
Import code into the IDE
Import a C/C++ project from CVS
Import C/C++ code that doesn't have the project metadata in CVS
Import C/C++ code from CVS into an existing project
Import a C/C++ Project from SVN
Import C/C++ code that doesn't have the project metadata for SVN
Import C/C++ code from SVN into an existing project
Import wizard
Filesystem drag-and-drop
Add linked resources
Import a BSP or other QNX source packages
QNX BSP perspective
Import a BSP package from Foundry27
Check out BSP packages directly from the SVN Repositories view
Set export options for a BSP
Export projects
Use the Export command
Build OS and Flash Images
Introducing the QNX System Builder
Toolbar buttons
Binary Inspector
Boot script files
Overview of images
Components of an image, in order of booting
Types of images you can create
BSP filename conventions
OS image (.ifs file)
Flash filesystem image (.efs file)
Combined image
Padding after the IPL
Project layout
Workflow of image creation
Create a new QNX System Builder project for an OS image
Create a project for a flash filesystem image (an .efs file)
Build an OS image
Create a new image
Combine images
Add an IPL to the start of your image
Add an EFS to your image
Set the final format of your OS image
Download an image to your target
Download
Open a terminal
Communicate with your target
Use the QNX Send File button
Download using TFTP
Transfer a file
Transfer files that aren't in Images
Transfer an image
Settings for the TFTP server
Set font and color preferences
Download using other methods
Configure your QNX System Builder projects
Manage your images
Determine the shared libraries and DLLs are required for an executable
Add files to your image
Delete files
Add directories
Delete directories
Configure image properties
Image properties
Directories
General
System (.ifs)
System (.efs)
Item properties
General
Combine
Memory
Permissions
Configure project properties
Search Paths
Manage your search paths
Search path variables
Optimize your system
Optimize all libraries in your image
Optimize a single library
Restore a slimmed-down library
Move files between the host and target
Move files to the target
Move files from the target to the host
Export a System Builder project to a mkxfs build file(s)
Profiling an Application
Types of profiling
Statistical sample profiling (sampling)
Function Instrumentation profiling
Sampling and Call Count instrumentation profiling
Postmortem profiling for Call Count and Function Instrumentation profiling
Profile your programs
Build a program for profiling
Build with profiling enabled
Run and profile a process
Profile a running process
Postmortem profiling for Call Count and sampling
Application Profiler tab
Control your profiling sessions
Understand your profiling data
Profiler Sessions view
Toolbar options
Pause and resume a profiling session
Take a snapshot of a profile session
Create a sample profile session
Export a profiler session
Debug view
Execution Time view
Column descriptions
Interpret Tree mode column information by profiling type
Toolbar options
Context menu navigation options
Take Snapshot and Watch Difference
Show Threads Tree
Show Table mode
Show Calls
Show Reverse Calls
Show Call Graphs
Show Source
Duplicate a view
View history
Grouping
Set preferences
Copy to the clipboard
Filter
Search
Annotated source editor
Use the Application Profiler
Use Function Instrumentation with the Application Profiler
Use Sampling and Call Count instrumentation mode
Use Function Instrumentation mode for a single application
Use Function Instrumentation in the System Profiler
Create an Application Profiler session
Create a profiler session by importing profiler data
Profile a single-threaded application
Profile a running process for an existing project
Use postmortem profiling for Call Count and Sampling
Postmortem profiling
Run an instrumented binary with profiling from a command prompt (Function Instrumentation mode)
Take a snapshot of a profiling session
Compare profiles
Using Code Coverage
Types of code coverage in the IDE
How the coverage tool works
Enable code coverage
Enable code coverage for make projects
Start a coverage-enabled program
Import gcc code coverage data from a project
Associated views
Code Coverage Sessions view
Combine Code Coverage sessions
Examine data line-by-line
Code Coverage Properties view
Code Coverage Report view
Analyze Memory Usage and Find Errors
Memory management in QNX Neutrino
Virtual memory
Memory optimization
Process memory
Inspect your process memory distribution
Performance of heap allocations
Prepare for a memory profiling session
Analyze allocation patterns
Optimize heap memory
Memory leaks
Enable memory leak detection
Inspect outstanding allocations
Types of allocation overhead
Estimate the average allocation size
Tune the allocator
Optimize static and stack memory
Find memory errors and leaks
Test an application for memory leaks using the System Information Tool
Use Memory Analysis tooling
Memory leaks
Enable leak detection
Detect leaks on demand during program execution
Interpret leaks
Memory errors
Configure the IDE for error analysis
Change error detection options at runtime
Interpret memory errors
Use Mudflap
Configure Mudflap to find errors
Options for Mudflap
Mudflap Violations view
Interpret Mudflap output
The Memory Analysis tool
Advanced topics
Analyze a running program
Memory analysis of shared objects
GUI interface options and environment variables for the Memory Analysis Tool
Launch your program with Memory Analysis
Launch from the command line with Memory Analysis enabled
Perform a postmortem memory analysis
Attach to a running process
The Memory Analysis tooling API
View Memory Analysis data
Memory Analysis editor
Select data
Control the page layout
Control the overview
Control the detail pane
Allocations tab
Bins tab
Bands tab
Usage tab
Settings tab
Memory Problems view
Memory Problems Filter
Memory Problems Preferences
View statistics for memory problems
Memory Events view
Memory Events Filter
Memory Events Preferences
View statistics for memory events
Memory Backtrace view
Inspect outstanding allocations
Interpret errors during memory analysis
Illegal deallocation of memory
NULL pointer dereference
Buffer overflow
Use freed memory
Read uninitialized memory
Resource (memory) leaks
Functions checked for memory errors during memory analysis
Summary of error messages for Memory Analysis
Managing Memory Analysis sessions: The Session view
Open a session
Delete a session
Close a session
Export session data
Filter information for a session
Import session information
Show information about a session
Rename a session
Import memory analysis data
Import session information from an XML file
Import event information
Export memory analysis data
Export memory analysis session data
Memory result formats
Get System Information
Introduction
What the System Information perspective reveals
Log system information
Associated views
Control your system information session
Send a signal
Examine your target system's attributes
System Specifications pane
System Memory pane
Processes panes
Watch your processes
Thread Details pane
Environment Variables pane
Process Properties pane
Examining your target system's memory (inspect virtual address space)
Track heap usage
Observe changes in memory usage (allocations and deallocations)
Outstanding allocations
Allocation deltas
Deallocation deltas
Outstanding allocation deltas
Examine process signals
Get channel information
Track file descriptors
Track resource usage
Track the use of adaptive partitions
Associated views
Analyze Your System with Kernel Tracing
Overview of the QNX System Profiler
Before you begin
Configure a target for system profiling
Launch the Log Configuration dialog
Address translation
Configure your kernel event trace
Capture instrumentation data in event log files
View and interpret the captured data
System Profiler editor
Timeline view
Add bookmarks
Timeline State Colors view
Zoom
Filter profile data
Raw Event Data view
Trace Event Log view
Properties view
Trace Header tab
Address Translation tab
Start Date tab
Timeline Event Labels tab
User Event Data tab
Track events
Trace Search
Bookmarks view
Gather statistics from trace data
General Statistics view
Event Owner Statistics view
Client/Server CPU Statistics view
Overview view
Condition Statistics view
Thread Call Stack view
Determine thread state behavior
Thread State Snapshot view
Why Running? view
Analyze multiprocessor systems
CPU Migration pane
Analyze systems with Adaptive Partitioning scheduling
Partition Summary pane
Using Function Instrumentation mode with the System Profiler
Import part of a kernel trace into the Application Profiler
System Profiler use cases
Locate sources of high CPU usage
Map and isolate client CPU load from server CPU load
Examine interrupt latency
Locate events of interest
Project and Wizard Properties Reference
Introduction
Wizard properties
Options tab
Build Variants tab
General tab
Library tab
Compiler tab
Linker tab
General options
Extra library paths
Extra libraries
Extra object files
Make Builder tab
Error Parsers tab
Project properties
Projects tab
Resource panel
Builders panel
C/C++ Build panel
Behaviour tab
Discovery options tab
Environment tab
Settings panel
Tool settings tab
Build steps tab
Build artifact tab
Binary Parser tab
Error parsers tab
Indexer tab
Creating projects
Create a C/C++ project
How to create a C/C++ project
Create a C Makefile project
Create a make project
Create a make project that can be launched outside the IDE
Use container projects
Create a container project
Set up a build configuration
Edit existing configurations
Edit using project properties
Edit using Build Container Configuration
Build a container project
Convert projects
Convert a QNX project to a managed make C/C++ project
Convert a regular project to a managed make C/C++ project
Convert to a QNX project
Convert a project to a different type
Post-build actions
Import projects
Import an existing container project into a workspace
Import an existing project into a workspace
Import from a filesystem
Import GCC coverage data from a project
Import a QNX Source Package
Copy a QNX source package
Import a QNX mkifs Buildfile
Import a team project set
Import an archive file
Breakpoints
Launch configurations
Preferences
General preferences
Appearance page
Color and font page
Label Decorations page
Compare/Patch page
Content Types page
Editors page
File Associations page
Text Editors page
Accessibility page
Annotations page
Hyperlinking page
QNX preferences
Tutorials
Before you start
Tutorial 1: Create a C/C++ project
Tutorial 2: Create a QNX C/C++ project
Tutorial 3: Import an existing project into the IDE
Tutorial 4: Import a QNX BSP into the IDE
Where Files Are Stored
Utilities used by the IDE
IDE Administration
Install new software
Use older toolchains with the IDE
Copy a new version of qconn to a target system
Update qconn on a development system
Glossary
QNX Neutrino OS Guides
System Architecture
The Philosophy of QNX Neutrino
An embeddable POSIX OS?
Product scaling
Why POSIX for embedded systems?
Multiple OS sources
Portability of development staff
Development environment: native and cross development
Why QNX Neutrino for embedded systems?
Microkernel architecture
The OS as a team of processes
A true kernel
System processes
System processes vs user-written processes
Device drivers
Interprocess communication
QNX Neutrino as a message-passing operating system
Network distribution of kernels
Single-computer model
Flexible networking
The QNX Neutrino Microkernel
The implementation of QNX Neutrino
POSIX realtime and thread extensions
System services
Threads and processes
Thread attributes
Thread life cycle
Thread scheduling
Scheduling priority
Scheduling policies
FIFO scheduling
Round-robin scheduling
Sporadic scheduling
Manipulating priority and scheduling policies
IPC issues
Thread complexity issues
Synchronization services
Mutexes: mutual exclusion locks
Priority inheritance and mutexes
Condvars: condition variables
Barriers
Sleepon locks
Reader/writer locks
Semaphores
Synchronization via scheduling policy
Synchronization via message passing
Synchronization via atomic operations
Synchronization services implementation
Clock and timer services
Time correction
Timers
Interrupt handling
Interrupt latency
Scheduling latency
Nested interrupts
Interrupt calls
Interprocess Communication (IPC)
Synchronous message passing
Message copying
Simple messages
Channels and connections
Pulses
Priority inheritance and messages
Message-passing API
Robust implementations with Send/Receive/Reply
Events
I/O notification
Signals
Special signals
Summary of signals
POSIX message queues
Why use POSIX message queues?
File-like interface
Message-queue functions
Shared memory
Shared memory with message passing
Creating a shared-memory object
mmap()
Initializing allocated memory
Typed memory
Implementation-defined behavior
Seeding of typed memory regions
Naming of typed memory regions
Pathname space and typed memory
mmap() allocation flags and typed memory objects
Permissions and typed memory objects
Object length and offset definitions
Interaction with other POSIX APIs
Practical examples
Pipes and FIFOs
The Instrumented Microkernel
Instrumentation at a glance
Event control
Modes of emission
Ring buffer
Data interpretation
System analysis with the IDE
Proactive tracing
Multicore Processing
Asymmetric multiprocessing (AMP)
Symmetric multiprocessing (SMP)
Neutrino's microkernel approach
Booting an x86 SMP system
Booting a PowerPC or MIPS SMP system
How the SMP microkernel works
Critical sections
Bound multiprocessing (BMP)
A viable migration strategy
Choosing between AMP, SMP, and BMP
Process Manager
Process management
Process primitives
posix_spawn()
spawn()
fork()
vfork()
exec*()
Process loading
Memory management
Memory Management Units (MMUs)
Memory protection at run time
Software watchdog
Quality control
Full-protection model
Private virtual memory
Variable page size
Locking memory
Defragmenting physical memory
Automatically marking memory as unmovable
Pathname management
Resolving pathnames
Ordering mountpoints
Single-device mountpoints
Unioned filesystem mountpoints
Why overlay mountpoints?
Symbolic prefixes
Creating special device names
Relative pathnames
Network root
A note about cd
File descriptor namespace
Open control blocks
Dynamic Linking
Statically linked
Dynamically linked
Augmenting code at runtime
How shared objects are used
Memory layout for a typical process
Runtime linker
Loading a shared library at runtime
Symbol name resolution
Resource Managers
What is a resource manager?
Why write a resource manager?
The types of resource managers
Device resource managers
Filesystem resource managers
Communication via native IPC
Resource manager architecture
Message types
The resource manager shared library
Automatic default message handling
open(), dup(), and close()
Multiple thread handling
Dispatch functions
Combine messages
Second-level default message handling
Summary
Filesystems
Filesystems and pathname resolution
Filesystem classes
Filesystems as shared libraries
io-blk
Builtin RAM disk
Partitions
Buffer cache
Filesystem limitations
Image filesystem
RAM "filesystem"
Embedded transaction filesystem (ETFS)
Inside a transaction
Types of storage media
Reliability features
Dynamic wear-leveling
Static wear-leveling
CRC error detection
ECC error correction
Read degradation monitoring with automatic refresh
Transaction rollback
Atomic file operations
Automatic file defragmentation
QNX 4 filesystem
Power-Safe filesystem
Problems with existing disk filesystems
Copy-on-write filesystem
Performance
DOS Filesystem
CD-ROM filesystem
FFS3 filesystem
Customization
Organization
Raw partitions
Filesystem partitions
Mountpoints
Features
POSIX
Background reclaim
Fault recovery
Compression/decompression
Flash errors
Endian awareness
Utilities
System calls
NFS filesystem
CIFS filesystem
Linux Ext2 filesystem
Universal Disk Format (UDF) filesystem
Apple Macintosh HFS and HFS Plus
Windows NT filesystem
Virtual inflator filesystem
PPS
Persistence
PPS objects
Publishing
Subscribing
Character I/O
Driver/io-char communication
Device control
Input modes
Raw input mode
Edited input mode
Device subsystem performance
Console devices
Serial devices
Parallel devices
Pseudo terminal devices (ptys)
Networking Architecture
Network manager (io-pkt*)
Threading model
Protocol module
Driver module
Native Networking (Qnet)
QNX Neutrino distributed
Name resolution and lookup
File descriptor (connection ID)
Behind a simple open()
Global Name Service (GNS)
Network naming
Resolvers
Redundant Qnet: Quality of Service (QoS) and multiple paths
QoS policies
Specifying QoS policies
Symbolic links
Examples
TCP/IP Networking
Structure of the TCP/IP manager
Socket API
Database routines
Multiple stacks
IP filtering and NAT
NTP
Dynamic host configuration
AutoIP
PPP over Ethernet
/etc/autoconnect
High Availability
An OS for HA
Inherent HA
HA-specific modules
Custom hardware support
Client library
Recovery example
High Availability Manager
HAM and the Guardian
HAM hierarchy
Entities
Conditions
Actions
Publishing autonomously detected conditions
State transitions
Other conditions
Subscribing to autonomously published conditions
HAM as a "filesystem"
Multistage recovery
HAM API
Adaptive Partitioning
What are partitions?
If adaptive partitions aren't "boxes," what are they?
Why adaptive?
Benefits of adaptive partitioning
Engineering product performance
Dealing with design complexity
Providing security
Debugging
Adaptive partitioning thread scheduler
Glossary
User's Guide
Getting to Know the OS
Neutrino compared with UNIX
Neutrino compared with Microsoft Windows
Limitations
How QNX Neutrino is unique
Resource managers
Logging In, Logging Out, and Shutting Down
root or non-root?
Logging in
Once you've logged in
Logging out
Shutting down and rebooting
Managing User Accounts
What does a user account do?
User accounts vs user IDs: login, lookup, and permissions
What happens when you log in?
Account database
/etc/passwd
/etc/group
/etc/shadow
/etc/.pwlock
Managing your own account
Changing your password
Forgot your password?
Managing other accounts
Adding users
Removing accounts
Defining groups
Creating a new group
Modifying an existing group
Troubleshooting
Using the Command Line
Processing a command
Character-device drivers
Input modes
Terminal support
Telnet
The keyboard at a glance
Physical and virtual consoles
Shell
Editing the command line
Command and filename completion
Reserved words
Entering multiple commands
Aliases
Substitutions
Redirecting input and output
Pipes
Quoting special characters
History: recalling commands
Shell scripts
Utilities
Understanding command syntax
Displaying online usage messages
Executing commands on another node or tty
Priorities
Basic commands
Neutrino for MS-DOS users
DOS commands and their Neutrino equivalents
The diskcomp DOS command
MS-DOS local command-interpreter variables
Troubleshooting
Working with Files
Types of files
Filenames and pathnames
Absolute and relative pathnames
Dot and dot-dot directories
A note about cd
No drive letters
Pathnames that begin with a dot
Extensions
Pathname-space mapping
Filename rules
Where everything is stored
/
/bin
/boot
/dev
/etc
/fs
/home
/lib
/proc
/root
/sbin
/tmp
/usr
/var
File ownership and permissions
Setuid and setgid
Sticky bit
Default file permissions
Access Control Lists (ACLs)
Filename extensions
Troubleshooting
Using Editors
Supported editors
Specifying the default editor
Controlling How Neutrino Starts
What happens when you boot?
Loading a Neutrino image
Power-Safe filesystem
QNX 4 filesystem
diskboot
.diskroot
/etc/system/sysinit
Device enumeration
oem file or directory
overrides file or directory
Host-specific enumerators
/etc/rc.d/rc.sysinit
rc.local
tinit
Updating disk drivers
Applying a driver update patch after you've installed QNX Neutrino
Troubleshooting
Configuring Your Environment
What happens when you log in?
Customizing your home
Configuring your shell
/etc/profile
$HOME/.profile
ksh's startup file
Environment variables
Setting PATH and LD_LIBRARY_PATH
Configuration strings
Setting the time zone
Caveats
Examples
Programming with time zones
Terminal types
Troubleshooting
Writing Shell Scripts
Available shells
Running a shell script
The first line
Arguments to a ksh script
Arguments to a gawk script
Arguments to a perl script
Example of a Korn shell script
Efficiency
Caveat scriptor
Working with Filesystems
Setting up, starting, and stopping a block filesystem
Mounting and unmounting filesystems
Image filesystem
/dev/shmem RAM "filesystem"
QNX 4 filesystem
Extents
Filenames
Links and inodes
Removing links
Directory links
Symbolic links
Filesystem robustness
Power-Safe filesystem
Booting
Snapshots
DOS filesystem
CD-ROM filesystem
Linux Ext2 filesystem
Flash filesystems
CIFS filesystem
NFS filesystem
Setting up NFS
NFS server
NFS client
Universal Disk Format (UDF) filesystem
Apple Macintosh HFS and HFS Plus
Windows NT filesystem
Inflator filesystem
Troubleshooting
Using Qnet for Transparent Distributed Processing
When should you use Qnet?
Conventions for naming nodes
Software components for Qnet networking
Starting Qnet
Creating useqnet
Starting the network manager, protocols, and drivers
Checking out the neighborhood
Populating /net
Troubleshooting
Is Qnet running?
Are io-pkt* and the drivers running?
Is the network card functional?
How do I get diagnostic information?
Is the hostname unique?
Are the nodes in the same domain?
TCP/IP Networking
Overview of TCP/IP
Software components for TCP/IP networking
Running the Internet daemons
Running multiple instances of the TCP/IP stack
Dynamically assigned TCP/IP parameters
Using PPPoE
Establishing a PPPoE session
Starting a point-to-point connection over PPPoE session
Using DHCP
Using AutoIP
Troubleshooting
Are io-pkt* and the drivers running?
What is the name server information?
How do I map hostnames to IP addresses?
How do I get the network status?
How do I make sure I'm connected to other hosts?
How do I display information about an interface controller?
Connecting Hardware
PCI/AGP devices
CD-ROMs and DVDs
Floppy disks
Hard disks
EIDE
Troubleshooting for devb-eide
SCSI devices
SCSI RAID
LS-120
ORB
Zip and Jaz disks
Magnetic optical drives
RAM disks
Audio cards
ISA cards
PCI Cards
PCCARD and PCMCIA cards
USB devices
Printers
Touchscreens
Ethernet adapters
Mass-storage devices
Troubleshooting
Character devices
General serial adapters
Multiport serial adapters
Parallel ports
Terminals
I/O attributes
Network adapters
Identify your NIC
Start the driver
Make sure the driver is communicating properly with the hardware
Physical Node ID
Current Physical Node ID
Current Operation Rate
Active Interface Type
Active PHY Address
Power Management State
Maximum Transmittable data Unit (MTU)
Maximum Receivable data Unit (MRU)
Receive Checksumming Enabled, Transmit Checksumming Enabled
Hardware Interrupt
DMA Channel
I/O Aperture
Memory Aperture
ROM Aperture
Promiscuous Mode
Multicast Support
Packets Transmitted OK
Bytes Transmitted OK
Total Packets Transmitted Bad
Broadcast Packets Transmitted OK
Multicast Packets Transmitted OK
Memory Allocation Failures on Transmit
Packets Received OK
Bytes Received OK
Single Collisions on Transmit
Multiple Collisions on Transmit
Deferred Transmits
Late Collision on Transmit errors
Transmits aborted (excessive collisions)
Transmits aborted (excessive deferrals)
Transmit Underruns
No Carrier on Transmit
Jabber detected
Receive Alignment errors
Received packets with CRC errors
Packets Dropped on receive
Ethernet Headers out of range
Oversized Packets received
Frames with Dribble Bits
Total Frames experiencing Collision(s)
Modems
Internal modems
ISA non-PnP
ISA PnP
PCI-based modems
External modems
Testing modems
Troubleshooting modems
Using CVS
CVS basics
Revisions
Basic operations
Repositories
Editors and CVS
Creating a repository
Getting files in and out of the repository
Putting changes back into the repository
Importing an existing source tree
Getting information on files
Changing files
More information on files: what changed and why
CVS and directory trees
Concurrent development: branching and merging
Branching
Merging
Removing and restoring files
Setting up a CVS server
Backing Up and Recovering Data
Backup strategies
Choosing backup storage media and location
Choosing a backup format
Controlling your backup
Archiving your data
Creating an archive
Extracting from an archive
Compressing an archive
Decompressing the archive
Storage choices
Remote backups
QNX 4 disk structure
Partition components
Loader block
Root block
Bitmap blocks
Root directory
Directories
Links
Extent blocks
Files
File-maintenance utilities
fdisk
dinit
chkfsys
dcheck
zap
Recovering a zapped file
spatch
Recovering disks and files
Using chkfsys
When to run chkfsys
Using chkfsys on a live system
Recovering from a bad block in the middle of a file
What to do if your system will no longer boot
If the mount fails…
If the disk is unrecoverable
If the filesystem is intact
Securing Your System
General OS security
Remote and local attacks
Remote exploits
Local exploits
Effects of attacks
Viruses
Neutrino security in general
Neutrino-specific security issues
Message passing
pdebug
qconn
Qnet
IPSec
Setting up a firewall
Fine-Tuning Your System
Getting the system's status
Improving performance
Faster boot times
Filesystems and block I/O (devb-*) drivers
Performance and robustness
Metadata updates
Ordering the updates to metadata
Throughput
Configuration
Block I/O commit level
Record size
Double buffering
File descriptor vs standard I/O
Pregrowing a file
Fine-tuning USB storage devices
How small can you get?
Understanding System Limits
Configurable limits
Filesystem limits
Querying filesystem limits
QNX 4 filesystem
Power-Safe (fs-qnx6.so) filesystem
Ext2 filesystem
DOS FAT12/16/32 filesystem
CD-ROM (ISO9660) filesystem
NFS2 and NFS3 filesystem
CIFS filesystem
Embedded (flash) filesystem
Embedded Transaction filesystem (ETFS)
UDF filesystem
Apple Macintosh HFS and HFS Plus
Windows NT filesystem
Other system limits
File descriptors
Synchronization primitives
TCP/IP limits
Shared memory
Message queues
Platform-specific limits
Technical Support
Examples
Buildfile for an NFS-mounting target
qnxbasedma.build
Buildfile that doesn't use diskboot
.profile
.kshrc
Configuration files for spooler
Using lpr
Using NCFTP
Using SAMBA
PPP with CHAP authentication between two Neutrino boxes
Glossary
Starting to Program with QNX Neutrino
Foreword to the First Edition by Peter van der Veen
Preface to the First Edition by Rob Krten
A little history
Who this book is for
What's in this book?
About Rob Krten
Acknowledgments
Processes and Threads
Process and thread fundamentals
A process as a house
The occupants as threads
Single threaded
Multi threaded
Back to processes and threads
Mutual exclusion
Priorities
Semaphores
A semaphore with a count of 1
A semaphore with a count greater than 1
A semaphore as a mutex
The kernel's role
Single CPU
Multiple CPU (SMP)
The kernel as arbiter
Prioritization
Scheduling policies
FIFO
Round Robin
The rules
Kernel states
Kernel states, the complete list
Threads and processes
Why processes?
Starting a process
Starting a process from the command line
Starting a process from within a program
Starting a process with the system() call
Starting a process with the exec() and spawn() calls
"l" suffix
"e" suffix
"p" suffix
Plain spawn()
Starting a process with the fork() call
Starting a process with the vfork() call
So what should you use?
Starting a thread
The thread attributes structure
Thread attribute administration
The "flags" thread attribute
The "stack" thread attributes
The "scheduling" thread attributes
A few examples
Where a thread is a good idea
Threads in mathematical operations
Coding for SMP or single processor
Synchronizing to the termination of a thread
Joining
Using a barrier
Multiple threads on a single CPU
Things to watch out for when using SMP
Threads in independent situations
Multiple processes
Multiple processes with shared memory
Multiple threads
Comparisons
More on synchronization
Readers/writer locks
Sleepon locks
Condition variables
Signal versus broadcast
Sleepons versus condvars
Additional Neutrino services
Pools of threads
Controlling the number of threads
The thread pool functions
Scheduling and the real world
Rescheduling: hardware interrupts
Rescheduling: kernel calls
Rescheduling: exceptions
Summary
Message Passing
Messaging fundamentals
A small microkernel and message passing
Message passing and client/server
Network-distributed message passing
What it means for you
The philosophy of Neutrino
Multiple threads
Server/subserver
Some examples
Send-driven (client/server)
Reply-driven (server/subserver)
An important subtlety
Multi-threaded server
Using message passing
Architecture & structure
The client
Establishing a connection
Sending messages
The server
Creating the channel
Message handling
Server framework
The send-hierarchy
Receive IDs, channels, and other parameters
More about channels
Who sent the message?
The receive ID (a.k.a. the client cookie)
Replying to the client
Not replying to the client
Replying with no data, or an errno
Finding the server's ND/PID/CHID
What about priorities?
Reading and writing data
Multipart messages
What about the other versions?
Implementation
Pulses
Receiving a pulse message
What's in a pulse?
The MsgReceivePulse() function
The MsgDeliverEvent() function
Channel flags
_NTO_CHF_UNBLOCK
Synchronization problem
Using the _NTO_MI_UNBLOCK_REQ
Message passing over a network
Networked message passing differences
Longer delays
Impact on ConnectAttach()
Impact on MsgDeliverEvent()
Impact on MsgReply(), MsgRead(), and MsgWrite()
Impact on MsgReceive()
Some notes on NDs
Priority inheritance
So what's the trick?
Summary
Clocks, Timers, and Getting a Kick Every So Often
Clocks and timers
Operating periodically
Clock interrupt sources
Base timing resolution
Timing jitter
Types of timers
Notification schemes
How to fill in the struct sigevent
Pulse notification
Signal notification
Thread notification
General tricks for notification
Pulse notification
Signal notification
Using timers
Creating a timer
Signal, pulse, or thread?
What kind of timer?
A server with periodic pulses
Server-maintained timeouts
Declarations
main()
setupPulseAndTimer()
gotAPulse()
gotAMessage()
Notes
Periodic server maintenance cycles
Timers delivering signals
Timers creating threads
Getting and setting the realtime clock and more
Getting and setting
Adjusting the timebase
An accurate timestamp
Advanced topics
Other clock sources
CLOCK_MONOTONIC
So what does CLOCK_SOFTTIME do?
Using different clock sources
Kernel timeouts
Kernel timeouts with pthread_join()
Kernel timeouts with message passing
Summary
Interrupts
Neutrino and interrupts
Interrupt service routine
Clearing the interrupt source
Telling a thread to do something
Level-sensitivity versus edge-sensitivity
Writing interrupt handlers
Attaching an interrupt handler
Attaching with InterruptAttachEvent()
Attaching with InterruptAttach()
Now that you've attached an interrupt
Detaching an interrupt handler
The flags parameter
The interrupt service routine
Using InterruptAttach()
Using InterruptAttachEvent()
InterruptAttach() versus InterruptAttachEvent()
The tradeoffs
ISR functions
Summary
Resource Managers
What is a resource manager?
Examples of resource managers
Characteristics of resource managers
The client's view
Finding the server
Finding the process manager
Handling directories
Union'd filesystems
Client summary
The resource manager's view
Registering a pathname
Handling messages
Connect messages
I/O messages
Three groups, really
The resource manager library
The library really does what we just talked about
Behind the scenes at the library
The base layer
The POSIX layer
Writing a resource manager
Data structures
resmgr_attr_t control structure
The other_func message handler
The data structure sizing parameters
The flags parameter
resmgr_connect_funcs_t connect table
resmgr_io_funcs_t I/O table
The resmgr_context_t internal context block
Resource manager structure
The resmgr_attach() function and its parameters
Putting in your own functions
The general flow of a resource manager
Messages that should be connect messages but aren't
Combine messages
POSIX-layer data structures
The iofunc_ocb_t OCB structure
The strange case of the offset member
The iofunc_attr_t attributes structure
The iofunc_mount_t mount structure
Of device numbers, inodes, and our friend rdev
Handler routines
General notes
Locking, unlocking, and combine message handling
Connect functions notes
Internal use part
End-user parameter part
Alphabetical listing of connect and I/O functions
io_chmod()
io_chown()
io_close_dup()
io_close_ocb()
io_devctl()
io_dup()
io_fdinfo()
io_link()
io_lock()
io_lock_ocb()
io_lseek()
io_mknod()
io_mmap()
io_mount()
io_msg()
io_notify()
io_open()
io_openfd()
io_pathconf()
io_power()
io_read()
io_readlink()
io_rename()
io_shutdown()
io_space()
io_stat()
io_sync()
io_unblock() [CONNECT]
io_unblock() [I/O]
io_unlink()
io_unlock_ocb()
io_utime()
io_write()
Examples
The basic skeleton of a resource manager
A simple io_read() example
The code
Effective use of other messaging functions
A simple io_write() example
A simple io_devctl() example
An io_devctl() example that deals with data
Advanced topics
Extending the OCB
OCB monitor
More efficient allocation
Extending the attributes structure
Blocking within the resource manager
Returning directory entries
Generally speaking...
The struct dirent structure and friends
Offsets
Contents
Example
main() and declarations
my_open()
my_read()
my_read_dir()
my_read_file()
dirent_size()
dirent_fill()
Summary
QNX 4 to Neutrino
Similarities
Improvements
Embeddability
Thread support
Message passing
Pulses and events
Device driver model
MIPS, PPC, SH4, and ARM support
SMP support
Porting philosophy
Message passing considerations
Client/server using the global namespace
Translating messages to standard file-descriptor-based POSIX calls
Translating messages to devctl() or _IO_MSG
Client/Server using an I/O manager
Proxies
Proxies for their IDs
Proxies for their contents
Interrupt service routines
Summary
Calling 911
Read the manuals
Contact technical support
Describe the problem
Precise information
Versions
If you're using a beta…
Reproduce the problem
Narrow it down
Training
Sample Programs
atoz.c
time1.c
tp1.c
tt1.c
Glossary
Programmer's Guide
Compiling and Debugging
Choosing the version of the OS
Making your code more portable
Conforming to standards
Including QNX- or Neutrino-specific code
Header files in /usr/include
Self-hosted or cross-development
A simple example
Self-hosted
Cross-development with network filesystem
Cross-development with debugger
Download/upload facility
Cross-development, deeply embedded
Step 1: Build a Neutrino system image.
Step 2: Transfer the system image to the target.
Step 3: Boot the target.
Using libraries
Static and dynamic libraries
Static libraries
Dynamic libraries
dlopen()
Platform-specific library locations
Linking your modules
Creating shared objects
Specifying an internal name
Optimizing the runtime linker
Lazy binding
RTLD_LAZY
Lazy loading
Diagnostics and debugging
Environment variables
Debugging
Debugging in a self-hosted environment
Debugging in a cross-development environment
The GNU debugger (gdb)
The process-level debug agent
Serial connection
TCP/IP connection
A simple debug session
Configure the target
Compile for debugging
Start the debug session
Get help
Sample boot image
Debugging using libmudflap
Programming Overview
Process model
An application as a set of processes
Some definitions
Priorities and scheduling
Priority range
BLOCKED and READY states
The ready queue
Suspending a running thread
When the thread is blocked
When the thread is preempted
When the thread yields
Scheduling policies
FIFO scheduling
Round-robin scheduling
Sporadic scheduling
Why threads?
Summary
Processes
Starting processes — two methods
Process creation
Concurrency
Inheriting file descriptors
Process termination
Normal process termination
Abnormal process termination
Detecting process termination
Using the High Availability Framework
Detecting termination from a starter process
Sample parent process using wait()
Sample parent process using sigwaitinfo()
Detecting dumped processes
Detecting the termination of daemons
Detecting client termination
Process privileges
Privilege separation
Thread I/O privileges
Procmgr abilities
Ability domains
Ability ranges
Locking an ability
Dropping an ability
Ability inheritance
Basic inheritance
Locking and inheritance
An example of privilege separation
Controlling processes via the /proc filesystem
Establishing a connection
Reading and writing the process's address space
Determining the offset
Determining accessibility
Manipulating a process or thread
Selecting a thread for further operations
Starting/stopping processes and threads
Setting breakpoints
Examining process and thread attributes
Thread information
DCMD_PROC_BREAK
DCMD_PROC_CHANNELS
DCMD_PROC_CLEAR_FLAG
DCMD_PROC_CURTHREAD
DCMD_PROC_EVENT
DCMD_PROC_FREEZETHREAD
DCMD_PROC_GETALTREG
DCMD_PROC_GETFPREG
DCMD_PROC_GETGREG
DCMD_PROC_GETREGSET
DCMD_PROC_GET_BREAKLIST
DCMD_PROC_INFO
DCMD_PROC_IRQS
DCMD_PROC_MAPDEBUG
DCMD_PROC_MAPDEBUG_BASE
DCMD_PROC_MAPINFO
DCMD_PROC_PAGEDATA
DCMD_PROC_RUN
DCMD_PROC_SETALTREG
DCMD_PROC_SETFPREG
DCMD_PROC_SETGREG
DCMD_PROC_SETREGSET
DCMD_PROC_SET_FLAG
DCMD_PROC_SIGNAL
DCMD_PROC_STATUS
DCMD_PROC_STOP
DCMD_PROC_SYSINFO
DCMD_PROC_THAWTHREAD
DCMD_PROC_THREADCTL
DCMD_PROC_TIDSTATUS
DCMD_PROC_TIMERS
DCMD_PROC_WAITSTOP
Working with Access Control Lists (ACLs)
ACL formats
ACL storage management
Manipulating ACL entries in working storage
Manipulating permissions in an ACL entry
Manipulating the tag type and qualifier in an ACL entry
Manipulating ACLs on a file or directory
Example
Tick, Tock: Understanding the Neutrino Microkernel's Concept of Time
Oversleeping: errors in delays
Delaying for a second: inaccurate code
Timer quantization error
The tick and the hardware timer
Delaying for a second: better code
Another hiccup with hardware timers
Where's the catch?
What time is it?
Clocks, timers, and power management
Transparent Distributed Processing Using Qnet
What is Qnet?
Benefits of Qnet
What works best
What type of application is well-suited for Qnet?
How does it work?
Locating services using GNS
Different modes of GNS
Registering a service
GNS path namespace
Deploying the gns processes
Quality of Service (QoS) and multiple paths
QoS policies
loadbalance
preferred
exclusive
Specifying QoS policies
Symbolic links
Designing a system using Qnet
The product: a telecom box
Developing your distributed system
Configuring the data cards
Configuring the controller card
Enhancing reliability via multiple transport buses
Redundancy and scalability using multiple controller cards
Redundancy
Scalability
Autodiscovery vs static
When should you use Qnet, TCP/IP, or NFS?
Drivers for Qnet
Writing an Interrupt Handler
What's an interrupt?
Interrupts on multicore systems
Attaching and detaching interrupts
Interrupt Service Routine (ISR)
Determining the source of the interrupt
Edge-triggered IRQ
Level-sensitive IRQ
Servicing the hardware
Safe functions
Updating common data structures
Signalling the application code
Using InterruptAttach()
Using InterruptAttachEvent()
Running out of interrupt events
Problems with shared interrupts
Advanced topics
Interrupt environment
Ordering of shared interrupts
Interrupt latency
Atomic operations
Interrupts and power management
Heap Analysis: Making Memory Errors a Thing of the Past
Dynamic memory management
Arena allocations
Small block configuration
Heap corruption
Contiguous memory blocks
Multithreaded programs
Allocation strategy
Common sources
Overrun and underrun errors
Releasing memory
Using uninitialized or stale pointers
Detecting and reporting errors
Using the malloc debug library
What's checked?
Allocating memory
Reallocating memory
Releasing memory
Controlling the level of checking
Description of optional checks
Forcing verification
Specifying an error handler
Other environment variables
Caveats
Manual checking (bounds checking)
Getting pointer information
Memory leaks
Tracing
Causing a trace and giving results
Analyzing dumps
Compiler support
C++ issues
Clean C
C++ example
Freedom from Hardware and Platform Dependencies
Common problems
I/O space vs memory-mapped
Big-endian vs little-endian
Typecast mangling
Hardware access
Network transparency
Alignment and structure packing
Atomic operations
Solutions
Determining endianness
Swapping data if required
ENDIAN_LE16()
ENDIAN_LE32()
ENDIAN_LE64()
ENDIAN_BE16()
ENDIAN_BE32()
ENDIAN_BE64()
Accessing unaligned data
UNALIGNED_RET16()
UNALIGNED_RET32()
UNALIGNED_RET64()
UNALIGNED_PUT16()
UNALIGNED_PUT32()
UNALIGNED_PUT64()
Examples
Mixed-endian accesses
Accessing hardware with dual-ported memory
Accessing I/O ports
Conventions for Recursive Makefiles and Directories
Structure of a multiplatform source tree
Makefile structure
The recurse.mk file
Macros
The EARLY_DIRS and LATE_DIRS macros
The LIST macro
The MAKEFILE macro
The CHECKFORCE macro
Directory levels
Project level
Section level (optional)
OS level
CPU level
Variant level
Specifying options
The common.mk file
The variant-level makefile
Recognized variant names
Using the standard macros and include files
The qconfig.mk include file
Preset macros
Postset macros
qconfig.mk macros
The qrules.mk include file
The qtargets.mk include file
Advanced topics
Collapsing unnecessary directory levels
Performing partial builds
Performing parallel builds
More uses for LIST
GNU configure
hook_preconfigure()
hook_postconfigure()
hook_premake()
hook_postmake()
hook_pinfo()
Examples of creating Makefiles
A single application
A library and an application
POSIX Conformance
Conformance statement
System interfaces: general attributes
Supported features
Optional features
Float, standard I/O, and limit values
Error conditions
Mathematical interfaces
File handling
Internationalized system interfaces
Threads: Cancellation points
Realtime: Prioritized I/O
Realtime threads
C-language compilation environment
POSIX Conformance Document (PCD)
Base Definitions
3. Definitions
4. General Concepts
6. Character Set
7. Locale
8. Environment Variables
13. Headers
System Interfaces
2.3. Error Numbers
2.4. Signal Concepts
2.5. Standard I/O Streams
2.8. Realtime
2.11. Tracing
3. System Interfaces
Non-POSIX functions with POSIX-sounding names
Using GDB
Neutrino-specific extensions
A quick overview of starting the debugger
GDB commands
Command syntax
Command completion
Getting help
Running programs under GDB
Compiling for debugging
Setting the target
Starting your program
Your program's arguments
Your program's environment
Your program's input and output
Debugging an already-running process
Killing the process being debugged
Debugging programs with multiple threads
Debugging programs with multiple processes
Stopping and continuing
Breakpoints, watchpoints, and exceptions
Setting breakpoints
Setting watchpoints
Breakpoints and exceptions
Deleting breakpoints
Disabling breakpoints
Break conditions
Breakpoint command lists
Breakpoint menus
Continuing and stepping
Signals
Stopping and starting multithreaded programs
Examining the stack
Stack frames
Backtraces
Selecting a frame
Information about a frame
MIPS machines and the function stack
Examining source files
Printing source lines
Searching source files
Specifying source directories
Source and machine code
Shared libraries
Examining data
Expressions
Program variables
Artificial arrays
Output formats
Examining memory
Automatic display
Print settings
Value history
Convenience variables
Registers
Floating point hardware
Examining the symbol table
Altering execution
Assignment to variables
Continuing at a different address
Giving your program a signal
Returning from a function
Calling program functions
Patching programs
Advanced Qnet Topics
Low-level discussion of Qnet principles
Details of Qnet data communication
Node descriptors
netmgr_strtond()
netmgr_ndtostr()
netmgr_remote_nd()
Booting over the network
Overview
Creating directory and setting up configuration files
Building an OS image
Booting the client
Troubleshooting
What are the limitations...
Glossary
The QNX Neutrino Cookbook
About This Guide
Foreword to the First Edition by Brian Stecher
Preface to the First Edition by Rob Krten
What's in this book?
Philosophy
The Basics
High Availability
Design Philosophy
Recipes
Web-Counter Resource Manager
ADIOS — Analog / Digital I/O Server
RAM-disk Filesystem Manager
The tar Filesystem Manager
References
What's not in this book?
Other references
Thanks!
Century Aluminum
The Basics
In the beginning...
The main() function
Command-line processing — optproc()
Common globals
Usage messages
Threaded resource managers
High Availability
Terminology
Lies, damn lies, and statistics
Increasing availability
Increasing the MTBF
Decreasing the MTTR
Parallel versus serial
Series calculations
Parallel calculations
Aggregate calculations
Failure modes and recovery models
Cascade failures
System startup and HA
Overlords, or Big Brother is watching you
Cold, warm, and hot standby
Achieving cold standby
Achieving warm standby
Achieving hot standby
Problems
Detecting failure
Obituaries
Graceful fail-over
Using shadows
In-service upgrades
Policies
Implementing HA
RK drones on about his home systems again
Other HA systems
Design Philosophy
Decoupling design in a message-passing environment
Door-lock actuators
At this point...
Managing message flow
Swipe-card readers
Control program sends to the swipe-card reader
Swipe-card reader sends to control program
Using a keypad challenge — control program sends to the swipe-card reader
Using a keypad challenge — swipe-card reader sends to control program
Scalability
Distributed processing
Summary
Web Counter Resource Manager
Requirements
Using the web counter resource manager
Design
Generating the graphical image
The code — phase 1
Operation
Generating the graphical image
Step-by-step code walkthrough
Include files and data structures
Source files
The code
The execute_resmgr() function
The io_open() function
The io_read() function
The io_close_ocb() function
The render_7segment() function
The encode_image() function
The code — phase 2
Persistent count file
Font selection
Plain text rendering
Writing to the resource
Adding the io_write() handler
The io_write() function
The io_close_ocb() function
The code — phase 3
Filename processing tricks
Changes
Globals
The new-and-improved execute_resmgr()
Option processing
Handling io_read()
Operating on a file
Operating on a directory
The persistent counter file
Enhancements
References
ADIOS — Analog/Digital I/O Server
Requirements
Design
Driver Design
DIO-144
ISO-813
PCL-711
Shared Memory Design
Tags database design
The Driver Code
Theory of operation
Code walkthrough
main() and friends
The resource manager modules
The card interface modules
Card configuration
Analog input
Analog output
Digital input
Digital output
The ADIOS server code
The usual stuff
The shared memory region
Calculating the sizes of data structures
Open and check the shared memory
Truncate and map shared memory
Acquiring data
The showsamp and tag utilities
The showsamp utility
The tag utility
References
RAM-disk Filesystem
Requirements
Connect functions
I/O functions
Missing functions
Design
The code
The extended attributes structure
The io_read() function
The io_write() function
The c_open() function
Finding the target
The pathwalk() function
The connect_msg_to_attr() function
Fun with symlinks
Analyze the mode flag
Bind the OCB and attributes structure
Finally, the c_open() code walkthrough
Walkthrough
The redirect_symlink() function
The c_readlink() function
The c_link() function
The c_rename() function
The c_mknod() function
The c_unlink() function
The io_close_ocb() function
The io_devctl() function
Mounting options
Filesystem statistics
The c_mount() function
References
TAR Filesystem
Requirements
Design
Creating a .tar file
The code
The structures
The functions
The c_mount() function
The analyze_tar_file() function
The add_tar_entry() function
The io_read() function and related utilities
The mount helper program
Variations on a theme
Virtual filesystem for USENET news (VFNews)
How does USENET news work?
So why is this a problem?
How can this possibly be made better?
Operation
Strange and unusual filesystems
Indexed filesystem
Executing commands
Secure filesystem
Line-based filesystem
References
Filesystems
What is a filesystem?
Hierarchical arrangement
Data elements
The mount point and the root
What does a filesystem do?
Filesystems and Neutrino
How does a filesystem work?
Mount point management
Unnamed mount registration
Special device registration
Mount point registration
Pathname resolution
Directory management
Data element content management
References
The /proc Filesystem
The /proc/boot directory
The /proc/mount directory
The /proc by-process-ID directories
Operations on the as entry
Discontiguous address space
Someone else's virtual address space
Finding a particular process
Iterating through the list of processes
Finding out information about the process
DCMD_PROC_INFO
Process information
Memory information
Signal information
CPU usage information
Miscellaneous
DCMD_PROC_MAPINFO and DCMD_PROC_PAGEDATA
DCMD_PROC_TIMERS
DCMD_PROC_IRQS
Finding out information about the threads
The DCMD_PROC_TIDSTATUS command
Blocked thread information
The DCMD_PROC_GETGREG and DCMD_PROC_GETFPREG commands
References
Sample Programs
Web-Counter resource manager
ADIOS — Analog / Digital I/O Server
RAM-disk and tar filesystem managers
The /proc filesystem
Glossary
Writing a Resource Manager
Overview
What is a resource manager?
Why write a resource manager?
The types of resource managers
Device resource managers
Filesystem resource managers
Communication via native IPC
Examples of resource managers
Transparent Distributed Processing (Qnet) statistics
Robot arm
GPS devices
Database example
I2C (Inter-Integrated Circuit) driver
When not to use a resource manager
The Bones of a Resource Manager
Under the covers
Under the client's covers
Under the resource manager's covers
Layers in a resource manager
The iofunc layer
The resmgr layer
The dispatch layer
The thread pool layer
Simple examples of device resource managers
Single-threaded device resource manager
Initialize the dispatch interface
Initialize the resource manager attributes
Initialize functions used to handle messages
Initialize the attribute structure used by the device
Put a name into the namespace
Allocate the context structure
Start the resource manager message loop
Multithreaded device resource manager
Define THREAD_POOL_PARAM_T
Initialize thread pool attributes
Allocate a thread pool handle
Start the threads
Using MsgSend() and MsgReply()
A bit of history
The server
The client
Fleshing Out the Skeleton
Message types
Connect messages
I/O messages
Default message handling
open(), dup(), and close()
Setting resource manager attributes
Ways of adding functionality to the resource manager
Using the default functions
Using the helper functions
Writing the entire function yourself
POSIX-Layer Data Structures
The iofunc_ocb_t (Open Control Block) structure
The iofunc_attr_t (attribute) structure
The optional iofunc_mount_t (mount) structure
Handling Read and Write Messages
Handling the _IO_READ message
Sample code for handling _IO_READ messages
Handling the _IO_WRITE message
Sample code for handling _IO_WRITE messages
Methods of returning and replying
Returning with an error
Returning using an IOV array that points to your data
Returning with a single buffer containing data
Returning success but with no data
Getting the resource manager library to do the reply
Performing the reply in the server
Leaving the client blocked, replying later
Returning and telling the library to do the default action
Handling other read/write details
Handling the xtype member
If you aren't expecting extended types (xtype)
Handling pread*() and pwrite*()
Sample code for handling _IO_READ messages in pread*()
Sample code for handling _IO_WRITE messages in pwrite*()
Handling readcond()
Updating the time for reads and writes
Combine Messages
Where combine messages are used
Atomic operations
Bandwidth considerations
The library's combine-message handling
Component responses
Component data access
Locking and unlocking the attribute structure
Connect message types
_IO_CONNECT_COMBINE_CLOSE
_IO_CONNECT_COMBINE
Extending the POSIX-Layer Data Structures
Overview
Extending the OCB and attribute structures
Extending the mount structure
Handling Other Messages
Custom messages
Handling devctl() messages
Sample code for handling _IO_DEVCTL messages
Handling ionotify() and select()
Sample code for handling _IO_NOTIFY messages
Handling out-of-band (_IO_MSG) messages
Handling private messages and pulses
Handling open(), dup(), and close() messages
Handling mount()
mount() function call
Mount in the resource manager
mount utility
Handling stat()
Handling lseek()
Signals, Timeouts, and Interrupts
Handling client unblocking due to signals or timeouts
Handling interrupts
Sample code for handling interrupts
Multithreaded Resource Managers
Multithreaded resource manager example
Thread pool attributes
Thread pool functions
Filesystem Resource Managers
Considerations for filesystem resource managers
Taking over more than one device
Handling directories
Matching at or below a mountpoint
The _IO_OPEN message for filesystems
Returning directory entries from _IO_READ
Returning information associated with a directory structure
Glossary
Multicore Processing User's Guide
What is Multicore Processing?
Developing Multicore Systems
The impact of multicore
Thread affinity
Multicore and synchronization primitives
Multicore and FIFO scheduling
Multicore and interrupts
Multicore and atomic operations
Designing with multiprocessing in mind
Use the multicore primitives
Assume that threads really do run concurrently
Break the problem down
Glossary
System Analysis Toolkit (SAT) User's Guide
Introduction
What can the SAT do for you?
Components of the SAT
Instrumented kernel
Kernel buffer management
Data-capture program (tracelogger)
Data interpretation (e.g. traceprinter)
Integrated Development Environment
Events and the Kernel
Generating events: a typical scenario
Multithreaded example
Thread context-switch time
Restarting threads
Simple and combine events
Fast and wide modes
Classes and events
Communication class: _NTO_TRACE_COMM
Control class: _NTO_TRACE_CONTROL
Interrupt classes: _NTO_TRACE_INTENTER, _NTO_TRACE_INTEXIT,_NTO_TRACE_INT_HANDLER_ENTER, and _NTO_TRACE_INT_HANDLER_EXIT
Kernel-call classes: _NTO_TRACE_KERCALLENTER, _NTO_TRACE_KERCALLEXIT, and _NTO_TRACE_KERCALLINT
Process class: _NTO_TRACE_PROCESS
System class: _NTO_TRACE_SYSTEM
Thread class: _NTO_TRACE_THREAD
User class: _NTO_TRACE_USER
Virtual thread class: _NTO_TRACE_VTHREAD
Kernel Buffer Management
Linked list size
Full buffers and the high-water mark
Buffer overruns
Capturing Trace Data
Using tracelogger to control tracing
Managing trace buffers
tracelogger's modes of operation
Choosing between wide and fast modes
Filtering events
Specifying where to send the output
Using TraceEvent() to control tracing
Managing trace buffers
Modes of operation
Filtering events
Choosing between wide and fast modes
Inserting trace events
Filtering
The static rules filter
The dynamic rules filter
Setting up a dynamic rules filter
Event handler
Removing event handlers
The post-processing facility
Interpreting Trace Data
Using traceprinter and interpreting the output
Building your own parser
The traceparser library
Simple and combine events
The traceevent_t structure
Event interlacing
Timestamps
Tutorials
The instrex.h header file
Gathering all events from all classes
Gathering all events from one class
Gathering five events from four classes
Gathering kernel calls
Event handling - simple
Inserting a user simple event
Current Trace Events and Data
Interpreting the table
Table of events
Adaptive Partitioning User's Guide
What is Adaptive Partitioning?
What are partitions and what is adaptive partitioning?
System and user requirements
The thread scheduler
Using the Thread Scheduler
Keeping track of CPU time
How is CPU time divided between partitions?
Underload
Free time
Full Load
Summary of scheduling behavior
Partition inheritance
Critical threads
Bankruptcy
Adaptive partitioning thread scheduler and other thread schedulers
Using the thread scheduler and multicore together
Setting Up and Using the Adaptive Partitioning Thread Scheduler
Building an image
Creating scheduler partitions
Launching a process in a partition
Viewing partition use
Controlling Resources Using the Thread Scheduler
Considerations for the Thread Scheduler
Determining the number of scheduler partitions and their contents
Choosing the percentage of CPU for each partition
Setting budgets to zero
Setting budgets for resource managers
Choosing the window size
Accuracy
Delays compared to priority scheduling
Practical limits
Uncontrolled interactions between scheduler partitions
Security for Scheduler Partitions
Managing security for the thread scheduler
Security and critical threads
Testing and Debugging
Instrumented kernel trace events
Using the QNX IDE (trace events)
Using other methods
Emergency access to the system
Sample Buildfile
Frequently Asked Questions: Adaptive Partitioning Thread Scheduler
Scheduling behavior
Microbilling
Averaging window
Scheduling algorithm
Overhead
Critical threads and bankruptcy
Inheritance
Budgets
Joining a partition
QNX system considerations
Glossary
Audio Developer's Guide
Audio Architecture
QNX Sound Architecture
Cards and devices
Control device
Mixer devices
Pulse Code Modulation (PCM) devices
Data formats
PCM state machine
Software PCM mixing
PCM plugin converters
Playing and Capturing Audio Data
Handling PCM devices
Opening your PCM device
Configuring the PCM device
Controlling voice conversion
Preparing the PCM subchannel
Closing the PCM subchannel
Playing audio data
Playback states
Sending data to the PCM subchannel
If the PCM subchannel stops during playback
Stopping the playback
Synchronizing with the PCM subchannel
Capturing audio data
Selecting what to capture
Capture states
Receiving data from the PCM subchannel
If the PCM subchannel stops during capture
Stopping the capture
Synchronizing with the PCM subchannel
Mixer Architecture
Opening the mixer device
Controlling a mixer group
The best mixer group with respect to your PCM subchannel
Finding all mixer groups
Mixer event notification
Closing the mixer device
Optimizing Audio
Audio Library
snd_card_get_longname()
snd_card_get_name()
snd_card_name()
snd_cards()
snd_cards_list()
snd_ctl_callbacks_t
snd_ctl_close()
snd_ctl_file_descriptor()
snd_ctl_hw_info()
snd_ctl_hw_info_t
snd_ctl_mixer_switch_list()
snd_ctl_mixer_switch_read()
snd_ctl_mixer_switch_write()
snd_ctl_open()
snd_ctl_pcm_channel_info()
snd_ctl_pcm_info()
snd_ctl_read()
snd_mixer_callbacks_t
snd_mixer_close()
snd_mixer_eid_t
snd_mixer_element_read()
snd_mixer_element_t
snd_mixer_element_write()
snd_mixer_elements()
snd_mixer_elements_t
snd_mixer_file_descriptor()
snd_mixer_filter_t
snd_mixer_get_bit()
snd_mixer_get_filter()
snd_mixer_gid_t
snd_mixer_group_read()
snd_mixer_group_t
snd_mixer_group_write()
snd_mixer_groups()
snd_mixer_groups_t
snd_mixer_info()
snd_mixer_info_t
snd_mixer_open()
snd_mixer_open_name()
snd_mixer_read()
snd_mixer_routes()
snd_mixer_routes_t
snd_mixer_set_bit()
snd_mixer_set_filter()
snd_mixer_sort_eid_table()
snd_mixer_sort_gid_table()
snd_mixer_weight_entry_t
snd_pcm_build_linear_format()
snd_pcm_capture_flush()
snd_pcm_capture_go()
snd_pcm_capture_pause()
snd_pcm_capture_prepare()
snd_pcm_capture_resume()
snd_pcm_channel_flush()
snd_pcm_channel_go()
snd_pcm_channel_info()
snd_pcm_channel_info_t
snd_pcm_channel_params()
snd_pcm_channel_params_t
snd_pcm_channel_pause()
snd_pcm_channel_prepare()
snd_pcm_channel_resume()
snd_pcm_channel_setup()
snd_pcm_channel_setup_t
snd_pcm_channel_status()
snd_pcm_channel_status_t
snd_pcm_close()
snd_pcm_file_descriptor()
snd_pcm_find()
snd_pcm_format_big_endian()
snd_pcm_format_linear()
snd_pcm_format_little_endian()
snd_pcm_format_signed()
snd_pcm_format_size()
snd_pcm_format_t
snd_pcm_format_unsigned()
snd_pcm_format_width()
snd_pcm_get_audioman_handle()
snd_pcm_get_format_name()
snd_pcm_info()
snd_pcm_info_t
snd_pcm_link()
snd_pcm_nonblock_mode()
snd_pcm_open()
snd_pcm_open_name()
snd_pcm_open_preferred()
snd_pcm_playback_drain()
snd_pcm_playback_flush()
snd_pcm_playback_go()
snd_pcm_playback_pause()
snd_pcm_playback_prepare()
snd_pcm_playback_resume()
snd_pcm_plugin_flush()
snd_pcm_plugin_get_voice_conversion()
snd_pcm_plugin_info()
snd_pcm_plugin_params()
snd_pcm_plugin_playback_drain()
snd_pcm_plugin_prepare()
snd_pcm_plugin_read()
snd_pcm_plugin_set_disable()
snd_pcm_plugin_set_enable()
snd_pcm_plugin_set_src_method()
snd_pcm_plugin_set_src_mode()
snd_pcm_plugin_set_voice_conversion()
snd_pcm_plugin_setup()
snd_pcm_plugin_src_max_frag()
snd_pcm_plugin_status()
snd_pcm_plugin_update_src()
snd_pcm_plugin_write()
snd_pcm_read()
snd_pcm_set_audioman_handle()
snd_pcm_unlink()
snd_pcm_voice_conversion_t
snd_pcm_write()
snd_strerror()
snd_switch_t
wave.c example
waverec.c example
mixer_ctl.c example
ALSA and libasound.so
What's New in This Release?
What's new in QNX Neutrino 6.5.0 Service Pack 1
What's new in QNX Neutrino 6.5.0
What's new in QNX Neutrino 6.4
What's new in QNX Neutrino 6.3
What's new in QNX Neutrino 6.2
What's new in QNX Neutrino 6.1
Glossary
Building Embedded Systems
About This Book
Overview of Building Embedded Systems
Introduction
The role of the IPL
Warm-start and cold-start IPL
The role of the startup program
Startup's responsibilities
Copying and decompressing the image
Configuring the hardware
Determining system configuration
Establishing callouts
Starting the OS
The startup library
The role of Neutrino
Hardware aspects
Choice of processor
Source of initialization and configuration
Choice of filesystems
No additional storage required
Additional read-only storage required
Additional read/write nonpersistent storage required
Additional read/write persistent storage required
I/O devices
Character I/O devices
Special/custom devices
Getting started
Hardware design
Customizing the software
Customizing the source
Working with a BSP
BSP Overview
Using BSPs in the IDE
Using BSPs on the command line
Structure of a BSP
prebuilt subdirectory
install subdirectory
src subdirectory
Building source from the command line
Supporting additional devices
Transferring an OS image onto your board
Transferring an OS image
Working with a flash filesystem
Raw partitions
Flash filesystem partitions
Flash filesystem source
How do I create a partition?
Testing Neutrino on your board
Where do I go from here?
Filename conventions
Making an OS Image
Images, images, images
What is an OS image?
The OS image as a filesystem
Configuring an OS image
A simple buildfile
Inline files
The bootstrap file
Compressing the image
The script file
Bound multiprocessing attributes
The script file on the target
Plain ordinary lists of files
Including files from different places
Modifying the search path
Specifying the pathname explicitly
Creating the contents of the file in line
Specifying file ownership and permissions
Including a whole whack of files
Generating the image
Listing the contents of an image
Building a flash filesystem image
Using mkefs
mkefs buildfile
Block size
Spare blocks
Compressing files
Abstraction layer
Two sizes
Compression rules
The exception
Embedding an image
Combining image files using mkimage
Combining image files using the IDE
Converting images using mkrec
Transferring an image to flash
System configuration
Establishing an output device
A simple desktop example
Running drivers/filesystems
Disk drivers
Flash filesystems
Network drivers
Network filesystems
Running applications
Debugging an embedded system
pdebug software debugging agent
Hardware debuggers and Neutrino
Producing debug symbol information for IPL and startup
Generating IPL debug symbols
Generating startup debug symbols
Writing an IPL Program
Initial program loader (IPL)
Responsibilities of the IPL
Linearly mapped images
Bank-switched images
Processors & configurations
Booting from a bank-switched device
Booting from a linear device
"Warm" vs "cold" start
Warm-start IPL
Cold-start IPL
Loading the image
If the source is a linearly mapped device
If the source is a bank-switched device
ROM devices
Network boot
Using a BOOTP server
Serial port
Traditional disk
None of the above?
Transferring control to the startup program
Customizing IPLs
Initialize hardware
Loading the image into RAM
Structure of the boot header
signature
version
flags1 and flags2
header_size
machine
startup_vaddr
paddr_bias
image_paddr
ram_paddr
ram_size
startup_size
stored_size
imagefs_paddr
imagefs_size
preboot_size
zero and zero0
info
struct startup_info_skip
struct startup_info_mem and startup_info_mem_extended
struct startup_info_disk
struct startup_info_time
struct startup_info_box
Relationship of struct startup_header fields
Linear ROM execute-in-place boot image
Linear ROM compressed boot image
ROM non-XIP image
Disk/network image (x86 BIOS)
Disk/network compressed image
IPL structure
IPL source directory structure
IPL code structure
An example
Creating a new IPL
The IPL library
enable_cache
image_download_8250()
image_scan()
image_scan_ext()
image_setup()
image_setup_ext()
image_start()
image_start_ext()
int15_copy()
print_byte()
print_char()
print_long()
print_sl()
print_string()
print_var()
print_word()
protected_mode()
uart_hex8
uart_hex16
uart_hex32
uart_init
uart_put
uart_string
uart32_hex8
uart32_hex16
uart32_hex32
uart32_init
uart32_put
uart32_string
Customizing Image Startup Programs
Introduction
Initialize hardware
Initialize system page
Initialize callouts
Anatomy of a startup program
Structure of a startup program
Creating a new startup program
Structure of the system page
size
total_size
type
num_cpu
system_private
asinfo
The attr field
Address space trees
hwinfo
Tags
Items
Device trees
Building the section
Other functions
Defaults
Predefined items and tags
Group item
Bus item
Device item
location tag
irq tag
diskgeometry tag
pad tag
cpuinfo
syspage_entry cacheattr
syspage_entry qtime
callout
callin
typed_strings
strings
intrinfo
The cpu_intr_base member
The flags member
config return values
syspage_entry union un
un.x86
un.x86.smpinfo (deprecated)
un.ppc (deprecated)
un.ppc.kerinfo
un.mips
un.arm
un.sh
smp
pminfo
Callout information
Debug interface
Clock/timer interface
Interrupt controller interface
Cache controller interface
System reset callout
Power management callout
The startup library
add_cache()
add_callout()
add_callout_array()
add_interrupt()
add_interrupt_array()
add_ram()
add_string()
add_typed_string()
alloc_qtime()
alloc_ram()
as_add()
as_add_containing()
as_default()
as_find()
as_find_containing()
as_info2off()
as_off2info()
as_set_checker()
as_set_priority()
avoid_ram()
calc_time_t()
calloc_ram()
callout_io_map(), callout_io_map_indirect()
callout_memory_map(), callout_memory_map_indirect()
callout_register_data()
chip_access()
chip_done()
chip_read8()
chip_read16()
chip_read32()
chip_write8()
chip_write16()
chip_write32()
copy_memory()
del_typed_string()
falcon_init_l2_cache()
falcon_init_raminfo()
falcon_system_clock()
find_startup_info()
find_typed_string()
handle_common_option()
hwi_add_device()
hwi_add_inputclk()
hwi_add_irq()
hwi_add_location()
hwi_add_nicaddr()
hwi_add_rtc()
hwi_alloc_item()
hwi_alloc_tag()
hwi_find_as()
hwi_find_item()
hwi_find_tag()
hwi_off2tag()
hwi_tag2off()
init_asinfo()
init_cacheattr()
init_cpuinfo()
init_hwinfo()
init_intrinfo()
init_mmu()
init_pminfo()
init_qtime()
init_qtime_sa1100()
init_raminfo()
init_smp()
init_syspage_memory() (deprecated)
init_system_private()
jtag_reserve_memory()
kprintf()
mips41xx_set_clock_freqs()
openbios_init_raminfo()
pcnet_reset()
ppc400_pit_init_qtime()
ppc405_set_clock_freqs()
ppc600_set_clock_freqs()
ppc700_init_l2_cache()
ppc800_pit_init_qtime()
ppc800_set_clock_freqs()
ppc_dec_init_qtime()
print_syspage()
rtc_time()
startup_io_map()
startup_io_unmap()
startup_memory_map()
startup_memory_unmap()
tulip_reset()
uncompress()
x86_cpuid_string()
x86_cputype()
x86_enable_a20()
x86_fputype()
x86_init_pcbios()
x86_pcbios_shadow_rom()
x86_scanmem()
Writing your own kernel callout
Find out who's gone before
Why are they in assembly language?
Starting off
"Patching" the callout code
Getting some R/W storage
The exception that proves the rule
PPC chips support
Adding a new CPU to the startup library
Customizing the Flash Filesystem
Introduction
Driver structure
resmgr and iofunc layers
Flash filesystem component
Socket services component
Flash services component
Probe routine component
Building your flash filesystem driver
The source tree
The Makefile
Making the driver
The main() function
f3s_init()
f3s_start()
Socket services interface
f3s_open()
f3s_page()
f3s_status()
f3s_close()
Options parsing
f3s_socket_option()
f3s_socket_syspage()
Flash services interface
f3s_ident()
f3s_reset()
f3s_v2read()
f3s_v2write()
f3s_v2erase()
f3s_v2suspend()
f3s_v2resume()
f3s_v2sync()
f3s_v2islock()
f3s_v2lock()
f3s_v2unlock()
f3s_v2unlockall()
Choosing the right routines
Example: The devf-ram driver
main()
f3s_ram_open()
f3s_ram_page()
System Design Considerations
Introduction
Before you design your system
Processor speed
Memory requirements
Peripherals
Debugging
Field upgrades
Other design considerations
EPROM/Flash filesystem considerations
IPL location
Graphics cards
A20 gate
External ISA bus slots
PCI bus slots
External clocks
Interrupts & controllers
Serial and parallel ports
Parallel port considerations
NMI
Design do's and don'ts
Do:
Don't:
Sample Buildfiles
Introduction
Generic examples
Shared libraries
Running executables more than once
Multiple consoles
Starting other programs on consoles
Redirection
/tmp
Complete example — minimal configuration
Complete example — flash filesystem
Complete example — disk filesystem
Complete example — TCP/IP with network filesystem
Processor-specific notes
Specifying the processor
Examples
Specifying the startup program
Specifying the serial device
Glossary
High Availability Framework
Introduction
Where's the problem?
A software foundation for HA
What's in the High Availability Framework?
What you get
The QNX Approach to HA
The reset "solution"
Traditional RTOS architecture
Modularity means granularity
Intrinsic HA
Using the High Availability Manager
Introduction
HAM hierarchy
Entities
Conditions
Actions
Action Fail actions
Multistaged recovery
State of the HAM
Example of the view shown in /proc/ham
HAM API
Connect/disconnect functions
Attach/detach functions
For self-attached entities
Code snippet using self-attach/detach calls
For attaching/detaching all other entities
Code snippet using attach/detach calls
Entity functions
Condition functions
Condition types
Condition flags
Action functions
Action fail functions
Example to monitor inetd
Example to monitor fs-nfs2
Functions to operate on handles
A client example
Starting and stopping a HAM
Stopping a HAM
Control functions
Verbosity control
Publishing autonomously detected conditions
Publish state transitions
Publish other conditions
Subscribing to autonomously published conditions
Trigger based on state transitions
Trigger based on specific published condition
Using the Client Recovery Library
Introduction
MsgSend*() functions
Other covers and convenience functions
HA-awareness functions
I/O covers
Convenience functions
A simple example
State-reconstruction example
HAM API Reference
ham_action_control()
ham_action_execute()
ham_action_fail_execute()
ham_action_fail_log()
ham_action_fail_notify_pulse(), ham_action_fail_notify_pulse_node()
ham_action_fail_notify_signal(), ham_action_fail_notify_signal_node()
ham_action_fail_waitfor()
ham_action_handle(), ham_action_handle_node()
ham_action_handle_free()
ham_action_heartbeat_healthy()
ham_action_log()
ham_action_notify_pulse(), ham_action_notify_pulse_node()
ham_action_notify_signal(), ham_action_notify_signal_node()
ham_action_remove()
ham_action_restart()
ham_action_waitfor()
ham_attach(), ham_attach_node()
ham_attach_self()
ham_condition()
ham_entity_control()
ham_condition_handle(), ham_condition_handle_node()
ham_condition_handle_free()
ham_condition_raise()
ham_condition_remove()
ham_condition_state()
ham_connect(), ham_connect_nd(), ham_connect_node()
ham_detach()
ham_detach_name(), ham_detach_name_node()
ham_detach_self()
ham_disconnect(), ham_disconnect_nd(), ham_disconnect_node()
ham_entity(), ham_entity_node()
ham_entity_condition_raise()
ham_entity_condition_state()
ham_entity_control()
ham_entity_handle(), ham_entity_handle_node()
ham_entity_handle_free()
ham_heartbeat()
ham_stop(), ham_stop_nd(), ham_stop_node()
ham__verbose()
Client Recovery Library Reference
ha_attach()
ha_close()
ha_connection_ctrl()
ha_ConnectAttach(), ha_ConnectAttach_r()
ha_ConnectDetach(), ha_ConnectDetach_r()
ha_creat(), ha_creat64()
ha_detach()
ha_dup()
ha_fclose()
ha_fopen()
ha_open(), ha_open64()
ha_ReConnectAttach()
ha_reopen()
Examples
Simple restart
Compound restart
Death/condition notification
Heartbeating clients (liveness detection)
The process is made to heartbeat
Process starvation
Thread 2 is made to heartbeat
Glossary
Instant Device Activation User's Guide
Using Minidrivers for Instant Device Activation
The minidriver basics
The minidriver architecture
How does the minidriver work?
Seamless transition
Running multiple handler functions
Writing a minidriver
Hardware platform
Timing requirements
Data storage
Hardware initialization
Hardware Access
Transition to full driver
Sample minidriver
Implementation notes
The minidriver handler function
Adding your minidriver to the system
Build startup
Test application: mini-peeker.c
Transition from minidriver to full driver
Minidriver implementation notes
Customizing the startup program that contains your minidriver code
Making a boot image that includes your minidriver
Debugging from within the minidriver
Displaying information about minidriver status (after the kernel boots)
Making the transition to the real driver
APIs and Datatypes
mdriver_add()
mdriver_max
mdriver_max
mdriver_entry
Sample Drivers for Instant Device Activation
FreeScale Media5200b sample minidriver
The minidriver handler function
Adding your minidriver to the system
Build startup
Testing your minidriver
Sample timings
Renesas Biscayne minidriver
The minidriver handler function
Adding your minidriver to the system
Build startup
Testing your minidriver
Sample Timings
OMAP minidriver
Adding your minidriver to the system
Build startup
Testing your minidriver
Sample timings
Hardware Interaction within the Minidriver
Persistent Publish/Subscribe Developer's Guide
QNX PPS service
Running PPS
Objects and their attributes
Object files
Special objects
Object and directory sizes
Change notification
Object syntax
Attribute syntax
Persistence
Persistent storage
Saving objects
Loading objects
Publishing
Creating, modifying, and deleting objects and attributes
Multiple Publishers
Subscribing
Blocking and nonblocking reads
Getting notifications of data on a file descriptor
io_notify() functionality
Subscription Modes
Full mode
Delta mode
Subscribing to multiple objects
Subscribe to all objects in a directory
Notification groups
Creating notification groups
Using notification groups
Options and qualifiers
Pathname open options
Critical option
Filtering notifications
Object and attribute qualifiers
Nonpersistence qualifier
Item qualifier
Reading and writing from the command line
Server objects
Working with server objects
Sending messages through PPS server objects
Sending a message
Replying to a message
Supporting cancellation of requests
PPS encoding and decoding API
Encoding PPS data
Decoding PPS data
Handling unknown data
Dealing with errors
Other features of PPS
PPS API reference
pps_attrib_flags_t
pps_attrib_t
pps_decoder_cleanup()
pps_decoder_dump_tree()
pps_decoder_error_t
pps_decoder_flags()
pps_decoder_get_bool()
pps_decoder_get_double()
pps_decoder_get_int()
pps_decoder_get_int64()
pps_decoder_get_state()
pps_decoder_get_string()
pps_decoder_goto_index()
pps_decoder_initialize()
pps_decoder_is_integer()
pps_decoder_length()
pps_decoder_name()
pps_decoder_next()
pps_decoder_parse_json_str()
pps_decoder_parse_pps_str()
pps_decoder_pop()
pps_decoder_push()
pps_decoder_push_array()
pps_decoder_push_object()
pps_decoder_reset()