h2zero / NimBLE-Arduino

A fork of the NimBLE library structured for compilation with Arduino, for use with ESP32, nRF5x.
https://h2zero.github.io/NimBLE-Arduino/
Apache License 2.0
700 stars 146 forks source link

Problem using NimBLEHIDDevice, help. #515

Closed discapacidad5 closed 4 months ago

discapacidad5 commented 1 year ago

"I am creating a braille device and I am getting the following error message: "Compilation error: no matching function for call to 'NimBLEHIDDevice::NimBLEHIDDevice()'" This is my code that is incorrect."

`#include

NimBLEHIDDevice* hid = new NimBLEHIDDevice(); hid->setManufacturer("My Manufacturer"); hid->setProduct("My Braille Display");

NimBLEHIDDevice::hidReportMap_t reportMap; reportMap[0] = 0x06; // Usage Page (Generic Device Controls) reportMap[1] = 0x0C; // Usage (Braille Display) reportMap[2] = 0x0A; // Collection (Logical) reportMap[3] = 0x24; // Logical Minimum (0) reportMap[4] = 0x7F; // Logical Maximum (127) reportMap[5] = 0x02; // Report Size (2) reportMap[6] = 0x01; // Report Count (80) reportMap[7] = 0x81; // Input (Data, Variable, Absolute) reportMap[8] = 0xC0; // End Collection hid->reportMap((uint8_t*)&reportMap, sizeof(reportMap));

void setup() { Serial.begin(9600); NimBLEAddress addr("00:11:22:33:44:55"); NimBLEHIDDevice::bleConnectionStatus_t connStatus = hid->getConnectionStatus(); connStatus.connected = true; connStatus.remoteAddress = addr; hid->setConnectionStatus(connStatus);

hid->begin(); hid->setBatteryLevel(90); hid->setConnectionParams(7.5, 15, 0, 2000); hid->setDeviceName("My Braille Display"); hid->setAppearance(NimBLEAppearance::HID_GENERIC); }

void loop() { // Send braille data to the HID device static uint8_t buf[80] = {0}; static uint8_t prev_buf[80] = {0}; bool buf_changed = false; // Fill in buf with braille data // ... // Check if buf has changed for (int i = 0; i < sizeof(buf); i++) { if (buf[i] != prev_buf[i]) { buf_changed = true; break; } } // Print buf if it has changed if (buf_changed) { Serial.println("Buffer contents:"); for (int i = 0; i < sizeof(buf); i++) { Serial.print(buf[i], HEX); Serial.print(" "); } Serial.println(); // Save current buf as previous buf memcpy(prev_buf, buf, sizeof(buf)); } hid->inputReport(0, buf, sizeof(buf)); delay(10); }`

C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:5:44: error: no matching function for call to 'NimBLEHIDDevice::NimBLEHIDDevice()' NimBLEHIDDevice hid = new NimBLEHIDDevice(); ^ In file included from C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:1: c:\Users\Administrador\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEHIDDevice.h:42:2: note: candidate: 'NimBLEHIDDevice::NimBLEHIDDevice(NimBLEServer)' NimBLEHIDDevice(NimBLEServer); ^~~~~~~ c:\Users\Administrador\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEHIDDevice.h:42:2: note: candidate expects 1 argument, 0 provided c:\Users\Administrador\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEHIDDevice.h:40:7: note: candidate: 'constexpr NimBLEHIDDevice::NimBLEHIDDevice(const NimBLEHIDDevice&)' class NimBLEHIDDevice { ^~~~~~~ c:\Users\Administrador\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEHIDDevice.h:40:7: note: candidate expects 1 argument, 0 provided C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:6:1: error: 'hid' does not name a type hid->setManufacturer("My Manufacturer"); ^~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:7:1: error: 'hid' does not name a type hid->setProduct("My Braille Display"); ^~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:9:18: error: 'hidReportMap_t' in 'class NimBLEHIDDevice' does not name a type NimBLEHIDDevice::hidReportMap_t reportMap; ^~~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:10:1: error: 'reportMap' does not name a type reportMap[0] = 0x06; // Usage Page (Generic Device Controls) ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:11:1: error: 'reportMap' does not name a type reportMap[1] = 0x0C; // Usage (Braille Display) ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:12:1: error: 'reportMap' does not name a type reportMap[2] = 0x0A; // Collection (Logical) ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:13:1: error: 'reportMap' does not name a type reportMap[3] = 0x24; // Logical Minimum (0) ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:14:1: error: 'reportMap' does not name a type reportMap[4] = 0x7F; // Logical Maximum (127) ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:15:1: error: 'reportMap' does not name a type reportMap[5] = 0x02; // Report Size (2) ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:16:1: error: 'reportMap' does not name a type reportMap[6] = 0x01; // Report Count (80) ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:17:1: error: 'reportMap' does not name a type reportMap[7] = 0x81; // Input (Data, Variable, Absolute) ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:18:1: error: 'reportMap' does not name a type reportMap[8] = 0xC0; // End Collection ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:19:1: error: 'hid' does not name a type hid->reportMap((uint8_t)&reportMap, sizeof(reportMap)); ^~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino: In function 'void setup()': C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:24:20: error: 'bleConnectionStatus_t' is not a member of 'NimBLEHIDDevice' NimBLEHIDDevice::bleConnectionStatus_t connStatus = hid->getConnectionStatus(); ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:25:3: error: 'connStatus' was not declared in this scope connStatus.connected = true; ^~~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:25:3: note: suggested alternative: 'conn_params' connStatus.connected = true; ^~~~~~ conn_params C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:27:8: error: 'class NimBLEHIDDevice' has no member named 'setConnectionStatus' hid->setConnectionStatus(connStatus); ^~~~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:29:8: error: 'class NimBLEHIDDevice' has no member named 'begin' hid->begin(); ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:31:8: error: 'class NimBLEHIDDevice' has no member named 'setConnectionParams' hid->setConnectionParams(7.5, 15, 0, 2000); ^~~~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:32:8: error: 'class NimBLEHIDDevice' has no member named 'setDeviceName' hid->setDeviceName("My Braille Display"); ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:33:8: error: 'class NimBLEHIDDevice' has no member named 'setAppearance' hid->setAppearance(NimBLEAppearance::HID_GENERIC); ^~~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:33:22: error: 'NimBLEAppearance' has not been declared hid->setAppearance(NimBLEAppearance::HID_GENERIC); ^~~~ C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino: In function 'void loop()': C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:61:39: error: no matching function for call to 'NimBLEHIDDevice::inputReport(int, uint8_t [80], unsigned int)' hid->inputReport(0, buf, sizeof(buf)); ^ In file included from C:\Users\Administrador\Desktop\codigos generado con inteligencia artificial\hid_braille\hid_braille.ino:1: c:\Users\Administrador\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEHIDDevice.h:64:25: note: candidate: 'NimBLECharacteristic NimBLEHIDDevice::inputReport(uint8_t)' NimBLECharacteristic inputReport(uint8_t reportID); ^~~ c:\Users\Administrador\Documents\Arduino\libraries\NimBLE-Arduino\src/NimBLEHIDDevice.h:64:25: note: candidate expects 1 argument, 3 provided

exit status 1

Compilation error: no matching function for call to 'NimBLEHIDDevice::NimBLEHIDDevice()'

h2zero commented 1 year ago

Sorry I didn't reply sooner. The issue is the constructor for NimBLEHIDDevice takes a pointer to a NimBLEServer instance. You'll need to assign the hid pointer after you have initialized the server so you can provide this instance pointer to the constructor.