private static async Task requestSetTilt(Options options, ushort tiltCoordinate, byte opCode = 0x73) { logInfo($"Try to request set tilt to {tiltCoordinate}..."); var coordinateBytes = BitConverter.GetBytes(tiltCoordinate); var requestSetPanMessage = new PelcoDEMessage(options.PTZDeviceAddress, opCode, coordinateBytes[1], coordinateBytes[0]); try { var responseMessage = await SendMessage(requestSetPanMessage); if (responseMessage != null) { logOk($"Request set tilt done"); } else { logError("Set tilt request got null response message"); } } catch (TaskCanceledException) { logError("Set tilt request cancelled by timeout"); } catch (Exception e) { Terminal.WriteLine("Set tilt request error! Check logs to details.", ConsoleColor.Red); _logger.LogException(e); } }
private static async Task requestMaxPan(Options options) { logInfo("Try to request max pan..."); var requestMaxPanMessage = new PelcoDEMessage(options.PTZDeviceAddress, 0x55); try { var responseMessage = await SendMessage(requestMaxPanMessage); if (responseMessage != null) { _logger.LogInfoMessage($"Request max pan done, message={responseMessage}"); var maxPan = PelcoResponseDecoder.GetUInt16((PelcoDEMessage)responseMessage); _maxPan = maxPan; logOk($"Request max pan done, Max Pan={maxPan}"); } else { logError($"Request max pan got null response message"); } } catch (TaskCanceledException) { logError("Max pan request cancelled by timeout"); } catch (Exception e) { Terminal.WriteLine("Max pan request! Check logs to details.", ConsoleColor.Red); _logger.LogException(e); } }
private static void _transport_MessageReceived(object sender, byte[] e) { var pelcoMessage = PelcoDEMessage.FromBytes(e); _logger.LogInfoMessage($"Pelco message received => {pelcoMessage?.ToString() ?? "<null>"}"); if (pelcoMessage == null) { return; } _cts.Dispose(); var trySetResult = _sendMessageTaskCompletionSource?.TrySetResult(pelcoMessage); _logger.LogInfoMessage($"Set async task result: {trySetResult}"); }
private void transport_MessageReceived(object sender, byte[] messageData) { var pelcoMessage = PelcoDEMessage.FromBytes(messageData); _logger.LogInfoMessage($"Pelco message received => {pelcoMessage?.ToString() ?? "<null>"}"); if (pelcoMessage == null) { return; } var settings = _settingsManager.GetAppSettings(); var responseType = _responseDecoder.GetResponseType(pelcoMessage); _logger.LogInfoMessage($"Pelco response type => {responseType?.ToString() ?? "<null>"}"); switch (responseType) { case null: return; case PelcoDEMessageType.SetPanCompleteResponse: _panTaskCompletionSource?.TrySetResult(true); return; case PelcoDEMessageType.RequestPanResponse: { var panAngleToCoordinatesFactor = settings.PTZPanAngleToCoordinateFactor; var angle = PelcoResponseDecoder.GetUInt16(pelcoMessage) / panAngleToCoordinatesFactor / 100; _logger.LogDebugMessage($"Pelco RequestPanResponse received => angle: {angle}"); _panRequestCTS.Dispose(); _requestPanTaskCompletionSource?.TrySetResult(angle); return; } case PelcoDEMessageType.RequestTiltResponse: { var tiltAngleToCoordinatesFactor = settings.PTZTiltAngleToCoordinateFactor; var angle = PelcoResponseDecoder.GetUInt16(pelcoMessage) / tiltAngleToCoordinatesFactor / 100; _logger.LogDebugMessage($"Pelco RequestTiltResponse received => angle: {angle}"); _tiltRequestCTS.Dispose(); _requestTiltTaskCompletionSource?.TrySetResult(angle); return; } } }
public static PelcoDEMessage FromBytes(byte[] dataBytes) { if (dataBytes == null) { return(null); } if (dataBytes.Length != 7) { return(null); } if (dataBytes[0] != 0xFF) { return(null); } var message = new PelcoDEMessage(dataBytes); var checkSum = PelcoDEMessage.calcCheckSum( message.DeviceAddress, message.Command1, message.Command2, message.DataH, message.DataL ); return(checkSum != dataBytes[6] ? null : message); }