mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-13 15:41:17 +00:00
support for iBeacon in Arduino port
This commit is contained in:
parent
e02c7f3ec2
commit
6ac3d2d4a8
@ -33,17 +33,6 @@
|
||||
extern "C" void embedded_execute_once(void);
|
||||
extern "C" void hal_uart_dma_process(void);
|
||||
|
||||
// HAL TICK Implementation
|
||||
extern "C" void hal_tick_init(void){
|
||||
|
||||
}
|
||||
extern "C" void hal_tick_set_handler(void (*tick_handler)(void)){
|
||||
|
||||
}
|
||||
extern "C" int hal_tick_get_tick_period_in_ms(void){
|
||||
return 250;
|
||||
}
|
||||
|
||||
// btstack state
|
||||
static int btstack_state;
|
||||
|
||||
@ -52,6 +41,8 @@ extern "C" void hal_cpu_disable_irqs(void){ }
|
||||
extern "C" void hal_cpu_enable_irqs(void) { }
|
||||
extern "C" void hal_cpu_enable_irqs_and_sleep(void) { }
|
||||
|
||||
static const uint8_t iBeaconAdvertisement01[] = { 0x02, 0x01 };
|
||||
static const uint8_t iBeaconAdvertisement38[] = { 0x1a, 0xff, 0x4c, 0x00, 0x02, 0x15 };
|
||||
static const uint8_t adv_data_default[] = { 02, 01, 05, 03, 02, 0xf0, 0xff };
|
||||
static const uint8_t * adv_data = adv_data_default;
|
||||
static uint16_t adv_data_len = sizeof(adv_data_default);
|
||||
@ -377,6 +368,25 @@ bool BLEAdvertisement::nameHasPrefix(const char * namePrefix){
|
||||
return false;
|
||||
};
|
||||
|
||||
bool BLEAdvertisement::isIBeacon(){
|
||||
return ((memcmp(iBeaconAdvertisement01, data, sizeof(iBeaconAdvertisement01)) == 0)
|
||||
&& (memcmp(iBeaconAdvertisement38, &data[3], sizeof(iBeaconAdvertisement38)) == 0));
|
||||
}
|
||||
|
||||
const UUID * BLEAdvertisement::getIBeaconUUID(){
|
||||
return new UUID(&data[9]);
|
||||
};
|
||||
uint16_t BLEAdvertisement::getIBeaconMajorID(){
|
||||
return READ_NET_16(data, 25);
|
||||
};
|
||||
uint16_t BLEAdvertisement::getIBecaonMinorID(){
|
||||
return READ_NET_16(data, 27);
|
||||
};
|
||||
uint8_t BLEAdvertisement::getiBeaconMeasuredPower(){
|
||||
return data[29];
|
||||
}
|
||||
|
||||
|
||||
BLECharacteristic::BLECharacteristic() {
|
||||
}
|
||||
|
||||
|
@ -64,7 +64,12 @@ public:
|
||||
int getRssi();
|
||||
bool containsService(UUID * service);
|
||||
bool nameHasPrefix(const char * namePrefix);
|
||||
const uint8_t * getAdvData();
|
||||
const uint8_t * getAdvData();
|
||||
bool isIBeacon();
|
||||
const UUID * getIBeaconUUID();
|
||||
uint16_t getIBeaconMajorID();
|
||||
uint16_t getIBecaonMinorID();
|
||||
uint8_t getiBeaconMeasuredPower();
|
||||
};
|
||||
|
||||
class BLECharacteristic {
|
||||
|
41
platforms/arduino/examples/iBeaconScanner/iBeaconScanner.ino
Normal file
41
platforms/arduino/examples/iBeaconScanner/iBeaconScanner.ino
Normal file
@ -0,0 +1,41 @@
|
||||
|
||||
#include <BTstack.h>
|
||||
#include <SPI.h>
|
||||
|
||||
// setup printf
|
||||
static FILE uartout = {0} ;
|
||||
static int uart_putchar (char c, FILE *stream) {
|
||||
Serial.write(c);
|
||||
return 0;
|
||||
}
|
||||
static void setup_printf(int baud) {
|
||||
Serial.begin(baud);
|
||||
fdev_setup_stream (&uartout, uart_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||
stdout = &uartout;
|
||||
}
|
||||
|
||||
void setup() {
|
||||
setup_printf(9600);
|
||||
|
||||
BTstack.setBLEAdvertisementCallback(advertisementCallback);
|
||||
BTstack.setup();
|
||||
BTstack.bleStartScanning();
|
||||
}
|
||||
|
||||
|
||||
void loop() {
|
||||
BTstack.loop();
|
||||
}
|
||||
|
||||
void advertisementCallback(BLEAdvertisement *adv) {
|
||||
if (adv->isIBeacon()) {
|
||||
printf("iBeacon found %s, RSSI %d, UUID %s, MajorID %u, MinorID %u, Measured Power %0x\n",
|
||||
adv->getBdAddr()->getAddressString(), adv->getRssi() ,
|
||||
adv->getIBeaconUUID()->getUuidString(), adv->getIBeaconMajorID(), adv->getIBecaonMinorID(),
|
||||
adv->getiBeaconMeasuredPower());
|
||||
|
||||
} else {
|
||||
printf("Device discovered: %s, RSSI: %d\n", adv->getBdAddr()->getAddressString(), adv->getRssi() );
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user