Exemple #1
0
        private void FrameReceivedEventHandler(object o, FrameReceivedEventArgs a)
        {
            try
            {
                switch (a.Frame.MailboxId)
                {
                case (uint)CNXMsgIds.ProductId:
                    CNXLog.InfoFormat("DeviceCataloge {0}", a.Frame.ToString());
                    ThreadPool.QueueUserWorkItem(new WaitCallback(UpdateDeviceCatalogue), a.Frame);
                    break;

                case (uint)CNXMsgIds.Fareset:
                    CNXLog.InfoFormat("Frame detected Fareset {0}.", a.Frame.Data[0]);
                    break;

                case (uint)CNXMsgIds.Destination:
                    CNXLog.InfoFormat("Frame detected Destination {0}.", CNXCANMsgHelper.UnpackDestinationFrameData(a.Frame.Data));
                    break;

                case (uint)CNXMsgIds.RouteTrip:
                    string route = string.Empty;
                    int?   trip  = null;
                    CNXCANMsgHelper.UnpackFareboxData(a.Frame.Data, out route, out trip);
                    CNXLog.InfoFormat("Frame detected Farebox route code {0} trip No {0}.", route, trip);
                    break;

                default:
                    break;
                }

                CNXLog.Debug("FrameReceivedEventHandler");
            }
            catch (Exception e)
            {
                CNXLog.ErrorFormat("CANCommsServer Frame Rx {0}.", e.ToString());
            }
        }
Exemple #2
0
        /// <summary>
        /// Deals with frames comming in from CAN
        /// </summary>
        /// <param name="o">Event source object.</param>
        /// <param name="a">Event Parmeters</param>
        public void FrameReceivedEventHandler(object o, FrameReceivedEventArgs a)
        {
            try
            {
                switch ((CNXMsgIds)a.Frame.MailboxId)
                {
                case CNXMsgIds.DuressState:
                    if (CNXCANMsgHelper.DuressFrame(a.Frame))
                    {
                        CNXLog.WarnFormat("TrackerState Duress Active frame recieved.");
                        mLocationMessage.Alarm = true;
                        StateMachine(TrackingEvent.ALARM_ACTIVE);
                    }
                    break;

                default:
                    break;
                }
            }
            catch (Exception e)
            {
                CNXLog.Error(string.Format("TrackerState Frame error {0}", a.Frame.ToString()), e);
            }
        }
Exemple #3
0
        protected void OnDatagramReceivedEventHandler(object sender, DatagramReceivedEventArgs a)
        {
            CANFrame frame = new CANFrame();

            if (a.Datagram.Length < 4)
            {
                ServerMsgLog.WarnFormat("UDP out-of-range, length {0}", a.Datagram.Length);
                return;
            }

            uint msgId = 0;

            try
            {
                // work out what it all meens
                // first assume that the datgram is a CNX CAN message
                if (BitConverter.IsLittleEndian)
                {
                    Array.Reverse(a.Datagram, 0, 4);
                }
                msgId = BitConverter.ToUInt32(a.Datagram, 0);

                switch (msgId)
                {
                case (uint)CNXMsgIds.TripProgress:
                    frame.MailboxId = msgId;
                    frame.DataFromArray(a.Datagram, 4, a.Datagram.Length - 4);
                    TripProgressType msgType;
                    int pathId;
                    int position;
                    int?tripNo;
                    CNXCANMsgHelper.UnpackTripProgress(frame, out msgType, out pathId, out position, out tripNo);
                    object[] args = { msgType, pathId, position, tripNo };
                    ServerMsgLog.WarnFormat("UDP Trip Progress {0}, RouteTag {1}, Progress {2}, tripNo {3}.", args);
                    mCANClient.Send(frame);
                    break;

                case (uint)CNXMsgIds.DeviceCatalogue:
                    ServerMsgLog.WarnFormat("UDP Re-Cataloge message (0x101).");
                    // clear our catalogue
                    mCANServer.ClearDeviceCatalogue();
                    // put our self into the new catalogue
                    AddSelfToCatalogue();
                    // reset catalogues on all equipment.
                    frame.ClearData();
                    frame.MailboxId = (uint)CANLib.CNXMsgIds.DeviceCatalogue;
                    mCANClient.Send(frame);
                    mCANClient.Send(CNXCANMsgHelper.PackIdentifiers(mCommsServer.CommsAddress, mCommsServer.CompanyTag));
                    break;

                case (uint)CNXMsgIds.TripNone:
                case (uint)CNXMsgIds.TripOffRoute:
                    frame.MailboxId = msgId;
                    mCANClient.Send(frame);
                    ServerMsgLog.WarnFormat("UDP {0}.", (CNXMsgIds)msgId);
                    break;

                case (uint)CNXMsgIds.TripOnRoute:
                    frame.MailboxId = msgId;
                    frame.DataFromArray(a.Datagram, 4, a.Datagram.Length - 4);
                    ServerMsgLog.WarnFormat("UDP {0}.", frame.ToString());
                    mCANClient.Send(frame);
                    break;

                case (uint)RTTMesg.RTTInMsgIds.FirmwareBuildNos:
                    ServerMsgLog.WarnFormat("UDP firmware version (0x1001) length {0}\n{1}.", a.Datagram.Length, CommsServer.HexDump(a.Datagram, a.Datagram.Length));
                    if (a.Datagram.Length > 5)
                    {
                        StartFirmwareManagement(a.Datagram, 4);
                    }
                    break;

                case (uint)RTTMesg.RTTInMsgIds.ResourceBuildNos:
                    ServerMsgLog.WarnFormat("UDP configuration message (0x1002) length {0}\n{1}.", a.Datagram.Length, CommsServer.HexDump(a.Datagram, a.Datagram.Length));
                    if (a.Datagram.Length > 5)
                    {
                        byte[] versions = new byte[a.Datagram.Length - 4];
                        Array.Copy(a.Datagram, 4, versions, 0, versions.Length);
                        StartDeviceConfigurationManagement(versions);
                    }
                    break;

                case (uint)RTTMesg.RTTInMsgIds.CompanyTag:
                    mCommsServer.CompanyTag = a.Datagram[4];
                    ServerMsgLog.WarnFormat("UDP CompanyTag {0}", mCommsServer.CompanyTag);
                    mCANClient.Send(CNXCANMsgHelper.PackIdentifiers(mCommsServer.CommsAddress, mCommsServer.CompanyTag));
                    break;

                case (uint)RTTMesg.RTTInMsgIds.DriverLogonOK:
                    ServerMsgLog.WarnFormat("UDP {0}.", (RTTMesg.RTTInMsgIds)msgId);
                    frame.MailboxId = (uint)CNXMsgIds.LogonResult;
                    frame.Data      = new byte[1];
                    frame.Data[0]   = (byte)LogonState.LogonOK;
                    mCANClient.Send(frame);
                    break;

                case (uint)RTTMesg.RTTInMsgIds.DriverLogonFail:
                    ServerMsgLog.WarnFormat("UDP {0}.", (RTTMesg.RTTInMsgIds)msgId);
                    frame.MailboxId = (uint)CNXMsgIds.LogonResult;
                    frame.Data      = new byte[1];
                    frame.Data[0]   = (byte)LogonState.LogonFailed;
                    mCANClient.Send(frame);
                    break;

                case (uint)RTTMesg.RTTInMsgIds.DriverLogoff:
                    ServerMsgLog.WarnFormat("UDP {0}.", (RTTMesg.RTTInMsgIds)msgId);
                    BeginSendTransientBlock(Block.DriverLogon, new byte[] { 0 });
                    break;

                case (uint)RTTMesg.RTTInMsgIds.DriverMesg2:
                    ServerMsgLog.WarnFormat("UDP {0}\n{1}.", (RTTMesg.RTTInMsgIds)msgId, CommsServer.HexDump(a.Datagram, a.Datagram.Length));
                    //TransientBlock block = new TransientBlock(mCANClient, (byte)Block.MessageToDriver);
                    byte[] blockData = new byte[a.Datagram.Length - 4];
                    Array.Copy(a.Datagram, 4, blockData, 0, blockData.Length);
                    //block.Send(blockData, false);
                    BeginSendTransientBlock(Block.MessageToDriver, blockData);
                    break;

                case (uint)RTTMesg.RTTInMsgIds.VehicleInfo:
                    mCommsServer.CompanyTag = a.Datagram[4];
                    mCommsServer.VehicleId  = Encoding.ASCII.GetString(a.Datagram, 5, a.Datagram.Length - 5);
                    ServerMsgLog.WarnFormat("UDP VehicleInfo {0} {1}", mCommsServer.CompanyTag, mCommsServer.VehicleId);
                    mCANClient.Send(CNXCANMsgHelper.PackIdentifiers(mCommsServer.CommsAddress, mCommsServer.CompanyTag));
                    break;

                case (uint)RTTMesg.RTTInMsgIds.FlushData:
                    ServerMsgLog.WarnFormat("UDP Flush APC");
                    frame.MailboxId = (uint)CNXMsgIds.ResetLoading;
                    frame.DataFromArray(a.Datagram, 4, a.Datagram.Length - 4);
                    mApc.FrameReceivedEventHandler(null, new FrameReceivedEventArgs(frame));
                    mCANClient.Send(frame);
                    // force daily restart as requested by Iris
                    //if (mTracker.mIris != null)
                    //	mTracker.mIris.Restart();
                    break;

                default:
                    ServerMsgLog.WarnFormat("UDP Unknown id {0} length {1}\n{2}.", msgId, a.Datagram.Length, CommsServer.HexDump(a.Datagram, a.Datagram.Length));
                    break;
                }
            }
            catch (Exception e)
            {
                ServerMsgLog.ErrorFormat("Datagram {0} Handler Error : {1}", msgId, e.ToString());
            }
        }