The reason why I put .cpp for all of my components is because for one particular component, I use c++ code (classes) and I have found a lot of issues when trying to include this component and its header in other non cpp components. Therefore I changed all the extensions to .cpp and added:
Code: Select all
#ifdef __cplusplus
extern "C" {
#endif
HEADER CODE
#ifdef __cplusplus
}
#endif
Now everything seemed to work fine. However, I am now trying to implement BLE funcionality for my device. I have used one of the example code provided by esp-idf and put this code inside a BLE_Custom component.
Initially, I had this Bluetooth component with .c extension and I could include it in my main.cpp and use it without any issues.
I am now trying to include a header from the cpp component to the bluetooth component and this is the error I am getting:
Code: Select all
In file included from ../components/BLE/BLE_custom.h:23,
from ../components/BLE/BLE_custom.c:3:
../components/Thermostat/Thermostat.h:18:1: error: unknown type name 'class'
class Thermostat
^~~~~
../components/Thermostat/Thermostat.h:19:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
{
I have then tried to change the BLE_custom extension to .cpp and of course added the :
Code: Select all
#ifdef __cplusplus
extern "C" {
#endif
Now I am getting a lot of errors! :
Code: Select all
../components/BLE/BLE_custom.cpp:159:1: warning: missing initializer for member 'esp_ble_adv_params_t::peer_addr' [-Wmissing-field-initializers]
};
^
../components/BLE/BLE_custom.cpp:159:1: warning: missing initializer for member 'esp_ble_adv_params_t::peer_addr_type' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:185:1: warning: missing initializer for member 'gatts_profile_inst::app_id' [-Wmissing-field-initializers]
};
^
../components/BLE/BLE_custom.cpp:185:1: warning: missing initializer for member 'gatts_profile_inst::conn_id' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:185:1: warning: missing initializer for member 'gatts_profile_inst::service_handle' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:185:1: warning: missing initializer for member 'gatts_profile_inst::service_id' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:185:1: warning: missing initializer for member 'gatts_profile_inst::char_handle' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:185:1: warning: missing initializer for member 'gatts_profile_inst::char_uuid' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:185:1: warning: missing initializer for member 'gatts_profile_inst::perm' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:185:1: warning: missing initializer for member 'gatts_profile_inst::property' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:185:1: warning: missing initializer for member 'gatts_profile_inst::descr_handle' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:185:1: warning: missing initializer for member 'gatts_profile_inst::descr_uuid' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:262:1: sorry, unimplemented: non-trivial designated initializers not supported
};
^
../components/BLE/BLE_custom.cpp:262:1: sorry, unimplemented: non-trivial designated initializers not supported
../components/BLE/BLE_custom.cpp:262:1: sorry, unimplemented: non-trivial designated initializers not supported
../components/BLE/BLE_custom.cpp: In function 'void gatts_profile_event_handler(esp_gatts_cb_event_t, esp_gatt_if_t, esp_ble_gatts_cb_param_t*)':
../components/BLE/BLE_custom.cpp:499:32: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
char * c = "Hello world";
^~~~~~~~~~~~~
../components/BLE/BLE_custom.cpp:544:58: warning: missing initializer for member 'esp_ble_conn_update_params_t::min_int' [-Wmissing-field-initializers]
esp_ble_conn_update_params_t conn_params = {0};
^
../components/BLE/BLE_custom.cpp:544:58: warning: missing initializer for member 'esp_ble_conn_update_params_t::max_int' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:544:58: warning: missing initializer for member 'esp_ble_conn_update_params_t::latency' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:544:58: warning: missing initializer for member 'esp_ble_conn_update_params_t::timeout' [-Wmissing-field-initializers]
../components/BLE/BLE_custom.cpp:554:14: error: jump to case label [-fpermissive]
case ESP_GATTS_DISCONNECT_EVT:
^~~~~~~~~~~~~~~~~~~~~~~~
../components/BLE/BLE_custom.cpp:544:42: note: crosses initialization of 'esp_ble_conn_update_params_t conn_params'
esp_ble_conn_update_params_t conn_params = {0};
^~~~~~~~~~~
../components/BLE/BLE_custom.cpp:558:14: error: jump to case label [-fpermissive]
case ESP_GATTS_CREAT_ATTR_TAB_EVT:{
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
../components/BLE/BLE_custom.cpp:544:42: note: crosses initialization of 'esp_ble_conn_update_params_t conn_params'
esp_ble_conn_update_params_t conn_params = {0};
^~~~~~~~~~~
../components/BLE/BLE_custom.cpp:573:14: error: jump to case label [-fpermissive]
case ESP_GATTS_STOP_EVT:
^~~~~~~~~~~~~~~~~~
../components/BLE/BLE_custom.cpp:544:42: note: crosses initialization of 'esp_ble_conn_update_params_t conn_params'
esp_ble_conn_update_params_t conn_params = {0};
^~~~~~~~~~~
../components/BLE/BLE_custom.cpp:575:14: error: jump to case label [-fpermissive]
case ESP_GATTS_OPEN_EVT:
^~~~~~~~~~~~~~~~~~
../components/BLE/BLE_custom.cpp:544:42: note: crosses initialization of 'esp_ble_conn_update_params_t conn_params'
esp_ble_conn_update_params_t conn_params = {0};
^~~~~~~~~~~
../components/BLE/BLE_custom.cpp:577:14: error: jump to case label [-fpermissive]
case ESP_GATTS_CANCEL_OPEN_EVT:
^~~~~~~~~~~~~~~~~~~~~~~~~
../components/BLE/BLE_custom.cpp:544:42: note: crosses initialization of 'esp_ble_conn_update_params_t conn_params'
esp_ble_conn_update_params_t conn_params = {0};
^~~~~~~~~~~
../components/BLE/BLE_custom.cpp:579:14: error: jump to case label [-fpermissive]
case ESP_GATTS_CLOSE_EVT:
^~~~~~~~~~~~~~~~~~~
../components/BLE/BLE_custom.cpp:544:42: note: crosses initialization of 'esp_ble_conn_update_params_t conn_params'
esp_ble_conn_update_params_t conn_params = {0};
^~~~~~~~~~~
../components/BLE/BLE_custom.cpp:581:14: error: jump to case label [-fpermissive]
case ESP_GATTS_LISTEN_EVT:
^~~~~~~~~~~~~~~~~~~~
../components/BLE/BLE_custom.cpp:544:42: note: crosses initialization of 'esp_ble_conn_update_params_t conn_params'
esp_ble_conn_update_params_t conn_params = {0};
^~~~~~~~~~~
../components/BLE/BLE_custom.cpp:583:14: error: jump to case label [-fpermissive]
case ESP_GATTS_CONGEST_EVT:
^~~~~~~~~~~~~~~~~~~~~
../components/BLE/BLE_custom.cpp:544:42: note: crosses initialization of 'esp_ble_conn_update_params_t conn_params'
esp_ble_conn_update_params_t conn_params = {0};
^~~~~~~~~~~
../components/BLE/BLE_custom.cpp:585:14: error: jump to case label [-fpermissive]
case ESP_GATTS_UNREG_EVT:
^~~~~~~~~~~~~~~~~~~
../components/BLE/BLE_custom.cpp:544:42: note: crosses initialization of 'esp_ble_conn_update_params_t conn_params'
esp_ble_conn_update_params_t conn_params = {0};
^~~~~~~~~~~
../components/BLE/BLE_custom.cpp:587:14: error: jump to case label [-fpermissive]
case ESP_GATTS_DELETE_EVT:
^~~~~~~~~~~~~~~~~~~~
../components/BLE/BLE_custom.cpp:544:42: note: crosses initialization of 'esp_ble_conn_update_params_t conn_params'
esp_ble_conn_update_params_t conn_params = {0};
^~~~~~~~~~~
../components/BLE/BLE_custom.cpp:589:9: error: jump to case label [-fpermissive]
default:
^~~~~~~
../components/BLE/BLE_custom.cpp:544:42: note: crosses initialization of 'esp_ble_conn_update_params_t conn_params'
esp_ble_conn_update_params_t conn_params = {0};
^~~~~~~~~~~
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_UNREG_EVT' not handled in switch [-Werror=switch]
switch (event) {
^
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_CREATE_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_ADD_INCL_SRVC_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_ADD_CHAR_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_ADD_CHAR_DESCR_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_DELETE_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_STOP_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_DISCONNECT_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_OPEN_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_CANCEL_OPEN_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_CLOSE_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_LISTEN_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_CONGEST_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_RESPONSE_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_CREAT_ATTR_TAB_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_SET_ATTR_VAL_EVT' not handled in switch [-Werror=switch]
../components/BLE/BLE_custom.cpp:385:12: error: enumeration value 'ESP_GATTS_SEND_SERVICE_CHANGE_EVT' not handled in switch [-Werror=switch]
Can someone suggest me a way to include a c++ component to my Bluetooth component?