droidcon 2013 ant+ chin

Post on 27-Jan-2015

127 Views

Category:

Technology

9 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Harrison Chin Applications Engineer

harrison.chin@thisisant.com

Thank You!

What is ANT or ANT+?

• ANT is an ultra low power 2.4GHz wireless protocol – Shipped over 60+ Million devices so far – Can communicate for years using a single coin cell battery – Hundreds of transmitters can co-exist on the same RF

channel without collision – Simple logical channels can be used separately or

combined into complex topologies – Highly compact stack and common API across vendors – 8 byte Payload Broadcast and Acknowledged packets

• Up to 24 byte Burst message packets

• ANT+ is a set of mutually agreed upon definitions for what the information sent over ANT represents

Building ANT Networks…Simply

• Point-to-point M S

Building ANT Networks…Simply

• Point-to-point

• Broadcast one-to-many

M

S

S S

Building ANT Networks…Simply

• Point-to-point

• Broadcast one-to-many

Building ANT Networks…Simply

S

M M

M

S S

• Point-to-point

• Broadcast one-to-many

• Star

Building ANT Networks…Simply

• Point-to-point

• Broadcast one-to-many

• Star

Building ANT Networks…Simply

• Point-to-point

• Broadcast one-to-many

• Star

• Shared

M

S

S

S

S

S

S

Building ANT Networks…Simply

• Point-to-point

• Broadcast one-to-many

• Star

• Shared

• Asynchronous

M

Scan

M M M

Over the Air

Scan

M M

Building ANT Networks…Simply

• Point-to-point

• Broadcast one-to-many

• Star

• Shared

• Asynchronous 1: Is that fun? 2:No idea…

1: Is that fun? 2:No idea…

ANT Networks… Simple to Sophisticated

• Point-to-point

• Broadcast one-to-many

• Star

• Shared

• Asynchronous

• Beyond the star…

Co-existence Management – Time Domain

Background Scanning Channel

• Background scanning channel is receive only

• Allows independent channels to stay open on the same physical radio

• Useful to create asynchronous topologies, monitor messages, RSSI pairing schemes, etc

MASTER_2

Background Scanning

MASTER_1

Continuous Scanning Mode

• ‘Always on’ receiver: high power

• Fully Bi-directional Communication

– Channels can be responded to on-demand

• Masters can transmit intermittently

• Potentially hundreds of transmitters to one center node

M

Scan

M

M

M M

MASTER_2

Scanning Mode

MASTER_1

ANT+ Device Profiles

• Open definitions for device-level interoperability

– Channel configuration

– Data format

– Data exchange mechanisms

ANT+ Device Profiles

Control

Bidirectional communication Sensor: status Display: control

Geocache

Hint Next location Visitor count

Bicycle Speed & Cadence Bicycle Power

Cadence Speed Power

Activity Monitor

Access Point

Searching…

Continuous Glucose Monitor

Authenticated sessions Intermittent transmission scheme Live and stored data

ANT+ Interoperability

ANT USB Stick

Android System

Android ANT Layers

Android System

Vendor Specific Library

Combo Connectivity Device

ANT HAL

ANT Radio Service

ANT Firmware

Profiles

App App App

ANT Transport Driver

Physical Transport Driver

ANT HAL Service

Created by:

& Chip Vendor

App App App

Android

Created by:

ANT USB Service

Android USB Host Feature

ANT Firmware

Applications

For Connectivity Chip For ANT USB sticks

Android Components

Applications

ANT Radio Service

Combo Connectivity Device

Android System

ANT HAL

ANT HAL Service

ANT Firmware

ANT+ Profile Plug-in

App

Profiles

ANT+ Profile Plug-in

App App

ANT+ API

Plug-ins

ANT+ Profile Plug-ins Make Implementing ANT+ Applications Easier

Channel API/ANT Radio Service

ANT Channel ANT Channel Provider

Heart Rate PCC Remote Control PCC

Heart Rate Plug-in Control Plug-in

App App

Plug-in Communicator Class

• A simple class which provides access to the ANT+ Plug-in

• Methods include…

public static void requestAccess(…) public String getDeviceName() public int getAntDeviceID() public int getCurrentDeviceState() public void subscribeTo<EventName>(...) public void releaseAccess()

Request Access

public static void requestAccess( Activity userActivity, Context bindToContext, boolean skipPreferredSearch, IPluginAccessResultReceiver<AntPlusHeartRatePcc> resultReceiver, IDeviceStateChangeReceiver stateReceiver)

Device Discovery UI

Result Receiver public void onResultReceived(AntPlusHeartRatePcc result, int resultCode, int initialDeviceStateCode, Object asyncState) { switch(resultCode) { case AntPluginMsgDefines.MSG_REQACC_RESULT_whatSUCCESS: hrPcc = result; subscribeToEvents(); break;

Result Receiver case AntPluginMsgDefines.MSG_REQACC_RESULT_whatDEPENDENCYNOTINSTALLED: AlertDialog.Builder adlgBldr; adlgBldr = new AlertDialog.Builder(Activity_HeartRateSampler.this); adlgBldr.setTitle("Missing Dependency"); adlgBldr.setMessage("The required application\n\"" + AntPlusHeartRatePcc.getMissingDependencyName() + “\"\n is not installed. Do you want to launch the Play Store to search for it?"); ... break;

Subscribing to Events

hrPcc.subscribeHeartRateDataEvent( new IHeartRateDataReceiver() { public void onNewHeartRateData( final int currentMessageCount, final int computedHeartRate, final int heartBeatCounter, final int timestampOfLastBeat_1024s) { //Use data... } } );

State Change Receiver public void onDeviceStateChange(int newDeviceState) { //Handle state change: //(TRACKING, SEARCHING, CLOSED, DEAD) }

Release Access

public static void releaseAccess()

• Releases the connection to the device (the plugin service will automatically shutdown when all apps have released access)

Channel Interface

• Used for non-ANT+ applications

• Development of Beta ANT+ profiles

• Provides channels from all connected chips

• Gives full access to individual ANT channel capabilities

– Background scanning

– Shared channels

– Decimated receive rates

General Channel Flow

1. Bind to the ANT Radio Service

2. Get the ANT Channel Provider

3. Acquire Channel(s)

4. Configure Channel(s)

5. Use Channel(s)

6. Release the Channel(s) and Unbind

Bind to the ANT Radio Service

private AntService mAntRadioService = null; private AntChannelProvider mAntChannelProvider = null; private ServiceConnection mAntRadioServiceConnection =new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mAntRadioService = new AntService(service); mAntChannelProvider = mAntRadioService.getChannelProvider(); } … }

Acquire a Channel

AntChannel acquireChannel() throws ChannelNotAvailableException

{

AntChannel antChannel = null;

if(null != mAntChannelProvider)

{

antChannel = AntChannelProvider.acquireChannel(this, PredefinedNetwork.PUBLIC);

}

return antChannel;

}

Configuring an ANT Channel…

• setAdapterWideLibConfig(LibConfig libConfig)

• setChannelId(ChannelId channelId)

• setPeriod(int period_32768unitsPerSecond)

• setTransmitPower(int outputPowerLevelSetting)

• setProximityThreshold(int searchThreshold)

• setRfFreqency(int radioFrequencyOffset)

• setSearchTimeout (LowPrioritySearchTimeout lowPrioritySearchTimeout)

• …and more representing standard ANT Message Commands

Handling the Channel

public class ChannelCallback implements AntChannelMessageHandler { @Override public void handleMessage(AntMessageFromAnt antMessage) { switch(antMessage.getMessageType()) { case BROADCAST_DATA: case ACKNOWLEDGED_DATA: // Rx Data DataMessage rxMessage = (DataMessage)antMessage; processData(rxMessage.getPayload()); break; case CHANNEL_EVENT: … } } }

Releasing the Channel

public void close() { if (null != mAntChannel) { mAntChannel.release(); mAntChannel = null; } }

What could you do with…

• Simplicity – ANT+ Android Plug-ins

handle discovery and profile interpretation for the developer

– Unified ANT API across multiple vendors minimizes support costs

– Small stack size and TDMA style coexistence reduces memory and computational costs

– Individual logical channels are easy to work with

What could you do with…

• Extreme network flexibility – Enables large scale

networks for small, coin cell operated devices running for years

– Hubs, phones, access points, etc can gather data and communicate concurrently

– Scatternets, meshes, trees, etc, can be dynamically created and closed

– Simple channels are the building blocks

Over the Air

Thank You! Have a Great Droidcon!

top related