Partial implementation of BlueGiga's BGAPI for use with the BLE112/3 modules over UART.
Hi there! I recently started using BLE112 modules with the mbed LPC1768 MCU, and I realized there was no implementation of BlueGiga's BGAPI available for mbed. This library implements only a few commands, but if you're looking to get started, this is a good place to look.
This was developed against BGAPI v1.3.2. I make no guarantees as to how well it will work with newer revisions of the software.
Diff: BGLib.cpp
- Revision:
- 2:3ce9a31a6a7e
- Parent:
- 1:3336b2391c80
- Child:
- 3:8f43af513d87
--- a/BGLib.cpp Sun May 17 23:24:26 2015 +0000 +++ b/BGLib.cpp Mon May 18 01:16:52 2015 +0000 @@ -7,18 +7,62 @@ mSerial.attach(this, &BGLib::parse); } -void BGLib::set_hello_callback(hello_callback_t pCallback) { +void BGLib::set_ble_rsp_system_hello(hello_callback_t pCallback) { mHelloCallback = pCallback; } -void BGLib::send_hello() { +void BGLib::ble_cmd_system_hello() { uint8_t bytes[] = {0x00, 0x00, 0x00, 0x01}; send_bytes(bytes, 4); } +void BGLib::ble_cmd_system_get_info() { + uint8_t bytes[] = {0x00, 0x00, 0x00, 0x08}; + send_bytes(bytes, 4); +} + +void BGLib::set_ble_rsp_system_get_info(get_info_callback_t pCallback) { + mGetInfoCallback = pCallback; +} + void BGLib::parse() { - mSerial.getc(); - mHelloCallback(); + #ifdef DEBUG + printf("Got data from port!\r\n"); + #endif + + uint8_t hilen = mSerial.getc(); + uint8_t lolen = mSerial.getc(); + uint8_t msg_class = mSerial.getc(); + uint8_t msg_id = mSerial.getc(); + + #ifdef DEBUG + printf("Message header: %x %x %x %x\r\n", hilen, lolen, msg_class, msg_id); + #endif + + if (hilen == 0x00) { // response + if (msg_class == 0x00) { // system_class + if (msg_id == 0x01) { // system_hello + mHelloCallback(); + } else if (msg_id == 0x08) { + + #ifdef DEBUG + printf("Get Info Response\r\n"); + #endif + + ble_msg_system_get_info_rsp_t result; + result.major = mSerial.getc() | (mSerial.getc() << 8); + result.minor = mSerial.getc() | (mSerial.getc() << 8); + result.patch = mSerial.getc() | (mSerial.getc() << 8); + result.build = mSerial.getc() | (mSerial.getc() << 8); + result.ll_version = mSerial.getc() | (mSerial.getc() << 8); + result.protocol_version = mSerial.getc(); + result.hw = mSerial.getc(); + mGetInfoCallback(result); + } + } + } + + //safety valve: if there are bytes remaining } void BGLib::send_bytes(uint8_t bytes[], int length) {