/// <summary> /// Returns the current <see cref="IHardware"/> or creates it the first time. /// </summary> /// <param name="model">Hardware model.</param> /// <returns>Hardware interface for the requested model when successful.</returns> /// <remarks> /// The requested hardware model must be the same, otherwise any existing board /// is disposed and an attempt made to create a board of the new model. /// </remarks> public static IHardware Connect(BoardModel model) { // Thread-safe lock lock (_lock) { // Check existing board when present if (_board != null) { // Detect chipset var chipset = Detect(); if (chipset == ChipsetModel.Unidentified) { return(null); } // Return existing board when chipset mataches if (_board.Chipset == chipset) { return(_board); } // Dispose existing board when not null and different model (just in case) _board.Dispose(); _board = null; } // Create new board switch (model) { case BoardModel.Sc20260D: return(_board = new SC20260Board()); case BoardModel.Sc20100S: return(_board = new SC20100Board()); case BoardModel.Bit: throw new NotImplementedException(); case BoardModel.Duino: return(_board = new DuinoBoard()); case BoardModel.Feather: return(_board = new FeatherBoard()); case BoardModel.Portal: throw new NotImplementedException(); case BoardModel.Stick: throw new NotImplementedException(); default: throw new ArgumentOutOfRangeException(nameof(model)); } } }
static void Main() { try { var hardwareOptions = new HardwareOptions() { BoardModel = BoardModel.Sc20260D }; MainBoard = new Mainboard(hardwareOptions).Connect(); MainBoard.Network.Enabled(); var server = new SocketServer(options => { options.Register(new HttpResponse()); }); server.Start(); } catch { MainBoard?.Dispose(); } }
static void Main() { try { var hardwareOptions = new HardwareOptions() { BoardModel = BoardModel.Sc20260D }; MainBoard = new Mainboard(hardwareOptions).Connect(); MainBoard.Network.Enabled(); var server = new HttpServer(options => { options.UseDeveloperExceptionPage(); options.UseFileServer(); options.UseMvc(); }); server.Start(); } catch { MainBoard?.Dispose(); } }