131 lines
4.3 KiB
C
131 lines
4.3 KiB
C
/*
|
|
* PHDC routines of Cypress USB Serial
|
|
* Copyright (C) 2013 Cypress Semiconductor
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
#include "CyUSBCommon.h"
|
|
/*
|
|
PHDC clear feature
|
|
*/
|
|
CY_RETURN_STATUS CyPhdcClrFeature (CY_HANDLE handle)
|
|
{
|
|
|
|
UINT16 wValue, wIndex, wLength;
|
|
UINT8 bmRequestType, bmRequest;
|
|
int rStatus;
|
|
UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT;
|
|
CY_DEVICE *device;
|
|
libusb_device_handle *devHandle;
|
|
|
|
if (handle == NULL)
|
|
return CY_ERROR_INVALID_HANDLE;
|
|
device = (CY_DEVICE *)handle;
|
|
devHandle = device->devHandle;
|
|
|
|
bmRequestType = CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE;
|
|
bmRequest = CY_PHDC_CLR_FEATURE;
|
|
wValue = CY_PHDC_CLR_FEATURE_WVALUE;
|
|
wIndex = device->interfaceNum;
|
|
wLength = 0;
|
|
|
|
rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest,
|
|
wValue, wIndex, NULL, wLength, ioTimeout);
|
|
if (rStatus == 0)
|
|
return CY_SUCCESS;
|
|
else if (rStatus == LIBUSB_ERROR_TIMEOUT){
|
|
CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__);
|
|
return CY_ERROR_IO_TIMEOUT;
|
|
}
|
|
else {
|
|
CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus);
|
|
return CY_ERROR_REQUEST_FAILED;
|
|
}
|
|
return CY_SUCCESS;
|
|
}
|
|
/*
|
|
PHDC set feature
|
|
*/
|
|
CY_RETURN_STATUS CyPhdcSetFeature (CY_HANDLE handle)
|
|
{
|
|
|
|
UINT16 wValue, wIndex, wLength;
|
|
UINT8 bmRequestType, bmRequest;
|
|
int rStatus, ioTimeout = CY_USB_SERIAL_TIMEOUT ;
|
|
CY_DEVICE *device;
|
|
libusb_device_handle *devHandle;
|
|
|
|
if (handle == NULL)
|
|
return CY_ERROR_INVALID_HANDLE;
|
|
device = (CY_DEVICE *)handle;
|
|
devHandle = device->devHandle;
|
|
|
|
bmRequestType = CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE;
|
|
bmRequest = CY_PHDC_SET_FEATURE;
|
|
wValue = CY_PHDC_SET_FEATURE_WVALUE;
|
|
wIndex = device->interfaceNum;
|
|
wLength = 0;
|
|
|
|
rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest,
|
|
wValue, wIndex, NULL, wLength, ioTimeout);
|
|
if (rStatus == 0)
|
|
return CY_SUCCESS;
|
|
else if (rStatus == LIBUSB_ERROR_TIMEOUT){
|
|
CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__);
|
|
return CY_ERROR_IO_TIMEOUT;
|
|
}
|
|
else {
|
|
CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus);
|
|
return CY_ERROR_REQUEST_FAILED;
|
|
}
|
|
}
|
|
/*
|
|
PHDC clear feature
|
|
*/
|
|
CY_RETURN_STATUS CyPhdcGetStatus (CY_HANDLE handle, UINT16 *dataStatus)
|
|
{
|
|
|
|
UINT16 wValue, wIndex, wLength;
|
|
UINT8 bmRequestType, bmRequest;
|
|
int rStatus;
|
|
UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT ;
|
|
CY_DEVICE *device;
|
|
libusb_device_handle *devHandle;
|
|
|
|
if (handle == NULL)
|
|
return CY_ERROR_INVALID_HANDLE;
|
|
device = (CY_DEVICE *)handle;
|
|
devHandle = device->devHandle;
|
|
|
|
bmRequestType = CY_CLASS_INTERFACE_REQUEST_DEVICE_TO_HOST;
|
|
bmRequest = CY_PHDC_GET_DATA_STATUS;
|
|
wValue = 0x00;
|
|
wIndex = device->interfaceNum;
|
|
wLength = CY_PHDC_GET_STATUS_LEN;
|
|
|
|
rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest,
|
|
wValue, wIndex, (unsigned char*)dataStatus, wLength, ioTimeout);
|
|
if (rStatus > 0)
|
|
return CY_SUCCESS;
|
|
else if (rStatus == LIBUSB_ERROR_TIMEOUT){
|
|
CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__);
|
|
return CY_ERROR_IO_TIMEOUT;
|
|
}
|
|
else {
|
|
CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus);
|
|
return CY_ERROR_REQUEST_FAILED;
|
|
}
|
|
}
|