AndroidのBLEラジコンプロポアプリ「BLEPropo」と接続し、RCサーボとDCモータを制御するプログラムです。 BLE Nanoで動作を確認しています。 BLEPropo → https://github.com/lipoyang/BLEPropo

Dependencies:   BLE_API mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers nRF51822n.cpp Source File

nRF51822n.cpp

00001 /* mbed Microcontroller Library
00002  * Copyright (c) 2006-2013 ARM Limited
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 #include "mbed.h"
00018 #include "nRF51822n.h"
00019 #include "nrf_soc.h"
00020 
00021 #include "btle/btle.h"
00022 #include "nrf_delay.h"
00023 
00024 #include "softdevice_handler.h "
00025 
00026 /**
00027  * The singleton which represents the nRF51822 transport for the BLEDevice.
00028  */
00029 static nRF51822n deviceInstance;
00030 
00031 /**
00032  * BLE-API requires an implementation of the following function in order to
00033  * obtain its transport handle.
00034  */
00035 BLEDeviceInstanceBase *
00036 createBLEDeviceInstance(void)
00037 {
00038     return (&deviceInstance);
00039 }
00040 
00041 nRF51822n::nRF51822n(void)
00042 {
00043 }
00044 
00045 nRF51822n::~nRF51822n(void)
00046 {
00047 }
00048 
00049 const char *nRF51822n::getVersion(void)
00050 {
00051     static char versionString[10];
00052     static bool versionFetched = false;
00053 
00054     if (!versionFetched) {
00055         ble_version_t version;
00056         if (sd_ble_version_get(&version) == NRF_SUCCESS) {
00057             snprintf(versionString, sizeof(versionString), "%u.%u", version.version_number, version.subversion_number);
00058             versionFetched = true;
00059         } else {
00060             strncpy(versionString, "unknown", sizeof(versionString));
00061         }
00062     }
00063 
00064     return versionString;
00065 }
00066 
00067 /* (Valid values are -40, -20, -16, -12, -8, -4, 0, 4) */
00068 ble_error_t nRF51822n::setTxPower(int8_t txPower)
00069 {
00070     unsigned rc;
00071     if ((rc = sd_ble_gap_tx_power_set(txPower)) != NRF_SUCCESS) {
00072         switch (rc) {
00073             case NRF_ERROR_BUSY:
00074                 return BLE_STACK_BUSY;
00075             case NRF_ERROR_INVALID_PARAM:
00076             default:
00077                 return BLE_ERROR_PARAM_OUT_OF_RANGE;
00078         }
00079     }
00080 
00081     return BLE_ERROR_NONE;
00082 }
00083 
00084 ble_error_t nRF51822n::init(void)
00085 {
00086     /* ToDo: Clear memory contents, reset the SD, etc. */
00087     btle_init();
00088 
00089     reset();
00090 
00091     return BLE_ERROR_NONE;
00092 }
00093 
00094 ble_error_t nRF51822n::shutdown(void)
00095 {
00096     return (softdevice_handler_sd_disable() == NRF_SUCCESS) ? BLE_ERROR_NONE : BLE_STACK_BUSY;
00097 }
00098 
00099 ble_error_t nRF51822n::reset(void)
00100 {
00101     nrf_delay_us(500000);
00102 
00103     /* Wait for the radio to come back up */
00104     nrf_delay_us(1000000);
00105 
00106     return BLE_ERROR_NONE;
00107 }
00108 
00109 void
00110 nRF51822n::waitForEvent(void)
00111 {
00112     sd_app_evt_wait();
00113 }