mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-16 08:42:28 +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 embedded_execute_once(void);
|
||||||
extern "C" void hal_uart_dma_process(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
|
// btstack state
|
||||||
static int 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(void) { }
|
||||||
extern "C" void hal_cpu_enable_irqs_and_sleep(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_default[] = { 02, 01, 05, 03, 02, 0xf0, 0xff };
|
||||||
static const uint8_t * adv_data = adv_data_default;
|
static const uint8_t * adv_data = adv_data_default;
|
||||||
static uint16_t adv_data_len = sizeof(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;
|
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() {
|
BLECharacteristic::BLECharacteristic() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,12 @@ public:
|
|||||||
int getRssi();
|
int getRssi();
|
||||||
bool containsService(UUID * service);
|
bool containsService(UUID * service);
|
||||||
bool nameHasPrefix(const char * namePrefix);
|
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 {
|
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