|
楼主 |
发表于 2012-5-5 10:34:23
|
显示全部楼层
通过网上的查找,这些问题基本上都解决了,包括USB和蓝牙的连接,通讯,关键地方贴出来,也给有需要的朋友们一个参考吧,很乱,懒得注释了....
- //for USB
- using LibUsbDotNet;
- using LibUsbDotNet.Info;
- using LibUsbDotNet.Main;
- using LibUsbDotNet.LibUsb;
- using LibUsbDotNet.DeviceNotify;
- using InTheHand.Net;
- using InTheHand.Net.Bluetooth;
- using InTheHand.Net.Sockets;
- const Int32 IT300_BULK_PID = 0x0003; //产品ID
- const Int32 IT300_BULK_VID = 0x1CBE; //供应商ID
- #region //Bluetooth 变量区
- BluetoothClient __g_BlueToothClient;// = new BluetoothClient();
- BluetoothDeviceInfo[] __g_BluetoothDeviceInfo;
- Stream __g_Stream;
- static Byte[] DA4_INITIAL = { 0xB7, 0x72, 0xb3, 0xAF, 0x2B, 0x6F, 0xDE, 0x1C };
- USB_DEV_GUID GUID_DEVINTERFACE_STELLARIS_BULK = new USB_DEV_GUID(0x6E45736A, 0x2B1B, 0x4078, DA4_INITIAL);//, 0xB7, 0x72, 0xb3, 0xAF, 0x2B, 0x6F, 0xDE, 0x1C};
- public static IDeviceNotifier UsbDeviceNotifier = DeviceNotifier.OpenDeviceNotifier();
- public static UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(0x1CBE, 0x0003);
- static IntPtr __g_hUSB = IntPtr.Zero;
- static Boolean __g_BoolDriverInstalled = false;
- #region //C/C++ DLL 函数导入,开始
- [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
- public static extern IntPtr InitializeDevice(UInt16 usVID, UInt16 usPID, ref USB_DEV_GUID lpGUID,
- ref bool pbDriverInstalled);
- [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
- public static extern IntPtr InitializeDeviceByIndex(UInt16 usVID, UInt16 usPID, ref USB_DEV_GUID lpGUID,
- UInt32 dwIndex, bool bOpenDataEndpoints,
- ref bool pbDriverInstalled);
- [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
- public static extern bool TerminateDevice(IntPtr hHandle);
- [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
- extern static bool WriteUSBPacket(IntPtr hHandle, byte[] pcBuffer, UInt32 ulSize,
- UInt32[] pulWritten);
- [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
- public static extern UInt32 ReadUSBPacket(IntPtr hHandle, byte[] pcBuffer,
- UInt32 ulSize, UInt32[] pulRead,
- UInt32 ulTimeoutMs, IntPtr hBreak);
- [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
- public static extern bool Endpoint0Transfer(IntPtr hHandle, Byte ucRequestType, Byte ucRequest,
- UInt16 usValue, UInt16 usIndex, UInt16 usLength,
- ref Byte pucBuffer, ref UInt16 pusCount);
- #endregion
- // Hook the device notifier event
- UsbDeviceNotifier.OnDeviceNotify += OnDeviceNotifyEvent;
- private void OnDeviceNotifyEvent(object sender, DeviceNotifyEventArgs e)
- {
- if (e.EventType == EventType.DeviceArrival)
- {
- this.TextBoxRight.AppendText("有USB设备接入!" + '\n');
- this.TextBoxRight.AppendText("该设备的VID是:0x" + e.Device.IdVendor.ToString("X") + '\n');
- this.TextBoxRight.AppendText("该设备的PID是:0x" + e.Device.IdProduct.ToString("X").PadLeft(4, '0') + '\n');
- this.TextBoxRight.AppendText("该设备的GUID是:" + e.Device.ClassGuid.ToString("X") + '\n');
- if ((e.Device.IdVendor == IT300_BULK_VID) && (e.Device.IdProduct == IT300_BULK_PID))
- {
- __g_hUSB = InitializeDevice(IT300_BULK_VID, IT300_BULK_PID, ref GUID_DEVINTERFACE_STELLARIS_BULK, ref __g_BoolDriverInstalled);
- if (__g_hUSB == IntPtr.Zero)
- {
- TerminateDevice(__g_hUSB);
- this.TextBoxRight.AppendText("IT-300初始化失败!\n");
- }
- else
- {
- this.iUSB.Enabled = true;
- this.TextBoxRight.AppendText("IT-300初始化成功!\n");
- }
- }
- }
- if (e.EventType == EventType.DeviceRemoveComplete)
- {
- this.TextBoxRight.AppendText("有USB设备断开" + '\n');
- this.TextBoxRight.AppendText("该设备的VID是:0x" + e.Device.IdVendor.ToString("X") + '\n');
- this.TextBoxRight.AppendText("该设备的PID是:0x" + e.Device.IdProduct.ToString("X").PadLeft(4, '0') + '\n');
- this.TextBoxRight.AppendText("该设备的GUID是:" + e.Device.ClassGuid.ToString("X") + '\n');
- if ((e.Device.IdVendor == IT300_BULK_VID) && (e.Device.IdProduct == IT300_BULK_PID))
- {
- TerminateDevice(__g_hUSB);
- this.iUSB.Enabled = false;
- this.TextBoxRight.AppendText("IT-300,反初始化!\n");
- }
- }
- }
- private void WinFormNemo001_Load(object sender, EventArgs e)
- {
- UsbRegDeviceList __t_RegList = UsbDevice.AllDevices.FindAll(MyUsbFinder);
- if (__t_RegList.Count == 0)
- {
- this.TextBoxRight.AppendText("软件运行后,USB端口没有找到IT-300!\n");
- }
- else
- {
- __g_hUSB = InitializeDevice(IT300_BULK_VID, IT300_BULK_PID, ref GUID_DEVINTERFACE_STELLARIS_BULK, ref __g_BoolDriverInstalled);
- if (__g_hUSB == IntPtr.Zero)
- {
- TerminateDevice(__g_hUSB);
- this.TextBoxRight.AppendText("软件运行后,找到IT-300,但是初始化失败!\n");
- }
- else
- {
- this.iUSB.Enabled = true;
- this.TextBoxRight.AppendText("软件运行后,找到IT-300,并且初始化成功!\n");
- }
- }
- private void barButtonItemBTSearch_ItemClick(object sender, ItemClickEventArgs e)
- {
- BluetoothRadio __t_PrimaryRadio = BluetoothRadio.PrimaryRadio;
- if (__t_PrimaryRadio == null)
- {
- this.WriteMessage2TextBox("No BT Hardware Or Unsupported Software Stack...");
- XtraMessageBox.Show("Make Sure You Have A Bluetooth Device(Bluetooth USB Dongle)\n\nConnected To Your Computer,Or Your PC Embeded BT Module,\n\nAnd Power On It First...", "Tips", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- }
- else
- {
- __t_PrimaryRadio.Mode = RadioMode.Discoverable;
- this.WriteMessage2TextBox("Discovering Devices...");
- this.barButtonItemBTSearch.Enabled = false;
- this.barButtonItemBTPair.Enabled = false;
- this.iBT.Enabled = false;
- ClassBluetoothSearching.Show();
- __g_BlueToothClient = new BluetoothClient();
- //BluetoothDeviceInfo[] infoArray = this.__g_BlueToothClient.DiscoverDevices(20);
- __g_BluetoothDeviceInfo = this.__g_BlueToothClient.DiscoverDevices(20);
- this.repositoryItemComboBoxBTList.Items.Clear();
- this.__g_DeviceAddressesDictionary.Clear();
- foreach (BluetoothDeviceInfo info in __g_BluetoothDeviceInfo)
- {
- this.WriteMessage2TextBox(info.DeviceAddress + "\t" + info.DeviceName);
- if ((info.DeviceName.Length >= "IT-300 BT Dev".Length) && (info.DeviceName.Substring(0, "IT-300 BT Dev".Length) == "IT-300 BT Dev"))
- {
- this.repositoryItemComboBoxBTList.Items.Add(info.DeviceName);
- this.__g_DeviceAddressesDictionary[info.DeviceName] = info.DeviceAddress;
- }
- }
- this.WriteMessage2TextBox(__g_BluetoothDeviceInfo.Length + " Devices found.");
- ClassBluetoothSearching.Close();
- if (this.__g_DeviceAddressesDictionary.Count != 0)
- {
- this.barButtonItemBTPair.Enabled = true;
- this.barEditItemBTList.EditValue = this.repositoryItemComboBoxBTList.Items[0];
- this.WriteMessage2TextBox("找到IT-300 BT Dev");
- }
- else
- {
- this.WriteMessage2TextBox("没有找到IT-300 BT Dev");
- XtraMessageBox.Show("Can't Finding IT-300 Dev,If You Are Sure IT-300 Dev\n\nWithin Your Area And Power On,You Can Try Again...", "Tips", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- }
- this.WriteMessage2TextBox("\r\n" + Environment.NewLine);
- this.barButtonItemBTSearch.Enabled = true;
- }
- }
- private void barButtonItemBTPair_ItemClick(object sender, ItemClickEventArgs e)
- {
- Guid __t_SerialPort = BluetoothService.SerialPort;
- try
- {
- BluetoothAddress __t_Address = this.__g_DeviceAddressesDictionary[this.barEditItemBTList.EditValue.ToString()];
- BluetoothEndPoint __t_RemoteEP = new BluetoothEndPoint(__t_Address, __t_SerialPort);
- if (this.__g_BlueToothClient.Connected)
- {
- this.WriteMessage2TextBox("已经连接/连接过 !");
- XtraMessageBox.Show("This Dev Have Connected...", "Tips", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- }
- else
- {
- this.__g_BlueToothClient.SetPin(__t_Address, this.barEditItemBTPIN.EditValue.ToString().Trim());
- this.__g_BlueToothClient.Connect(__t_RemoteEP);
- this.iBT.Enabled = true;
- this.iCloseBT.Enabled = true;
- this.barButtonItemBTSearch.Enabled = false;
- this.barButtonItemBTSearch.Enabled = false;
- this.WriteMessage2TextBox("Pair Successful !");
- XtraMessageBox.Show("Pair Successful...", "Tips", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- }
- }
- catch (Exception exception)
- {
- XtraMessageBox.Show(exception.Message + "\n\nSearching & Selecting Your IT-300 Dev First...", "Tips", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- }
- }
复制代码 |
|