Droidcon 2013 ant+ chin
-
Upload
droidcon-berlin -
Category
Technology
-
view
127 -
download
9
description
Transcript of Droidcon 2013 ant+ chin
Harrison Chin Applications Engineer
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!