3.一个双接口通信的例子
驱动程序等等安装完毕,准备停当之后,我们需要编写两部分程序来调试USB应用。一是普通Windows USB读写程序,二是开发一个.Net Micro Frame USB Device应用程序,来响应Windows平台的USB读写程序。
我们的程序很简单,实现一个转发功能,也就是把Windows平台的USB程序发送的数据,原封不动的发送回去。代码如下:
1 using System;
2 using Microsoft.SPOT;
3 using System.Threading;
4 using Microsoft.SPOT.Hardware;
5 namespace USBDeviceTest
6 {
7 public class Program
8 {
9 public static void Main()
10 {
11 byte[] bytData=new byte[1024];
12 YFInterop.MFNative.Usb_Open(0);
13 while (true)
14 {
15 int intSize=YFInterop.MFNative.Usb_Available();
16 if (intSize > 0)
17 {
18 if (YFInterop.MFNative.Usb_Read(bytData, 0, intSize) == intSize)
19 {
20 string strData = intSize.ToString()+":";
21 for (int i = 0; i < intSize; i++)
22 {
23 strData += bytData[i].ToString() + " ";
24 }
25 Debug.Print(strData);
26 YFInterop.MFNative.Usb_Write(bytData, 0, intSize);
27 }
28 }
29 Thread.Sleep(3);
30 }
31 YFInterop.MFNative.Usb_Close();
32 }
33 }
34 }
2 using Microsoft.SPOT;
3 using System.Threading;
4 using Microsoft.SPOT.Hardware;
5 namespace USBDeviceTest
6 {
7 public class Program
8 {
9 public static void Main()
10 {
11 byte[] bytData=new byte[1024];
12 YFInterop.MFNative.Usb_Open(0);
13 while (true)
14 {
15 int intSize=YFInterop.MFNative.Usb_Available();
16 if (intSize > 0)
17 {
18 if (YFInterop.MFNative.Usb_Read(bytData, 0, intSize) == intSize)
19 {
20 string strData = intSize.ToString()+":";
21 for (int i = 0; i < intSize; i++)
22 {
23 strData += bytData[i].ToString() + " ";
24 }
25 Debug.Print(strData);
26 YFInterop.MFNative.Usb_Write(bytData, 0, intSize);
27 }
28 }
29 Thread.Sleep(3);
30 }
31 YFInterop.MFNative.Usb_Close();
32 }
33 }
34 }

注:测试时,VS2008可以一直处在调试模式(可即时打印调试信息),此时USB Test程序同时完成数据收发。