本文整理汇总了C++中INTFNUM_OFFSET函数的典型用法代码示例。如果您正苦于以下问题:C++ INTFNUM_OFFSET函数的具体用法?C++ INTFNUM_OFFSET怎么用?C++ INTFNUM_OFFSET使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了INTFNUM_OFFSET函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: kUSBHID_waitingForSend
/*
This function indicates the status of the interface intfNum.
If a send operation is active for this interface,
the function also returns the number of bytes that have been transmitted to the host.
If a receiver operation is active for this interface, the function also returns
the number of bytes that have been received from the host and are waiting at the assigned address.
returns kUSBHID_waitingForSend (indicates that a call to USBHID_SendData()
has been made, for which data transfer has not been completed)
returns kUSBHID_waitingForReceive (indicates that a receive operation
has been initiated, but not all data has yet been received)
returns kUSBHID_dataWaiting (indicates that data has been received
from the host, waiting in the USB receive buffers)
*/
BYTE USBHID_intfStatus(BYTE intfNum, WORD* bytesSent, WORD* bytesReceived)
{
BYTE ret = 0;
unsigned short bGIE;
BYTE edbIndex;
*bytesSent = 0;
*bytesReceived = 0;
edbIndex = stUsbHandle[intfNum].edb_Index;
bGIE = (__get_SR_register() &GIE); //save interrupt status
__disable_interrupt(); //disable interrupts - atomic operation
// Is send operation underway?
if (HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSendLeft != 0)
{
ret |= kUSBHID_waitingForSend;
*bytesSent = HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSend - HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSendLeft;
}
//Is receive operation underway?
if (HidReadCtrl[INTFNUM_OFFSET(intfNum)].pUserBuffer != NULL)
{
ret |= kUSBHID_waitingForReceive;
*bytesReceived = HidReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesToReceive - HidReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesToReceiveLeft;
}
else // not receive operation started
{
// do not access USB memory if suspended (PLL off). It may produce BUS_ERROR
if (!bFunctionSuspended)
{
if((tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX & EPBCNT_NAK) | //any of buffers has a valid data packet
(tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY & EPBCNT_NAK))
{
ret |= kUSBHID_dataWaiting;
}
}
}
if ((bFunctionSuspended) ||
(bEnumerationStatus != ENUMERATION_COMPLETE))
{
// if suspended or not enumerated - report no other tasks pending
ret = kUSBHID_busNotAvailable;
}
//restore interrupt status
__bis_SR_register(bGIE); //restore interrupt status
return ret;
}
开发者ID:MSP-EricLoeffler,项目名称:MSPBSL_USB_Tool,代码行数:68,代码来源:UsbHid.c
示例2: USBHID_abortSend
/*
Aborts an active send operation on interface intfNum.
Returns the number of bytes that were sent prior to the abort, in size.
*/
BYTE USBHID_abortSend(WORD* size, BYTE intfNum)
{
unsigned short bGIE;
bGIE = (__get_SR_register() &GIE); //save interrupt status
__disable_interrupt(); //disable interrupts - atomic operation
*size = (HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSend - HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSendLeft);
HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSend = 0;
HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSendLeft = 0;
__bis_SR_register(bGIE); //restore interrupt status
return kUSB_succeed;
}
开发者ID:MSP-EricLoeffler,项目名称:MSPBSL_USB_Tool,代码行数:18,代码来源:UsbHid.c
示例3: USBPHDC_abortSend
/*
* Aborts an active send operation on interface intfNum.
* Returns the number of bytes that were sent prior to the abort, in size.
*/
uint8_t USBPHDC_abortSend (uint16_t* size, uint8_t intfNum)
{
uint8_t edbIndex;
uint16_t state;
edbIndex = stUsbHandle[intfNum].edb_Index;
state = usbDisableInEndpointInterrupt(edbIndex);
*size =
(PHDCWriteCtrl[INTFNUM_OFFSET(intfNum)].nPHDCBytesToSend -
PHDCWriteCtrl[INTFNUM_OFFSET(intfNum)].nPHDCBytesToSendLeft);
PHDCWriteCtrl[INTFNUM_OFFSET(intfNum)].nPHDCBytesToSend = 0;
PHDCWriteCtrl[INTFNUM_OFFSET(intfNum)].nPHDCBytesToSendLeft = 0;
usbRestoreInEndpointInterrupt(state);
return (USB_SUCCEED);
}
开发者ID:Greeeg,项目名称:gpsLogger,代码行数:21,代码来源:UsbPHDC.c
示例4: USBPHDC_abortSend
/*
* Aborts an active send operation on interface intfNum.
* Returns the number of bytes that were sent prior to the abort, in size.
*/
BYTE USBPHDC_abortSend (WORD* size, BYTE intfNum)
{
BYTE edbIndex;
WORD state;
edbIndex = stUsbHandle[intfNum].edb_Index;
state = usbDisableInEndpointInterrupt(edbIndex);
*size =
(PHDCWriteCtrl[INTFNUM_OFFSET(intfNum)].nPHDCBytesToSend -
PHDCWriteCtrl[INTFNUM_OFFSET(intfNum)].nPHDCBytesToSendLeft);
PHDCWriteCtrl[INTFNUM_OFFSET(intfNum)].nPHDCBytesToSend = 0;
PHDCWriteCtrl[INTFNUM_OFFSET(intfNum)].nPHDCBytesToSendLeft = 0;
usbRestoreInEndpointInterrupt(state);
return (kUSB_succeed);
}
开发者ID:phooky,项目名称:Snap-Pad,代码行数:21,代码来源:UsbPHDC.c
示例5: USBHID_sendData
/*
Sends data over interface intfNum, of size size and starting at address data.
Returns: kUSBHID_sendStarted
kUSBHID_sendComplete
kUSBHID_intBusyError
*/
BYTE USBHID_sendData(const BYTE* data, WORD size, BYTE intfNum)
{
unsigned short bGIE;
BYTE edbIndex;
edbIndex = stUsbHandle[intfNum].edb_Index;
if (size == 0)
{
return kUSBHID_generalError;
}
bGIE = (__get_SR_register() &GIE); //save interrupt status
// atomic operation - disable interrupts
__disable_interrupt(); // Disable global interrupts
// do not access USB memory if suspended (PLL off). It may produce BUS_ERROR
if ((bFunctionSuspended) ||
(bEnumerationStatus != ENUMERATION_COMPLETE))
{
// data can not be read because of USB suspended
__bis_SR_register(bGIE); //restore interrupt status
return kUSBHID_busNotAvailable;
}
if (HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSendLeft != 0)
{
// the USB still sends previous data, we have to wait
__bis_SR_register(bGIE); //restore interrupt status
return kUSBHID_intfBusyError;
}
//This function generate the USB interrupt. The data will be sent out from interrupt
HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSend = size;
HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSendLeft = size;
HidWriteCtrl[INTFNUM_OFFSET(intfNum)].pHidBufferToSend = data;
//trigger Endpoint Interrupt - to start send operation
USBIEPIFG |= 1<<(edbIndex+1); //IEPIFGx;
__bis_SR_register(bGIE); //restore interrupt status
return kUSBHID_sendStarted;
}
开发者ID:MSP-EricLoeffler,项目名称:MSPBSL_USB_Tool,代码行数:51,代码来源:UsbHid.c
示例6: USBCDC_abortSend
/*
* Aborts an active send operation on interface intfNum.
* Returns the number of bytes that were sent prior to the abort, in size.
*/
BYTE USBCDC_abortSend (WORD* size, BYTE intfNum)
{
BYTE edbIndex;
WORD state;
edbIndex = stUsbHandle[intfNum].edb_Index;
state = usbDisableInEndpointInterrupt(edbIndex); //disable interrupts - atomic operation
*size =
(CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSend -
CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSendLeft);
CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSend = 0;
CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSendLeft = 0;
usbRestoreInEndpointInterrupt(state);
return (kUSB_succeed);
}
开发者ID:jlhonora,项目名称:pendrive,代码行数:22,代码来源:UsbCdc.c
示例7: CdcToBufferFromHost_Bridge
//this function is used only by USB interrupt.
//It fills user receiving buffer with received data
BOOL CdcToBufferFromHost_Bridge (BYTE intfNum)
{
BYTE *pEP1, *pCT1;
BYTE nTmp1;
BYTE bWakeUp = FALSE; //per default we do not wake up after interrupt
BYTE i;
BYTE edbIndex;
edbIndex = stUsbHandle[intfNum].edb_Index;
//No data to receive...
if (!((tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX & 0x80))){
return (bWakeUp);
}
if (CdcBridgeCtrl.ctsState == 0) {
return (bWakeUp);
}
//this is the active EP buffer
pEP1 = (BYTE*)stUsbHandle[intfNum].oep_X_Buffer;
pCT1 = &tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX;
__no_operation();
__no_operation();
//how many byte we can get from endpoint buffer
nTmp1 = *pCT1;
if (nTmp1 & EPBCNT_NAK){
nTmp1 = nTmp1 & 0x7f; //clear NAK bit
CdcReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesInEp = nTmp1; //holds how many valid bytes in the EP buffer
if (nTmp1 > 0) {
//Start DMA
if (nTmp1 > 5 ) {
//Start DMA
while (!(*CdcBridgeCtrl.uartIFG & UCTXIFG));
*CdcBridgeCtrl.uartTx = *pEP1;
*CdcBridgeCtrl.usbToUartDmaChSz = nTmp1 - 1; // Block size
*CdcBridgeCtrl.usbToUartDmaChCtl = DMADT_0 + DMASRCINCR_3 + DMASBDB + DMAEN + DMAIE;// Rpt, inc src, enable
}
else {
for (i = 0; i < nTmp1; i++) {
while (!(*CdcBridgeCtrl.uartIFG & UCTXIFG)); // USCI_A0 TX buffer ready?
*CdcBridgeCtrl.uartTx = *pEP1++; // TX -> RXed character
}
*pCT1 = 0x00;
}
}
else {
*pCT1 = 0x00;
}
}
return (bWakeUp);
}
开发者ID:jlhonora,项目名称:pendrive,代码行数:59,代码来源:UsbCdc.c
示例8: USBCDC_abortSend
uint8_t USBCDC_abortSend (uint16_t* size, uint8_t intfNum)
{
uint8_t edbIndex;
uint16_t state;
edbIndex = stUsbHandle[intfNum].edb_Index;
state = usbDisableInEndpointInterrupt(edbIndex); //disable interrupts - atomic operation
*size =
(CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSend -
CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSendLeft);
CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSend = 0;
CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSendLeft = 0;
usbRestoreInEndpointInterrupt(state);
return (USB_SUCCEED);
}
开发者ID:DoctorKey,项目名称:msp430_workshop,代码行数:18,代码来源:UsbCdc.c
示例9: USBHID_sendData
/*
* Sends data over interface intfNum, of size size and starting at address data.
* Returns: kUSBHID_sendStarted
* kUSBHID_sendComplete
* kUSBHID_intBusyError
*/
BYTE USBHID_sendData (const BYTE* data, WORD size, BYTE intfNum)
{
WORD state;
BYTE edbIndex;
edbIndex = stUsbHandle[intfNum].edb_Index;
if (size == 0){
return (kUSBHID_generalError);
}
state = usbDisableInEndpointInterrupt(edbIndex);
//atomic operation - disable interrupts
//do not access USB memory if suspended (PLL off). It may produce BUS_ERROR
if ((bFunctionSuspended) ||
(bEnumerationStatus != ENUMERATION_COMPLETE)){
//data can not be read because of USB suspended
usbRestoreInEndpointInterrupt(state);
return (kUSBHID_busNotAvailable);
}
if (HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSendLeft != 0){
//the USB still sends previous data, we have to wait
usbRestoreInEndpointInterrupt(state);
return (kUSBHID_intfBusyError);
}
//This function generate the USB interrupt. The data will be sent out from interrupt
HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSend = size;
HidWriteCtrl[INTFNUM_OFFSET(intfNum)].nHidBytesToSendLeft = size;
HidWriteCtrl[INTFNUM_OFFSET(intfNum)].pHidBufferToSend = data;
//trigger Endpoint Interrupt - to start send operation
USBIEPIFG |= 1 << (edbIndex + 1); //IEPIFGx;
usbRestoreInEndpointInterrupt(state);
return (kUSBHID_sendStarted);
}
开发者ID:Hsinmo,项目名称:fatool-fw-v1,代码行数:48,代码来源:UsbHid.c
示例10: USBHID_rejectData
/*
* This function rejects payload data that has been received from the host.
*/
BYTE USBHID_rejectData (BYTE intfNum)
{
WORD state;
BYTE edbIndex;
edbIndex = stUsbHandle[intfNum].edb_Index;
state = usbDisableOutEndpointInterrupt(edbIndex);
//interrupts disable
//do not access USB memory if suspended (PLL off). It may produce BUS_ERROR
if (bFunctionSuspended){
usbRestoreOutEndpointInterrupt(state);
return (kUSBHID_busNotAvailable);
}
//Is receive operation underway?
//- do not flush buffers if any operation still active.
if (!HidReadCtrl[INTFNUM_OFFSET(intfNum)].pUserBuffer){
BYTE tmp1 = tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX &
EPBCNT_NAK;
BYTE tmp2 = tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY &
EPBCNT_NAK;
if (tmp1 ^ tmp2){ //switch current buffer if any and only ONE of the
//buffers is full
//switch current buffer
HidReadCtrl[INTFNUM_OFFSET(intfNum)].bCurrentBufferXY =
(HidReadCtrl[INTFNUM_OFFSET(intfNum)].bCurrentBufferXY +
1) & 0x01;
}
tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX = 0; //flush buffer X
tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY = 0; //flush buffer Y
HidReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesInEp = 0; //indicates that no more data available in the EP
}
usbRestoreOutEndpointInterrupt(state);
return (kUSB_succeed);
}
开发者ID:Hsinmo,项目名称:fatool-fw-v1,代码行数:44,代码来源:UsbHid.c
示例11: USBCDC_abortReceive
/*
* Aborts an active receive operation on interface intfNum.
* Returns the number of bytes that were received and transferred
* to the data location established for this receive operation.
*/
BYTE USBCDC_abortReceive (WORD* size, BYTE intfNum)
{
//interrupts disable
BYTE edbIndex;
WORD state;
edbIndex = stUsbHandle[intfNum].edb_Index;
state = usbDisableOutEndpointInterrupt(edbIndex);
*size = 0; //set received bytes count to 0
//is receive operation underway?
if (CdcReadCtrl[INTFNUM_OFFSET(intfNum)].pUserBuffer){
//how many bytes are already received?
*size = CdcReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesToReceive -
CdcReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesToReceiveLeft;
CdcReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesInEp = 0;
CdcReadCtrl[INTFNUM_OFFSET(intfNum)].pUserBuffer = NULL;
CdcReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesToReceiveLeft = 0;
}
//restore interrupt status
usbRestoreOutEndpointInterrupt(state);
return (kUSB_succeed);
}
开发者ID:jlhonora,项目名称:pendrive,代码行数:31,代码来源:UsbCdc.c
示例12: USBCDC_rejectData
uint8_t USBCDC_rejectData (uint8_t intfNum)
{
uint8_t edbIndex;
uint16_t state;
edbIndex = stUsbHandle[intfNum].edb_Index;
state = usbDisableOutEndpointInterrupt(edbIndex);
//atomic operation - disable interrupts
//do not access USB memory if suspended (PLL off). It may produce BUS_ERROR
if (bFunctionSuspended){
usbRestoreOutEndpointInterrupt(state);
return (USBCDC_BUS_NOT_AVAILABLE);
}
//Is receive operation underway?
//- do not flush buffers if any operation still active.
if (!CdcReadCtrl[INTFNUM_OFFSET(intfNum)].pUserBuffer){
uint8_t tmp1 = tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX &
EPBCNT_NAK;
uint8_t tmp2 = tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY &
EPBCNT_NAK;
if (tmp1 ^ tmp2){ //switch current buffer if any and only ONE of buffers
//is full
//switch current buffer
CdcReadCtrl[INTFNUM_OFFSET(intfNum)].bCurrentBufferXY =
(CdcReadCtrl[INTFNUM_OFFSET(intfNum)].bCurrentBufferXY +
1) & 0x01;
}
tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX = 0; //flush buffer X
tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY = 0; //flush buffer Y
CdcReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesInEp = 0; //indicates that no more data available in the EP
}
usbRestoreOutEndpointInterrupt(state);
return (USB_SUCCEED);
}
开发者ID:DoctorKey,项目名称:msp430_workshop,代码行数:40,代码来源:UsbCdc.c
示例13: USBCDC_sendData
uint8_t USBCDC_sendData (const uint8_t* data, uint16_t size, uint8_t intfNum)
{
uint8_t edbIndex;
uint16_t state;
edbIndex = stUsbHandle[intfNum].edb_Index;
if (size == 0){
return (USBCDC_GENERAL_ERROR);
}
state = usbDisableInEndpointInterrupt(edbIndex);
//do not access USB memory if suspended (PLL uce BUS_ERROR
if ((bFunctionSuspended) ||
(bEnumerationStatus != ENUMERATION_COMPLETE)){
//data can not be read because of USB suspended
usbRestoreInEndpointInterrupt(state); //restore interrupt status
return (USBCDC_BUS_NOT_AVAILABLE);
}
if (CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSendLeft != 0){
//the USB still sends previous data, we have to wait
usbRestoreInEndpointInterrupt(state); //restore interrupt status
return (USBCDC_INTERFACE_BUSY_ERROR);
}
//This function generate the USB interrupt. The data will be sent out from interrupt
CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSend = size;
CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSendLeft = size;
CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].pUsbBufferToSend = data;
//trigger Endpoint Interrupt - to start send operation
USBIEPIFG |= 1 << (edbIndex + 1); //IEPIFGx;
usbRestoreInEndpointInterrupt(state);
return (USBCDC_SEND_STARTED);
}
开发者ID:DoctorKey,项目名称:msp430_workshop,代码行数:40,代码来源:UsbCdc.c
示例14: USBPHDC_abortReceive
/*
* Aborts an active receive operation on interface intfNum.
* Returns the number of bytes that were received and transferred
* to the data location established for this receive operation.
*/
uint8_t USBPHDC_abortReceive (uint16_t* size, uint8_t intfNum)
{
uint16_t state;
edbIndex = stUsbHandle[intfNum].edb_Index;
state = usbDisableOutEndpointInterrupt(edbIndex);
*size = 0; //set received bytes count to 0
//is receive operation underway?
if (PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].pUserBuffer){
//how many bytes are already received?
*size = PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesToReceive -
PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesToReceiveLeft;
PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesInEp = 0;
PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].pUserBuffer = NULL;
PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesToReceiveLeft = 0;
}
//restore interrupt status
usbRestoreOutEndpointInterrupt(state);
return (USB_SUCCEED);
}
开发者ID:Greeeg,项目名称:gpsLogger,代码行数:31,代码来源:UsbPHDC.c
示例15: USBHID_sendReport
/*
Sends a pre-built report reportData to the host.
Returns: kUSBHID_sendComplete
kUSBHID_intfBusyError
kUSBCDC_busNotAvailable
*/
BYTE USBHID_sendReport(const BYTE * reportData, BYTE intfNum)
{
BYTE byte_count;
BYTE * pEP1;
BYTE * pCT1;
BYTE edbIndex;
edbIndex = stUsbHandle[intfNum].edb_Index;
// do not access USB memory if suspended (PLL off). It may produce BUS_ERROR
if ((bFunctionSuspended) ||
(bEnumerationStatus != ENUMERATION_COMPLETE))
{
return kUSBHID_busNotAvailable;
}
if (HidWriteCtrl[INTFNUM_OFFSET(intfNum)].bCurrentBufferXY == X_BUFFER)
{
//this is the active EP buffer
pEP1 = (BYTE*)stUsbHandle[intfNum].iep_X_Buffer;
pCT1 = &tInputEndPointDescriptorBlock[edbIndex].bEPBCTX;
}
else
{
//this is the active EP buffer
pEP1 = (BYTE*)stUsbHandle[intfNum].iep_Y_Buffer;
pCT1 = &tInputEndPointDescriptorBlock[edbIndex].bEPBCTY;
}
byte_count = USBHID_REPORT_LENGTH; // we support only one length of report
if(*pCT1 & EPBCNT_NAK) // if this EP is empty
{
USB_TX_memcpy(pEP1, reportData, byte_count); // copy data into IEP X or Y buffer
*pCT1 = byte_count; // Set counter for usb In-Transaction
HidWriteCtrl[INTFNUM_OFFSET(intfNum)].bCurrentBufferXY = (HidWriteCtrl[INTFNUM_OFFSET(intfNum)].bCurrentBufferXY+1)&0x01; //switch buffer
return kUSBHID_sendComplete;
}
return kUSBHID_intfBusyError;
}
开发者ID:MSP-EricLoeffler,项目名称:MSPBSL_USB_Tool,代码行数:46,代码来源:UsbHid.c
示例16: USBHID_rejectData
/*
This function rejects payload data that has been received from the host.
*/
BYTE USBHID_rejectData(BYTE intfNum)
{
unsigned short bGIE;
BYTE edbIndex;
edbIndex = stUsbHandle[intfNum].edb_Index;
bGIE = (__get_SR_register() &GIE); //save interrupt status
//interrupts disable
__disable_interrupt();
// do not access USB memory if suspended (PLL off). It may produce BUS_ERROR
if (bFunctionSuspended)
{
__bis_SR_register(bGIE); //restore interrupt status
return kUSBHID_busNotAvailable;
}
//Is receive operation underway?
// - do not flush buffers if any operation still active.
if (!HidReadCtrl[INTFNUM_OFFSET(intfNum)].pUserBuffer)
{
BYTE tmp1 = tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX & EPBCNT_NAK;
BYTE tmp2 = tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY & EPBCNT_NAK;
if (tmp1 ^ tmp2) // switch current buffer if any and only ONE of the buffers is full
{
//switch current buffer
HidReadCtrl[INTFNUM_OFFSET(intfNum)].bCurrentBufferXY = (HidReadCtrl[INTFNUM_OFFSET(intfNum)].bCurrentBufferXY+1) &0x01;
}
tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX = 0; //flush buffer X
tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY = 0; //flush buffer Y
HidReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesInEp = 0; // indicates that no more data available in the EP
}
__bis_SR_register(bGIE); //restore interrupt status
return kUSB_succeed;
}
开发者ID:MSP-EricLoeffler,项目名称:MSPBSL_USB_Tool,代码行数:42,代码来源:UsbHid.c
示例17: USBHID_bytesInUSBBuffer
/*
* Returns how many bytes are in the buffer are received and ready to be read.
*/
BYTE USBHID_bytesInUSBBuffer (BYTE intfNum)
{
BYTE bTmp1 = 0;
BYTE bTmp2;
BYTE edbIndex;
WORD state;
edbIndex = stUsbHandle[intfNum].edb_Index;
//interrupts disable
state = usbDisableOutEndpointInterrupt(edbIndex);
if ((bFunctionSuspended) ||
(bEnumerationStatus != ENUMERATION_COMPLETE)){
//if suspended or not enumerated - report 0 bytes available
usbRestoreOutEndpointInterrupt(state);
return (0);
}
if (HidReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesInEp > 0){ //If a RX operation is underway, part of data may
//was read of the OEP buffer
bTmp1 = HidReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesInEp;
if (*HidReadCtrl[INTFNUM_OFFSET(intfNum)].pCT2 & EPBCNT_NAK){ //the next buffer has a valid data packet
bTmp2 = *(HidReadCtrl[INTFNUM_OFFSET(intfNum)].pEP2 + 1); //holds how many valid bytes in the EP buffer
if (bTmp2 >
(*HidReadCtrl[INTFNUM_OFFSET(intfNum)].pCT2 & 0x7F) - 2){ //check if all data received correctly
bTmp1 +=
(*HidReadCtrl[INTFNUM_OFFSET(intfNum)].pCT2 & 0x7F) - 2;
} else {
bTmp1 += bTmp2;
}
}
} else {
if (tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX & EPBCNT_NAK){ //this buffer has a valid data packet
bTmp2 = tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX & 0x7F;
bTmp1 = *((BYTE*)stUsbHandle[intfNum].oep_X_Buffer + 1);
if (bTmp2 - 2 < bTmp1){ //check if the count (second byte) is valid
bTmp1 = bTmp2 - 2;
}
}
if (tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY & EPBCNT_NAK){ //this buffer has a valid data packet
bTmp2 = tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY & 0x7F;
if (bTmp2 - 2 > *((BYTE*)stUsbHandle[intfNum].oep_Y_Buffer + 1)){ //check if the count (second byte) is valid
bTmp1 += *((BYTE*)stUsbHandle[intfNum].oep_Y_Buffer + 1);
} else {
bTmp1 += bTmp2 - 2;
}
}
}
//interrupts enable
usbRestoreOutEndpointInterrupt(state);
return (bTmp1);
}
开发者ID:Hsinmo,项目名称:fatool-fw-v1,代码行数:59,代码来源:UsbHid.c
示例18: USBPHDC_bytesInUSBBuffer
/*
* Returns how many bytes are in the buffer are received and ready to be read.
*/
uint8_t USBPHDC_bytesInUSBBuffer (uint8_t intfNum)
{
uint8_t bTmp1 = 0;
uint16_t state;
uint8_t edbIndex;
edbIndex = stUsbHandle[intfNum].edb_Index;
state = usbDisableOutEndpointInterrupt(edbIndex);
//atomic operation - disable interrupts
if ((bFunctionSuspended) ||
(bEnumerationStatus != ENUMERATION_COMPLETE)){
usbRestoreOutEndpointInterrupt(state);
//if suspended or not enumerated - report 0 bytes available
return (0);
}
if (PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesInEp > 0){ //If a RX operation is underway, part of data may was read of the
//OEP buffer
bTmp1 = PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesInEp;
if (*PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].pCT2 & EPBCNT_NAK){ //the next buffer has a valid data packet
bTmp1 += *PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].pCT2 & 0x7F;
}
} else {
if (tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX & EPBCNT_NAK){ //this buffer has a valid data packet
bTmp1 = tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX & 0x7F;
}
if (tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY & EPBCNT_NAK){ //this buffer has a valid data packet
bTmp1 += tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY & 0x7F;
}
}
usbRestoreOutEndpointInterrupt(state);
return (bTmp1);
}
开发者ID:Greeeg,项目名称:gpsLogger,代码行数:39,代码来源:UsbPHDC.c
示例19: USBPHDC_intfStatus
/*
* This function indicates the status of the itnerface intfNum.
* If a send operation is active for this interface,
* the function also returns the number of bytes that have been transmitted to the host.
* If a receiver operation is active for this interface, the function also returns
* the number of bytes that have been received from the host and are waiting at the assigned address.
*
* returns kUSBPHDC_waitingForSend (indicates that a call to USBPHDC_SendData()
* has been made, for which data transfer has not been completed)
*
* returns kUSBPHDC_waitingForReceive (indicates that a receive operation
* has been initiated, but not all data has yet been received)
*
* returns kUSBPHDC_dataWaiting (indicates that data has been received
* from the host, waiting in the USB receive buffers)
*/
uint8_t USBPHDC_intfStatus (uint8_t intfNum, uint16_t* bytesSent, uint16_t* bytesReceived)
{
uint8_t ret = 0;
uint16_t stateIn, stateOut;
uint8_t edbIndex;
*bytesSent = 0;
*bytesReceived = 0;
edbIndex = stUsbHandle[intfNum].edb_Index;
stateIn = usbDisableInEndpointInterrupt(edbIndex);
stateOut = usbDisableOutEndpointInterrupt(edbIndex);
//Is send operation underway?
if (PHDCWriteCtrl[INTFNUM_OFFSET(intfNum)].nPHDCBytesToSendLeft != 0){
ret |= kUSBPHDC_waitingForSend;
*bytesSent = PHDCWriteCtrl[INTFNUM_OFFSET(intfNum)].nPHDCBytesToSend -
PHDCWriteCtrl[INTFNUM_OFFSET(intfNum)].
nPHDCBytesToSendLeft;
}
//Is receive operation underway?
if (PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].pUserBuffer != NULL){
ret |= kUSBPHDC_waitingForReceive;
*bytesReceived =
PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesToReceive -
PHDCReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesToReceiveLeft;
} else { //receive operation not started
//do not access USB memory if suspended (PLL off). It may produce
//BUS_ERROR
if (!bFunctionSuspended){
if ((tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX &
EPBCNT_NAK) | //any of buffers has a valid data packet
(tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY &
EPBCNT_NAK)){
ret |= kUSBPHDC_dataWaiting;
}
}
}
if ((bFunctionSuspended) ||
(bEnumerationStatus != ENUMERATION_COMPLETE)){
//if suspended or not enumerated - report no other tasks pending
ret = kUSBPHDC_busNotAvailable;
}
//restore interrupt status
usbRestoreInEndpointInterrupt(stateIn);
usbRestoreOutEndpointInterrupt(stateOut);
__no_operation();
return (ret);
}
开发者ID:Greeeg,项目名称:gpsLogger,代码行数:70,代码来源:UsbPHDC.c
示例20: USBCDC_getInterfaceStatus
uint8_t USBCDC_getInterfaceStatus (uint8_t intfNum, uint16_t* bytesSent, uint16_t* bytesReceived)
{
uint8_t ret = 0;
uint16_t stateIn, stateOut;
uint8_t edbIndex;
*bytesSent = 0;
*bytesReceived = 0;
edbIndex = stUsbHandle[intfNum].edb_Index;
stateIn = usbDisableInEndpointInterrupt(edbIndex);
stateOut = usbDisableOutEndpointInterrupt(edbIndex);
//Is send operation underway?
if (CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSendLeft != 0){
ret |= USBCDC_WAITING_FOR_SEND;
*bytesSent = CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSend -
CdcWriteCtrl[INTFNUM_OFFSET(intfNum)].nCdcBytesToSendLeft;
}
//Is receive operation underway?
if (CdcReadCtrl[INTFNUM_OFFSET(intfNum)].pUserBuffer != NULL){
ret |= USBCDC_WAITING_FOR_RECEIVE;
*bytesReceived = CdcReadCtrl[INTFNUM_OFFSET(intfNum)].nBytesToReceive -
CdcReadCtrl[INTFNUM_OFFSET(intfNum)].
nBytesToReceiveLeft;
} else { //receive operation not started
//do not access USB memory if suspended (PLL off).
//It may produce BUS_ERROR
if (!bFunctionSuspended){
if ((tOutputEndPointDescriptorBlock[edbIndex].bEPBCTX &
EPBCNT_NAK) | //any of buffers has a valid data packet
(tOutputEndPointDescriptorBlock[edbIndex].bEPBCTY &
EPBCNT_NAK)){
ret |= USBCDC_DATA_WAITING;
}
}
}
if ((bFunctionSuspended) ||
(bEnumerationStatus != ENUMERATION_COMPLETE)){
//if suspended or not enumerated - report no other tasks pending
ret = USBCDC_BUS_NOT_AVAILABLE;
}
//restore interrupt status
usbRestoreInEndpointInterrupt(stateIn);
usbRestoreOutEndpointInterrupt(stateOut);
__no_operation();
return (ret);
}
开发者ID:DoctorKey,项目名称:msp430_workshop,代码行数:53,代码来源:UsbCdc.c
注:本文中的INTFNUM_OFFSET函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论