Merge remote-tracking branch 'upstream/master'

pull/287/head
tkuyucu 2014-04-30 14:03:28 +02:00
commit 35602c21be
1007 changed files with 488448 additions and 4144 deletions

View File

@ -38,17 +38,24 @@ NXP:
* [LPC1549](https://mbed.org/platforms/LPCXpresso1549/) (Cortex-M3)
Freescale:
* FRDM-K20D50M
* FRDM-K20D50M (Cortex-M4)
* [FRDM-KL05Z](https://mbed.org/platforms/FRDM-KL05Z/) (Cortex-M0+)
* [FRDM-KL25Z](http://mbed.org/platforms/KL25Z/) (Cortex-M0+)
* [FRDM-KL46Z](https://mbed.org/platforms/FRDM-KL46Z/) (Cortex-M0+)
* FRDM-K64F (Cortex-M4)
STMicroelectronics:
* [Nucleo-F103RB](https://mbed.org/platforms/ST-Nucleo-F103RB/) (Cortex-M3)
* [Nucleo-L152RE](https://mbed.org/platforms/ST-Nucleo-L152RE/) (Cortex-M3)
* [Nucleo-F030R8](https://mbed.org/platforms/ST-Nucleo-F030R8/) (Cortex-M0)
* [Nucleo-F401RE](https://mbed.org/platforms/ST-Nucleo-F401RE/) (Cortex-M4)
* STM32F407 (Cortex-M4)
* STM32F4XX (Cortex-M4F)
* STM32F3XX (Cortex-M4F)
* STM32F0-Discovery (Cortex-M0)
* STM32VL-Discovery (Cortex-M3)
* STM32F3-Discovery (Cortex-M4F)
* STM32F4-Discovery (Cortex-M4F)
Nordic:
* [nRF51822-mKIT](https://mbed.org/platforms/Nordic-nRF51822/) (Cortex-M0)

View File

@ -41,7 +41,7 @@ typedef enum {
#include "USBEndpoints_LPC17_LPC23.h"
#elif defined(TARGET_LPC11UXX) || defined(TARGET_LPC1347)
#include "USBEndpoints_LPC11U.h"
#elif defined(TARGET_KL25Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D5M)
#elif defined(TARGET_KL25Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D5M) | defined(TARGET_K64F)
#include "USBEndpoints_KL25Z.h"
#elif defined (TARGET_STM32F4XX)
#include "USBEndpoints_STM32F4.h"

View File

@ -16,7 +16,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#if defined(TARGET_KL25Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D5M)
#if defined(TARGET_KL25Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D5M) | defined(TARGET_K64F)
#include "USBHAL.h"
@ -86,6 +86,9 @@ USBHAL::USBHAL(void) {
// Disable IRQ
NVIC_DisableIRQ(USB0_IRQn);
#if defined(TARGET_K64F)
MPU->CESR=0;
#endif
// fill in callback array
epCallback[0] = &USBHAL::EP1_OUT_callback;
epCallback[1] = &USBHAL::EP1_IN_callback;
@ -136,9 +139,9 @@ USBHAL::USBHAL(void) {
while(USB0->USBTRC0 & USB_USBTRC0_USBRESET_MASK);
// Set BDT Base Register
USB0->BDTPAGE1=(uint8_t)((uint32_t)bdt>>8);
USB0->BDTPAGE2=(uint8_t)((uint32_t)bdt>>16);
USB0->BDTPAGE3=(uint8_t)((uint32_t)bdt>>24);
USB0->BDTPAGE1 = (uint8_t)((uint32_t)bdt>>8);
USB0->BDTPAGE2 = (uint8_t)((uint32_t)bdt>>16);
USB0->BDTPAGE3 = (uint8_t)((uint32_t)bdt>>24);
// Clear interrupt flag
USB0->ISTAT = 0xff;

View File

@ -59,6 +59,9 @@ bool USBHID::readNB(HID_REPORT *report)
uint32_t bytesRead = 0;
bool result;
result = USBDevice::readEP_NB(EPINT_OUT, report->data, &bytesRead, MAX_HID_REPORT_SIZE);
// if readEP_NB did not succeed, does not issue a readStart
if (!result)
return false;
report->length = bytesRead;
if(!readStart(EPINT_OUT, MAX_HID_REPORT_SIZE))
return false;

View File

@ -36,7 +36,15 @@ class Gap
GapEvents *m_pEventHandler;
public:
typedef enum addr_type_e{
ADDR_TYPE_PUBLIC = 0,
ADDR_TYPE_RANDOM_STATIC,
ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE,
ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE
} addr_type_t;
/* These functions must be defined in the sub-class */
virtual ble_error_t setAddress(addr_type_t type, uint8_t address[6]) = 0;
virtual ble_error_t setAdvertisingData(GapAdvertisingData &, GapAdvertisingData &) = 0;
virtual ble_error_t startAdvertising(GapAdvertisingParams &) = 0;
virtual ble_error_t stopAdvertising(void) = 0;

View File

@ -38,7 +38,7 @@ class GattServer
/* These functions must be defined in the sub-class */
virtual ble_error_t addService(GattService &) = 0;
virtual ble_error_t readValue(uint16_t, uint8_t[], uint16_t) = 0;
virtual ble_error_t updateValue(uint16_t, uint8_t[], uint16_t) = 0;
virtual ble_error_t updateValue(uint16_t, uint8_t[], uint16_t, bool localOnly = false) = 0;
// ToDo: For updateValue, check the CCCD to see if the value we are
// updating has the notify or indicate bits sent, and if BOTH are set

View File

@ -33,8 +33,8 @@
#include "pstorage.h"
#include "hw/GapEvents.h"
#include "hw/nRF51822n/nRF51Gap.h"
#include "hw/nRF51822n/nRF51GattServer.h"
#include "nRF51Gap.h"
#include "nRF51GattServer.h"
static void service_error_callback(uint32_t nrf_error);
void assert_nrf_callback(uint16_t line_num, const uint8_t * p_file_name);
@ -94,13 +94,13 @@ static void btle_handler(ble_evt_t * p_ble_evt)
switch (p_ble_evt->header.evt_id)
{
case BLE_GAP_EVT_CONNECTED:
nRF51GattServer::getInstance().m_connectionHandle = p_ble_evt->evt.gap_evt.conn_handle;
nRF51Gap::getInstance().setConnectionHandle( p_ble_evt->evt.gap_evt.conn_handle );
nRF51Gap::getInstance().handleEvent(GapEvents::GAP_EVENT_CONNECTED);
break;
case BLE_GAP_EVT_DISCONNECTED:
// Since we are not in a connection and have not started advertising, store bonds
nRF51GattServer::getInstance().m_connectionHandle = BLE_CONN_HANDLE_INVALID;
nRF51Gap::getInstance().setConnectionHandle (BLE_CONN_HANDLE_INVALID);
ASSERT_STATUS_RET_VOID ( ble_bondmngr_bonded_centrals_store() );
nRF51Gap::getInstance().handleEvent(GapEvents::GAP_EVENT_DISCONNECTED);
break;
@ -117,7 +117,7 @@ static void btle_handler(ble_evt_t * p_ble_evt)
sec_params.min_key_size = CFG_BLE_SEC_PARAM_MIN_KEY_SIZE ;
sec_params.max_key_size = CFG_BLE_SEC_PARAM_MAX_KEY_SIZE ;
ASSERT_STATUS_RET_VOID ( sd_ble_gap_sec_params_reply(nRF51GattServer::getInstance().m_connectionHandle, BLE_GAP_SEC_STATUS_SUCCESS, &sec_params) );
ASSERT_STATUS_RET_VOID ( sd_ble_gap_sec_params_reply(nRF51Gap::getInstance().getConnectionHandle(), BLE_GAP_SEC_STATUS_SUCCESS, &sec_params) );
}
break;

View File

@ -25,8 +25,8 @@
#include "mbed.h"
#include "blecommon.h"
#include "hw/BLEDevice.h"
#include "hw/nRF51822n/nRF51Gap.h"
#include "hw/nRF51822n/nRF51GattServer.h"
#include "nRF51Gap.h"
#include "nRF51GattServer.h"
/**************************************************************************/
/*!

View File

@ -19,6 +19,7 @@
#include "common/common.h"
#include "ble_advdata.h"
#include "ble_hci.h"
/**************************************************************************/
/*!
@ -162,7 +163,7 @@ ble_error_t nRF51Gap::startAdvertising(GapAdvertisingParams & params)
return BLE_ERROR_PARAM_OUT_OF_RANGE;
}
/* ToDo: Start Advertising */
/* Start Advertising */
ble_gap_adv_params_t adv_para = { 0 };
adv_para.type = params.getAdvertisingType() ;
@ -197,10 +198,8 @@ ble_error_t nRF51Gap::startAdvertising(GapAdvertisingParams & params)
/**************************************************************************/
ble_error_t nRF51Gap::stopAdvertising(void)
{
/* ToDo: Stop Advertising */
/* ToDo: Check response */
wait(0.1);
/* Stop Advertising */
ASSERT( ERROR_NONE == sd_ble_gap_adv_stop(), BLE_ERROR_PARAM_OUT_OF_RANGE);
state.advertising = 0;
@ -225,10 +224,61 @@ ble_error_t nRF51Gap::stopAdvertising(void)
/**************************************************************************/
ble_error_t nRF51Gap::disconnect(void)
{
/* ToDo: Disconnect if we are connected to a central device */
state.advertising = 0;
state.connected = 0;
/* Disconnect if we are connected to a central device */
ASSERT_INT(ERROR_NONE, sd_ble_gap_disconnect(m_connectionHandle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION),
BLE_ERROR_PARAM_OUT_OF_RANGE);
return BLE_ERROR_NONE;
}
/**************************************************************************/
/*!
@brief Sets the 16-bit connection handle
*/
/**************************************************************************/
void nRF51Gap::setConnectionHandle(uint16_t con_handle)
{
m_connectionHandle = con_handle;
}
/**************************************************************************/
/*!
@brief Gets the 16-bit connection handle
*/
/**************************************************************************/
uint16_t nRF51Gap::getConnectionHandle(void)
{
return m_connectionHandle;
}
/**************************************************************************/
/*!
@brief Sets the BLE device address
@returns ble_error_t
@section EXAMPLE
@code
uint8_t device_address[6] = { 0xca, 0xfe, 0xf0, 0xf0, 0xf0, 0xf0 };
nrf.getGap().setAddress(Gap::ADDR_TYPE_RANDOM_STATIC, device_address);
@endcode
*/
/**************************************************************************/
ble_error_t nRF51Gap::setAddress(addr_type_t type, uint8_t address[6])
{
if ( type > ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE) return BLE_ERROR_PARAM_OUT_OF_RANGE;
ble_gap_addr_t dev_addr;
dev_addr.addr_type = type;
memcpy(dev_addr.addr, address, 6);
ASSERT_INT(ERROR_NONE, sd_ble_gap_address_set(&dev_addr), BLE_ERROR_PARAM_OUT_OF_RANGE);
return BLE_ERROR_NONE;
}

View File

@ -19,6 +19,7 @@
#include "mbed.h"
#include "blecommon.h"
#include "ble.h"
#include "GapAdvertisingParams.h"
#include "GapAdvertisingData.h"
#include "hw/Gap.h"
@ -39,13 +40,18 @@ class nRF51Gap : public Gap
}
/* Functions that must be implemented from Gap */
virtual ble_error_t setAddress(addr_type_t type, uint8_t address[6]);
virtual ble_error_t setAdvertisingData(GapAdvertisingData &, GapAdvertisingData &);
virtual ble_error_t startAdvertising(GapAdvertisingParams &);
virtual ble_error_t stopAdvertising(void);
virtual ble_error_t disconnect(void);
void setConnectionHandle(uint16_t con_handle);
uint16_t getConnectionHandle(void);
private:
nRF51Gap() { };
uint16_t m_connectionHandle;
nRF51Gap() { m_connectionHandle = BLE_CONN_HANDLE_INVALID; };
nRF51Gap(nRF51Gap const&);
void operator=(nRF51Gap const&);
};

View File

@ -20,6 +20,8 @@
#include "common/common.h"
#include "btle/custom/custom_helper.h"
#include "nRF51Gap.h"
/**************************************************************************/
/*!
@brief Adds a new service to the GATT table on the peripheral
@ -136,10 +138,18 @@ ble_error_t nRF51GattServer::readValue(uint16_t charHandle, uint8_t buffer[], ui
@endcode
*/
/**************************************************************************/
ble_error_t nRF51GattServer::updateValue(uint16_t charHandle, uint8_t buffer[], uint16_t len)
ble_error_t nRF51GattServer::updateValue(uint16_t charHandle, uint8_t buffer[], uint16_t len, bool localOnly)
{
uint16_t gapConnectionHandle = nRF51Gap::getInstance().getConnectionHandle();
if (localOnly)
{
/* Only update locally regardless of notify/indicate */
ASSERT_INT( ERROR_NONE, sd_ble_gatts_value_set(nrfCharacteristicHandles[charHandle].value_handle, 0, &len, buffer), BLE_ERROR_PARAM_OUT_OF_RANGE );
}
if ((p_characteristics[charHandle]->properties & (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY)) &&
(m_connectionHandle != BLE_CONN_HANDLE_INVALID) )
(gapConnectionHandle != BLE_CONN_HANDLE_INVALID) )
{
/* HVX update for the characteristic value */
ble_gatts_hvx_params_t hvx_params;
@ -150,7 +160,7 @@ ble_error_t nRF51GattServer::updateValue(uint16_t charHandle, uint8_t buffer[],
hvx_params.p_data = buffer;
hvx_params.p_len = &len;
error_t error = (error_t) sd_ble_gatts_hvx(m_connectionHandle, &hvx_params);
error_t error = (error_t) sd_ble_gatts_hvx(gapConnectionHandle, &hvx_params);
/* ERROR_INVALID_STATE, ERROR_BUSY, ERROR_GATTS_SYS_ATTR_MISSING and ERROR_NO_TX_BUFFERS the ATT table has been updated. */
if ( (error != ERROR_NONE ) && (error != ERROR_INVALID_STATE) &&

View File

@ -43,19 +43,17 @@ class nRF51GattServer : public GattServer
/* Functions that must be implemented from GattServer */
virtual ble_error_t addService(GattService &);
virtual ble_error_t readValue(uint16_t, uint8_t[], uint16_t);
virtual ble_error_t updateValue(uint16_t, uint8_t[], uint16_t);
virtual ble_error_t updateValue(uint16_t, uint8_t[], uint16_t, bool localOnly = false);
/* nRF51 Functions */
void eventCallback(void);
void hwCallback(ble_evt_t * p_ble_evt);
uint16_t m_connectionHandle; // TODO move to private
private:
GattCharacteristic* p_characteristics[BLE_TOTAL_CHARACTERISTICS];
ble_gatts_char_handles_t nrfCharacteristicHandles[BLE_TOTAL_CHARACTERISTICS];
nRF51GattServer() { serviceCount = 0; characteristicCount = 0; m_connectionHandle = BLE_CONN_HANDLE_INVALID; };
nRF51GattServer() { serviceCount = 0; characteristicCount = 0; };
nRF51GattServer(nRF51GattServer const&);
void operator=(nRF51GattServer const&);

View File

@ -0,0 +1,26 @@
/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _NORDIC_GLOBAL_H_
#define _NORDIC_GLOBAL_H_
/* There are no global defines in mbed, so we need to define */
/* mandatory conditional compilation flags here */
#define NRF51
#define DEBUG_NRF_USER
#define BLE_STACK_SUPPORT_REQD
#define BOARD_PCA10001
#endif

Some files were not shown because too many files have changed in this diff Show More