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(); } }
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); }