Your SlideShare is downloading. ×
  • Like
Start to Finish: Porting to BlackBerry 10
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Start to Finish: Porting to BlackBerry 10

  • 270 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
270
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    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?

Transcript

  • 1. Start to Finish: Porting to BlackBerry 10 Native Aaron Ardiri Senior Technical Evangelist aardiri@rim.com twitter: @ardiri
  • 2. Getting Started BlackBerry Dev Zone: You’ll find everything you need developer.blackberry.com 2
  • 3. Getting Started 3
  • 4. Getting Started 4
  • 5. Getting Started 5
  • 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. Source 7
  • 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. :: application anatomy #include <stdio.h> #include <stdlib.h> int main(intargc, char **argv) { fprintf(stdout, “Hello World!n”); return EXIT_SUCCESS; } 9
  • 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
  • 29. Destination 29
  • 30. :: next steps - extend 30
  • 31. :: next steps – open source blackberry.github.org 31
  • 32. QUESTIONS contact me for the “tv static” application sources
  • 33. THANK YOU Aaron Ardiri Senior Technical Evangelist aardiri@rim.com