An mbed wrapper around the helium-client to communicate with the Helium Atom
Helium for ARM mbed
This code repository exposes an mbed library for the Helium Atom module. The Helium Atom makes it easy to securely connect IoT devices and applications to back-end IoT services.
Getting Started
See a getting started guide on the Helium site.
Supported Boards
The Helium mbed client should work with any mbed board with an available serial port.
Example Setup
Example applications can be found in the mbed Helium team.
Getting Help
If you have any questions or ideas about how to use this code - or any part of Helium - head over to the Helium Community Slack. We're standing by to help.
Contributing
Want to contribute to helium-mbed? That's awesome!
Please see CONTRIBUTING.md in this repository for details.
src/HeliumUtil.cpp@23:cc2c1d1ed159, 2017-09-05 (annotated)
- Committer:
- Marc Nijdam
- Date:
- Tue Sep 05 13:56:03 2017 -0700
- Revision:
- 23:cc2c1d1ed159
Add configuration API support
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Marc Nijdam |
23:cc2c1d1ed159 | 1 | /* |
Marc Nijdam |
23:cc2c1d1ed159 | 2 | * Copyright 2017, Helium Systems, Inc. |
Marc Nijdam |
23:cc2c1d1ed159 | 3 | * All Rights Reserved. See LICENCE.txt for license information |
Marc Nijdam |
23:cc2c1d1ed159 | 4 | */ |
Marc Nijdam |
23:cc2c1d1ed159 | 5 | |
Marc Nijdam |
23:cc2c1d1ed159 | 6 | #include "mbed.h" |
Marc Nijdam |
23:cc2c1d1ed159 | 7 | #include "HeliumUtil.h" |
Marc Nijdam |
23:cc2c1d1ed159 | 8 | |
Marc Nijdam |
23:cc2c1d1ed159 | 9 | int |
Marc Nijdam |
23:cc2c1d1ed159 | 10 | report_status(int status, int result) |
Marc Nijdam |
23:cc2c1d1ed159 | 11 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 12 | if (helium_status_OK == status) |
Marc Nijdam |
23:cc2c1d1ed159 | 13 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 14 | if (result == 0) |
Marc Nijdam |
23:cc2c1d1ed159 | 15 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 16 | DBG_PRINTF("Succeeded\n"); |
Marc Nijdam |
23:cc2c1d1ed159 | 17 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 18 | else |
Marc Nijdam |
23:cc2c1d1ed159 | 19 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 20 | DBG_PRINTF("Failed - %d\n", result); |
Marc Nijdam |
23:cc2c1d1ed159 | 21 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 22 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 23 | else |
Marc Nijdam |
23:cc2c1d1ed159 | 24 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 25 | DBG_PRINTF("Failed\n"); |
Marc Nijdam |
23:cc2c1d1ed159 | 26 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 27 | return status; |
Marc Nijdam |
23:cc2c1d1ed159 | 28 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 29 | |
Marc Nijdam |
23:cc2c1d1ed159 | 30 | |
Marc Nijdam |
23:cc2c1d1ed159 | 31 | void |
Marc Nijdam |
23:cc2c1d1ed159 | 32 | helium_connect(Helium * helium) |
Marc Nijdam |
23:cc2c1d1ed159 | 33 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 34 | while (!helium->connected()) |
Marc Nijdam |
23:cc2c1d1ed159 | 35 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 36 | DBG_PRINTF("Connecting - "); |
Marc Nijdam |
23:cc2c1d1ed159 | 37 | int status = helium->connect(); |
Marc Nijdam |
23:cc2c1d1ed159 | 38 | if (report_status(status) != helium_status_OK) |
Marc Nijdam |
23:cc2c1d1ed159 | 39 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 40 | wait_ms(1000); |
Marc Nijdam |
23:cc2c1d1ed159 | 41 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 42 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 43 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 44 | |
Marc Nijdam |
23:cc2c1d1ed159 | 45 | void |
Marc Nijdam |
23:cc2c1d1ed159 | 46 | channel_create(Channel * channel, const char * channel_name) |
Marc Nijdam |
23:cc2c1d1ed159 | 47 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 48 | int8_t result; |
Marc Nijdam |
23:cc2c1d1ed159 | 49 | int status; |
Marc Nijdam |
23:cc2c1d1ed159 | 50 | do |
Marc Nijdam |
23:cc2c1d1ed159 | 51 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 52 | // Ensure we're connected |
Marc Nijdam |
23:cc2c1d1ed159 | 53 | helium_connect(channel->helium); |
Marc Nijdam |
23:cc2c1d1ed159 | 54 | DBG_PRINTF("Creating Channel - "); |
Marc Nijdam |
23:cc2c1d1ed159 | 55 | status = channel->begin(channel_name, &result); |
Marc Nijdam |
23:cc2c1d1ed159 | 56 | // Print status and result |
Marc Nijdam |
23:cc2c1d1ed159 | 57 | if (report_status(status, result) != helium_status_OK) |
Marc Nijdam |
23:cc2c1d1ed159 | 58 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 59 | wait_ms(1000); |
Marc Nijdam |
23:cc2c1d1ed159 | 60 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 61 | } while (helium_status_OK != status || result != 0); |
Marc Nijdam |
23:cc2c1d1ed159 | 62 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 63 | |
Marc Nijdam |
23:cc2c1d1ed159 | 64 | void |
Marc Nijdam |
23:cc2c1d1ed159 | 65 | channel_send(Channel * channel, |
Marc Nijdam |
23:cc2c1d1ed159 | 66 | const char * channel_name, |
Marc Nijdam |
23:cc2c1d1ed159 | 67 | void const * data, |
Marc Nijdam |
23:cc2c1d1ed159 | 68 | size_t len) |
Marc Nijdam |
23:cc2c1d1ed159 | 69 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 70 | int status; |
Marc Nijdam |
23:cc2c1d1ed159 | 71 | int8_t result; |
Marc Nijdam |
23:cc2c1d1ed159 | 72 | |
Marc Nijdam |
23:cc2c1d1ed159 | 73 | do |
Marc Nijdam |
23:cc2c1d1ed159 | 74 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 75 | // Try to send |
Marc Nijdam |
23:cc2c1d1ed159 | 76 | DBG_PRINTF("Sending - "); |
Marc Nijdam |
23:cc2c1d1ed159 | 77 | status = channel->send(data, len, &result); |
Marc Nijdam |
23:cc2c1d1ed159 | 78 | report_status(status, result); |
Marc Nijdam |
23:cc2c1d1ed159 | 79 | // Create the channel if any service errors are returned |
Marc Nijdam |
23:cc2c1d1ed159 | 80 | if (status == helium_status_OK && result != 0) |
Marc Nijdam |
23:cc2c1d1ed159 | 81 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 82 | channel_create(channel, channel_name); |
Marc Nijdam |
23:cc2c1d1ed159 | 83 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 84 | else if (status != helium_status_OK) |
Marc Nijdam |
23:cc2c1d1ed159 | 85 | { |
Marc Nijdam |
23:cc2c1d1ed159 | 86 | wait_ms(1000); |
Marc Nijdam |
23:cc2c1d1ed159 | 87 | } |
Marc Nijdam |
23:cc2c1d1ed159 | 88 | } while (helium_status_OK != status || result != 0); |
Marc Nijdam |
23:cc2c1d1ed159 | 89 | } |