using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using NUnit.Framework;
namespace USBHIDDRIVER.TESTS
{
[TestFixture]
public class USBTestFixture
{
USBHIDDRIVER.USBInterface usbI = new USBInterface("vid_0b6a", "pid_0022");
///
/// Test if the device list works.
///
[Test]
public void deviceList()
{
USBHIDDRIVER.USBInterface usbI = new USBInterface("0");
String[] list = usbI.getDeviceList();
Assert.IsNotNull(list);
}
///
/// sends a start command
///
[Test]
public void sendStartCMD()
{
byte[] startCMD = new byte[8];
//Start
startCMD[0] = 255;
//Mode
startCMD[1] = 0;
//USync
startCMD[2] = 28;
//ULine
startCMD[3] = 20;
//tSync
startCMD[4] = 20;
//tRepeat - High
startCMD[5] = 0;
//tRepeat - Low
startCMD[6] = 0x01;
//BusMode
startCMD[7] = 0xF4;
//send the command
Assert.IsTrue(usbI.Connect());
Assert.IsTrue(usbI.write(startCMD));
}
///
/// Starts the read.
///
[Test]
public void startRead()
{
sendStartCMD();
usbI.enableUsbBufferEvent(new System.EventHandler(myEventCacher));
Thread.Sleep(5);
usbI.startRead();
Thread.Sleep(5);
for (int i = 0; i < 200; i++)
{
Assert.IsNotNull(USBHIDDRIVER.USBInterface.usbBuffer);
Thread.Sleep(2);
}
usbI.stopRead();
sendStopCMD();
}
///
/// Sends the stop command.
///
[Test]
public void sendStopCMD()
{
byte[] stopCMD = new byte[75];
//Stop
stopCMD[0] = 128;
stopCMD[64] = 8;
Assert.IsTrue(usbI.write(stopCMD));
}
///
/// Tests Users the definedevent handling.
///
[Test]
public void userDefinedeventHandling()
{
sendStartCMD();
usbI.enableUsbBufferEvent(new System.EventHandler(myEventCacher));
usbI.startRead();
//wait a little bit
for (int i = 0; i < 100; i++)
{
Thread.Sleep(4);
}
sendStopCMD();
}
///
/// The event cacher.
///
/// The sender.
/// The instance containing the event data.
public void myEventCacher(object sender, System.EventArgs e)
{
Console.Out.WriteLine("Event caught");
if (USBHIDDRIVER.USBInterface.usbBuffer.Count > 0)
{
byte[] currentRecord = null;
int counter = 0;
while ((byte[])USBHIDDRIVER.USBInterface.usbBuffer[counter] == null)
{
//Remove this report from list
lock (USBHIDDRIVER.USBInterface.usbBuffer.SyncRoot)
{
USBHIDDRIVER.USBInterface.usbBuffer.RemoveAt(0);
}
}
//since the remove statement at the end of the loop take the first element
currentRecord = (byte[])USBHIDDRIVER.USBInterface.usbBuffer[0];
lock (USBHIDDRIVER.USBInterface.usbBuffer.SyncRoot)
{
USBHIDDRIVER.USBInterface.usbBuffer.RemoveAt(0);
}
//DO SOMETHING WITH THE RECORD HERE
}
}
}
}