SlideShare ist ein Scribd-Unternehmen logo
1 von 62
Downloaden Sie, um offline zu lesen
Introducing
Pebble SDK 2.0
November 6th 2013
A MAJOR UPDATE

New Tools

SDK Overhaul

New APIs
Introducing Pebble SDK 2.0

If you are watching live, you can ask questions
On our IRC channel: #pebble on irc.freenode.net
During our AMA on Reddit at 12pm PST today
This is recorded and will be available on our YouTube channel and on
the developer web site
Friendly warning: This presentation is mostly intended for developers
New Tools

Improving the developer experience
CloudPebble
Simplified build system
Deploying from the command line
Application logs
Documentation
New Tools

CloudPebble

Now open-sourced and hosted by Pebble Technology
New Tools

CloudPebble

No installation - From zero to first installed app in 60 seconds
New Tools

Simplified build system

One tool for all your Pebble development
New Tools

Simplified build system

$ pebble new-project helloworld	
Creating new project hello-world	
$ cd helloworld	
$ pebble build	
Memory usage:	
=============	
Total app footprint in RAM:
822 bytes / ~24kb	
Free RAM available (heap):
23754 bytes	
'build' finished successfully (0.351s)
New Tools

Developer Connection

Use the Pebble mobile application to install and debug apps.
New Tools

Developer Connection

$ export PEBBLE_PHONE=192.168.1.42	
$ pebble install --logs	
[INFO
[INFO
[INFO
[INFO

]
]
]
]

Installation successful	
Enabling application logging...	
Displaying logs ... Ctrl-C to interrupt.	
D helloworld.c:58 Done initializing

A very simple and reliable way to install and watch log messages
New Tools

Documentation

We have re-written almost all of Pebble Documentation
Pebble documentation now includes:
• A Getting Started Guide
• Pebble Developer Guide with 11 chapters
• Pebble Mobile Developer Guide
• Pebble 2.0 Migration Guide
• API Reference for Pebble, iOS and Android
New Tools

Improving the developer experience
CloudPebble
Simplified build system
Deploying from the command line
Application logs
Documentation
SDK Overhaul

Getting ready for bigger applications and
an evolving SDK
SDK Overhaul

Migrating to Pebble 2.0

Pebble 2.0 is a major evolution of Pebble 1.0 with lots of changes in the
system and in the SDK
• Pebble 2.0 is not compatible with 1.0 apps
• Developers need to migrate their application to Pebble 2.0

Refer to Pebble 2.0 Migration Guide
http://developer.getpebble.com/2/guides/migration-guide.html
SDK Overhaul

Pebble application must
provide some metadata
through a JSON file in the
project called appinfo.json	
• Application name
• UUID
• Watchface / Watchapp
• Resources
• etc

Application metadata
SDK Overhaul

Using pointers and dynamic memory

In Pebble OS 2.0, all the SDK structures are opaque. This means we can
change them without you having to recompile your apps.
You cannot allocate structures as global variables as you did in 1.0. You
must use pointers and memory allocated dynamically by the system.
All calls to _init() functions become are replaced by _create() calls

Window my_window;	
window_init(&my_window);

becomes

Window *my_window;	
my_window = window_create();
SDK Overhaul

Getting closer to standards: C/UNIX

• pbl_main() is now called main()
• PblTm is replaced by struct tm
• string_format_time() is replaced by strftime()
• Pebble does not support timezones yet but we introduce gmtime()

and localtime() to prepare for timezone support.
• get_time() is replaced by localtime(time(NULL))
SDK Overhaul

Enforcing a subscription based Event system

Pebble 2.0 relies heavily on Events. You register to events with
_register functions.
All Pebble 1.x APIs have been updated: Timer, Tick, AppMessage, etc
PebbleAppHandlers handlers = {	
.timer_handler = &handle_timer	
};

becomes
timer = app_timer_register(1500, timer_callback, NULL);
SDK Overhaul

Dynamic Memory

Introducing two old friends: malloc() and free()
Each application has it’s own heap and is cleaned automatically
You can attach data to layers and windows (layer_create_with_data()
and window_set_user_data())
Your total memory is ~24k. Your heap space is 24k minus app size.
Pebble SDK includes tool to help you manage your memory:
$ pebble build
Memory usage:
=============
Total app footprint in RAM:
822 bytes / ~24kb
Free RAM available (heap):
23754 bytes
!
$ pebble logs
...
[INFO
] I Heap Usage for <Template App>: Available <23200B> Used <2344B> Still allocated <0B>
SDK Overhaul

Migration in a nutshell

Use pebble convert-project to generate the new appinfo.json file
Rename pbl_main() into main()	
Use pointers to structures instead of statically allocated structures
Use the SDK APIs to allocate memory and initialize the structs
Check the other APIs for changes
Refer to Pebble 2.0 Migration Guide
http://developer.getpebble.com/2/guides/migration-guide.html
SDK Overhaul

Getting ready for bigger applications and
an evolving SDK
New Frameworks

Event Services

A unique design pattern that communicates
with Pebble OS subsystems
New Frameworks

Event Services

The App Focus Service lets you know when your app is covered by a
modal window

typedef void (*AppFocusHandler)(bool in_focus);	
!

void app_focus_service_subscribe(AppFocusHandler handler);	
void app_focus_service_unsubscribe();
New Frameworks

Event Services

The Bluetooth Connection Service lets you know when the watch is
connected to the phone

typedef void (*BluetoothConnectionHandler)(bool connected);	
void bluetooth_connection_service_subscribe(BluetoothConnectionHandler handler);	
void bluetooth_connection_service_unsubscribe(void);	
!

bool bluetooth_connection_service_peek(void);
New Frameworks

Event Services

The Battery State Service can let you know when the watch is plugged
or unplugged
typedef struct {	
uint8_t charge_percent;	
bool is_charging;	
bool is_plugged;	
} BatteryChargeState; 	
!

typedef void (*BatteryStateHandler)(BatteryChargeState charge);	
void battery_state_service_subscribe(BatteryStateHandler handler);	
void battery_state_service_unsubscribe();	
!

void battery_state_service_peek(void);
New Frameworks

Event Services

A unique design pattern that communicates
with Pebble OS subsystems
Bluetooth, App Focus, Battery Status

Refer to Pebble 2.0 Event Services Guide
http://developer.getpebble.com/2/guides/event-service-guide.html
New Frameworks

Accelerometer

Let’s shake things up ...
The Accelerometer framework is designed with all use cases in mind:
user interaction for watchfaces, games, activity monitor, etc
New Frameworks

Accelerometer

Hardware accelerometer
!

Able to detect taps
Perform measurements at a given frequency
Store samples to save CPU time
New Frameworks

Accelerometer

The simplest way to use the accelerometer is to register for tap events
Those events are generated by the hardware and use very little energy
void accel_tap_handler(AccelAxisType axism int32_t direction) {	
// Process tap on ACCEL_AXIS_X, ACCEL_AXIS_Y or ACCEL_AXIS_Z	
}	
!

void handle_init() {	
accel_tap_service_subscribe(&accel_tap_handler);	
}	
!

void handle_deinit() { accel_tap_service_unsubscribe(); }
New Frameworks

Accelerometer

You can register to receive raw events one at a time

void accel_data_handler(AccelData *data, uint32_t num_samples) {	
process_sample(&data);	
}	
!

void handle_init() {	
accel_data_service_subscribe(1, &accel_data_handler);	
}	
!

void handle_deinit() { accel_data_service_unsubscribe(); }
New Frameworks

Accelerometer

The accelerometer API also supports storing samples on the hardware
void accel_data_handler(AccelData *data, uint32_t num_samples) {	
// Process 10 events - every 1 second	
}	
!

void handle_init() {	
accel_data_service_subscribe(10, &accel_data_handler);	
accel_service_set_sampling_rate(ACCEL_SAMPLING_10HZ);	
}
New Frameworks

Accelerometer

You can also peek at the accelerometer when updating your UI
This is the strategy we recommend for game developers
void tick_handler() {	
AccelData data;	
accel_service_peek(&data);	
}	
!

void handle_init() {	
accel_data_service_subscribe(0, NULL);	
}	
void handle_deinit() { accel_data_service_unsubscribe(); };
New Frameworks

Accelerometer

The Accelerometer Service
Tap events - Regular measures - Batch processing - Real time processing

Refer to Pebble 2.0 Accelerometer Guide
http://developer.getpebble.com/2/guides/accelerometer.html
New Frameworks

Data Logging

A better way to transfer data
The data logging service is a transparent buffer between your watch
app and your phone that reliably and efficiently carries your data.
New Frameworks

Data Logging

Your watchapp creates one or multiple data logging sessions and
pushes data to those sessions.
Using PebbleKit iOS and Android, your mobile app gets events when
new data is available for download.
Your data is managed by Pebble OS: saved on the watch filesystem,
persisted if the user moves to another app, transferred in batches.
New Frameworks

Data Logging

You create a spool with a call to data_logging_create ()
DataSpoolRef my_data_spool;	
!

void handle_init() {	
logging_session = data_logging_create(	
/* tag */
42, 	
/* data type */ 	
DATA_LOGGING_BYTE_ARRAY,	
/* length */
sizeof(AccelData),	
/* resume */
true );	
}
New Frameworks

Data Logging

Use data_logging_log() to add data to the spool

void accel_data_handler(AccelData *data, uint32_t num_samples) {	
DataLoggingResult r = data_logging_log(logging_session, data, num_samples);	
}
New Frameworks

Data Logging

Finally, use data_logging_finish() when you are done

void handle_deinit() {	
data_logging_finish(logging_session);	
}
New Frameworks

Data Logging - iOS

You register to data spooling on iOS by providing a delegate to the
dataLoggingService

[[[PBPebbleCentral defaultCentral] dataLoggingService] setDelegate:self];
New Frameworks

Data Logging - iOS

The delegate implements methods to consume the data
- (BOOL)dataLoggingService:(PBDataLoggingService *)service 	
hasUInt32s:(const UInt32 [])data 	
numberOfItems:(UInt16)numberOfItems 	
forDataLoggingSession:(PBDataLoggingSessionMetadata *)sessionMetadata {	
// Return YES when the data has been processed.	
}	

!
- (void)dataLoggingService:(PBDataLoggingService *)service 	
sessionDidFinish:(PBDataLoggingSessionMetadata *)sessionMetadata {	
// Session closed.	
}
New Frameworks

Data Logging

A better way to transfer data
The data logging service is a transparent buffer between your watch
app and your phone that reliably and efficiently carries your data.

Refer to the Ocean Data Survey example
Examples/data-logging-demo
New Frameworks

Persistent Storage

Store data on the watch
Persistent storage is perfect to save user settings, cache
data from the phone app, high scores, etc
New Frameworks

Persistent Storage

Every application get its own persistent storage space. Its size is limited
to 4kB.
Each value is associated to a uint32_t

key.

Persistent storage supports saving integers, strings and byte arrays.
The maximum size of byte arrays and strings is defined by
PERSIST_DATA_MAX_LENGTH (currently set to 256 bytes)
New Frameworks

Persistent Storage

To write data in persistent storage, call one of the persist_write functions:
You should check the return value for error codes (anything but 0 is bad news)
void handle_deinit() {	
persist_write_bool(TRUTH_KEY, true);	
persist_write_int(DOUGLAS_KEY, 42);	
persist_write_string(USERNAME_KEY, “thomas”); 	
	
uint8_t byte_array[42];	
persist_write_data(DATA_KEY, sizeof(byte_array), byte_array);	
}
New Frameworks

Persistent Storage

The function persist_exists(key) returns a boolean indicating if the key
exists or not.
To read data from persistent storage, use the persist_read functions
void handle_init() {	
bool truth = persist_read_bool(TRUTH_KEY);	
int douglas_value = persist_read_int(DOUGLAS_KEY);	
	
char username[20];	
persist_read_string(USERNAME_KEY, 20, username);	
	
uint8_t byte_array[42];	
persist_read_data(DATA_KEY, sizeof(byte_array), byte_array);	
}
New Frameworks

Persistent Storage

You can use persist_delete() to remove a key from persistent storage
New Frameworks

Persistent Storage

Store data on the watch
Persistent storage is perfect to save user settings, cache
data from the phone app, high scores, etc

Refer to Pebble Persistent Storage Guide
http://developer.getpebble.com/2/guides/persistent-storage.html
New Frameworks

PebbleKit JavaScript

Expand the reach of your Pebble apps with
JavaScript logic running on the phone
Make http calls on the phone, process the reply and send
it to your watchapp.
Send notification. Use the phone GPS.
Use a webview in the phone to provide a configuration
screen to your application.
New Frameworks

PebbleKit JavaScript

Add a pebble-js-app.js file in your project
Or use pebble new-project --javascript
When Pebble mobile application installs your pbw,
the JS is extracted and saved on the phone.
Your JavaScript code is started with your
watchapp/watchface and will run as long as your
app is in the foreground on Pebble.
New Frameworks

PebbleKit JavaScript

Pebble sandbox provides API to receive messages from the watch,
make http requests, send new messages to the watch, etc.
On the watch, AppMessage APIs are used to receive and send data.
PebbleKit JS is completely independent of the platform (iOS, Android).
New Frameworks

PebbleKit JavaScript

The sandbox provides a Pebble.addEventListener function to register
for events.
A ‘ready’ event is fired when your JavaScript is ready to execute.
PebbleEventListener.addEventListener("ready",	
function(e) {	
startRemoteRequest();	
}	
});
New Frameworks

PebbleKit JavaScript

Your JavaScript code can send notifications to the watch:
Pebble.showSimpleNotificationOnPebble(title, text)

You can also use the standard console.log() calls to log messages to
the Pebble console.
New Frameworks

PebbleKit JavaScript

Your JS code can also process messages coming from the watch
through the ‘appmessage’ event.

PebbleEventListener.addEventListener("appmessage",	
function(e) {	
var temperatureRequest = e.payload.temperatureRequest;	
if (temperatureRequest) {	
fetchWeather();	
}	
});
New Frameworks

PebbleKit JavaScript

To send messages to the watch, use Pebble.sendAppMessage()
PebbleKit JS automatically transforms JS dictionaries to Pebble’s
Dictionary

Pebble.sendAppMessage({ "icon": ICON_SUNNY, "temperature": "28oC"});
New Frameworks

PebbleKit JavaScript

The Pebble JavaScript sandbox provides the standard XMLHttpRequest
method to make http calls.
var req = new XMLHttpRequest();	
req.open('GET', 'http://api.openweathermap.org/data/2.1/find/city?lat=37.830310&lon=-122.270831&cnt=1', true);	
req.onload = function(e) {	
if (req.readyState == 4 && req.status == 200) {	
if(req.status == 200) {	
var response = JSON.parse(req.responseText);	
var temperature = result.list[0].main.temp;	
var icon = result.list[0].main.icon;	
Pebble.sendAppMessage({ "icon":icon, "temperature":temperature + "u00B0C"});	
} else { console.log("Error"); }	
}	
}	
req.send(null);
New Frameworks

PebbleKit JavaScript

Pebble sandbox provides several standard APIs:
• HTML5 Geolocation API through navigator.geolocation
• Local Storage APIs through window.localStorage
New Frameworks

PebbleKit JavaScript

Your application can show a Configure button on the phone screen
When the user clicks on this button, the configure event is fired
The html page can return information:
document.location.href = “pebblejs:///close#some-data-set”
Pebble.addEventListener("showConfiguration", function() {	
console.log("showing configuration");	
Pebble.openURL('http://assets.getpebble.com.s3-website-us-east-1.amazonaws.com/pebble-js/configurable.html');	
});	
Pebble.addEventListener("webviewclosed", function(e) {	
console.log("configuration closed");	
});
New Frameworks

PebbleKit JavaScript

Expand the reach of your watchapp with
JavaScript logic running on the phone
Make http calls on the phone, process the reply and send
it to your watchapp.
Send notification. Use the phone GPS.
Use a webview in the phone to provide a configuration
screen to your application.

Refer to Pebble JavaScript Guide
http://developer.getpebble.com/2/guides/javascript-guide.html
WRAPPING UP
Updated Tools

SDK Overhaul

New Frameworks

Cloud Pebble

App Metadata

Event Service

pebble

Following Standards

Accelerometer

Developer Connection

Events based APIs

Data Logging

Application logs

Dynamic Memory

Persistent Storage

Documentation

2.0 Migration Guide

PebbleKit JS
Downloading the new SDK
!

Available now on http://developer.getpebble.com/2/
ENJOY!

Questions?
!

#pebble on irc.freenode.net
AMA on reddit

Weitere ähnliche Inhalte

Was ist angesagt? (20)

MVC ppt presentation
MVC ppt presentationMVC ppt presentation
MVC ppt presentation
 
Introduction to mvc architecture
Introduction to mvc architectureIntroduction to mvc architecture
Introduction to mvc architecture
 
What is MVC?
What is MVC?What is MVC?
What is MVC?
 
Why MVC?
Why MVC?Why MVC?
Why MVC?
 
Why Use MVC?
Why Use MVC?Why Use MVC?
Why Use MVC?
 
MVC
MVCMVC
MVC
 
MVC Framework
MVC FrameworkMVC Framework
MVC Framework
 
Model view controller (mvc)
Model view controller (mvc)Model view controller (mvc)
Model view controller (mvc)
 
Slide Presentation of MVP Pattern Concept
Slide Presentation of MVP Pattern ConceptSlide Presentation of MVP Pattern Concept
Slide Presentation of MVP Pattern Concept
 
Mvc fundamental
Mvc fundamentalMvc fundamental
Mvc fundamental
 
MVVM with WPF
MVVM with WPFMVVM with WPF
MVVM with WPF
 
MVC architecture
MVC architectureMVC architecture
MVC architecture
 
Learning AngularJS - Complete coverage of AngularJS features and concepts
Learning AngularJS  - Complete coverage of AngularJS features and conceptsLearning AngularJS  - Complete coverage of AngularJS features and concepts
Learning AngularJS - Complete coverage of AngularJS features and concepts
 
Ppt of Basic MVC Structure
Ppt of Basic MVC StructurePpt of Basic MVC Structure
Ppt of Basic MVC Structure
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
MVC
MVCMVC
MVC
 
MVC Architecture in ASP.Net By Nyros Developer
MVC Architecture in ASP.Net By Nyros DeveloperMVC Architecture in ASP.Net By Nyros Developer
MVC Architecture in ASP.Net By Nyros Developer
 
ASP .Net MVC 5
ASP .Net MVC 5ASP .Net MVC 5
ASP .Net MVC 5
 
Model View Presenter (MVP) In Aspnet
Model View Presenter (MVP) In AspnetModel View Presenter (MVP) In Aspnet
Model View Presenter (MVP) In Aspnet
 
MVC Architecture
MVC ArchitectureMVC Architecture
MVC Architecture
 

Ähnlich wie Introducing Pebble SDK 2.0

Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015Microsoft
 
Node.js primer for ITE students
Node.js primer for ITE studentsNode.js primer for ITE students
Node.js primer for ITE studentsQuhan Arunasalam
 
The App Developer's Kubernetes Toolbox
The App Developer's Kubernetes ToolboxThe App Developer's Kubernetes Toolbox
The App Developer's Kubernetes ToolboxNebulaworks
 
Ultimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on KubernetesUltimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on Kuberneteskloia
 
[Nuxeo World 2013] Roadmap 2014 - Technical Part
[Nuxeo World 2013] Roadmap 2014 - Technical Part [Nuxeo World 2013] Roadmap 2014 - Technical Part
[Nuxeo World 2013] Roadmap 2014 - Technical Part Nuxeo
 
Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3Bruce Pentreath
 
Rome .NET Conference 2024 - Remote Conference
Rome .NET Conference 2024  - Remote ConferenceRome .NET Conference 2024  - Remote Conference
Rome .NET Conference 2024 - Remote ConferenceHamida Rebai Trabelsi
 
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...Anil Sharma
 
Build Event-Driven Microservices with Confluent Cloud Workshop #1
Build Event-Driven Microservices with Confluent Cloud Workshop #1Build Event-Driven Microservices with Confluent Cloud Workshop #1
Build Event-Driven Microservices with Confluent Cloud Workshop #1confluent
 
Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0Steven Smith
 
Background Tasks with Worker Service
Background Tasks with Worker ServiceBackground Tasks with Worker Service
Background Tasks with Worker Servicessusere19c741
 
.NET Core Apps: Design & Development
.NET Core Apps: Design & Development.NET Core Apps: Design & Development
.NET Core Apps: Design & DevelopmentGlobalLogic Ukraine
 
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...Lightbend
 
04_Azure Kubernetes Service: Basic Practices for Developers_GAB2019
04_Azure Kubernetes Service: Basic Practices for Developers_GAB201904_Azure Kubernetes Service: Basic Practices for Developers_GAB2019
04_Azure Kubernetes Service: Basic Practices for Developers_GAB2019Kumton Suttiraksiri
 
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 RICOH THETA x IoT Developers Contest : Cloud API Seminar RICOH THETA x IoT Developers Contest : Cloud API Seminar
RICOH THETA x IoT Developers Contest : Cloud API Seminarcontest-theta360
 
Pivotal Cloud Foundry 2.5: A First Look
Pivotal Cloud Foundry 2.5: A First LookPivotal Cloud Foundry 2.5: A First Look
Pivotal Cloud Foundry 2.5: A First LookVMware Tanzu
 

Ähnlich wie Introducing Pebble SDK 2.0 (20)

Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015
 
Node.js primer for ITE students
Node.js primer for ITE studentsNode.js primer for ITE students
Node.js primer for ITE students
 
The App Developer's Kubernetes Toolbox
The App Developer's Kubernetes ToolboxThe App Developer's Kubernetes Toolbox
The App Developer's Kubernetes Toolbox
 
Ultimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on KubernetesUltimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on Kubernetes
 
[Nuxeo World 2013] Roadmap 2014 - Technical Part
[Nuxeo World 2013] Roadmap 2014 - Technical Part [Nuxeo World 2013] Roadmap 2014 - Technical Part
[Nuxeo World 2013] Roadmap 2014 - Technical Part
 
Angular 2.0
Angular  2.0Angular  2.0
Angular 2.0
 
Sst hackathon express
Sst hackathon expressSst hackathon express
Sst hackathon express
 
Stmik bandung
Stmik bandungStmik bandung
Stmik bandung
 
Pebble Watch Development
Pebble Watch DevelopmentPebble Watch Development
Pebble Watch Development
 
Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3
 
Rome .NET Conference 2024 - Remote Conference
Rome .NET Conference 2024  - Remote ConferenceRome .NET Conference 2024  - Remote Conference
Rome .NET Conference 2024 - Remote Conference
 
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...
 
Build Event-Driven Microservices with Confluent Cloud Workshop #1
Build Event-Driven Microservices with Confluent Cloud Workshop #1Build Event-Driven Microservices with Confluent Cloud Workshop #1
Build Event-Driven Microservices with Confluent Cloud Workshop #1
 
Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0
 
Background Tasks with Worker Service
Background Tasks with Worker ServiceBackground Tasks with Worker Service
Background Tasks with Worker Service
 
.NET Core Apps: Design & Development
.NET Core Apps: Design & Development.NET Core Apps: Design & Development
.NET Core Apps: Design & Development
 
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...
 
04_Azure Kubernetes Service: Basic Practices for Developers_GAB2019
04_Azure Kubernetes Service: Basic Practices for Developers_GAB201904_Azure Kubernetes Service: Basic Practices for Developers_GAB2019
04_Azure Kubernetes Service: Basic Practices for Developers_GAB2019
 
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 RICOH THETA x IoT Developers Contest : Cloud API Seminar RICOH THETA x IoT Developers Contest : Cloud API Seminar
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 
Pivotal Cloud Foundry 2.5: A First Look
Pivotal Cloud Foundry 2.5: A First LookPivotal Cloud Foundry 2.5: A First Look
Pivotal Cloud Foundry 2.5: A First Look
 

Kürzlich hochgeladen

Beautiful Sapna Call Girls CP 9711199012 ☎ Call /Whatsapps
Beautiful Sapna Call Girls CP 9711199012 ☎ Call /WhatsappsBeautiful Sapna Call Girls CP 9711199012 ☎ Call /Whatsapps
Beautiful Sapna Call Girls CP 9711199012 ☎ Call /Whatsappssapnasaifi408
 
(MEGHA) Hinjewadi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune E...
(MEGHA) Hinjewadi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune E...(MEGHA) Hinjewadi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune E...
(MEGHA) Hinjewadi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune E...ranjana rawat
 
9004554577, Get Adorable Call Girls service. Book call girls & escort service...
9004554577, Get Adorable Call Girls service. Book call girls & escort service...9004554577, Get Adorable Call Girls service. Book call girls & escort service...
9004554577, Get Adorable Call Girls service. Book call girls & escort service...Pooja Nehwal
 
VIP Call Girls Kavuri Hills ( Hyderabad ) Phone 8250192130 | ₹5k To 25k With ...
VIP Call Girls Kavuri Hills ( Hyderabad ) Phone 8250192130 | ₹5k To 25k With ...VIP Call Girls Kavuri Hills ( Hyderabad ) Phone 8250192130 | ₹5k To 25k With ...
VIP Call Girls Kavuri Hills ( Hyderabad ) Phone 8250192130 | ₹5k To 25k With ...Suhani Kapoor
 
原版制作美国天普大学毕业证(本硕)tu毕业证明原版一模一样
原版制作美国天普大学毕业证(本硕)tu毕业证明原版一模一样原版制作美国天普大学毕业证(本硕)tu毕业证明原版一模一样
原版制作美国天普大学毕业证(本硕)tu毕业证明原版一模一样qaffana
 
VVIP Pune Call Girls Warje (7001035870) Pune Escorts Nearby with Complete Sat...
VVIP Pune Call Girls Warje (7001035870) Pune Escorts Nearby with Complete Sat...VVIP Pune Call Girls Warje (7001035870) Pune Escorts Nearby with Complete Sat...
VVIP Pune Call Girls Warje (7001035870) Pune Escorts Nearby with Complete Sat...Call Girls in Nagpur High Profile
 
Lucknow 💋 Call Girls Adil Nagar | ₹,9500 Pay Cash 8923113531 Free Home Delive...
Lucknow 💋 Call Girls Adil Nagar | ₹,9500 Pay Cash 8923113531 Free Home Delive...Lucknow 💋 Call Girls Adil Nagar | ₹,9500 Pay Cash 8923113531 Free Home Delive...
Lucknow 💋 Call Girls Adil Nagar | ₹,9500 Pay Cash 8923113531 Free Home Delive...anilsa9823
 
哪里办理美国宾夕法尼亚州立大学毕业证(本硕)psu成绩单原版一模一样
哪里办理美国宾夕法尼亚州立大学毕业证(本硕)psu成绩单原版一模一样哪里办理美国宾夕法尼亚州立大学毕业证(本硕)psu成绩单原版一模一样
哪里办理美国宾夕法尼亚州立大学毕业证(本硕)psu成绩单原版一模一样qaffana
 
VVIP Pune Call Girls Balaji Nagar (7001035870) Pune Escorts Nearby with Compl...
VVIP Pune Call Girls Balaji Nagar (7001035870) Pune Escorts Nearby with Compl...VVIP Pune Call Girls Balaji Nagar (7001035870) Pune Escorts Nearby with Compl...
VVIP Pune Call Girls Balaji Nagar (7001035870) Pune Escorts Nearby with Compl...Call Girls in Nagpur High Profile
 
Call Girls Delhi {Rs-10000 Laxmi Nagar] 9711199012 Whats Up Number
Call Girls Delhi {Rs-10000 Laxmi Nagar] 9711199012 Whats Up NumberCall Girls Delhi {Rs-10000 Laxmi Nagar] 9711199012 Whats Up Number
Call Girls Delhi {Rs-10000 Laxmi Nagar] 9711199012 Whats Up NumberMs Riya
 
Presentation.pptxjnfoigneoifnvoeifnvklfnvf
Presentation.pptxjnfoigneoifnvoeifnvklfnvfPresentation.pptxjnfoigneoifnvoeifnvklfnvf
Presentation.pptxjnfoigneoifnvoeifnvklfnvfchapmanellie27
 
定制加拿大滑铁卢大学毕业证(Waterloo毕业证书)成绩单(文凭)原版一比一
定制加拿大滑铁卢大学毕业证(Waterloo毕业证书)成绩单(文凭)原版一比一定制加拿大滑铁卢大学毕业证(Waterloo毕业证书)成绩单(文凭)原版一比一
定制加拿大滑铁卢大学毕业证(Waterloo毕业证书)成绩单(文凭)原版一比一zul5vf0pq
 
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一定制(UI学位证)爱达荷大学毕业证成绩单原版一比一
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一ss ss
 
(PARI) Alandi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(PARI) Alandi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(PARI) Alandi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(PARI) Alandi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escortsranjana rawat
 
(SANA) Call Girls Landewadi ( 7001035870 ) HI-Fi Pune Escorts Service
(SANA) Call Girls Landewadi ( 7001035870 ) HI-Fi Pune Escorts Service(SANA) Call Girls Landewadi ( 7001035870 ) HI-Fi Pune Escorts Service
(SANA) Call Girls Landewadi ( 7001035870 ) HI-Fi Pune Escorts Serviceranjana rawat
 
定制(USF学位证)旧金山大学毕业证成绩单原版一比一
定制(USF学位证)旧金山大学毕业证成绩单原版一比一定制(USF学位证)旧金山大学毕业证成绩单原版一比一
定制(USF学位证)旧金山大学毕业证成绩单原版一比一ss ss
 
Gaya Call Girls #9907093804 Contact Number Escorts Service Gaya
Gaya Call Girls #9907093804 Contact Number Escorts Service GayaGaya Call Girls #9907093804 Contact Number Escorts Service Gaya
Gaya Call Girls #9907093804 Contact Number Escorts Service Gayasrsj9000
 
High Profile Call Girls In Andheri 7738631006 Call girls in mumbai Mumbai ...
High Profile Call Girls In Andheri 7738631006 Call girls in mumbai  Mumbai ...High Profile Call Girls In Andheri 7738631006 Call girls in mumbai  Mumbai ...
High Profile Call Girls In Andheri 7738631006 Call girls in mumbai Mumbai ...Pooja Nehwal
 
《伯明翰城市大学毕业证成绩单购买》学历证书学位证书区别《复刻原版1:1伯明翰城市大学毕业证书|修改BCU成绩单PDF版》Q微信741003700《BCU学...
《伯明翰城市大学毕业证成绩单购买》学历证书学位证书区别《复刻原版1:1伯明翰城市大学毕业证书|修改BCU成绩单PDF版》Q微信741003700《BCU学...《伯明翰城市大学毕业证成绩单购买》学历证书学位证书区别《复刻原版1:1伯明翰城市大学毕业证书|修改BCU成绩单PDF版》Q微信741003700《BCU学...
《伯明翰城市大学毕业证成绩单购买》学历证书学位证书区别《复刻原版1:1伯明翰城市大学毕业证书|修改BCU成绩单PDF版》Q微信741003700《BCU学...ur8mqw8e
 

Kürzlich hochgeladen (20)

Beautiful Sapna Call Girls CP 9711199012 ☎ Call /Whatsapps
Beautiful Sapna Call Girls CP 9711199012 ☎ Call /WhatsappsBeautiful Sapna Call Girls CP 9711199012 ☎ Call /Whatsapps
Beautiful Sapna Call Girls CP 9711199012 ☎ Call /Whatsapps
 
(MEGHA) Hinjewadi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune E...
(MEGHA) Hinjewadi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune E...(MEGHA) Hinjewadi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune E...
(MEGHA) Hinjewadi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune E...
 
9004554577, Get Adorable Call Girls service. Book call girls & escort service...
9004554577, Get Adorable Call Girls service. Book call girls & escort service...9004554577, Get Adorable Call Girls service. Book call girls & escort service...
9004554577, Get Adorable Call Girls service. Book call girls & escort service...
 
VIP Call Girls Kavuri Hills ( Hyderabad ) Phone 8250192130 | ₹5k To 25k With ...
VIP Call Girls Kavuri Hills ( Hyderabad ) Phone 8250192130 | ₹5k To 25k With ...VIP Call Girls Kavuri Hills ( Hyderabad ) Phone 8250192130 | ₹5k To 25k With ...
VIP Call Girls Kavuri Hills ( Hyderabad ) Phone 8250192130 | ₹5k To 25k With ...
 
原版制作美国天普大学毕业证(本硕)tu毕业证明原版一模一样
原版制作美国天普大学毕业证(本硕)tu毕业证明原版一模一样原版制作美国天普大学毕业证(本硕)tu毕业证明原版一模一样
原版制作美国天普大学毕业证(本硕)tu毕业证明原版一模一样
 
VVIP Pune Call Girls Warje (7001035870) Pune Escorts Nearby with Complete Sat...
VVIP Pune Call Girls Warje (7001035870) Pune Escorts Nearby with Complete Sat...VVIP Pune Call Girls Warje (7001035870) Pune Escorts Nearby with Complete Sat...
VVIP Pune Call Girls Warje (7001035870) Pune Escorts Nearby with Complete Sat...
 
Lucknow 💋 Call Girls Adil Nagar | ₹,9500 Pay Cash 8923113531 Free Home Delive...
Lucknow 💋 Call Girls Adil Nagar | ₹,9500 Pay Cash 8923113531 Free Home Delive...Lucknow 💋 Call Girls Adil Nagar | ₹,9500 Pay Cash 8923113531 Free Home Delive...
Lucknow 💋 Call Girls Adil Nagar | ₹,9500 Pay Cash 8923113531 Free Home Delive...
 
哪里办理美国宾夕法尼亚州立大学毕业证(本硕)psu成绩单原版一模一样
哪里办理美国宾夕法尼亚州立大学毕业证(本硕)psu成绩单原版一模一样哪里办理美国宾夕法尼亚州立大学毕业证(本硕)psu成绩单原版一模一样
哪里办理美国宾夕法尼亚州立大学毕业证(本硕)psu成绩单原版一模一样
 
VVIP Pune Call Girls Balaji Nagar (7001035870) Pune Escorts Nearby with Compl...
VVIP Pune Call Girls Balaji Nagar (7001035870) Pune Escorts Nearby with Compl...VVIP Pune Call Girls Balaji Nagar (7001035870) Pune Escorts Nearby with Compl...
VVIP Pune Call Girls Balaji Nagar (7001035870) Pune Escorts Nearby with Compl...
 
Call Girls Delhi {Rs-10000 Laxmi Nagar] 9711199012 Whats Up Number
Call Girls Delhi {Rs-10000 Laxmi Nagar] 9711199012 Whats Up NumberCall Girls Delhi {Rs-10000 Laxmi Nagar] 9711199012 Whats Up Number
Call Girls Delhi {Rs-10000 Laxmi Nagar] 9711199012 Whats Up Number
 
🔝 9953056974🔝 Delhi Call Girls in Ajmeri Gate
🔝 9953056974🔝 Delhi Call Girls in Ajmeri Gate🔝 9953056974🔝 Delhi Call Girls in Ajmeri Gate
🔝 9953056974🔝 Delhi Call Girls in Ajmeri Gate
 
Presentation.pptxjnfoigneoifnvoeifnvklfnvf
Presentation.pptxjnfoigneoifnvoeifnvklfnvfPresentation.pptxjnfoigneoifnvoeifnvklfnvf
Presentation.pptxjnfoigneoifnvoeifnvklfnvf
 
定制加拿大滑铁卢大学毕业证(Waterloo毕业证书)成绩单(文凭)原版一比一
定制加拿大滑铁卢大学毕业证(Waterloo毕业证书)成绩单(文凭)原版一比一定制加拿大滑铁卢大学毕业证(Waterloo毕业证书)成绩单(文凭)原版一比一
定制加拿大滑铁卢大学毕业证(Waterloo毕业证书)成绩单(文凭)原版一比一
 
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一定制(UI学位证)爱达荷大学毕业证成绩单原版一比一
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一
 
(PARI) Alandi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(PARI) Alandi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(PARI) Alandi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(PARI) Alandi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
 
(SANA) Call Girls Landewadi ( 7001035870 ) HI-Fi Pune Escorts Service
(SANA) Call Girls Landewadi ( 7001035870 ) HI-Fi Pune Escorts Service(SANA) Call Girls Landewadi ( 7001035870 ) HI-Fi Pune Escorts Service
(SANA) Call Girls Landewadi ( 7001035870 ) HI-Fi Pune Escorts Service
 
定制(USF学位证)旧金山大学毕业证成绩单原版一比一
定制(USF学位证)旧金山大学毕业证成绩单原版一比一定制(USF学位证)旧金山大学毕业证成绩单原版一比一
定制(USF学位证)旧金山大学毕业证成绩单原版一比一
 
Gaya Call Girls #9907093804 Contact Number Escorts Service Gaya
Gaya Call Girls #9907093804 Contact Number Escorts Service GayaGaya Call Girls #9907093804 Contact Number Escorts Service Gaya
Gaya Call Girls #9907093804 Contact Number Escorts Service Gaya
 
High Profile Call Girls In Andheri 7738631006 Call girls in mumbai Mumbai ...
High Profile Call Girls In Andheri 7738631006 Call girls in mumbai  Mumbai ...High Profile Call Girls In Andheri 7738631006 Call girls in mumbai  Mumbai ...
High Profile Call Girls In Andheri 7738631006 Call girls in mumbai Mumbai ...
 
《伯明翰城市大学毕业证成绩单购买》学历证书学位证书区别《复刻原版1:1伯明翰城市大学毕业证书|修改BCU成绩单PDF版》Q微信741003700《BCU学...
《伯明翰城市大学毕业证成绩单购买》学历证书学位证书区别《复刻原版1:1伯明翰城市大学毕业证书|修改BCU成绩单PDF版》Q微信741003700《BCU学...《伯明翰城市大学毕业证成绩单购买》学历证书学位证书区别《复刻原版1:1伯明翰城市大学毕业证书|修改BCU成绩单PDF版》Q微信741003700《BCU学...
《伯明翰城市大学毕业证成绩单购买》学历证书学位证书区别《复刻原版1:1伯明翰城市大学毕业证书|修改BCU成绩单PDF版》Q微信741003700《BCU学...
 

Introducing Pebble SDK 2.0

  • 2. A MAJOR UPDATE New Tools SDK Overhaul New APIs
  • 3. Introducing Pebble SDK 2.0 If you are watching live, you can ask questions On our IRC channel: #pebble on irc.freenode.net During our AMA on Reddit at 12pm PST today This is recorded and will be available on our YouTube channel and on the developer web site Friendly warning: This presentation is mostly intended for developers
  • 4. New Tools Improving the developer experience CloudPebble Simplified build system Deploying from the command line Application logs Documentation
  • 5. New Tools CloudPebble Now open-sourced and hosted by Pebble Technology
  • 6. New Tools CloudPebble No installation - From zero to first installed app in 60 seconds
  • 7. New Tools Simplified build system One tool for all your Pebble development
  • 8. New Tools Simplified build system $ pebble new-project helloworld Creating new project hello-world $ cd helloworld $ pebble build Memory usage: ============= Total app footprint in RAM: 822 bytes / ~24kb Free RAM available (heap): 23754 bytes 'build' finished successfully (0.351s)
  • 9. New Tools Developer Connection Use the Pebble mobile application to install and debug apps.
  • 10. New Tools Developer Connection $ export PEBBLE_PHONE=192.168.1.42 $ pebble install --logs [INFO [INFO [INFO [INFO ] ] ] ] Installation successful Enabling application logging... Displaying logs ... Ctrl-C to interrupt. D helloworld.c:58 Done initializing A very simple and reliable way to install and watch log messages
  • 11. New Tools Documentation We have re-written almost all of Pebble Documentation Pebble documentation now includes: • A Getting Started Guide • Pebble Developer Guide with 11 chapters • Pebble Mobile Developer Guide • Pebble 2.0 Migration Guide • API Reference for Pebble, iOS and Android
  • 12. New Tools Improving the developer experience CloudPebble Simplified build system Deploying from the command line Application logs Documentation
  • 13. SDK Overhaul Getting ready for bigger applications and an evolving SDK
  • 14. SDK Overhaul Migrating to Pebble 2.0 Pebble 2.0 is a major evolution of Pebble 1.0 with lots of changes in the system and in the SDK • Pebble 2.0 is not compatible with 1.0 apps • Developers need to migrate their application to Pebble 2.0 Refer to Pebble 2.0 Migration Guide http://developer.getpebble.com/2/guides/migration-guide.html
  • 15. SDK Overhaul Pebble application must provide some metadata through a JSON file in the project called appinfo.json • Application name • UUID • Watchface / Watchapp • Resources • etc Application metadata
  • 16. SDK Overhaul Using pointers and dynamic memory In Pebble OS 2.0, all the SDK structures are opaque. This means we can change them without you having to recompile your apps. You cannot allocate structures as global variables as you did in 1.0. You must use pointers and memory allocated dynamically by the system. All calls to _init() functions become are replaced by _create() calls Window my_window; window_init(&my_window); becomes Window *my_window; my_window = window_create();
  • 17. SDK Overhaul Getting closer to standards: C/UNIX • pbl_main() is now called main() • PblTm is replaced by struct tm • string_format_time() is replaced by strftime() • Pebble does not support timezones yet but we introduce gmtime() and localtime() to prepare for timezone support. • get_time() is replaced by localtime(time(NULL))
  • 18. SDK Overhaul Enforcing a subscription based Event system Pebble 2.0 relies heavily on Events. You register to events with _register functions. All Pebble 1.x APIs have been updated: Timer, Tick, AppMessage, etc PebbleAppHandlers handlers = { .timer_handler = &handle_timer }; becomes timer = app_timer_register(1500, timer_callback, NULL);
  • 19. SDK Overhaul Dynamic Memory Introducing two old friends: malloc() and free() Each application has it’s own heap and is cleaned automatically You can attach data to layers and windows (layer_create_with_data() and window_set_user_data()) Your total memory is ~24k. Your heap space is 24k minus app size. Pebble SDK includes tool to help you manage your memory: $ pebble build Memory usage: ============= Total app footprint in RAM: 822 bytes / ~24kb Free RAM available (heap): 23754 bytes ! $ pebble logs ... [INFO ] I Heap Usage for <Template App>: Available <23200B> Used <2344B> Still allocated <0B>
  • 20. SDK Overhaul Migration in a nutshell Use pebble convert-project to generate the new appinfo.json file Rename pbl_main() into main() Use pointers to structures instead of statically allocated structures Use the SDK APIs to allocate memory and initialize the structs Check the other APIs for changes Refer to Pebble 2.0 Migration Guide http://developer.getpebble.com/2/guides/migration-guide.html
  • 21. SDK Overhaul Getting ready for bigger applications and an evolving SDK
  • 22. New Frameworks Event Services A unique design pattern that communicates with Pebble OS subsystems
  • 23. New Frameworks Event Services The App Focus Service lets you know when your app is covered by a modal window typedef void (*AppFocusHandler)(bool in_focus); ! void app_focus_service_subscribe(AppFocusHandler handler); void app_focus_service_unsubscribe();
  • 24. New Frameworks Event Services The Bluetooth Connection Service lets you know when the watch is connected to the phone typedef void (*BluetoothConnectionHandler)(bool connected); void bluetooth_connection_service_subscribe(BluetoothConnectionHandler handler); void bluetooth_connection_service_unsubscribe(void); ! bool bluetooth_connection_service_peek(void);
  • 25. New Frameworks Event Services The Battery State Service can let you know when the watch is plugged or unplugged typedef struct { uint8_t charge_percent; bool is_charging; bool is_plugged; } BatteryChargeState; ! typedef void (*BatteryStateHandler)(BatteryChargeState charge); void battery_state_service_subscribe(BatteryStateHandler handler); void battery_state_service_unsubscribe(); ! void battery_state_service_peek(void);
  • 26. New Frameworks Event Services A unique design pattern that communicates with Pebble OS subsystems Bluetooth, App Focus, Battery Status Refer to Pebble 2.0 Event Services Guide http://developer.getpebble.com/2/guides/event-service-guide.html
  • 27. New Frameworks Accelerometer Let’s shake things up ... The Accelerometer framework is designed with all use cases in mind: user interaction for watchfaces, games, activity monitor, etc
  • 28. New Frameworks Accelerometer Hardware accelerometer ! Able to detect taps Perform measurements at a given frequency Store samples to save CPU time
  • 29. New Frameworks Accelerometer The simplest way to use the accelerometer is to register for tap events Those events are generated by the hardware and use very little energy void accel_tap_handler(AccelAxisType axism int32_t direction) { // Process tap on ACCEL_AXIS_X, ACCEL_AXIS_Y or ACCEL_AXIS_Z } ! void handle_init() { accel_tap_service_subscribe(&accel_tap_handler); } ! void handle_deinit() { accel_tap_service_unsubscribe(); }
  • 30. New Frameworks Accelerometer You can register to receive raw events one at a time void accel_data_handler(AccelData *data, uint32_t num_samples) { process_sample(&data); } ! void handle_init() { accel_data_service_subscribe(1, &accel_data_handler); } ! void handle_deinit() { accel_data_service_unsubscribe(); }
  • 31. New Frameworks Accelerometer The accelerometer API also supports storing samples on the hardware void accel_data_handler(AccelData *data, uint32_t num_samples) { // Process 10 events - every 1 second } ! void handle_init() { accel_data_service_subscribe(10, &accel_data_handler); accel_service_set_sampling_rate(ACCEL_SAMPLING_10HZ); }
  • 32. New Frameworks Accelerometer You can also peek at the accelerometer when updating your UI This is the strategy we recommend for game developers void tick_handler() { AccelData data; accel_service_peek(&data); } ! void handle_init() { accel_data_service_subscribe(0, NULL); } void handle_deinit() { accel_data_service_unsubscribe(); };
  • 33. New Frameworks Accelerometer The Accelerometer Service Tap events - Regular measures - Batch processing - Real time processing Refer to Pebble 2.0 Accelerometer Guide http://developer.getpebble.com/2/guides/accelerometer.html
  • 34. New Frameworks Data Logging A better way to transfer data The data logging service is a transparent buffer between your watch app and your phone that reliably and efficiently carries your data.
  • 35. New Frameworks Data Logging Your watchapp creates one or multiple data logging sessions and pushes data to those sessions. Using PebbleKit iOS and Android, your mobile app gets events when new data is available for download. Your data is managed by Pebble OS: saved on the watch filesystem, persisted if the user moves to another app, transferred in batches.
  • 36. New Frameworks Data Logging You create a spool with a call to data_logging_create () DataSpoolRef my_data_spool; ! void handle_init() { logging_session = data_logging_create( /* tag */ 42, /* data type */ DATA_LOGGING_BYTE_ARRAY, /* length */ sizeof(AccelData), /* resume */ true ); }
  • 37. New Frameworks Data Logging Use data_logging_log() to add data to the spool void accel_data_handler(AccelData *data, uint32_t num_samples) { DataLoggingResult r = data_logging_log(logging_session, data, num_samples); }
  • 38. New Frameworks Data Logging Finally, use data_logging_finish() when you are done void handle_deinit() { data_logging_finish(logging_session); }
  • 39. New Frameworks Data Logging - iOS You register to data spooling on iOS by providing a delegate to the dataLoggingService [[[PBPebbleCentral defaultCentral] dataLoggingService] setDelegate:self];
  • 40. New Frameworks Data Logging - iOS The delegate implements methods to consume the data - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt32s:(const UInt32 [])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)sessionMetadata { // Return YES when the data has been processed. } ! - (void)dataLoggingService:(PBDataLoggingService *)service sessionDidFinish:(PBDataLoggingSessionMetadata *)sessionMetadata { // Session closed. }
  • 41. New Frameworks Data Logging A better way to transfer data The data logging service is a transparent buffer between your watch app and your phone that reliably and efficiently carries your data. Refer to the Ocean Data Survey example Examples/data-logging-demo
  • 42. New Frameworks Persistent Storage Store data on the watch Persistent storage is perfect to save user settings, cache data from the phone app, high scores, etc
  • 43. New Frameworks Persistent Storage Every application get its own persistent storage space. Its size is limited to 4kB. Each value is associated to a uint32_t key. Persistent storage supports saving integers, strings and byte arrays. The maximum size of byte arrays and strings is defined by PERSIST_DATA_MAX_LENGTH (currently set to 256 bytes)
  • 44. New Frameworks Persistent Storage To write data in persistent storage, call one of the persist_write functions: You should check the return value for error codes (anything but 0 is bad news) void handle_deinit() { persist_write_bool(TRUTH_KEY, true); persist_write_int(DOUGLAS_KEY, 42); persist_write_string(USERNAME_KEY, “thomas”); uint8_t byte_array[42]; persist_write_data(DATA_KEY, sizeof(byte_array), byte_array); }
  • 45. New Frameworks Persistent Storage The function persist_exists(key) returns a boolean indicating if the key exists or not. To read data from persistent storage, use the persist_read functions void handle_init() { bool truth = persist_read_bool(TRUTH_KEY); int douglas_value = persist_read_int(DOUGLAS_KEY); char username[20]; persist_read_string(USERNAME_KEY, 20, username); uint8_t byte_array[42]; persist_read_data(DATA_KEY, sizeof(byte_array), byte_array); }
  • 46. New Frameworks Persistent Storage You can use persist_delete() to remove a key from persistent storage
  • 47. New Frameworks Persistent Storage Store data on the watch Persistent storage is perfect to save user settings, cache data from the phone app, high scores, etc Refer to Pebble Persistent Storage Guide http://developer.getpebble.com/2/guides/persistent-storage.html
  • 48. New Frameworks PebbleKit JavaScript Expand the reach of your Pebble apps with JavaScript logic running on the phone Make http calls on the phone, process the reply and send it to your watchapp. Send notification. Use the phone GPS. Use a webview in the phone to provide a configuration screen to your application.
  • 49. New Frameworks PebbleKit JavaScript Add a pebble-js-app.js file in your project Or use pebble new-project --javascript When Pebble mobile application installs your pbw, the JS is extracted and saved on the phone. Your JavaScript code is started with your watchapp/watchface and will run as long as your app is in the foreground on Pebble.
  • 50. New Frameworks PebbleKit JavaScript Pebble sandbox provides API to receive messages from the watch, make http requests, send new messages to the watch, etc. On the watch, AppMessage APIs are used to receive and send data. PebbleKit JS is completely independent of the platform (iOS, Android).
  • 51. New Frameworks PebbleKit JavaScript The sandbox provides a Pebble.addEventListener function to register for events. A ‘ready’ event is fired when your JavaScript is ready to execute. PebbleEventListener.addEventListener("ready", function(e) { startRemoteRequest(); } });
  • 52. New Frameworks PebbleKit JavaScript Your JavaScript code can send notifications to the watch: Pebble.showSimpleNotificationOnPebble(title, text) You can also use the standard console.log() calls to log messages to the Pebble console.
  • 53. New Frameworks PebbleKit JavaScript Your JS code can also process messages coming from the watch through the ‘appmessage’ event. PebbleEventListener.addEventListener("appmessage", function(e) { var temperatureRequest = e.payload.temperatureRequest; if (temperatureRequest) { fetchWeather(); } });
  • 54. New Frameworks PebbleKit JavaScript To send messages to the watch, use Pebble.sendAppMessage() PebbleKit JS automatically transforms JS dictionaries to Pebble’s Dictionary Pebble.sendAppMessage({ "icon": ICON_SUNNY, "temperature": "28oC"});
  • 55. New Frameworks PebbleKit JavaScript The Pebble JavaScript sandbox provides the standard XMLHttpRequest method to make http calls. var req = new XMLHttpRequest(); req.open('GET', 'http://api.openweathermap.org/data/2.1/find/city?lat=37.830310&lon=-122.270831&cnt=1', true); req.onload = function(e) { if (req.readyState == 4 && req.status == 200) { if(req.status == 200) { var response = JSON.parse(req.responseText); var temperature = result.list[0].main.temp; var icon = result.list[0].main.icon; Pebble.sendAppMessage({ "icon":icon, "temperature":temperature + "u00B0C"}); } else { console.log("Error"); } } } req.send(null);
  • 56. New Frameworks PebbleKit JavaScript Pebble sandbox provides several standard APIs: • HTML5 Geolocation API through navigator.geolocation • Local Storage APIs through window.localStorage
  • 57. New Frameworks PebbleKit JavaScript Your application can show a Configure button on the phone screen When the user clicks on this button, the configure event is fired The html page can return information: document.location.href = “pebblejs:///close#some-data-set” Pebble.addEventListener("showConfiguration", function() { console.log("showing configuration"); Pebble.openURL('http://assets.getpebble.com.s3-website-us-east-1.amazonaws.com/pebble-js/configurable.html'); }); Pebble.addEventListener("webviewclosed", function(e) { console.log("configuration closed"); });
  • 58. New Frameworks PebbleKit JavaScript Expand the reach of your watchapp with JavaScript logic running on the phone Make http calls on the phone, process the reply and send it to your watchapp. Send notification. Use the phone GPS. Use a webview in the phone to provide a configuration screen to your application. Refer to Pebble JavaScript Guide http://developer.getpebble.com/2/guides/javascript-guide.html
  • 60. Updated Tools SDK Overhaul New Frameworks Cloud Pebble App Metadata Event Service pebble Following Standards Accelerometer Developer Connection Events based APIs Data Logging Application logs Dynamic Memory Persistent Storage Documentation 2.0 Migration Guide PebbleKit JS
  • 61. Downloading the new SDK ! Available now on http://developer.getpebble.com/2/