weak atrribute work around removed from CCRX_Port

This commit is contained in:
Wini-Buh
2021-06-11 22:25:36 +02:00
parent 5a554508ca
commit 1c23462b43
11 changed files with 74 additions and 349 deletions

View File

@@ -64,9 +64,6 @@
// Compiler porting with Attribute and Endian
//--------------------------------------------------------------------+
// define the standard definition of this macro to construct a "weak" function name
#define MAKE_WEAK_FUNC(func_name) func_name
// TODO refactor since __attribute__ is supported across many compiler
#if defined(__GNUC__)
#define TU_ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes)))
@@ -171,42 +168,6 @@
the aligned attribute (or something similar yet) */
#define TU_HAS_NO_ATTR_ALIGNED
/* activate the "weak" function emulation, because this toolchain does not
know the weak attribute (or something similar yet) */
#define TU_HAS_NO_ATTR_WEAK
// make sure to define away the standard definition of this macro
#undef MAKE_WEAK_FUNC
// Helper macro to construct a "weak" function name
#define MAKE_WEAK_FUNC(func_name) weak_ ## func_name
#if defined(TU_HAS_NO_ATTR_WEAK)
// "Weak function" emulation defined in cdc_device.h
#define ADD_WEAK_FUNC_TUD_CDC_RX_CB 0
#define ADD_WEAK_FUNC_TUD_CDC_RX_WANTED_CB 0
#define ADD_WEAK_FUNC_TUD_CDC_TX_COMPLETE_CB 0
#define ADD_WEAK_FUNC_TUD_CDC_LINE_STATE_CB 0
#define ADD_WEAK_FUNC_TUD_CDC_LINE_CODING_CB 0
#define ADD_WEAK_FUNC_TUD_CDC_SEND_BREAK_CB 0
// "Weak function" emulation defined in usbd_pvt.h
#define ADD_WEAK_FUNC_USBD_APP_DRIVER_GET_CB 0
// "Weak function" emulation defined in usbd.h
#define ADD_WEAK_FUNC_TUD_DESCRIPTOR_BOS_CB 0
#define ADD_WEAK_FUNC_TUD_DESCRIPTOR_DEVICE_QUALIFIER_CB 0
#define ADD_WEAK_FUNC_TUD_MOUNT_CB 0
#define ADD_WEAK_FUNC_TUD_UMOUNT_CB 0
#define ADD_WEAK_FUNC_TUD_SUSPEND_CB 0
#define ADD_WEAK_FUNC_TUD_RESUME_CB 0
#define ADD_WEAK_FUNC_TUD_VENDOR_CONTROL_XFER_CB 0
// "Weak function" emulation defined in dcd.h
#define ADD_WEAK_FUNC_DCD_EDPT0_STATUS_COMPLETE 0
#define ADD_WEAK_FUNC_DCD_EDPT_CLOSE 0
#define ADD_WEAK_FUNC_DCD_EDPT_XFER_FIFO 0
#endif
#else
#error "Compiler attribute porting is required"
#endif

View File

@@ -262,8 +262,9 @@ enum
// USB Descriptors
//--------------------------------------------------------------------+
TU_PACK_STRUCT_BEGIN // Start of definition of packed structs (used by the CCRX toolchain)
/// USB Device Descriptor
TU_PACK_STRUCT_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes.
@@ -284,12 +285,10 @@ typedef struct TU_ATTR_PACKED
uint8_t bNumConfigurations ; ///< Number of possible configurations.
} tusb_desc_device_t;
TU_PACK_STRUCT_END
TU_VERIFY_STATIC( sizeof(tusb_desc_device_t) == 18, "size is not correct");
// USB Binary Device Object Store (BOS) Descriptor
TU_PACK_STRUCT_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes
@@ -297,10 +296,8 @@ typedef struct TU_ATTR_PACKED
uint16_t wTotalLength ; ///< Total length of data returned for this descriptor
uint8_t bNumDeviceCaps ; ///< Number of device capability descriptors in the BOS
} tusb_desc_bos_t;
TU_PACK_STRUCT_END
/// USB Configuration Descriptor
TU_PACK_STRUCT_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes
@@ -313,10 +310,8 @@ typedef struct TU_ATTR_PACKED
uint8_t bmAttributes ; ///< Configuration characteristics \n D7: Reserved (set to one)\n D6: Self-powered \n D5: Remote Wakeup \n D4...0: Reserved (reset to zero) \n D7 is reserved and must be set to one for historical reasons. \n A device configuration that uses power from the bus and a local source reports a non-zero value in bMaxPower to indicate the amount of bus power required and sets D6. The actual power source at runtime may be determined using the GetStatus(DEVICE) request (see USB 2.0 spec Section 9.4.5). \n If a device configuration supports remote wakeup, D5 is set to one.
uint8_t bMaxPower ; ///< Maximum power consumption of the USB device from the bus in this specific configuration when the device is fully operational. Expressed in 2 mA units (i.e., 50 = 100 mA).
} tusb_desc_configuration_t;
TU_PACK_STRUCT_END
/// USB Interface Descriptor
TU_PACK_STRUCT_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes
@@ -330,10 +325,9 @@ typedef struct TU_ATTR_PACKED
uint8_t bInterfaceProtocol ; ///< Protocol code (assigned by the USB). \n These codes are qualified by the value of the bInterfaceClass and the bInterfaceSubClass fields. If an interface supports class-specific requests, this code identifies the protocols that the device uses as defined by the specification of the device class. \li If this field is reset to zero, the device does not use a class-specific protocol on this interface. \li If this field is set to FFH, the device uses a vendor-specific protocol for this interface.
uint8_t iInterface ; ///< Index of string descriptor describing this interface
} tusb_desc_interface_t;
TU_PACK_STRUCT_END
/// USB Endpoint Descriptor
TU_PACK_STRUCT_BEGIN
TU_BIT_FIELD_ORDER_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes
@@ -341,14 +335,12 @@ typedef struct TU_ATTR_PACKED
uint8_t bEndpointAddress ; ///< The address of the endpoint on the USB device described by this descriptor. The address is encoded as follows: \n Bit 3...0: The endpoint number \n Bit 6...4: Reserved, reset to zero \n Bit 7: Direction, ignored for control endpoints 0 = OUT endpoint 1 = IN endpoint.
TU_BIT_FIELD_ORDER_BEGIN
struct TU_ATTR_PACKED {
uint8_t xfer : 2;
uint8_t sync : 2;
uint8_t usage : 2;
uint8_t : 2;
} bmAttributes ; ///< This field describes the endpoint's attributes when it is configured using the bConfigurationValue. \n Bits 1..0: Transfer Type \n- 00 = Control \n- 01 = Isochronous \n- 10 = Bulk \n- 11 = Interrupt \n If not an isochronous endpoint, bits 5..2 are reserved and must be set to zero. If isochronous, they are defined as follows: \n Bits 3..2: Synchronization Type \n- 00 = No Synchronization \n- 01 = Asynchronous \n- 10 = Adaptive \n- 11 = Synchronous \n Bits 5..4: Usage Type \n- 00 = Data endpoint \n- 01 = Feedback endpoint \n- 10 = Implicit feedback Data endpoint \n- 11 = Reserved \n Refer to Chapter 5 of USB 2.0 specification for more information. \n All other bits are reserved and must be reset to zero. Reserved bits must be ignored by the host.
TU_BIT_FIELD_ORDER_END
struct TU_ATTR_PACKED {
#if defined(__CCRX__)
@@ -363,10 +355,9 @@ typedef struct TU_ATTR_PACKED
uint8_t bInterval ; ///< Interval for polling endpoint for data transfers. Expressed in frames or microframes depending on the device operating speed (i.e., either 1 millisecond or 125 us units). \n- For full-/high-speed isochronous endpoints, this value must be in the range from 1 to 16. The bInterval value is used as the exponent for a \f$ 2^(bInterval-1) \f$ value; e.g., a bInterval of 4 means a period of 8 (\f$ 2^(4-1) \f$). \n- For full-/low-speed interrupt endpoints, the value of this field may be from 1 to 255. \n- For high-speed interrupt endpoints, the bInterval value is used as the exponent for a \f$ 2^(bInterval-1) \f$ value; e.g., a bInterval of 4 means a period of 8 (\f$ 2^(4-1) \f$) . This value must be from 1 to 16. \n- For high-speed bulk/control OUT endpoints, the bInterval must specify the maximum NAK rate of the endpoint. A value of 0 indicates the endpoint never NAKs. Other values indicate at most 1 NAK each bInterval number of microframes. This value must be in the range from 0 to 255. \n Refer to Chapter 5 of USB 2.0 specification for more information.
} tusb_desc_endpoint_t;
TU_PACK_STRUCT_END
TU_BIT_FIELD_ORDER_END
/// USB Other Speed Configuration Descriptor
TU_PACK_STRUCT_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of descriptor
@@ -379,10 +370,8 @@ typedef struct TU_ATTR_PACKED
uint8_t bmAttributes ; ///< Same as Configuration descriptor
uint8_t bMaxPower ; ///< Same as Configuration descriptor
} tusb_desc_other_speed_t;
TU_PACK_STRUCT_END
/// USB Device Qualifier Descriptor
TU_PACK_STRUCT_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of descriptor
@@ -396,10 +385,8 @@ typedef struct TU_ATTR_PACKED
uint8_t bNumConfigurations ; ///< Number of Other-speed Configurations
uint8_t bReserved ; ///< Reserved for future use, must be zero
} tusb_desc_device_qualifier_t;
TU_PACK_STRUCT_END
/// USB Interface Association Descriptor (IAD ECN)
TU_PACK_STRUCT_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of descriptor
@@ -414,20 +401,16 @@ typedef struct TU_ATTR_PACKED
uint8_t iFunction ; ///< Index of the string descriptor describing the interface association.
} tusb_desc_interface_assoc_t;
TU_PACK_STRUCT_END
// USB String Descriptor
TU_PACK_STRUCT_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength ; ///< Size of this descriptor in bytes
uint8_t bDescriptorType ; ///< Descriptor Type
uint16_t unicode_string[];
} tusb_desc_string_t;
TU_PACK_STRUCT_END
// USB Binary Device Object Store (BOS)
TU_PACK_STRUCT_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength;
@@ -437,10 +420,8 @@ typedef struct TU_ATTR_PACKED
uint8_t PlatformCapabilityUUID[16];
uint8_t CapabilityData[];
} tusb_desc_bos_platform_t;
TU_PACK_STRUCT_END
// USB WebuSB URL Descriptor
TU_PACK_STRUCT_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength;
@@ -448,17 +429,15 @@ typedef struct TU_ATTR_PACKED
uint8_t bScheme;
char url[];
} tusb_desc_webusb_url_t;
TU_PACK_STRUCT_END
// DFU Functional Descriptor
TU_PACK_STRUCT_BEGIN
TU_BIT_FIELD_ORDER_BEGIN
typedef struct TU_ATTR_PACKED
{
uint8_t bLength;
uint8_t bDescriptorType;
union {
TU_BIT_FIELD_ORDER_BEGIN
struct TU_ATTR_PACKED {
uint8_t bitCanDnload : 1;
uint8_t bitCanUpload : 1;
@@ -466,7 +445,6 @@ typedef struct TU_ATTR_PACKED
uint8_t bitWillDetach : 1;
uint8_t reserved : 4;
} bmAttributes;
TU_BIT_FIELD_ORDER_END
uint8_t bAttributes;
};
@@ -475,21 +453,19 @@ typedef struct TU_ATTR_PACKED
uint16_t wTransferSize;
uint16_t bcdDFUVersion;
} tusb_desc_dfu_functional_t;
TU_PACK_STRUCT_END
TU_BIT_FIELD_ORDER_END
/*------------------------------------------------------------------*/
/* Types
*------------------------------------------------------------------*/
TU_PACK_STRUCT_BEGIN
TU_BIT_FIELD_ORDER_BEGIN
typedef struct TU_ATTR_PACKED{
union {
TU_BIT_FIELD_ORDER_BEGIN
struct TU_ATTR_PACKED {
uint8_t recipient : 5; ///< Recipient type tusb_request_recipient_t.
uint8_t type : 2; ///< Request type tusb_request_type_t.
uint8_t direction : 1; ///< Direction type. tusb_dir_t
} bmRequestType_bit;
TU_BIT_FIELD_ORDER_END
uint8_t bmRequestType;
};
@@ -499,7 +475,9 @@ typedef struct TU_ATTR_PACKED{
uint16_t wIndex;
uint16_t wLength;
} tusb_control_request_t;
TU_PACK_STRUCT_END
TU_BIT_FIELD_ORDER_END
TU_PACK_STRUCT_END // End of definition of packed structs (used by the CCRX toolchain)
TU_VERIFY_STATIC( sizeof(tusb_control_request_t) == 8, "size is not correct");