Start to Finish:
Porting to BlackBerry 10 Native
Aaron Ardiri

Senior Technical Evangelist
aardiri@rim.com

twitter: @ardi...
Getting Started
BlackBerry Dev Zone: You’ll find everything you need

developer.blackberry.com

2
Getting Started

3
Getting Started

4
Getting Started

5
Getting Started
5 Easy Steps!

Download the Native SDK
developer.blackberry.com/native

Register for Signing Keys
Run the ...
Source

7
So; how was it done?
Porting 101 – the textbook guide
application anatomy (mainline, event loop et al)
identify a way to d...
:: application anatomy
#include <stdio.h>
#include <stdlib.h>
int
main(intargc, char **argv)
{
fprintf(stdout, “Hello Worl...
:: application anatomy - BPS
The BlackBerry Platform Services (BPS) library
provides an application with a single consiste...
:: application anatomy - a real “main()”
int
main(intargc, char **argv)
{
if (application_initialize())
{
application_even...
:: application anatomy – event handling
event_bps = NULL;
bps_get_event(&event_bps, timeout); // -1, forever
if (event_bps...
:: debugging/logging
The BlackBerry 10 Platform logs all stdout
messages to the application sandbox
fprintf(stdout, “[INFO...
:: play nice with navigator/UX
The BlackBerry Platform Services (BPS) library
issues navigator events applications should ...
:: play nice with navigator/UX
event_domain :: navigator_get_domain()
switch (e_id)
{
case NAVIGATOR_EXIT:
// user has req...
:: play nice with navigator/UX
event_domain :: navigator_get_domain()
switch (e_id)
{
case NAVIGATOR_WINDOW_STATE:
switch ...
:: create a framebuffer (gfx)
The BlackBerry 10 platform provides a composited
windowing API (low level) – which allows th...
:: create a pcm audio callback
The BlackBerry 10 platform provides an ALSA
compliant audio library for capturing and playb...
:: create a handler for touch, key
screen_request_events(..);
then capture the appropriate screen related events (pointer,...
:: create a handler for touch, key
event_domain :: screen_get_domain()
// obtain the screen event from the abstract bps ev...
:: create a handler for touch, key
event_domain :: screen_get_domain()
switch (e_id)
{
case SCREEN_EVENT_POINTER:
// obtai...
:: create a handler for touch, key
event_domain :: screen_get_domain()
switch (e_id)
{
case SCREEN_EVENT_MTOUCH_TOUCH:
// ...
:: create a handler for touch, key
event_domain :: screen_get_domain()
switch (e_id)
{
case SCREEN_EVENT_KEYBOARD:
// get ...
:: resource manager for assets
Each app is confined to it’s own sandbox


Only your app has read/write access to it’s san...
:: resource manager for assets
#define MAX_PATH_LENGTH 256
{

char sandbox[MAX_PATH_LENGTH];
char path[MAX_PATH_LENGTH];
g...
:: generate bindings to system
The BlackBerry 10 platform provides a vast number of POSIX
compliant C libraries that can b...
:: building the basics – main.c

DEMO
… tv static (with white noise) …
edit - compile – deploy – debug – run
(command line...
:: migration to SHARK

DEMO
… cronk / caveman HD …
edit - compile – deploy – debug – run
(command line tools)
28
Destination

29
:: next steps - extend

30
:: next steps – open source

blackberry.github.org
31
QUESTIONS
contact me for the “tv static” application sources
THANK YOU
Aaron Ardiri

Senior Technical Evangelist
aardiri@rim.com
Upcoming SlideShare
Loading in …5
×

Start to Finish: Porting to BlackBerry 10

488 views
398 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
488
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Need to shrink the long URLs or remove one of them. DRC is almost empty, but also almost impossible to find
  • Need to shrink the long URLs or remove one of them. DRC is almost empty, but also almost impossible to find
  • Should we have a bunch of screen shots walking through this?
  • Start to Finish: Porting to BlackBerry 10

    1. 1. Start to Finish: Porting to BlackBerry 10 Native Aaron Ardiri Senior Technical Evangelist aardiri@rim.com twitter: @ardiri
    2. 2. Getting Started BlackBerry Dev Zone: You’ll find everything you need developer.blackberry.com 2
    3. 3. Getting Started 3
    4. 4. Getting Started 4
    5. 5. Getting Started 5
    6. 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
    7. 7. Source 7
    8. 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
    9. 9. :: application anatomy #include <stdio.h> #include <stdlib.h> int main(intargc, char **argv) { fprintf(stdout, “Hello World!n”); return EXIT_SUCCESS; } 9
    10. 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. 11. :: application anatomy - a real “main()” int main(intargc, char **argv) { if (application_initialize()) { application_eventloop(); application_terminate(); } return EXIT_SUCCESS; } 11
    12. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 27. :: building the basics – main.c DEMO … tv static (with white noise) … edit - compile – deploy – debug – run (command line tools) 27
    28. 28. :: migration to SHARK DEMO … cronk / caveman HD … edit - compile – deploy – debug – run (command line tools) 28
    29. 29. Destination 29
    30. 30. :: next steps - extend 30
    31. 31. :: next steps – open source blackberry.github.org 31
    32. 32. QUESTIONS contact me for the “tv static” application sources
    33. 33. THANK YOU Aaron Ardiri Senior Technical Evangelist aardiri@rim.com

    ×