Пример #1
0
        private static void TestClient()
        {
            while (true)
            {
                Console.ReadLine();
                var request = new GpioRequest {
                    PinNumber = 7, Action = RequestAction.Export
                };

                var commStream2 = new NamedPipeClientStream(".", PipeName, PipeDirection.InOut);
                commStream2.Connect();
                commStream2.SendMessage(request);
                commStream2.Dispose();
            }
        }
Пример #2
0
        private async Task <string> OnGpioRequestAsync(GpioRequest request)
        {
            if (request == null || Helpers.IsNullOrEmpty(request.Command))
            {
                return(null);
            }

            await ProcessingSemaphore.WaitAsync().ConfigureAwait(false);

            int pinNumber;
            GpioPinDriveMode mode;
            GpioPinValue     value;
            string           result = null;

            switch (request.Command)
            {
            case "SETGPIO" when request.StringParameters.Count == 4:
                if (request.StringParameters == null)
                {
                    result = null;
                }

                pinNumber = Convert.ToInt32(request.StringParameters[0].Trim());
                mode      = (GpioPinDriveMode)Convert.ToInt32(request.StringParameters[1].Trim());
                value     = (GpioPinValue)Convert.ToInt32(request.StringParameters[2].Trim());
                int delay = Convert.ToInt32(request.StringParameters[3].Trim());
                if (Core.Controller.SetGpioWithTimeout(pinNumber, mode, value, TimeSpan.FromMinutes(delay)))
                {
                    result = $"Successfully set {pinNumber} pin to {mode.ToString()} mode with value {value.ToString()} for {delay} minutes.";
                }
                else
                {
                    result = "Failed";
                }
                break;

            case "SETGPIO" when request.StringParameters.Count == 3:
                if (request.StringParameters == null)
                {
                    result = null;
                }

                pinNumber = Convert.ToInt32(request.StringParameters[0].Trim());
                mode      = (GpioPinDriveMode)Convert.ToInt32(request.StringParameters[1].Trim());
                value     = (GpioPinValue)Convert.ToInt32(request.StringParameters[2].Trim());
                if (Core.Controller.SetGpioValue(pinNumber, mode, value))
                {
                    result = $"Successfully set {pinNumber} pin to {mode.ToString()} mode with value {value.ToString()}";
                }
                else
                {
                    result = "Failed";
                }
                break;

            case "SETGPIO" when request.StringParameters.Count == 2:
                if (request.StringParameters == null)
                {
                    result = null;
                }

                pinNumber = Convert.ToInt32(request.StringParameters[0].Trim());
                mode      = (GpioPinDriveMode)Convert.ToInt32(request.StringParameters[1].Trim());

                if (Core.Controller.SetGpioValue(pinNumber, mode, GpioPinValue.High))
                {
                    result = $"Successfully set {pinNumber} pin to {mode.ToString()} mode.";
                }
                else
                {
                    result = "Failed";
                }
                break;

            case "GETGPIO" when request.StringParameters.Count == 1:
                if (request.StringParameters == null)
                {
                    result = null;
                }

                pinNumber = Convert.ToInt32(request.StringParameters[0].Trim());
                GpioPinConfig pinConfig = Core.Controller.GetPinConfig(pinNumber);

                GetGpioResponse response = new GetGpioResponse()
                {
                    DriveMode = pinConfig.Mode,
                    PinNumber = pinConfig.Pin,
                    PinValue  = pinConfig.PinValue
                };

                result = ObjectToString <GetGpioResponse>(response);
                break;
            }

            ProcessingSemaphore.Release();
            return(result);
        }