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.

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) {