USB Libraries Help > USB Device Libraries > USB Device Layer Library > Library Interface > e) Endpoint Management Functions > USB_DEVICE_EndpointEnable Function
MPLAB Harmony USB Stack
USB_DEVICE_EndpointEnable Function

This function enables a device endpoint for the specified transfer type and size. A Vendor specific device application may typically call this function in response to a Set Interface request from the host. Note that Device Layer will enable endpoints contained in Alternate Setting 0 of an interface, when the host configures the device. If there is only one alternate setting in an interface, the application may not need to call the USB_DEVICE_EndpointEnable function. 

If the device supports multiple alternate settings in an Interface, the device application must then disable an endpoint (if it was enabled) before re-enabling it with the new settings.The application can use the USB_DEVICE_EndpointIsEnabled function to check the status of the endpoint and USB_DEVICE_EndpointDisable function to disable the endpoint.

C
USB_DEVICE_RESULT USB_DEVICE_EndpointEnable(
    USB_DEVICE_HANDLE usbDeviceHandle, 
    uint8_t interface, 
    USB_ENDPOINT_ADDRESS endpoint, 
    USB_TRANSFER_TYPE transferType, 
    size_t size
);
Preconditions

The device should have been configured.

Parameters
Parameters 
Description 
usbDeviceHandle 
USB Device Layer Handle.
 
interface 
This parameter is ignored in the PIC32 USB Device Stack implementation.
 
endpoint 
Endpoint to enable.
 
transferType 
Type of transfer that this is endpoint will support. This should match the type reported to the host
 
size 
Maximum endpoint size. This should match the value reported to the host. 
Returns

USB_DEVICE_RESULT_OK - The endpoint was enabled successfully. 

USB_DEVICE_RESULT_ERROR_ENDPOINT_INVALID - The specified instance was not provisioned in the application and is invalid.

Remarks

None.

Example
// The following code example checks if an Set Alternate request has
// been received and changes the endpoint characteristics based on the
// alternate setting. Endpoint is 1 and direction is device to host.
// Assume that endpoint size was 32 bytes in alternate setting 0.

if(setAlternateRequest)
{
    if(alternateSetting == 1)
    {
        // Check if the endpoint is already enabled.
        if(USB_DEVICE_EndpointIsEnabled(usbDeviceHandle, (0x1|USB_EP_DIRECTION_IN)))
        {
            // Disable the endpoint.
            USB_DEVICE_EndpointDisable(usbDeviceHandle, (0x1|USB_EP_DIRECTION_IN));
        }

        // Re-enable the endpoint with new settings
        USB_DEVICE_EndpointEnable(usbDeviceHandle, 0, (0x1|USB_EP_DIRECTION_IN)
                    USB_TRANSFER_TYPE_BULK, 64);
    }
}