示例#1
0
        private void ParseMLEPDU(LogicChannel channelData, int offset, ReceivedData result)
        {
            var length = 3;
            var type   = (MlePrimitivesType)TetraUtils.BitsToInt32(channelData.Ptr, offset, length);

            offset += length;
            result.Add(GlobalNames.MLE_Primitives_Type, (int)type);

            //Debug.Write(" " + type.ToString());

            switch (type)
            {
            case MlePrimitivesType.D_NWRK_BROADCAST:
                offset = Global.ParseParams(channelData, offset, _d_Nwrk_BroadcastRules, result);

                var count = 0;

                if (result.TryGetValue(GlobalNames.Number_of_Neighbour_cells_element, ref count))
                {
                    for (int i = 0; i < count; i++)
                    {
                        var neighbourData = new ReceivedData();
                        offset = Global.ParseParams(channelData, offset, _neighbour_Cell_InfoRules, neighbourData);

                        var cellID = 0;
                        if (neighbourData.TryGetValue(GlobalNames.Cell_identifier, ref cellID))
                        {
                            //////Debug.WriteLine("Neighbour " + Thread.CurrentThread.ManagedThreadId.ToString());

                            if (Global.NeighbourList.Count < 32)
                            {
                                Global.NeighbourList.Add(neighbourData);
                            }
                        }
                    }
                }

                break;

            case MlePrimitivesType.D_NEW_CELL:
            case MlePrimitivesType.D_PREPARE:
            case MlePrimitivesType.D_RESTORE_ACK:
            case MlePrimitivesType.D_RESTORE_FAIL:

            default:
                //Debug.Write(" Unknow_MLE_SDU");
                result.Add(GlobalNames.UnknowData, 1);
                break;
            }
        }
示例#2
0
        public void SyncPDUHalfSlot(LogicChannel channelData, ReceivedData result)
        {
            var pduType = -1;
            var offset  = 0;

            if (result.TryGetValue(GlobalNames.SYNC_PDU_type, ref pduType))
            {
                switch (pduType)
                {
                case 0:
                    offset = Global.ParseParams(channelData, offset, _dmacSyncInfoHalfSlotRules, result);

                    var realLength = channelData.Length - offset;

                    if (result.Value(GlobalNames.Fill_bit) != 0)
                    {
                        realLength = CalcRealLength(channelData.Ptr, offset, realLength);
                    }


                    if (result.Value(GlobalNames.Fragmentation_flag) == 1)
                    {
                        Debug.Write(" Start_fragmented_PDU");
                        CreateFraqmentsBuffer(channelData, offset, realLength, result);
                    }

                    //Debug.Write(" " + (DMAC_Message_Type)result[GlobalNames.Message_type]);
                    break;

                case 1:
                    Global.ParseParams(channelData, 0, _dpresSyncInfoHalfSlotRules, result);
                    break;

                default:
                    Debug.Write(" Unknow_DMO_SyncPdu_type");
                    result.SetValue(GlobalNames.UnknowData, 1);
                    break;
                }
            }
        }