private void _sendMessage(byte[] message) { _x10interface.WriteData(message); }
private void SendMessage(byte[] message) { try { // Wait for message delivery acknowledge if (message.Length > 1 && IsConnected) { lock (waitAckMonitor) { while ((DateTime.Now - lastReceivedTs).TotalMilliseconds < 500) { Thread.Sleep(50); } DebugLog("X10 <", Utility.ByteArrayToString(message)); x10interface.WriteData(message); commandLastMessage = message; waitAckTimestamp = DateTime.Now; if (x10interface.GetType().Equals(typeof(CM11))) { expectedChecksum = (byte)((message[0] + message[1]) & 0xff); communicationState = X10CommState.WaitingChecksum; } else { communicationState = X10CommState.WaitingAck; } while (commandResendAttempts < commandResendMax && communicationState != X10CommState.Ready) { var elapsedFromWaitAck = DateTime.Now - waitAckTimestamp; while (elapsedFromWaitAck.TotalSeconds < commandTimeoutSeconds && communicationState != X10CommState.Ready) { Thread.Sleep(50); elapsedFromWaitAck = DateTime.Now - waitAckTimestamp; } if (elapsedFromWaitAck.TotalSeconds >= commandTimeoutSeconds && communicationState != X10CommState.Ready) { // Resend last message commandResendAttempts++; DebugLog( "X10 >", "PREVIOUS COMMAND TIMED OUT, RESENDING(" + commandResendAttempts + ")" ); x10interface.WriteData(commandLastMessage); waitAckTimestamp = DateTime.Now; } } commandResendAttempts = 0; commandLastMessage = new byte[0]; } } else { DebugLog("X10 <", Utility.ByteArrayToString(message)); x10interface.WriteData(message); } } catch (Exception ex) { DebugLog("X10 !", ex.Message); DebugLog("X10 !", ex.StackTrace); gotReadWriteError = true; } Thread.Sleep(50); }