/** * Constructor for the UARTService. * @param _ble an instance of BLEDevice * @param rxBufferSize the size of the rxBuffer * @param txBufferSize the size of the txBuffer * * @note defaults to 20 */ MicroBitUARTService::MicroBitUARTService(BLEDevice &_ble, uint8_t rxBufferSize, uint8_t txBufferSize) : ble(_ble) { rxBufferSize += 1; txBufferSize += 1; txBuffer = (uint8_t *)malloc(txBufferSize); rxBuffer = (uint8_t *)malloc(rxBufferSize); rxBufferHead = 0; rxBufferTail = 0; this->rxBufferSize = rxBufferSize; txBufferHead = 0; txBufferTail = 0; this->txBufferSize = txBufferSize; GattCharacteristic rxCharacteristic(UARTServiceRXCharacteristicUUID, rxBuffer, 1, rxBufferSize, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE); txCharacteristic = new GattCharacteristic(UARTServiceTXCharacteristicUUID, txBuffer, 1, txBufferSize, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE); GattCharacteristic *charTable[] = {txCharacteristic, &rxCharacteristic}; GattService uartService(UARTServiceUUID, charTable, sizeof(charTable) / sizeof(GattCharacteristic *)); _ble.addService(uartService); this->rxCharacteristicHandle = rxCharacteristic.getValueAttribute().getHandle(); _ble.gattServer().onDataWritten(this, &MicroBitUARTService::onDataWritten); _ble.gattServer().onConfirmationReceived(on_confirmation); }
int main(){ //pc.wait(1); gatt_characteristics[CHARACTERISTIC_LED] = new GattCharacteristic( nRF51_GATT_CHAR_LED, &gatt_char_value[CHARACTERISTIC_LED], 1, 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE); gatt_service = new GattService(nRF51_GATT_SERVICE, gatt_characteristics, CHARACTERISTIC_COUNT); //Initialize BLE Device ble.init(); ble.setDeviceName((uint8_t *)DEVICE_NAME); // configure our advertising type, payload and interval00 ble.accumulateAdvertisingPayload( GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); ble.accumulateAdvertisingPayload( GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.setAdvertisingInterval(160); // 100ms /* led1.write(1); led3.write(1); led2.write(1); led4.write(1); */ for(int i=0; i<10; i++) pc.printf("Hello World\n"); ble.onConnection((Gap::ConnectionEventCallback_t)connectionCallback); ble.onDisconnection(disconnectionCallback); ble.gattServer().onDataWritten(onDataWritten); ble.addService(*gatt_service); ble.startAdvertising(); /* Adding below for scanning */ ble.setScanParams(500 /* scan interval */, 200 /* scan window */); ble.startScan(advertisementCallback); /**END OF PART FOR SCANNING**/ for (;;) { ble.waitForEvent(); } }