amoBBS 阿莫电子论坛

 找回密码
 注册
bottom↓
查看: 5638|回复: 23

关于C#,Microsoft Visual Studio 2010,USB驱动,上位机软件的困惑!

[复制链接]
发表于 2010-11-11 14:49:56 | 显示全部楼层 |阅读模式
我需要开发一个上位机的软件,该上位机可以通过USB,串口和单片机通讯,现在有很多困惑,已经开始C#语言和Microsoft Visual Studio 2010环境的熟悉过程,但是不清楚Microsoft Visual Studio 2010里面是否可以用C#开发USB驱动?如果不能,如何开发驱动,驱动如何与上位机关联,,,,等等,,,请教高人指点!
发表于 2010-11-11 15:03:44 | 显示全部楼层
该上位机可以通过USB,串口和单片机通讯。。。。
----------------------------------------------------
本人愚钝听不懂LZ的问题!

是通过USB和单片机通讯 。 还是通过USB虚拟串口和单片机通讯。 还是同时要使用二种方式 USB  ,串口和单片机通讯 ?
发表于 2010-11-11 15:11:00 | 显示全部楼层
只通过串口(包括USB虚拟串口)和单片机通讯的话, Visual Studio 2010 可以做 ,和驱动无关。


用USB驱动 的 话 可以看看 LIBUSB-WIN32  , 有 Visual Studio 2008 的例程。 在 坛子里 搜  LIBUSB 吧。

做 USB驱动 的话, 最重要的是必须搞懂 USB 协议,否则你无从下手。
公益广告:本论坛不得使用、宣传Q群。 有讨论请在论坛里进行。 违者将封锁ID.
 楼主| 发表于 2010-11-11 15:11:19 | 显示全部楼层
回复【1楼】bbs2009
-----------------------------------------------------------------------

同时使用2种方式。
公益广告:发表招聘帖子需要缴费,有需要可以联系网站工作人员王小姐:13711915767.
 楼主| 发表于 2010-11-11 15:12:46 | 显示全部楼层
回复【2楼】bbs2009

只通过串口(包括usb虚拟串口)和单片机通讯的话, visual studio 2010 可以做 ,和驱动无关。
用usb驱动 的 话 可以看看 libusb-win32  , 有 visual studio 2008 的例程。 在 坛子里 搜  libusb 吧。
做 usb驱动 的话, 最重要的是先必须 搞懂 usb 协议,否则你无从下手。
  

-----------------------------------------------------------------------

谢谢指明方向!
公益广告:广告只能发在本论坛的广告区,否则将封锁ID。
发表于 2010-11-18 11:50:38 | 显示全部楼层
C# 有个Nmodbus库,你说的都支持, C++的话这方面资料很多吧。
 楼主| 发表于 2010-11-26 09:32:54 | 显示全部楼层
回复【5楼】diamondboy
c# 有个nmodbus库,你说的都支持, c++的话这方面资料很多吧。
-----------------------------------------------------------------------

一直搞底层程序,PC机软件不大懂,高人(们)可否留个联系方式啊,我的Q:270271527.
发表于 2010-12-4 10:08:08 | 显示全部楼层
mark
 楼主| 发表于 2010-12-10 13:16:36 | 显示全部楼层
MARK
发表于 2011-10-13 15:11:41 | 显示全部楼层
正准备学习上位机……选择Dephi
 楼主| 发表于 2012-5-5 10:34:23 | 显示全部楼层
通过网上的查找,这些问题基本上都解决了,包括USB和蓝牙的连接,通讯,关键地方贴出来,也给有需要的朋友们一个参考吧,很乱,懒得注释了....

  1. //for USB
  2. using LibUsbDotNet;
  3. using LibUsbDotNet.Info;
  4. using LibUsbDotNet.Main;
  5. using LibUsbDotNet.LibUsb;
  6. using LibUsbDotNet.DeviceNotify;

  7. using InTheHand.Net;
  8. using InTheHand.Net.Bluetooth;
  9. using InTheHand.Net.Sockets;


  10.         const Int32 IT300_BULK_PID = 0x0003;  //产品ID
  11.         const Int32 IT300_BULK_VID = 0x1CBE;  //供应商ID


  12.         #region //Bluetooth 变量区
  13.         BluetoothClient __g_BlueToothClient;// = new BluetoothClient();
  14.         BluetoothDeviceInfo[] __g_BluetoothDeviceInfo;
  15.         Stream __g_Stream;

  16.         static Byte[] DA4_INITIAL = { 0xB7, 0x72, 0xb3, 0xAF, 0x2B, 0x6F, 0xDE, 0x1C };
  17.         USB_DEV_GUID GUID_DEVINTERFACE_STELLARIS_BULK = new USB_DEV_GUID(0x6E45736A, 0x2B1B, 0x4078, DA4_INITIAL);//, 0xB7, 0x72, 0xb3, 0xAF, 0x2B, 0x6F, 0xDE, 0x1C};

  18.         public static IDeviceNotifier UsbDeviceNotifier = DeviceNotifier.OpenDeviceNotifier();
  19.         public static UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(0x1CBE, 0x0003);

  20.         static IntPtr  __g_hUSB = IntPtr.Zero;
  21.         static Boolean __g_BoolDriverInstalled = false;

  22.         #region   //C/C++ DLL 函数导入,开始
  23.         [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
  24.         public static extern IntPtr InitializeDevice(UInt16 usVID, UInt16 usPID, ref USB_DEV_GUID lpGUID,
  25.                                                   ref bool pbDriverInstalled);
  26.         [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
  27.         public static extern IntPtr InitializeDeviceByIndex(UInt16 usVID, UInt16 usPID, ref USB_DEV_GUID lpGUID,
  28.                                                          UInt32 dwIndex, bool bOpenDataEndpoints,
  29.                                                          ref bool pbDriverInstalled);
  30.         [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
  31.         public static extern bool TerminateDevice(IntPtr hHandle);

  32.         [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
  33.         extern static bool WriteUSBPacket(IntPtr hHandle, byte[] pcBuffer, UInt32 ulSize,
  34.                                             UInt32[] pulWritten);

  35.         [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
  36.         public static extern UInt32 ReadUSBPacket(IntPtr hHandle, byte[] pcBuffer,
  37.                                     UInt32 ulSize, UInt32[] pulRead,
  38.                                     UInt32 ulTimeoutMs, IntPtr hBreak);

  39.         [DllImport("LMUSBDLL_NW.dll", CharSet = CharSet.Ansi)]
  40.         public static extern bool Endpoint0Transfer(IntPtr hHandle, Byte ucRequestType, Byte ucRequest,
  41.                                              UInt16 usValue, UInt16 usIndex, UInt16 usLength,
  42.                                              ref Byte pucBuffer, ref UInt16 pusCount);
  43.         #endregion


  44.             // Hook the device notifier event
  45.             UsbDeviceNotifier.OnDeviceNotify += OnDeviceNotifyEvent;

  46.         private void OnDeviceNotifyEvent(object sender, DeviceNotifyEventArgs e)
  47.         {
  48.             if (e.EventType == EventType.DeviceArrival)
  49.             {
  50.                 this.TextBoxRight.AppendText("有USB设备接入!" + '\n');

  51.                 this.TextBoxRight.AppendText("该设备的VID是:0x" + e.Device.IdVendor.ToString("X") + '\n');
  52.                 this.TextBoxRight.AppendText("该设备的PID是:0x" + e.Device.IdProduct.ToString("X").PadLeft(4, '0') + '\n');
  53.                 this.TextBoxRight.AppendText("该设备的GUID是:" + e.Device.ClassGuid.ToString("X") + '\n');

  54.                 if ((e.Device.IdVendor == IT300_BULK_VID) && (e.Device.IdProduct == IT300_BULK_PID))
  55.                 {
  56.                     __g_hUSB = InitializeDevice(IT300_BULK_VID, IT300_BULK_PID, ref GUID_DEVINTERFACE_STELLARIS_BULK, ref __g_BoolDriverInstalled);
  57.                     if (__g_hUSB == IntPtr.Zero)
  58.                     {
  59.                         TerminateDevice(__g_hUSB);
  60.                         this.TextBoxRight.AppendText("IT-300初始化失败!\n");
  61.                     }
  62.                     else
  63.                     {
  64.                         this.iUSB.Enabled = true;
  65.                         this.TextBoxRight.AppendText("IT-300初始化成功!\n");
  66.                     }
  67.                 }
  68.             }
  69.             if (e.EventType == EventType.DeviceRemoveComplete)
  70.             {
  71.                 this.TextBoxRight.AppendText("有USB设备断开" + '\n');
  72.                 this.TextBoxRight.AppendText("该设备的VID是:0x" + e.Device.IdVendor.ToString("X") + '\n');
  73.                 this.TextBoxRight.AppendText("该设备的PID是:0x" + e.Device.IdProduct.ToString("X").PadLeft(4, '0') + '\n');
  74.                 this.TextBoxRight.AppendText("该设备的GUID是:" + e.Device.ClassGuid.ToString("X") + '\n');

  75.                 if ((e.Device.IdVendor == IT300_BULK_VID) && (e.Device.IdProduct == IT300_BULK_PID))
  76.                 {
  77.                     TerminateDevice(__g_hUSB);
  78.                     this.iUSB.Enabled = false;
  79.                     this.TextBoxRight.AppendText("IT-300,反初始化!\n");
  80.                 }
  81.             }
  82.         }


  83.         private void WinFormNemo001_Load(object sender, EventArgs e)
  84.         {
  85.             UsbRegDeviceList __t_RegList = UsbDevice.AllDevices.FindAll(MyUsbFinder);

  86.             if (__t_RegList.Count == 0)
  87.             {
  88.                 this.TextBoxRight.AppendText("软件运行后,USB端口没有找到IT-300!\n");
  89.             }
  90.             else
  91.             {
  92.                 __g_hUSB = InitializeDevice(IT300_BULK_VID, IT300_BULK_PID, ref GUID_DEVINTERFACE_STELLARIS_BULK, ref __g_BoolDriverInstalled);
  93.                 if (__g_hUSB == IntPtr.Zero)
  94.                 {
  95.                     TerminateDevice(__g_hUSB);
  96.                     this.TextBoxRight.AppendText("软件运行后,找到IT-300,但是初始化失败!\n");
  97.                 }
  98.                 else
  99.                 {
  100.                     this.iUSB.Enabled = true;
  101.                     this.TextBoxRight.AppendText("软件运行后,找到IT-300,并且初始化成功!\n");
  102.                 }
  103.             }




  104.         private void barButtonItemBTSearch_ItemClick(object sender, ItemClickEventArgs e)
  105.         {
  106.             BluetoothRadio __t_PrimaryRadio = BluetoothRadio.PrimaryRadio;
  107.             if (__t_PrimaryRadio == null)
  108.             {
  109.                 this.WriteMessage2TextBox("No BT Hardware Or Unsupported Software Stack...");
  110.                 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);
  111.             }
  112.             else
  113.             {
  114.                 __t_PrimaryRadio.Mode = RadioMode.Discoverable;
  115.                 this.WriteMessage2TextBox("Discovering Devices...");
  116.                 this.barButtonItemBTSearch.Enabled = false;
  117.                 this.barButtonItemBTPair.Enabled = false;
  118.                 this.iBT.Enabled = false;
  119.                 ClassBluetoothSearching.Show();
  120.                 __g_BlueToothClient = new BluetoothClient();
  121.                 //BluetoothDeviceInfo[] infoArray = this.__g_BlueToothClient.DiscoverDevices(20);
  122.                 __g_BluetoothDeviceInfo = this.__g_BlueToothClient.DiscoverDevices(20);

  123.                 this.repositoryItemComboBoxBTList.Items.Clear();
  124.                 this.__g_DeviceAddressesDictionary.Clear();
  125.                 foreach (BluetoothDeviceInfo info in __g_BluetoothDeviceInfo)
  126.                 {
  127.                     this.WriteMessage2TextBox(info.DeviceAddress + "\t" + info.DeviceName);
  128.                     if ((info.DeviceName.Length >= "IT-300 BT Dev".Length) && (info.DeviceName.Substring(0, "IT-300 BT Dev".Length) == "IT-300 BT Dev"))
  129.                     {
  130.                         this.repositoryItemComboBoxBTList.Items.Add(info.DeviceName);
  131.                         this.__g_DeviceAddressesDictionary[info.DeviceName] = info.DeviceAddress;
  132.                     }
  133.                 }
  134.                 this.WriteMessage2TextBox(__g_BluetoothDeviceInfo.Length + " Devices found.");
  135.                 ClassBluetoothSearching.Close();
  136.                 if (this.__g_DeviceAddressesDictionary.Count != 0)
  137.                 {
  138.                     this.barButtonItemBTPair.Enabled = true;
  139.                     this.barEditItemBTList.EditValue = this.repositoryItemComboBoxBTList.Items[0];
  140.                     this.WriteMessage2TextBox("找到IT-300 BT Dev");
  141.                 }
  142.                 else
  143.                 {
  144.                     this.WriteMessage2TextBox("没有找到IT-300 BT Dev");
  145.                     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);
  146.                 }
  147.                 this.WriteMessage2TextBox("\r\n" + Environment.NewLine);
  148.                 this.barButtonItemBTSearch.Enabled = true;
  149.             }
  150.         }

  151.         private void barButtonItemBTPair_ItemClick(object sender, ItemClickEventArgs e)
  152.         {
  153.             Guid __t_SerialPort = BluetoothService.SerialPort;
  154.             try
  155.             {
  156.                 BluetoothAddress __t_Address = this.__g_DeviceAddressesDictionary[this.barEditItemBTList.EditValue.ToString()];
  157.                 BluetoothEndPoint __t_RemoteEP = new BluetoothEndPoint(__t_Address, __t_SerialPort);
  158.                 if (this.__g_BlueToothClient.Connected)
  159.                 {
  160.                     this.WriteMessage2TextBox("已经连接/连接过 !");
  161.                     XtraMessageBox.Show("This Dev Have Connected...", "Tips", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
  162.                 }
  163.                 else
  164.                 {
  165.                     this.__g_BlueToothClient.SetPin(__t_Address, this.barEditItemBTPIN.EditValue.ToString().Trim());
  166.                     this.__g_BlueToothClient.Connect(__t_RemoteEP);
  167.                     this.iBT.Enabled = true;
  168.                     this.iCloseBT.Enabled = true;
  169.                     this.barButtonItemBTSearch.Enabled = false;
  170.                     this.barButtonItemBTSearch.Enabled = false;
  171.                     this.WriteMessage2TextBox("Pair Successful !");
  172.                     XtraMessageBox.Show("Pair Successful...", "Tips", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
  173.                 }
  174.             }
  175.             catch (Exception exception)
  176.             {
  177.                 XtraMessageBox.Show(exception.Message + "\n\nSearching & Selecting Your IT-300 Dev First...", "Tips", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
  178.             }
  179.         }
复制代码
发表于 2012-5-5 10:56:40 | 显示全部楼层
我也推荐一个比较好用的USB通用驱动,名字叫UUSBD。使用起来相当简单,而且是免费的。
主页:http://www.otto.to/~kasiwano/newpage17.htm
C#的示例:http://www16.ocn.ne.jp/~ham/prog/usb/usb.html
发表于 2012-5-6 13:29:07 | 显示全部楼层
回 12 楼
也推荐一个比较好用的USB通用驱动,名字叫UUSBD。使用起来相当简单,而且是免费的。
-----------------------------------------------------------------------------------------------------------------------
这东西太老了, 没有更新。
还是 libusb 吧。 跨平台, 不断更新。

在windwos 下 可支持到 win8,

libusb-win32
http://sourceforge.net/projects/ ... 2-releases/1.2.6.0/

libusbK:
http://sourceforge.net/projects/libusbk/files/libusbK-release/

发表于 2012-5-7 22:32:32 | 显示全部楼层
本帖最后由 shandian 于 2012-5-7 22:34 编辑
bbs2009 发表于 2012-5-6 13:29
回 12 楼
也推荐一个比较好用的USB通用驱动,名字叫UUSBD。使用起来相当简单,而且是免费的。
------------ ...


下载过libUsbDotNet,感觉对于像我一样的,对PC编程不是很精通的有点过于复杂了。
相对来说使用UUSBD简单太多了,也就几个API,几乎就是傻瓜式的。
我现在想办法使UUSBD在Win7 x64上也能用了。
发表于 2012-5-7 23:54:54 | 显示全部楼层
回 14 楼:
。。。我现在想办法使UUSBD在Win7 x64上也能用了。
-----------------------------------------------------------------------------------------------------------------------------------------
uusbdv20\SETUP 下的  sys 生成年分  是 2001 年。 应该 是在 很老的 DDK 下 编译的。能支持 X64吗?
SYS 目录下的 驱动源码 ,在 新的 DDK  (如7600)下 编译可能有兼容问题。 不知阁下是否编译过。
还是用 libusb 吧 ,支持 X64  没问题。





发表于 2012-5-8 11:15:23 | 显示全部楼层
bbs2009 发表于 2012-5-7 23:54
回 14 楼:
。。。我现在想办法使UUSBD在Win7 x64上也能用了。
----------------------------------------- ...

UUSBD.dll在64位或者32位下都是能够工作的。关键是原先的.sys文件和.inf文件不能用于64位系统。
我在网上搜索,发现了日本一款叫Sknet AS11的设备,使用的就是UUSBD,而且其提供64位的驱动。我下载下来后在他的inf文件里添加了我自己的VID和PID后,就能在64位操作系统下使用了。现在唯一还存在的问题是驱动缺少数字签名,Win7 x64下只能在关闭“驱动数字签名强制”后才能使用。

等有空了我也好好学学libUSB吧。
发表于 2012-5-19 14:24:15 | 显示全部楼层
mark
等有空了我也好好学学libUSB吧。
发表于 2012-5-19 15:04:37 | 显示全部楼层
占位,也许用得上
发表于 2012-5-28 16:35:48 | 显示全部楼层
mark  学单片机的孩子 伤不起啊
发表于 2013-11-8 19:10:03 | 显示全部楼层
不错啊,UUSBD都日文,看不懂啊
发表于 2013-11-15 11:30:04 | 显示全部楼层
fangying712 发表于 2013-11-8 19:10
不错啊,UUSBD都日文,看不懂啊

只要能看懂程序不就得了。难道日本人 能用 日文写程序。
发表于 2013-11-17 10:19:04 | 显示全部楼层
bbs2009 发表于 2013-11-15 11:30
只要能看懂程序不就得了。难道日本人 能用 日文写程序。

哈哈,我说的是网站和Doc
发表于 2013-11-26 23:56:52 | 显示全部楼层
bbs2009 发表于 2012-5-6 13:29
回 12 楼
也推荐一个比较好用的USB通用驱动,名字叫UUSBD。使用起来相当简单,而且是免费的。
------------ ...

这个的确不错,现在很流行
发表于 2013-12-25 14:13:36 | 显示全部楼层
是不是还要有PC端的驱动
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 粤ICP备09047143号

GMT+8, 2014-10-25 20:37

阿莫电子论坛, 原"中国电子开发网"

© 2004-2014 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表