Пример #1
0
 public static EsysHandheld DeepClone(EsysHandheld EsysHandheldToClone)
 {
     EsysHandheld ClonedEsysHandheld = new EsysHandheld();
     ClonedEsysHandheld.VIN = EsysHandheldToClone.VIN;
     //Need to clone over the stem type too!!!
     ClonedEsysHandheld.StemType = EsysHandheldToClone.StemType;
     foreach (KeyValuePair<Axle,TPM> kvp in EsysHandheldToClone.TPMInfo) {
         ClonedEsysHandheld.TPMInfo.Add(kvp.Key,new TPM(kvp.Value.axelLoc,kvp.Value.StemID,kvp.Value.PSI,kvp.Value.StemType));
     }
     return ClonedEsysHandheld;
 }
 public TPMDataReceivedEventArgs(EsysHandheld _TPMData)
 {
     TPMData = _TPMData;
 }
Пример #3
0
 private void preInit()
 {
     BufferSize = 1024;
     //gives the connection thread the OK to connect
     mblnOKToConnect = true;
     mCurrentHandheldData = null;
     mLockCurrentHandheldData = new object();
 }
Пример #4
0
        private void CheckConnectionThread()
        {
            bool lastConnectState = false;
            DateTime lastConnectionTry;
            DateTime.TryParse("1/1/2000", out lastConnectionTry);

            while (mConnectionThreadActive) {
                try {
                    //Raise connected event if connected state changed.  Need to check before and after the connection section to make sure event gets raised.
                    if (lastConnectState != Connected) {
                        lastConnectState = Connected;
                        DateTime.TryParse("1/1/2000", out mLastResponse);
                        DateTime.TryParse("1/1/2000", out mLastMsgSent);
                        if (lastConnectState == true) {
                            mLastResponse = DateTime.Now;
                            lastConnectionTry = DateTime.Now;

                            if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.Connected, "Connected"));
                        } else {
                            if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.Disconnected, "Disconnected"));
                        }
                    }

                    TimeSpan ts_LastConnectionTry = DateTime.Now - lastConnectionTry;
                    TimeSpan ts_LastResponse = DateTime.Now - mLastResponse;
                    if (!Connected && mblnOKToConnect) {
                        if (ts_LastConnectionTry.TotalMilliseconds > miConnect * 1000) {
                            if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.TryingToConnect, "Trying to connect..."));
                            base.Connect();
                            lastConnectionTry = DateTime.Now;
                        }

                    } else if (mblnOKToConnect == false) {
                        if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.Disconnecting, "Disconnecting..."));
                        base.Disconnect();
                        lock (mLockCurrentHandheldData) {
                            mCurrentHandheldData = null;
                        }
                    }

                    if (mCurrentHandheldData != null && ts_LastResponse.TotalMilliseconds > 5000) {
                        //Give up on the current message and reset
                        lock (mLockCurrentHandheldData) {
                            mCurrentHandheldData = null;
                            // this was causing bum errors.
                            //if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.ErrorHappened, "Error Finishing Upload"));

                        }

                    }

                    //Raise connected event if connected state changed.  Need to check before and after the connection section to make sure event gets raised.
                    if (lastConnectState != Connected) {
                        lastConnectState = Connected;
                        DateTime.TryParse("1/1/2000", out mLastMsgSent);
                        DateTime.TryParse("1/1/2000", out mLastResponse);
                        if (lastConnectState == true) {
                            mLastResponse = DateTime.Now;
                            lastConnectionTry = DateTime.Now;
                            if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.Connected, "Connected"));
                        } else {
                            if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.Disconnected, "Disconnected"));
                        }
                    }

                    Thread.Sleep(1000);
                } catch (Exception ex) {
                    if (mConnectionThreadActive == true) if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.ErrorHappened, ex.ToString()));
                }
            }
        }
Пример #5
0
        /// <summary>
        /// This routine parses out the TPM stem info and then raises the TPMDataRecevied event when all TPM stem info is received.
        /// The ATop has to be configured to send out data in entire streams, instead of one character at a time.  
        /// This routine does not buffer the data.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnDataReceived(DataReceivedEventArgs e)
        {
            //base.OnSocketDataReceived(socket, e);
            try {
                mLastResponse = DateTime.Now;

                bool InvalidCharacters = false;

                byte[] data = e.Data;
                if (e.Data.Length < 2) return;
                StringBuilder FromHandheld = new StringBuilder("");
                for (int i = 0; i < data.Length; i++) {
                    FromHandheld.Append((char)data[i]);
                    if (data[i] > 122) InvalidCharacters = true;

                }
                mTPMLog.Write("RECEIVED: " + FromHandheld.ToString());
                mMessgaeCount++;

                if (OKToReceiveData == false) {
                    mTPMLog.Write("Not OK to Recevie Data.  Ignoring Message");
                    if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.ErrorHappened, "Handheld will not upload until current vehicle is finished."));
                    return;
                }
                //uncomment out the next two lines to debug the handheld data input.
                //if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.ErrorHappened,"TPM DATA: " + mMessgaeCount + " - ("+ FromHandheld.ToString() + ")"));
                //return;
                Message_Upload message;
                bool Success = Message_Upload.TryParse(data, out message);
                if (InvalidCharacters == true){
                    mTPMLog.Write("Invalid characters from handheld - " + message.ParseErrorMsg);
                    //if (MessageReceived != null) MessageReceived(this, new MessageReceivedEventArgs(message));
                    //if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.ErrorHappened, "Could not parse message from TPM handheld."));
                }else if (Success == false) {
                    mTPMLog.Write("Error parsing previous Message - " + message.ParseErrorMsg);
                    if (MessageReceived != null) MessageReceived(this, new MessageReceivedEventArgs(message));
                    if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.ErrorHappened, "Could not parse message from TPM handheld."));
                } else {
                    if (message.MessageType == TPM_Message_Type.RecordCompleteMessage) {
                        OKToReceiveData = false; //Only process one vehcile at a time.  Must be set manually to allow for controlling class to do what it needs to do.

                        //Send an ACK to the handheld
                        mTPMLog.Write("Sending ACK for record complete");
                        Send(RecordCompleteACK);

                        if (mCurrentHandheldData != null) {
                            //Raise the TPMDataReceved event
                            EsysHandheld EsysHandheldClone = EsysHandheld.DeepClone(mCurrentHandheldData);
                            if (TPMDataReceived != null) TPMDataReceived(this, new TPMDataReceivedEventArgs(EsysHandheldClone));
                        }
                        lock (mLockCurrentHandheldData) {
                            mCurrentHandheldData = null;
                        }

                        if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.Connected, "Finished uploading data."));

                    } else if (message.MessageType == TPM_Message_Type.DataMessage) {
                        //If this is the first message in the string of messages
                        if (mCurrentHandheldData == null) {
                            mTPMLog.Write("Parsing first data message");
                            lock (mLockCurrentHandheldData) {
                                mCurrentHandheldData = new EsysHandheld();
                                mCurrentHandheldData.VIN = message.VIN;
                                mCurrentHandheldData.StemType = message.StemType;

                                mCurrentHandheldData.TPMInfo.Add(message.axelLoc, new TPM(message.axelLoc, message.StemID, message.PSI, message.StemType));
                            }

                            if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.Connected, "Uploading " + message.axelLoc.ToString()));
                            //Send an ACK to the handheld
                            Send(RecordCompleteACK);
                            mTPMLog.Write("Sending ACK for first data message");

                        } else if (mCurrentHandheldData != null) {
                            //The first 3 or 4 characters get trashed on the next message
                            //if (message.VIN.Length > 4 ) message.VIN = message.VIN.Substring(4);

                            if (mCurrentHandheldData.TPMInfo.ContainsKey(message.axelLoc) == false) {
                                //double check to make sure the vin is the correct vin
                                if (mCurrentHandheldData.VIN.Contains(message.VIN)) {

                                    lock (mLockCurrentHandheldData) {
                                        mCurrentHandheldData.TPMInfo.Add(message.axelLoc, new TPM(message.axelLoc, message.StemID, message.PSI, message.StemType));

                                    }
                                    //Send an ACK to the handheld
                                    Send(RecordCompleteACK);
                                    mTPMLog.Write("Sending ACK for data message");

                                } else{
                                    mTPMLog.Write("VIN (" + message.VIN + ") does not match original VIN (" + mCurrentHandheldData.VIN + ")");
                                }
                            } else {
                                mTPMLog.Write("Already have this axelLoc (" + message.axelLoc.ToString() + ") stored. Ignoring it.");
                                //Send an ACK to the handheld
                                Send(RecordCompleteACK);
                                mTPMLog.Write("Sending ACK for data message");
                            }

                        }
                    } else if (message.MessageType == TPM_Message_Type.Error) {
                        mTPMLog.Write("Error parsing previous Message! - " + message.ParseErrorMsg);
                        //if (MessageReceived != null) MessageReceived(this, new MessageReceivedEventArgs(message));
                        //if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.ErrorHappened, "Could not parse message from TPM Handheld."));
                    }
                }

                if (MessageReceived != null) MessageReceived(this, new MessageReceivedEventArgs(message));
            } catch (Exception ex) {
                if (StateChanged != null) StateChanged(this, new StateChangeEventArgs(StateChange.ErrorHappened, ex.ToString()));
            }
        }
Пример #6
0
 public void SimulateTPMDataReceived()
 {
     if (OKToReceiveData == true) {
         EsysHandheld h = new EsysHandheld();
         mSimulatedVIN++;
         h.VIN = mSimulatedVIN.ToString();
         //h.VIN = "******************";
         h.TPMInfo.Add(Axle.FL, new TPM(Axle.FL, (mSimulatedTPM1SN++).ToString(), "139", TypeOfStem.Continental));
         h.TPMInfo.Add(Axle.RL, new TPM(Axle.RL, (mSimulatedTPM2SN++).ToString(), "239", TypeOfStem.Continental));
         h.TPMInfo.Add(Axle.FR, new TPM(Axle.FR, (mSimulatedTPM3SN++).ToString(), "339", TypeOfStem.Continental));
         h.TPMInfo.Add(Axle.RR, new TPM(Axle.RR, (mSimulatedTPM4SN++).ToString(), "439", TypeOfStem.Continental));
         if (TPMDataReceived != null) TPMDataReceived(null, new TPMDataReceivedEventArgs(h));
     }
 }