Пример #1
0
        public MainWindow()
        {
            InitializeComponent();
            IDuplexTypedMessagesFactory aTypedMessagesFactory = new DuplexTypedMessagesFactory();

            mySender = aTypedMessagesFactory.CreateDuplexTypedMessageSender <MyResponse, MyRequest>();
            mySender.ResponseReceived += OnResponseReceived;

            // Create messaging based on TCP.
            IMessagingSystemFactory aMessagingSystemFactory = new TcpMessagingSystemFactory();
            IDuplexOutputChannel    anOutputChannel         = aMessagingSystemFactory.CreateDuplexOutputChannel("tcp://192.168.2.9:8060/");

            // Attach output channel and be able to send messages and receive response messages.
            mySender.AttachDuplexOutputChannel(anOutputChannel);
            MyRequest test = new MyRequest {
                side = "L", strength = 10
            };

            mySender.SendRequestMessage(test);
            MyRequest reset = new MyRequest {
                side = "L", strength = 0
            };

            mySender.SendRequestMessage(reset);
            try
            {
                USBInterface usb = new USBInterface("vid_044f", "pid_b108");
                usb.Connect();
                usb.enableUsbBufferEvent(new System.EventHandler(myEventCacher));
                usb.startRead();

                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
Пример #2
0
        private void myEventCacher(object sender, EventArgs e)
        {
            int y          = 50;
            int speedRight = 50;
            int x          = 0;

            Console.Out.WriteLine("Event caught");
            if (USBHIDDRIVER.USBInterface.usbBuffer.Count > 0)
            {
                byte[] currentRecord = null;
                int    counter       = 0;
                while ((byte[])USBHIDDRIVER.USBInterface.usbBuffer[counter] == null)
                {
                    lock (USBHIDDRIVER.USBInterface.usbBuffer.SyncRoot)
                    {
                        USBHIDDRIVER.USBInterface.usbBuffer.RemoveAt(0);
                    }
                }
                currentRecord = (byte[])USBHIDDRIVER.USBInterface.usbBuffer[0];
                lock (USBHIDDRIVER.USBInterface.usbBuffer.SyncRoot)
                {
                    USBHIDDRIVER.USBInterface.usbBuffer.RemoveAt(0);
                }
                string hex = BitConverter.ToString(currentRecord);
                Console.WriteLine(hex);
                char[]   splitby = { '-' };
                string[] hexxes  = hex.Split(splitby);
                for (int i = 0; i < 23; i++)
                {
                    switch (i)
                    {
                    case 4:
                        int decValue3   = Convert.ToInt32(hexxes[5], 16) * 255 + Convert.ToInt32(hexxes[4], 16);
                        int percentage4 = (int)((((100f * (decValue3)) / 1020)) - 50) * 2;
                        //Console.WriteLine(decValue3);
                        //Console.WriteLine("x: {0}", percentage4);
                        x = percentage4;
                        break;

                    case 6:
                        int decValue   = Convert.ToInt32(hexxes[7], 16) * 255 + Convert.ToInt32(hexxes[6], 16);
                        int percentage = (int)(0.5f + ((100f * (1020 - decValue)) / 1020));
                        speedRight = percentage;
                        break;

                    case 8:
                        int decValue2   = Convert.ToInt32(hexxes[8], 16);
                        int percentage2 = (int)(((100f * (255 - decValue2)) / 255) - 50) * 2;
                        //Console.WriteLine(decValue2);
                        //Console.WriteLine("y: {0}", percentage2);
                        y = percentage2;
                        break;
                    }
                }
                x = 0 - x;
                double V = (100f - Math.Abs(x)) * (y / 100f) + y;
                double W = (100f - Math.Abs(y)) * (x / 100f) + x;

                double R = (V + W) / 2;
                double L = (V - W) / 2;

                R = R / 100f * 15;
                L = L / 100f * 15;
                int       strength1 = (int)L;
                int       strength  = (int)R;
                MyRequest request   = new MyRequest {
                    side = "L", strength = strength
                };
                mySender.SendRequestMessage(request);
                MyRequest request2 = new MyRequest {
                    side = "R", strength = strength1
                };
                mySender.SendRequestMessage(request2);
            }
        }