Esempio n. 1
0
        public void SendODAData(
            ushort aid, byte block2, ushort block3, ushort block4,
            ODABufferConfig odaBufConfig    = ODABufferConfig.TransmitOnce,
            ODATransmitMode odaTransmitMode = ODATransmitMode.Normal,
            ushort priority = 0,
            bool isGroupB   = false
            )
        {
            // ODA block 2 is 5 bits only
            block2 &= 0x1F;

            var med = new List <byte>();

            med.AddRange(BitConverter.GetBytes(aid));
            med.Add(
                getODAConfiguration(ODAConfigKind.Data, odaBufConfig, odaTransmitMode, priority)
                );
            med.Add(block2);
            if (!isGroupB)
            {
                med.AddRange(BitConverter.GetBytes(block3));
            }
            med.AddRange(BitConverter.GetBytes(block4));

            BuildAndSendMessage(MEC.ODA_DATA, med.ToArray());
        }
Esempio n. 2
0
        public void SendODAShortMessage(
            ushort aid, ushort message,
            ODABufferConfig odaBufConfig = ODABufferConfig.TransmitOnce
            )
        {
            var med = new List <byte>();

            med.AddRange(BitConverter.GetBytes(aid));
            med.Add(
                getODAConfiguration(ODAConfigKind.ShortMessage, odaBufConfig)
                );
            med.AddRange(BitConverter.GetBytes(message));

            BuildAndSendMessage(MEC.ODA_DATA, med.ToArray());
        }
Esempio n. 3
0
        public void SendODAFreeFormatData(
            byte appGroupType, byte block2, ushort block3, ushort block4,
            ODABufferConfig odaBufConfig    = ODABufferConfig.TransmitOnce,
            ODATransmitMode odaTransmitMode = ODATransmitMode.Normal,
            ushort priority = 0
            )
        {
            // ODA block 2 is 5 bits only
            block2 &= 0x1F;

            var med = new List <byte>();

            med.Add(appGroupType);
            med.Add(
                getODAConfiguration(ODAConfigKind.Data, odaBufConfig, odaTransmitMode, priority)
                );
            med.Add(block2);
            med.AddRange(BitConverter.GetBytes(block3));
            med.AddRange(BitConverter.GetBytes(block4));

            BuildAndSendMessage(MEC.ODA_FREE_FORMAT, med.ToArray());
        }
Esempio n. 4
0
        private byte getODAConfiguration(
            ODAConfigKind kind,
            ODABufferConfig odaBufConfig,
            ODATransmitMode odaTransmitMode = ODATransmitMode.Normal,
            ushort priority = 0
            )
        {
            if (priority > 2)
            {
                priority = 2;
            }

            int transmitMode = 0b00;

            switch (odaTransmitMode)
            {
            case ODATransmitMode.Normal:
            default:
                transmitMode = 0b00;
                break;

            case ODATransmitMode.Burst:
                transmitMode = 0b01;
                break;

            case ODATransmitMode.SpinningWheel:
                transmitMode = 0b10;
                break;
            }

            int bufferConfig = 0b00;

            switch (odaBufConfig)
            {
            case ODABufferConfig.TransmitOnce:
            default:
                bufferConfig = 0b00;
                break;

            case ODABufferConfig.AddToCyclic:
                bufferConfig = 0b10;
                break;

            case ODABufferConfig.ClearCyclic:
                bufferConfig = 0b11;
                break;
            }

            byte config = 0x00;

            // bit 7 is always set to 0
            if (kind == ODAConfigKind.ShortMessage)
            {
                config |= (0b1 << 6);                 // bit 6 set to 1
            }
            if (kind == ODAConfigKind.Data)
            {
                config |= (byte)((priority & 0b11) << 4);      // bits 4 and 5
                config |= (byte)((transmitMode & 0b11) << 2);  // bits 2 and 3
            }
            config |= (byte)(bufferConfig & 0b11);             // bits 0 and 1

            return(config);
        }