اگه نخوام از درایور libusb0 استفاده کنم و با همون درایور خود ویندوز کار کنم چه باید بکنم؟
بله
خیر
راه راحتتر و ارزانتر هست
اگه نخوام از درایور libusb0 استفاده کنم و با همون درایور خود ویندوز کار کنم چه باید بکنم؟
ویرایش توسط sajjad_AD : 26-10-2014 در ساعت 17:16
دوباره سلام
آقا من از رو مثال (Read Write (Event Driven که تو سایت sourceforge اومده برنامه رو به صورت Event نوشتم ولی این دیگه اصلا کار نمی کنه , ارور نمیده ها ولی کارم نمی کنه , اصلا رویداد دریافت اجرا نمیشه , قلق خاصی داره؟
کد:using System; using System.Text; using System.Text.RegularExpressions; using LibUsbDotNet; using LibUsbDotNet.Main; namespace Examples { internal class ReadWriteEventDriven { public static DateTime LastDataEventDate = DateTime.Now; public static UsbDevice MyUsbDevice; #region SET YOUR USB Vendor and Product ID! public static UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(1234, 1); #endregion public static void Main(string[] args) { ErrorCode ec = ErrorCode.None; try { // Find and open the usb device. MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder); // If the device is open and ready if (MyUsbDevice == null) throw new Exception("Device Not Found."); // If this is a "whole" usb device (libusb-win32, linux libusb-1.0) // it exposes an IUsbDevice interface. If not (WinUSB) the // 'wholeUsbDevice' variable will be null indicating this is // an interface of a device; it does not require or support // configuration and interface selection. IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice; if (!ReferenceEquals(wholeUsbDevice, null)) { // This is a "whole" USB device. Before it can be used, // the desired configuration and interface must be selected. // Select config #1 wholeUsbDevice.SetConfiguration(1); // Claim interface #0. wholeUsbDevice.ClaimInterface(0); } // open read endpoint 1. UsbEndpointReader reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01); // open write endpoint 1. UsbEndpointWriter writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep01); // Remove the exepath/startup filename text from the begining of the CommandLine. string cmdLine = Regex.Replace( Environment.CommandLine, "^\".+?\"^.*? |^.*? ", "", RegexOptions.Singleline); if (!String.IsNullOrEmpty(cmdLine)) { reader.DataReceived += (OnRxEndPointData); reader.DataReceivedEnabled = true; int bytesWritten; ec = writer.Write(Encoding.Default.GetBytes(cmdLine), 2000, out bytesWritten); if (ec != ErrorCode.None) throw new Exception(UsbDevice.LastErrorString); LastDataEventDate = DateTime.Now; while ((DateTime.Now - LastDataEventDate).TotalMilliseconds < 100) { } // Always disable and unhook event when done. reader.DataReceivedEnabled = false; reader.DataReceived -= (OnRxEndPointData); Console.WriteLine("\r\nDone!\r\n"); } else throw new Exception("Nothing to do."); } catch (Exception ex) { Console.WriteLine(); Console.WriteLine((ec != ErrorCode.None ? ec + ":" : String.Empty) + ex.Message); } finally { if (MyUsbDevice != null) { if (MyUsbDevice.IsOpen) { // If this is a "whole" usb device (libusb-win32, linux libusb-1.0) // it exposes an IUsbDevice interface. If not (WinUSB) the // 'wholeUsbDevice' variable will be null indicating this is // an interface of a device; it does not require or support // configuration and interface selection. IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice; if (!ReferenceEquals(wholeUsbDevice, null)) { // Release interface #0. wholeUsbDevice.ReleaseInterface(0); } MyUsbDevice.Close(); } } MyUsbDevice = null; // Free usb resources UsbDevice.Exit(); // Wait for user input.. Console.ReadKey(); } } private static void OnRxEndPointData(object sender, EndpointDataEventArgs e) { LastDataEventDate = DateTime.Now; Console.Write(Encoding.Default.GetString(e.Buffer, 0, e.Count)); } } }
ویرایش توسط sajjad_AD : 28-10-2014 در ساعت 17:27
سلام مشکل حل شد از Device بود! تشکر فراوان به زودی یه آموزش USB برای دوستان MikroC کار میذارم که همه حالشو ببریم
ویرایش توسط sajjad_AD : 29-10-2014 در ساعت 21:05
دوست عزیر hid نباید نیاز به هیچ گونه نصب درایور داشته باشه .... میشه مثال بزنین که نیاز به نصب درایور نداشته باشه ؟؟؟؟
برنامه microC for ARM تون درسته توی تاپیک usb در بیست دقیقه... حالا میشه برنامه ی سمت کامپیوتر رو هم ردیف کنین که دیگه نیاز به نصب هیچ گونه درایور نباشه؟؟؟
آخه تمام هنر HID به همین بی نیازی به درایور هست
سلام خدمت همه اساتید و دوستان، المسئلة؟!
مرتبط با بحث تاپیک، من میخوام یه مقدار اطلاعات رو به صورت Bulk بین یه میکرو و PC از طریق رابط USB جابه جا کنم،
- سرعت انتقال چندان مهم نیست و شروع انتقال توسط کاربر و از داخل PC کنترل میشود.
- میکرویی که استفاده میکم XMEGA هست (متأسفانه!) ==> محدودیت فلش دارم!
- با مثالها و DEMO ها و ASF کار نمیکنم (به خاطر حجیم بودن و پیچیدگی کدهاشون)!
- برای این ارتباط کلاس CDC رو انتخاب کردم.
USB 2.0 Specification و دیتاشیت میکروم رو مطالعه کردم و با کار کردن در سطح رجیسترها به مرحله ای رسیدم که Device ، توصیفگرهای دوایس و کانفیگ و اینترفیس و اندپوینت ها رو برای کامپیوتر ارسال میکنه و کامپیوتر شروع به جستجو درایور مربوط به Device میکنه.
خوب این تا اینجا باشه!
سمت کامپیوتر هم من C# کار میکنم (خیلی ابتدایی) و میخوام از اون کتابخانه Serial استفاده کنم، البته در اینجا اصلا مهم نیست، فرض کنید که با یک برنامه ترمینال کار کنیم.
خوب حالا یه جوانمردی بفرماید که تا تکمیل شدن این ارتباط، من چقدر راه دارم؟
لازمه چندتا توضیح تکمیلی بدم:
1 دسکریپتورهایی که من برای دوایسم نوشتم فقط شامل یک دوایس، یک کانفیگ، یک اینترفیس کلاس CDC و دوتا اند پوینت (ورودی + خروجی) نوع Bulk هست!
2 در مورد ساختار کلاس CDC و اگه احتمالا دسکریپتوری نیاز داشته باشه هیچی نمیدونم!
3 سوم اینکه توی دستکاری فایلهای inf به موردی به نام CatalogFile برخوردم که از اون هم هیچی نمیدونم!
در کل فکر کنم هیچی نمیدونم!!
(خداییش خسته شدم انقدر که با این فایلهای inf و دسکریپتورها ور رفتم!)
یه جوانمردی ما رو راهنمایی بفرماید. اجرکم عندالله.