public bool GenerateDefaultConfig() { Logger.Log("GPIO config file doesnt exist. press c to continue generating default config or q to quit."); ConsoleKeyInfo?Key = Helpers.FetchUserInputSingleChar(TimeSpan.FromMinutes(1)); if (!Key.HasValue) { Logger.Log("No value has been entered, continuing to run the program..."); } else { switch (Key.Value.KeyChar) { case 'c': break; case 'q': System.Threading.Tasks.Task.Run(async() => await Core.Exit().ConfigureAwait(false)); return(false); default: Logger.Log("Unknown value entered! continuing to run the program..."); break; } } Logger.Log("Generating default GPIO Config..."); if (!Directory.Exists(Constants.ConfigDirectory)) { Logger.Log("Config directory doesnt exist, creating one..."); Directory.CreateDirectory(Constants.ConfigDirectory); } if (File.Exists(Constants.GpioConfigPath)) { return(true); } GpioConfigRoot Config = new GpioConfigRoot { GPIOData = new List <GpioPinConfig>() }; for (int i = 0; i <= 31; i++) { GpioPinConfig PinConfig = new GpioPinConfig() { IsOn = false, Mode = Enums.PinMode.Output, Pin = i }; Config.GPIOData.Add(PinConfig); } SaveGPIOConfig(Config); return(true); }
public PiController(bool withPolling) { if (Core.DisablePiMethods || Core.RunningPlatform != OSPlatform.Linux) { Logger.Log("Failed to start PiController.", Enums.LogLevels.Warn); return; } Pi.Init <BootstrapWiringPi>(); GpioPollingManager = new GpioEventManager(this); MorseTranslator = new GpioMorseTranslator(this); PiBluetooth = new BluetoothController(); PiSound = new SoundController(); ControllerHelpers.DisplayPiInfo(); PinConfigCollection.Clear(); for (int i = 0; i < Constants.BcmGpioPins.Length; i++) { GpioPinConfig config = GetPinConfig(Constants.BcmGpioPins[i]); PinConfigCollection.Add(config); Logger.Log($"Generated config for {Constants.BcmGpioPins[i]} gpio pin.", Enums.LogLevels.Trace); } if (withPolling && GpioPollingManager != null) { Helpers.ScheduleTask(() => { List <GpioPinEventData> pinData = new List <GpioPinEventData>(); if (Core.Config.RelayPins.Count() > 0) { foreach (int pin in Core.Config.RelayPins) { pinData.Add(new GpioPinEventData() { PinMode = GpioPinDriveMode.Output, GpioPin = pin, PinEventState = Enums.GpioPinEventStates.ALL }); } GpioPollingManager.RegisterGpioEvent(pinData); foreach (GpioEventGenerator gen in GpioPollingManager.GpioPinEventGenerators) { gen.GPIOPinValueChanged += OnGpioPinValueChanged; } } }, TimeSpan.FromSeconds(5)); } IsProperlyInitialized = true; Logger.Log("Initiated GPIO Controller class!", Enums.LogLevels.Trace); }
public GpioPinConfig GetPinConfig(int pinToCheck) { if (pinToCheck > 40) { return(null); } (int pin, GpioPinDriveMode driveMode, GpioPinValue pinValue) = GetGpio(pinToCheck); GpioPinConfig result = new GpioPinConfig() { PinValue = pinValue, Mode = driveMode, Pin = pin, IsDelayedTaskSet = false, TaskSetAfterMinutes = 0 }; return(result); }
public async Task <bool> RelayMorseCycle(string textToConvert, int relayPin) { if (Helpers.IsNullOrEmpty(textToConvert)) { Logger.Log("The specified text is either null or empty.", Enums.LogLevels.Warn); return(false); } if (relayPin <= 0) { Logger.Log("Please specify a valid relay pin to run the cycle.", Enums.LogLevels.Warn); return(false); } Logger.Log($"Converting {textToConvert} to morse...", Enums.LogLevels.Trace); string Morse = MorseCore.ConvertToMorseCode(textToConvert); if (Helpers.IsNullOrEmpty(Morse)) { Logger.Log("Conversion to morse failed. cannot proceed.", Enums.LogLevels.Warn); return(false); } Logger.Log($"TEXT >> {textToConvert}"); Logger.Log($"MORSE >> {Morse}"); if (Core.Config.RelayPins != null && Core.Config.RelayPins.Count() > 0) { foreach (int pin in Core.Config.RelayPins) { if (pin.Equals(relayPin)) { GpioPinConfig pinStatus = Controller.GetPinConfig(pin); if (pinStatus.PinValue == GpioPinValue.Low) { Controller.SetGpioValue(pin, GpioPinDriveMode.Output, GpioPinValue.High); } break; } } } if (!MorseCore.IsValidMorse(Morse)) { Logger.Log("The specified morse is not valid!", Enums.LogLevels.Warn); return(false); } string pauseBetweenLetters = "_"; // One Time Unit string pauseBetweenWords = "_______"; // Seven Time Unit Morse = Morse.Replace(" ", pauseBetweenWords); Morse = Morse.Replace(" ", pauseBetweenLetters); foreach (char character in Morse.ToCharArray()) { switch (character) { case '.': Controller.SetGpioWithTimeout(relayPin, GpioPinDriveMode.Output, GpioPinValue.Low, TimeSpan.FromMilliseconds(300)); break; case '-': Controller.SetGpioWithTimeout(relayPin, GpioPinDriveMode.Output, GpioPinValue.Low, TimeSpan.FromMilliseconds(300 * 3)); break; case '_': await Task.Delay(300).ConfigureAwait(false); break; } } if (Core.Config.RelayPins != null && Core.Config.RelayPins.Count() > 0) { foreach (int pin in Core.Config.RelayPins) { GpioPinConfig pinStatus = Controller.GetPinConfig(pin); if (pinStatus.PinValue == GpioPinValue.Low) { Controller.SetGpioValue(pin, GpioPinDriveMode.Output, GpioPinValue.High); } } } return(true); }