示例#1
0
        public override bool start(uint index)
        {
            Monitor.Enter(mLock);
            try
            {
                uint i        = 0;
                uint devCount = SiUSBController.count();
                for (uint j = 0; j < devCount; j++)
                {
                    var vidSB = new StringBuilder();
                    var pidSB = new StringBuilder();
                    if (SiUSBController.getVID(j, vidSB) > 0 && SiUSBController.getPID(j, pidSB) > 0)
                    {
                        string vidString = vidSB.ToString();
                        string pidString = pidSB.ToString();

                        var vidHex = Util.getHexBytes(vidString);
                        var pidHex = Util.getHexBytes(pidString);
                        Array.Reverse(vidHex);
                        Array.Reverse(pidHex);

                        ushort vID = BitConverter.ToUInt16(vidHex, 0);
                        ushort pID = BitConverter.ToUInt16(pidHex, 0);

                        if (vID == (ushort)VendorID && pID == (ushort)ProductID)
                        {
                            if (i == index)
                            {
                                if (SiUSBController.open(j, ref mDeviceHandle) == false)
                                {
                                    Console.WriteLine("SiUSBController.start() : Failed open (SiUSB index : {0})", j);
                                    Monitor.Exit(mLock);
                                    this.stop();
                                    return(false);
                                }

                                Console.WriteLine("SiUSBController.start() : Success open (SiUSB index : {0})", j);

                                mThreadState = true;
                                mThread      = new Thread(threadFunc);
                                mThread.Start();
                                Monitor.Exit(mLock);
                                return(true);
                            }
                            i++;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("SiUSBController.start() : Failed catch({0})", e.Message);
            }
            Monitor.Exit(mLock);
            this.stop();
            return(false);
        }
示例#2
0
 private static int getPID(uint index, StringBuilder builder)
 {
     try
     {
         if (index >= SiUSBController.count())
         {
             return(-100);
         }
         var status = SIUSBXP.SI_GetProductString(index, builder, SIUSBXP.SI_RETURN_PID);
         return((status == SIUSBXP.SI_SUCCESS) ? 1 : -1);
     }
     catch { }
     return(-200);
 }
示例#3
0
 private static bool open(uint index, ref IntPtr deviceHandle)
 {
     try
     {
         if (index >= SiUSBController.count())
         {
             return(false);
         }
         var status = SIUSBXP.SI_Open(index, ref deviceHandle);
         return(status == SIUSBXP.SI_SUCCESS);
     }
     catch { }
     return(false);
 }
示例#4
0
        public static uint getDeviceCount(USBVendorID vendorID, USBProductID productID)
        {
            uint count = 0;

            try
            {
                uint devCount = SiUSBController.count();
                for (uint i = 0; i < devCount; i++)
                {
                    var vidSB = new StringBuilder();
                    var pidSB = new StringBuilder();
                    if (SiUSBController.getVID(i, vidSB) > 0 && SiUSBController.getPID(i, pidSB) > 0)
                    {
                        string vidString = vidSB.ToString();
                        string pidString = pidSB.ToString();

                        Console.WriteLine("SiUSBController.getDeviceCount() : SiUSB index({0}), VendorID(0x{1:X4}), ProductID(0x{2:X4})", i, vidString, pidString);

                        var vidHex = Util.getHexBytes(vidString);
                        var pidHex = Util.getHexBytes(pidString);
                        Array.Reverse(vidHex);
                        Array.Reverse(pidHex);

                        ushort vID = BitConverter.ToUInt16(vidHex, 0);
                        ushort pID = BitConverter.ToUInt16(pidHex, 0);

                        if (vID == (ushort)vendorID && pID == (ushort)productID)
                        {
                            count++;
                        }
                    }
                }
            }
            catch { }
            return(count);
        }
示例#5
0
        public override bool start()
        {
            Monitor.Enter(mLock);
            try
            {
                uint count = SiUSBController.count();
                if (count == 0)
                {
                    Console.WriteLine("SiUSBController.start() : USB device is zero");
                    Monitor.Exit(mLock);
                    this.stop();
                    return(false);
                }

                Console.WriteLine("SiUSBController.start() : USB device count({0})", count);

                bool isDeviceOpen = false;
                for (uint i = 0; i < count; i++)
                {
                    var vidSB = new StringBuilder();
                    var pidSB = new StringBuilder();
                    if (SiUSBController.getVID(i, vidSB) > 0 && SiUSBController.getPID(i, pidSB) > 0)
                    {
                        string vidString = vidSB.ToString();
                        string pidString = pidSB.ToString();

                        Console.WriteLine("SiUSBController.start() : Device index({0}), VendorID(0x{1:X4}), ProductID(0x{2:X4})", i, vidString, pidString);

                        var vidHex = Util.getHexBytes(vidString);
                        var pidHex = Util.getHexBytes(pidString);
                        Array.Reverse(vidHex);
                        Array.Reverse(pidHex);

                        ushort vID = BitConverter.ToUInt16(vidHex, 0);
                        ushort pID = BitConverter.ToUInt16(pidHex, 0);

                        if (vID == (ushort)VendorID && pID == (ushort)ProductID)
                        {
                            if (SiUSBController.open(i, ref mDeviceHandle) == true)
                            {
                                Console.WriteLine("SiUSBController.start() : Success open({0})", i);
                                isDeviceOpen = true;
                                break;
                            }
                            else
                            {
                                Console.WriteLine("SiUSBController.start() : Failed open({0})", i);
                            }
                        }
                    }
                }

                if (isDeviceOpen == false)
                {
                    Console.WriteLine("SiUSBController.start() : Failed device open");
                    Monitor.Exit(mLock);
                    this.stop();
                    return(false);
                }

                mThreadState = true;
                mThread      = new Thread(threadFunc);
                mThread.Start();
                Monitor.Exit(mLock);
                return(true);
            }
            catch (Exception e)
            {
                Console.WriteLine("SiUSBController.start() : Failed catch({0})", e.Message);
                Monitor.Exit(mLock);
                this.stop();
                return(false);
            }
        }