BLE test
Fork of X_NUCLEO_IDB0XA1 by
Diff: source/BlueNRGDevice.cpp
- Revision:
- 247:932a44bdff4f
- Parent:
- 242:058b2e731adc
- Parent:
- 246:d73c4f798379
- Child:
- 253:9665a6f8bbdb
--- a/source/BlueNRGDevice.cpp Mon Jun 20 15:11:41 2016 +0200 +++ b/source/BlueNRGDevice.cpp Tue Jun 21 10:31:02 2016 +0200 @@ -51,6 +51,7 @@ extern "C" { #include "hci.h" + #include "bluenrg_utils.h" } #define HEADER_SIZE 5 @@ -108,6 +109,13 @@ nCS_ = 1; wait_us(500); + + // Prepare communication between the host and the BlueNRG SPI interface + HCI_Init(); + + // Set the interrupt handler for the device + irq_.mode(PullDown); // set irq mode + irq_.rise(&HCI_Isr); } /**************************************************************************/ @@ -119,12 +127,50 @@ { } +/** + * @brief Get BlueNRG HW version in bootloader mode + * @param hw_version The HW version is written to this parameter + * @retval It returns BLE_STATUS_SUCCESS on success or an error code otherwise + */ +uint8_t BlueNRGDevice::getUpdaterHardwareVersion(uint8_t *hw_version) +{ + uint8_t status; + + status = getBlueNRGUpdaterHWVersion(hw_version); + + return (status); +} /** - @brief Initialises anything required to start using BLE - @param[in] void - @returns ble_error_t -*/ + * @brief Flash a new firmware using internal bootloader. + * @param fw_image Pointer to the firmware image (raw binary data, + * little-endian). + * @param fw_size Size of the firmware image. The firmware image size shall + * be multiple of 4 bytes. + * @retval int It returns BLE_STATUS_SUCCESS on success, or a number + * not equal to 0 in case of error + * (ACI_ERROR, UNSUPPORTED_VERSION, WRONG_IMAGE_SIZE, CRC_ERROR) + */ +int BlueNRGDevice::updateFirmware(const uint8_t *fw_image, uint32_t fw_size) +{ + int status = program_device(fw_image, fw_size); + + return (status); +} + + +/** + * @brief Initialises anything required to start using BLE + * @param[in] instanceID + * The ID of the instance to initialize. + * @param[in] callback + * A callback for when initialization completes for a BLE + * instance. This is an optional parameter set to NULL when not + * supplied. + * + * @return BLE_ERROR_NONE if the initialization procedure was started + * successfully. + */ ble_error_t BlueNRGDevice::init(BLE::InstanceID_t instanceID, FunctionPointerWithContext<BLE::InitializationCompleteCallbackContext *> callback) { if (isInitialized) { @@ -135,12 +181,9 @@ callback.call(&context); return BLE_ERROR_ALREADY_INITIALIZED; } - - // Set the interrupt handler for the device - irq_.mode(PullDown); // betzw: set irq mode - irq_.rise(&HCI_Isr); /* ToDo: Clear memory contents, reset the SD, etc. */ + // Init the BlueNRG/BlueNRG-MS stack // By default, we set the device GAP role to PERIPHERAL btleInit(BlueNRGGap::getInstance().getIsSetAddress(), GAP_PERIPHERAL_ROLE_IDB04A1);