Exemple #1
0
 private void _sendMessage(byte[] message)
 {
     _x10interface.WriteData(message);
 }
Exemple #2
0
        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);
        }