@@ -38,6 +38,8 @@ class PluggableUSBModule {
3838 PluggableUSBModule (uint8_t numIfs) :
3939 numInterfaces (numIfs)
4040 { }
41+ virtual ~PluggableUSBModule ()
42+ { }
4143 void lock ();
4244 void unlock ();
4345 void assert_locked ();
@@ -49,17 +51,25 @@ class PluggableUSBModule {
4951 uint32_t write_finish (usb_ep_t endpoint);
5052
5153protected:
52- virtual const uint8_t *configuration_desc (uint8_t index);
53- virtual void callback_reset () {};
54- virtual void callback_state_change (USBDevice::DeviceState new_state);
55- virtual uint32_t callback_request (const USBDevice::setup_packet_t *setup, USBDevice::RequestResult *result, uint8_t ** data);
56- virtual bool callback_request_xfer_done (const USBDevice::setup_packet_t *setup, bool aborted);
57- virtual bool callback_set_configuration (uint8_t configuration);
58- virtual void callback_set_interface (uint16_t interface, uint8_t alternate);
59- virtual void init (EndpointResolver& resolver);
60- virtual const uint8_t *string_iinterface_desc ();
54+ virtual const uint8_t *configuration_desc (uint8_t index) = 0;
55+ virtual void callback_state_change (USBDevice::DeviceState new_state) = 0;
56+ virtual uint32_t callback_request (const USBDevice::setup_packet_t *setup, USBDevice::RequestResult *result, uint8_t ** data) = 0;
57+ virtual bool callback_request_xfer_done (const USBDevice::setup_packet_t *setup, bool aborted) = 0;
58+ virtual bool callback_set_configuration (uint8_t configuration) = 0;
59+ virtual void callback_set_interface (uint16_t interface, uint8_t alternate) = 0;
60+ virtual void init (EndpointResolver& resolver) = 0;
61+ virtual const uint8_t *string_iinterface_desc () = 0;
6162 virtual uint8_t getProductVersion () = 0;
6263
64+ /* *
65+ * Non-pure virtual method with a non-inline definition
66+ *
67+ * @note This satisfies all criteria necessary for the compiler to emit a
68+ * vtable, allowing users to safely subclass any of the derived "pluggable"
69+ * USB device classes (USBCDC, USBHID, USBMIDI, etc).
70+ */
71+ virtual void callback_reset ();
72+
6373 uint8_t pluggedInterface;
6474
6575 const uint8_t numInterfaces;
0 commit comments