Skip to content

Rename USB sources from .c to .cpp to enable C++ features#763

Open
forderud wants to merge 6 commits intoPaulStoffregen:masterfrom
forderud:usb-cpp
Open

Rename USB sources from .c to .cpp to enable C++ features#763
forderud wants to merge 6 commits intoPaulStoffregen:masterfrom
forderud:usb-cpp

Conversation

@forderud
Copy link

@forderud forderud commented Sep 23, 2024

Follow-up to #767. That renames the USB source file extension from .c to .cpp so that they're compiled as C++ code. Needed to add some extern "C" a few places to resolve linker errors.

Motivation

I want to improve compatibility with C++11 (and newer), so that I can use constexpr in USB-related code as proposed in #766.

Move the "core_pins.h" includes in usb.c and usb_seremu.c up to enable building the sources as C++ code. The "core_pins.h" include needs to be placed above the "usb_serial.h" and "usb_seremu.h" includes, since these headers contain C++ code that depends on functions in "core_pins.h".

Fixes the following compiler errors if renaming the sources in question from .c to .cpp:
In file included from teensy4\usb.cpp:5:
teensy4\usb_seremu.h: In member function 'void usb_seremu_class::begin(long int)':
teensy4\usb_seremu.h:68:41: error: 'systick_millis_count' was not declared in this scope
   68 |                 uint32_t millis_begin = systick_millis_count;
      |                                         ^~~~~~~~~~~~~~~~~~~~
teensy4\usb_seremu.h:79:25: error: 'yield' was not declared in this scope
   79 |                         yield();
      |                         ^~~~~
teensy4\usb_seremu.h: In member function 'usb_seremu_class::operator bool()':
teensy4\usb_seremu.h:102:27: error: 'yield' was not declared in this scope
  102 |         operator bool() { yield(); return usb_configuration && usb_seremu_online; }
      |                           ^~~~~
In file included from teensy4\usb_seremu.cpp:32:
teensy4\usb_seremu.h: In member function 'void usb_seremu_class::begin(long int)':
teensy4\usb_seremu.h:68:41: error: 'systick_millis_count' was not declared in this scope
   68 |                 uint32_t millis_begin = systick_millis_count;
      |                                         ^~~~~~~~~~~~~~~~~~~~
teensy4\usb_seremu.h:79:25: error: 'yield' was not declared in this scope
   79 |                         yield();
      |                         ^~~~~
teensy4\usb_seremu.h: In member function 'usb_seremu_class::operator bool()':
teensy4\usb_seremu.h:102:27: error: 'yield' was not declared in this scope
  102 |         operator bool() { yield(); return usb_configuration && usb_seremu_online; }
      |                           ^~~~~
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant