public void Connected(string deviceId, PositionControllerResponse status) { Id = deviceId; if (deviceId != null && this.positionController.IsOkStatus(status.Status)) { maxPosition = 0; IsConnected = true; PacketsTotalNumber = 0; PacketsFailuresNumber = 0; PacketsCrcFailuresNumber = 0; ConnectDisconnectTitle = TITLE_DISCONNECT; } else { maxPosition = 0; IsConnected = false; ConnectDisconnectTitle = TITLE_CONNECT; } SetStatus("Connection attempt", PositionControllerCommand.NONE, status); DisconnectCommand.UpdateCanExecute(); EmergencyStopCommand.UpdateCanExecute(); ResetPositionControllerCommand.UpdateCanExecute(); CalibratePositionControllerCommand.UpdateCanExecute(); }
private void UpdateUi(IPositionControllerDeviceModel parameter, PositionControllerResponse result) { CoreDispatcher dispatcher = parameter.Dispatcher; if (dispatcher == null) { return; } var ignore = dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { parameter.SetStatus(PositionControllerCommand.CALIBRATE, result); }); }
/// <param name="parameter">method on model can only be called from UI thread</param> private async Task <PositionControllerResponse> ExecuteAsync(IPositionControllerDeviceModel parameter) { PositionControllerResponse result = await this.positionController.Calibrate() .ConfigureAwait(false); if (!positionController.IsOkStatus(result.Status)) { return(result); } DateTime start = DateTime.UtcNow; while (DateTime.UtcNow - start < MAX_CALIBRATION_TIME) { result = await this.positionController.GetPosition() .ConfigureAwait(false); if (!positionController.IsOkStatus(result.Status) || (result.Status & PositionControllerStatus.PC_OK_MASK) == PositionControllerStatus.PC_OK_EMERGENCY_STOP) { return(result); } if ((result.Status & PositionControllerStatus.PC_OK_MASK) == PositionControllerStatus.PC_OK_IDLE) { // idle means position controller finished calibration return(result); } else { UpdateUi(parameter, result); } await Task.Delay(1000) .ConfigureAwait(false); } return(new PositionControllerResponse(PositionControllerStatus.CS_ERR_DEVICE_NOT_CONNTECTED)); }
private void SetStatus(string message, PositionControllerCommand fromCommand, PositionControllerResponse status) { if (status != null && status.Status == PositionControllerStatus.PC_OK_IDLE && /* no errors should be present for calibration to be considered successful */ fromCommand == PositionControllerCommand.CALIBRATE) { this.maxPosition = status.Position; } if (status == null) { Position = double.NaN; StatusDisplayName = STATUS_DISPLAY_NAME_NOT_AVAILABLE; } else { Position = ((double)status.Position) * PositionController.DISTANCE_PER_TICK_MM; StatusDisplayName = StatusToDisplayName(status.Status); IsEmergencyStopped = (status.Status & PositionControllerStatus.PC_OK_EMERGENCY_STOP) == PositionControllerStatus.PC_OK_EMERGENCY_STOP; ++PacketsTotalNumber; if ((status.Status & ~PositionControllerStatus.PC_OK_MASK) != 0) { ++PacketsFailuresNumber; } if ((status.Status & PositionControllerStatus.PC_ERR_CRC) != 0 || (status.Status & PositionControllerStatus.CS_ERR_CRC) != 0) { ++PacketsCrcFailuresNumber; } if (!this.positionController.IsOkStatus(status.Status)) { this.mainModel.LogEntries.Add(new PositionControllerErrorStatusLogEntry(message, fromCommand, status.Status)); } } }
public void SetStatus(PositionControllerCommand fromCommand, PositionControllerResponse status) { SetStatus(null, fromCommand, status); }