void ProcessIO void {
//Blink the LEDs according to the USB device status
if blinkStatusValid {
BlinkUSBStatus
}
// User Application USB tasks
if USBDeviceState < CONFIGURED_STATE || USBSuspendControl == 1
return
//Check if we have received an OUT data packet from the host
if !HIDRxHandleBusy USBOutHandle {
//We just received a packet of data from the USB host.
//Check the first byte of the packet to see what command the host
//application software wants us to fulfill.
switch ReceivedDataBuffer[0] //Look at the data the host sent, to see what kind of application specific command it sent.
{
...
case 0x82:
{
if !HIDTxHandleBusy USBInHandle {
mLED_3_Off
mLED_4_On
// bulk adc, uncompressed
if ReceivedDataBuffer[1] == 0x00 {
PIR1bits.ADIF =
0x00 PIE1bits.ADIE =
0x00 IPR1bits.ADIP =
0x00 TRISAbits.TRISA0 =
1 ADCON0 =
0x01 ADCON1 =
0x0E ADCON2 =
ReceivedDataBuffer[2] compressedADC =
FALSE doBulkADC =
TRUE }
// bulk adc, uncompressed, test data
else if ReceivedDataBuffer[1] == 0x01 {
compressedADC =
FALSE
simulatedMSB =
0 simulatedLSB =
0
TakeNTestSamples adcbuffer1, adcbuffer1_samples
TakeNTestSamples adcbuffer2, adcbuffer2_samples
TakeNTestSamples adcbuffer3, adcbuffer3_samples
TakeNTestSamples adcbuffer4, adcbuffer4_samples
TakeNTestSamples adcbuffer5, adcbuffer5_samples
TakeNTestSamples adcbuffer6, adcbuffer6_samples
TakeNTestSamples adcbuffer7, adcbuffer7_samples
}
// bulk adc, compressed
else if ReceivedDataBuffer[1] == 0x80 {
PIR1bits.ADIF =
0x00 PIE1bits.ADIE =
0x00 IPR1bits.ADIP =
0x00 TRISAbits.TRISA0 =
1 ADCON0 =
0x01 ADCON1 =
0x0E ADCON2 =
ReceivedDataBuffer[2] compressedADC =
TRUE doBulkADC =
TRUE }
// bulk adc, compressed, test data 1
else if ReceivedDataBuffer[1] == 0x81 {
simulatedMSB =
0 simulatedLSB =
0 compressedADC =
TRUE
TakeNCompressedTestSamples adcbuffer1, adcbuffer1_compressed_samples
TakeNCompressedTestSamples adcbuffer2, adcbuffer2_compressed_samples
TakeNCompressedTestSamples adcbuffer3, adcbuffer3_compressed_samples
TakeNCompressedTestSamples adcbuffer4, adcbuffer4_compressed_samples
TakeNCompressedTestSamples adcbuffer5, adcbuffer5_compressed_samples
TakeNCompressedTestSamples adcbuffer6, adcbuffer6_compressed_samples
TakeNCompressedTestSamples adcbuffer7, adcbuffer7_compressed_samples
}
// bulk adc, compressed, test data 2
else if ReceivedDataBuffer[1] == 0x82 {
simulatedMSB =
0 simulatedLSB =
1 compressedADC =
TRUE TakeNCompressedTestSamples adcbuffer1, adcbuffer1_compressed_samples
TakeNCompressedTestSamples adcbuffer2, adcbuffer2_compressed_samples
TakeNCompressedTestSamples adcbuffer3, adcbuffer3_compressed_samples
TakeNCompressedTestSamples adcbuffer4, adcbuffer4_compressed_samples
TakeNCompressedTestSamples adcbuffer5, adcbuffer5_compressed_samples
TakeNCompressedTestSamples adcbuffer6, adcbuffer6_compressed_samples
TakeNCompressedTestSamples adcbuffer7, adcbuffer7_compressed_samples
}
// bulk adc, compressed, test data 3
else if ReceivedDataBuffer[1] == 0x83 {
simulatedMSB =
0 simulatedLSB =
2 compressedADC =
TRUE TakeNCompressedTestSamples adcbuffer1, adcbuffer1_compressed_samples
TakeNCompressedTestSamples adcbuffer2, adcbuffer2_compressed_samples
TakeNCompressedTestSamples adcbuffer3, adcbuffer3_compressed_samples
TakeNCompressedTestSamples adcbuffer4, adcbuffer4_compressed_samples
TakeNCompressedTestSamples adcbuffer5, adcbuffer5_compressed_samples
TakeNCompressedTestSamples adcbuffer6, adcbuffer6_compressed_samples
TakeNCompressedTestSamples adcbuffer7, adcbuffer7_compressed_samples
}
// bulk adc, compressed, test data 4
else if ReceivedDataBuffer[1] == 0x84 {
simulatedMSB =
0 simulatedLSB =
3 compressedADC =
TRUE TakeNCompressedTestSamples adcbuffer1, adcbuffer1_compressed_samples
TakeNCompressedTestSamples adcbuffer2, adcbuffer2_compressed_samples
TakeNCompressedTestSamples adcbuffer3, adcbuffer3_compressed_samples
TakeNCompressedTestSamples adcbuffer4, adcbuffer4_compressed_samples
TakeNCompressedTestSamples adcbuffer5, adcbuffer5_compressed_samples
TakeNCompressedTestSamples adcbuffer6, adcbuffer6_compressed_samples
TakeNCompressedTestSamples adcbuffer7, adcbuffer7_compressed_samples
}
// bulk adc, compressed, test data 5
else if ReceivedDataBuffer[1] == 0x85 {
simulatedMSB =
0 simulatedLSB =
4 compressedADC =
TRUE TakeNCompressedTestSamples adcbuffer1, adcbuffer1_compressed_samples
TakeNCompressedTestSamples adcbuffer2, adcbuffer2_compressed_samples
TakeNCompressedTestSamples adcbuffer3, adcbuffer3_compressed_samples
TakeNCompressedTestSamples adcbuffer4, adcbuffer4_compressed_samples
TakeNCompressedTestSamples adcbuffer5, adcbuffer5_compressed_samples
TakeNCompressedTestSamples adcbuffer6, adcbuffer6_compressed_samples
TakeNCompressedTestSamples adcbuffer7, adcbuffer7_compressed_samples
}
// buffer test
else if ReceivedDataBuffer[1] == 0xff {
FillWithTestData
}
mLED_3_On
//Check to make sure the endpoint/buffer is free before we modify the contents
ToSendDataBuffer[0] =
0x82 //Prepare the USB module to send the data packet to the host
ToSendDataBuffer[1] =
ReceivedDataBuffer[2] USBInHandle = HIDTxPacket HID_EP, BYTE* & ToSendDataBuffer[0], 64
}
break }
break case 0x83:
{
int offsetForData =
3 int sequence =
0
if !HIDTxHandleBusy USBInHandle {
ToSendDataBuffer[0] =
0x83 ToSendDataBuffer[1] =
0x01 ToSendDataBuffer[2] =
50 ToSendDataBuffer[3] =
0 sequence =
ReceivedDataBuffer[1]
if compressedADC {
ReadCompressedSequence offsetForData, sequence
} else {
ReadSequence offsetForData, sequence
}
USBInHandle = HIDTxPacket HID_EP, BYTE* & ToSendDataBuffer[0], 64
}
}
break default:
if !HIDTxHandleBusy USBInHandle {
ToSendDataBuffer[0] =
ReceivedDataBuffer[0] USBInHandle = HIDTxPacket HID_EP, BYTE* & ToSendDataBuffer[0], 64
}
break
}
//Re-arm the OUT endpoint, so we can receive the next OUT data packet
//that the host may try to send us.
USBOutHandle = HIDRxPacket HID_EP, BYTE* & ReceivedDataBuffer, 64
}
}//end ProcessIO
|