HID scanner demo
Dependencies: BLE_API WIFI_API_32kRAM nRF51822 mbed
BLE HID function in this demo is temporary working with Android phone ONLY. Will be fixed to support iOS device in next update.
main.cpp
- Committer:
- Marcomissyou
- Date:
- 2015-07-02
- Revision:
- 0:b0fc0661c081
- Child:
- 1:51535675abf4
File content as of revision 0:b0fc0661c081:
#include "mbed.h" #include "BLE.h" #include "BatteryService.h" #include "DeviceInformationService.h" #include "HIDService.h" BLEDevice ble; DigitalOut led01(LED1); Serial uart(p25,p23); unsigned char keyData; bool is_input = false; static const char DEVICE_NAME[] = "HID_Keyboard"; static const uint16_t uuid16_list[] = {GattService::UUID_HUMAN_INTERFACE_DEVICE_SERVICE}; static volatile bool triggerSensorPolling = false; void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) { ble.startAdvertising(); // restart advertising } static uint8_t key_press_scan_buff[30]; static uint8_t modifyKey[30]; int main(void) { uart.baud(9600); uart.printf("Starting HID Service\n"); //uart.attach(&uart_rx); led01 = 1; ble.init(); bool enableBonding = false; bool requireMITM = false; ble.initializeSecurity(enableBonding, requireMITM); ble.onDisconnection(disconnectionCallback); /* Setup primary service. */ HIDService hidService(ble); /* Setup auxiliary service. */ DeviceInformationService deviceInfo(ble, "ARM", "CYNTEC", "SN1", "hw-rev1", "fw-rev1", "soft-rev1"); /* Setup advertising. */ ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); ble.accumulateAdvertisingPayload(GapAdvertisingData::KEYBOARD); ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.setAdvertisingInterval(1000); ble.startAdvertising(); uart.printf("Starting advertising\n"); int index = 0; while (1) { if (uart.readable() == 1) { keyData = uart.getc(); uart.putc(keyData); if(keyData <= 0x39 && keyData >= 0x30){ //number if(keyData == 0x30){ modifyKey[index] = 0x00; key_press_scan_buff[index] = 0x27; } else { modifyKey[index] = 0x00; key_press_scan_buff[index] = keyData-0x13; } } else if(keyData <= 0x7a && keyData >= 0x61 ){ //lowercase letters modifyKey[index] = 0x00; key_press_scan_buff[index] = keyData-0x5d; } else if(keyData <= 0x5a && keyData >= 0x41){ //uppercase letters modifyKey[index] = 0x02; key_press_scan_buff[index] = keyData-0x3d; } else if (keyData == 0x20) { modifyKey[index] = 0x00; key_press_scan_buff[index] = 0x2c; } else { modifyKey[index] = 0x00; //key_press_scan_buff[index] = 0x28; //key_press_scan_buff[index++] = 0x73; key_press_scan_buff[index] = 0x73; } index++; if(keyData == 0x0a && ble.getGapState().connected){ for(int i = 0; i < index; i++){ //uart.putc(key_press_scan_buff[i]); hidService.updateReport(modifyKey[i], key_press_scan_buff[i]); wait(0.1); } index = 0; memset(modifyKey, 0, 30); memset(key_press_scan_buff, 0, 30); } } } }