NUCLEO-F401RE + BlueNRG shield client test (TI Sensortag reading)
Diff: main.cpp
- Revision:
- 0:aa1e012ec210
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Aug 16 11:00:04 2014 +0000 @@ -0,0 +1,175 @@ +#include "mbed.h" +#include "tag_math.h" +#include "stm32f4xx_hal.h" +#include "bluenrg_shield_bsp.h" +#include "osal.h" +#include "sample_service.h" +#include <stdio.h> + +#define BDADDR_SIZE 6 + +/* SPI handler declaration */ +SPI_HandleTypeDef SpiHandle; + +Serial pc(SERIAL_TX, SERIAL_RX); + +extern volatile uint8_t set_connectable; +extern volatile int connected; +extern volatile uint8_t notification_enabled; + +void User_Process(void); + + +/******************************************************************************/ +/******************************************************************************/ +int main(void) +{ + tHalUint8 CLIENT_BDADDR[] = {0xbb, 0x00, 0x00, 0xE1, 0x80, 0x02}; + + tHalUint8 bdaddr[BDADDR_SIZE]; + + uint16_t service_handle, dev_name_char_handle, appearance_char_handle; + int ret; + + /* Hardware init*/ + HAL_Init(); + + /* Configure the system clock */ + SystemClock_Config(); + + /* Initialize the BlueNRG SPI driver */ + BNRG_SPI_Init(); + + /* Initialize the BlueNRG HCI */ + HCI_Init(); + + /* Reset BlueNRG hardware */ + BlueNRG_RST(); + + Osal_MemCpy(bdaddr, CLIENT_BDADDR, sizeof(CLIENT_BDADDR)); + + ret = aci_hal_write_config_data(CONFIG_DATA_PUBADDR_OFFSET, + CONFIG_DATA_PUBADDR_LEN, + bdaddr); + if(ret){ + pc.printf("Setting BD_ADDR failed.\n"); + } + + ret = aci_gatt_init(); + if(ret){ + pc.printf("GATT_Init failed.\n"); + } + + ret = aci_gap_init(GAP_CENTRAL_ROLE, &service_handle, &dev_name_char_handle, &appearance_char_handle); + + if(ret != BLE_STATUS_SUCCESS){ + pc.printf("GAP_Init failed.\n"); + } + + ret = aci_gap_set_auth_requirement(MITM_PROTECTION_REQUIRED, + OOB_AUTH_DATA_ABSENT, + NULL, + 7, + 16, + USE_FIXED_PIN_FOR_PAIRING, + 123456, + BONDING); + + + if (ret != BLE_STATUS_SUCCESS) { + pc.printf("BLE Stack Initialization failed.\n"); + } + + /* Set output power level */ + ret = aci_hal_set_tx_power_level(1,4); + + /* Infinite loop */ + while (1) + { + HCI_Process(); + User_Process(); + } + +} + +/******************************************************************************/ +/******************************************************************************/ + +void User_Process(void) +{ + static uint32_t cnt; + static uint8_t acc_en_sent = 0; + tHalUint8 data[2]; + //uint8_t data_length; + + if(set_connectable){ + Make_Connection(); + set_connectable = FALSE; + } + + /*if(connected && !notification_enabled) { + enableNotification(); + }*/ + + if((connected)&&(!acc_en_sent)){ + + HAL_Delay(100); + data[0] = 0x01; + sendData(0x0029, data, 1); + + HAL_Delay(100); + data[0] = 0x01; + sendData(0x0031, data, 1); + + HAL_Delay(100); + data[0] = 0x01; + sendData(0x003C, data, 1); + + HAL_Delay(100); + data[0] = 0x10; + sendData(0x0034, data, 1); + + + acc_en_sent = 1; + cnt = HAL_GetTick(); + } + + if (HAL_GetTick() > (cnt + 2000)) + { + cnt = HAL_GetTick(); + if (connected && acc_en_sent) + { + + pc.printf("T = %f; ", calcTmpTarget(readValue(0x25, NULL))); + uint8_t* temp = readValue(0x2D, NULL); + pc.printf("Ax = %d; Ay = %d; Az = %d ", (signed char) temp[0], (signed char) temp[1], (signed char) temp[2]); + temp = readValue(0x38, NULL); + pc.printf("H = %f; \r\n", calcHumRel(temp)); + + + //GATT services scan + /*for (unsigned char j = 1; j < 0x88; j++) + { + pc.printf("\n %.2X: ", j); + uint8_t* temp = readValue(j+1, &data_length); + + + for(int i = 0; i < data_length; i++) { + pc.printf("%.2X:", temp[i]); + } + + for(int i = 0; i < data_length; i++) { + pc.printf("%c", temp[i]); + } + + } + */ + + } + } + +} +/******************************************************************************/ +/******************************************************************************/ + +/*********************** END OF FILE ******************************************/