private static void ReloadIOconf(SerialNumberMapper serial) { IOconfFile.Reload(); foreach (var board in serial.McuBoards) { foreach (var ioconfMap in IOconfFile.GetMap()) { if (ioconfMap.SetMCUboard(board)) { board.BoxName = ioconfMap.BoxName; } } } }
private async static Task <MCUBoard> Create(string name, int baudrate, bool skipBoardAutoDetection) { MCUBoard board = null; try { var port = new SerialPort(name); board = new MCUBoard(port); port.BaudRate = 1; port.DtrEnable = true; port.RtsEnable = true; port.BaudRate = baudrate; port.PortName = name; port.ReadTimeout = 2000; port.WriteTimeout = 2000; port.Open(); board.pipeReader = PipeReader.Create(port.BaseStream); Thread.Sleep(30); // it needs to await that the board registers that the COM port has been opened before sending commands (work arounds issue when first opening the connection and sending serial). board.TryReadLine = board.TryReadAsciiLine; //this is the default which can be changed in ReadSerial based on the ThirdPartyProtocolDetection board.productType = "NA"; if (skipBoardAutoDetection) { board.InitialConnectionSucceeded = true; } else { board.InitialConnectionSucceeded = await board.ReadSerialNumber(); } if (File.Exists("IO.conf")) { // note that unlike the discovery at MCUBoard.OpenDeviceConnection that only considers the usb port, in here we can find the boards by the serial number too. foreach (var ioconfMap in IOconfFile.GetMap()) { if (ioconfMap.SetMCUboard(board)) { board.BoxName = ioconfMap.BoxName; board.ConfigSettings = ioconfMap.BoardSettings; port.ReadTimeout = ioconfMap.BoardSettings.MaxMillisecondsWithoutNewValues; await board.UpdateCalibration(board.ConfigSettings); } } } } catch (Exception ex) { CALog.LogException(LogID.A, ex); } if (board != null && !board.InitialConnectionSucceeded) { board.pipeReader?.Complete(); board.port.Close(); Thread.Sleep(100); } else if (board != null && board.IsEmpty() && board.BoxName == null) {//note we don't log this for devices without serial that were mapped by usb (last check above) CALog.LogInfoAndConsoleLn(LogID.B, $"some data without serial detected for device at port {name} - {baudrate} / still connected"); } return(board); }