/// <summary> /// /// </summary> // public event EventHandler AutoSkip; /// <summary> /// /// </summary> // public event EventHandler DeviceIDRequest; /// <summary> /// /// </summary> // public event EventHandler EraseSegment; /// <summary> /// /// </summary> // public event EventHandler IDStatusRequest; /// <summary> /// /// </summary> // public event EventHandler ListFirstID; /// <summary> /// /// </summary> // public event EventHandler ListNextID; /// <summary> /// /// </summary> // public event EventHandler LongestContiguousStorageRequest; /// <summary> /// /// </summary> // public event EventHandler SetDeviceID; #endregion /// <summary> /// </summary> /// <param name="request"> /// The request. /// </param> /// <returns> /// The <see cref="CommandBlock" />. /// </returns> protected override CommandBlock ProcessRequest(CommandBlock request) { CommandBlock response = new AckCommandBlock(); var handled = false; switch (request.Cmd1) { case Cmd1.SystemControl: break; case Cmd1.TransportControl: switch ((TransportControl)request.Cmd2) { case TransportControl.CueUpWithData: switch (request.DataCount) { case 0x0: RaiseCueUpWithData(request.DataCount, request.Data); handled = true; break; case 0x8: RaiseCueUpWithData(request.DataCount, request.Data); handled = true; break; case 0xC: RaiseCueUpWithData(request.DataCount, request.Data); handled = true; break; default: throw new ArgumentOutOfRangeException(); } break; //case TransportControl.InPreset: // switch (request.DataCount) // { // case 0x8: // RaiseInPreset(request.DataCount, request.Data); // handled = true; // break; // } // break; } break; case Cmd1.PresetSelectControl: switch ((PresetSelectControl)request.Cmd2) { case PresetSelectControl.InDataPreset: RaiseInDataPreset(request.DataCount, request.Data); handled = true; break; case PresetSelectControl.OutDataPreset: RaiseOutDataPreset(request.DataCount, request.Data); handled = true; break; } break; case Cmd1.SenseRequest: break; case Cmd1.SenseReturn: break; case Cmd1.Return: break; default: throw new ArgumentOutOfRangeException(); } return(!handled?base.ProcessRequest(request) : response); }
/// <summary> /// </summary> /// <param name="request"> /// The request. /// </param> /// <returns> /// The <see cref="CommandBlock" />. /// </returns> protected virtual CommandBlock ProcessRequest(CommandBlock request) { CommandBlock response = new AckCommandBlock(); switch (request.Cmd1) { case Cmd1.SystemControl: switch ((SystemControl)request.Cmd2) { case SystemControl.LocalDisable: RaiseLocalDisable(); break; case SystemControl.DeviceTypeRequest: response = DeviceTypeRequest(); break; case SystemControl.LocalEnable: RaiseLocalEnable(); break; default: throw new ArgumentOutOfRangeException(); } break; case Cmd1.TransportControl: switch ((TransportControl)request.Cmd2) { case TransportControl.Stop: RaiseStop(); break; case TransportControl.Play: RaisePlay(); break; case TransportControl.Record: RaiseRecord(); break; case TransportControl.StandbyOff: RaiseStandbyOff(); break; case TransportControl.StandbyOn: RaiseStandbyOn(); break; case TransportControl.Eject: RaiseEject(); break; case TransportControl.FastFwd: RaiseFastFwd(); break; case TransportControl.JogFwd: RaiseJogFwd(); break; case TransportControl.VarFwd: RaiseVarFwd(); break; case TransportControl.ShuttleFwd: RaiseShuttleFwd(); break; case TransportControl.Rewind: RaiseRewind(); break; case TransportControl.JogRev: RaiseJogRev(); break; case TransportControl.VarRev: RaiseVarRev(); break; case TransportControl.ShuttleRev: RaiseShuttleRev(); break; case TransportControl.Preroll: RaisePreroll(); break; case TransportControl.CueUpWithData: RaiseCueUpWithData(request.Data); break; case TransportControl.InDataPreset: RaiseInDataPreset(request.Data); break; case TransportControl.OutDataPreset: RaiseOutDataPreset(request.Data); break; case TransportControl.AudioInDataPreset: break; case TransportControl.AudioOutDataPreset: break; case TransportControl.SyncPlay: break; case TransportControl.ProgSpeedPlayPlus: break; case TransportControl.ProgSpeedPlayMin: break; case TransportControl.Preview: break; case TransportControl.Review: break; case TransportControl.AutoEdit: break; case TransportControl.OutpointPreview: break; case TransportControl.AntiClogTimerDisable: break; case TransportControl.AntiClogTimerEnable: break; case TransportControl.FullEEOff: break; case TransportControl.FullEEOn: break; case TransportControl.SelectEEOn: break; case TransportControl.EditOff: break; case TransportControl.EditOn: break; case TransportControl.FreezeOff: break; default: throw new ArgumentOutOfRangeException(); } break; case Cmd1.PresetSelectControl: break; case Cmd1.SenseRequest: switch ((SenseRequest)request.Cmd2) { case SenseRequest.TcGenSense: response = TcGenSense((TimeSenseRequest)request.Data[0]); break; case SenseRequest.CurrentTimeSense: response = CurrentTimeSense((TimeSenseRequest)request.Data[0]); break; case SenseRequest.StatusSense: var start = (request.Data[0] & 0xF0) >> 4; var length = request.Data[0] & 0x0F; response = StatusSense(start, length); break; default: throw new ArgumentOutOfRangeException(); } break; default: response = new NakCommandBlock(NakCommandBlock.Nak.UndefinedError); break; } return(response); }