6. Getting Started
5 Easy Steps!
Download the Native SDK
developer.blackberry.com/native
Register for Signing Keys
Run the getting started wizard
Window -> Preferences -> BlackBerry
Sets up your environment, keys, debug token
Create your application and deploy it to your device
Publish to AppWorld™ - make money!
6
8. So; how was it done?
Porting 101 – the textbook guide
application anatomy (mainline, event loop et al)
identify a way to debug/handle logging of the application
play nice with the navigator/user experience of the platform
create a framebuffer object for graphics
create a PCM audio callback system for music and sound effects
create a handler for input events like touch and keyboard
create a resource manager for preferences, game assets
create bindings to system resources (memory, time, files, networking)
8
10. :: application anatomy - BPS
The BlackBerry Platform Services (BPS) library
provides an application with a single consistent
interface to a number of different services.
-
event loop
input/output (sensors, audio, LED, screen, multimedia)
device information
payment services
network status and geo-location
10
11. :: application anatomy - a real “main()”
int
main(intargc, char **argv)
{
if (application_initialize())
{
application_eventloop();
application_terminate();
}
return EXIT_SUCCESS;
}
11
12. :: application anatomy – event handling
event_bps = NULL;
bps_get_event(&event_bps, timeout); // -1, forever
if (event_bps != NULL)
{
event_domain = bps_event_get_domain(event_bps);
if (event_domain == navigator_get_domain())
{
// request the event id in the navigator domain
e_id = bps_event_get_code(event_bps);
}
}
12
13. :: debugging/logging
The BlackBerry 10 Platform logs all stdout
messages to the application sandbox
fprintf(stdout, “[INFO] my log linen”);
fflush(stdout);
to view the contents of the log – SSH into the device/simulator:
$ cd /accounts/1000/appdata/com.xxx.yyy/logs
$ cat log
13
14. :: play nice with navigator/UX
The BlackBerry Platform Services (BPS) library
issues navigator events applications should handle:
navigator_request_events(0); // request events
NAVIGATOR_EXIT
NAVIGATOR_SWIPE_DOWN
NAVIGATOR_ORIENTATION_CHECK
NAVIGATOR_WINDOW_STATE
- fullscreen, thumbnail, invisible
14
15. :: play nice with navigator/UX
event_domain :: navigator_get_domain()
switch (e_id)
{
case NAVIGATOR_EXIT:
// user has requested we exit the application
running = 0;
break;
15
16. :: play nice with navigator/UX
event_domain :: navigator_get_domain()
switch (e_id)
{
case NAVIGATOR_WINDOW_STATE:
switch (navigator_event_get_window_state(event_bps))
{
case NAVIGATOR_WINDOW_FULLSCREEN:
case NAVIGATOR_WINDOW_THUMBNAIL:
case NAVIGATOR_WINDOW_INVISIBLE:
break;
16
17. :: create a framebuffer (gfx)
The BlackBerry 10 platform provides a composited
windowing API (low level) – which allows the
creation of a pixmap (framebuffer) for graphics.
screen_create_context(..);
screen_create_window(..);
screen_set_window_property_iv(..)
screen_create_window_buffers(..);
17
18. :: create a pcm audio callback
The BlackBerry 10 platform provides an ALSA
compliant audio library for capturing and playback
of digital audio stream handling
snd_pcm_open_preferred(..);
snd_pcm_plugin_params(..);
snd_pcm_plugin_prepare(..);
snd_pcm_plugin_write(..);
18
19. :: create a handler for touch, key
screen_request_events(..);
then capture the appropriate screen related events (pointer, touch, key)
SCREEN_EVENT_POINTER
SCREEN_EVENT_MTOUCH_TOUCH
SCREEN_EVENT_MTOUCH_MOVE
SCREEN_EVENT_MTOUCH_RELEASE
SCREEN_EVENT_KEYBOARD
19
20. :: create a handler for touch, key
event_domain :: screen_get_domain()
// obtain the screen event from the abstract bps event
event_scr= screen_event_get_event(event_bps);
// obtain the event id in the screen domain
screen_get_event_property_iv(event_scr,
SCREEN_PROPERTY_TYPE, &e_id);
20
21. :: create a handler for touch, key
event_domain :: screen_get_domain()
switch (e_id)
{
case SCREEN_EVENT_POINTER:
// obtain the position and mouse button state
screen_get_event_property_iv(event_scr,
SCREEN_PROPERTY_SOURCE_POSITION,pos);
screen_get_event_property_iv(event_scr,
SCREEN_PROPERTY_BUTTONS, &state);
21
22. :: create a handler for touch, key
event_domain :: screen_get_domain()
switch (e_id)
{
case SCREEN_EVENT_MTOUCH_TOUCH:
// get the information about the touch event
screen_get_mtouch_event(event_scr, &event_mt, 0);
id = event_touch.contact_id;
x = event_touch.x;
y = event_touch.y; // obtain the (x,y) position
22
23. :: create a handler for touch, key
event_domain :: screen_get_domain()
switch (e_id)
{
case SCREEN_EVENT_KEYBOARD:
// get the information about the keyboard event
screen_get_event_property_iv(event_scr,
SCREEN_PROPERTY_KEY_FLAGS, &state);
if ((state & (KEY_DOWN || KEY_REPEAT)) != 0)
screen_get_event_property_iv(event_scr,
SCREEN_PROPERTY_KEY_SYM, &key);
23
24. :: resource manager for assets
Each app is confined to it’s own sandbox
Only your app has read/write access to it’s sandbox
$(SANDBOX)/
$(SANDBOX)/app
$(SANDBOX)/data
$(SANDBOX)/temp
$(SANDBOX)/logs
$(SANDBOX)/shared
24
25. :: resource manager for assets
#define MAX_PATH_LENGTH 256
{
char sandbox[MAX_PATH_LENGTH];
char path[MAX_PATH_LENGTH];
getcwd(sandbox, MAX_PATH_LENGTH);
sprintf(path, "%s/data/preferences.dat", sandbox);
}
Then use POSIX file functions to read/write the contents of the file.
25
26. :: generate bindings to system
The BlackBerry 10 platform provides a vast number of POSIX
compliant C libraries that can be used as-is when the
appropriate BlackBerry Platform Services API doesn’t exist.
pthread, strings, math, timers, memory, file io etc
A number of open-source libraries are also available for use
openAL, openSSL, SQLite, zlib, libxml2, freetype
26
27. :: building the basics – main.c
DEMO
… tv static (with white noise) …
edit - compile – deploy – debug – run
(command line tools)
27
28. :: migration to SHARK
DEMO
… cronk / caveman HD …
edit - compile – deploy – debug – run
(command line tools)
28