Beispiel #1
0
        /// <summary>
        /// Splits and returns the requested part of an extended message. Throws an exception if this is not an extended message.
        /// </summary>
        /// <param name="whichPart">The desired part of the message</param>
        private byte[] splitExtMessage(extMsgParts whichPart)
        {
            if (!isExtended())
            {
                throw new ANT_Exception("Response is not an extended message");
            }

            byte[] dataPayload;
            byte[] deviceID;

            // Legacy extended message
            // The "extended" part of this message is the 4-byte channel ID of the device that we recieved this message from.
            // This event is only available on the AT3
            if (responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.EXT_BROADCAST_DATA_0x5D ||
                responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.EXT_ACKNOWLEDGED_DATA_0x5E ||
                responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.EXT_BURST_DATA_0x5F)
            {
                deviceID    = messageContents.Skip(1).Take(4).ToArray(); //Skip channel byte
                dataPayload = messageContents.Skip(5).Take(8).ToArray(); //Skip channel byte and 4 bytes of id parameters
            }
            // "Flag" extended message. The 4-byte channel ID  is included if the flag byte includes 0x80
            else if (responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.BROADCAST_DATA_0x4E ||
                     responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.ACKNOWLEDGED_DATA_0x4F ||
                     responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.BURST_DATA_0x50)
            {
                dataPayload = messageContents.Skip(1).Take(8).ToArray(); //Skip channel byte
                if ((messageContents[9] & 0x80) == 0)                    // Check flag byte
                {
                    throw new ANT_Exception("Response does not contain a channel ID");
                }
                deviceID = messageContents.Skip(10).Take(4).ToArray();   //Skip channel byte, 8 bytes of data, and flag byte
            }
            else
            {
                throw new ANT_Exception("Response is not an extended message");
            }

            switch (whichPart)
            {
            case extMsgParts.DataPayload:
                return(dataPayload);

            case extMsgParts.DeviceID:
                return(deviceID);

            default:
                throw new ANT_Exception("Invalid extMsgPart");
            }
        }
Beispiel #2
0
        /// <summary>
        /// Splits and returns the requested part of an extended message. Throws an exception if this is not an extended message.
        /// </summary>
        /// <param name="whichPart">The desired part of the message</param>
        private byte[] splitExtMessage(extMsgParts whichPart)
        {
            if (!isExtended())
                throw new ANT_Exception("Response is not an extended message");

            byte[] dataPayload;
            byte[] deviceID;

            // Legacy extended message
            // The "extended" part of this message is the 4-byte channel ID of the device that we recieved this message from.
            // This event is only available on the AT3
            if (responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.EXT_BROADCAST_DATA_0x5D
                    || responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.EXT_ACKNOWLEDGED_DATA_0x5E
                    || responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.EXT_BURST_DATA_0x5F)
            {
                deviceID = messageContents.Skip(1).Take(4).ToArray(); //Skip channel byte
                dataPayload = messageContents.Skip(5).Take(8).ToArray();    //Skip channel byte and 4 bytes of id parameters
            }
            // "Flag" extended message. The 4-byte channel ID  is included if the flag byte includes 0x80
            else if (responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.BROADCAST_DATA_0x4E
                    || responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.ACKNOWLEDGED_DATA_0x4F
                    || responseID == (byte)ANT_ReferenceLibrary.ANTMessageID.BURST_DATA_0x50)
            {
                dataPayload = messageContents.Skip(1).Take(8).ToArray();    //Skip channel byte
                if ((messageContents[9] & 0x80) == 0)   // Check flag byte
                    throw new ANT_Exception("Response does not contain a channel ID");
                deviceID = messageContents.Skip(10).Take(4).ToArray();   //Skip channel byte, 8 bytes of data, and flag byte
            }
            else
                throw new ANT_Exception("Response is not an extended message");

            switch (whichPart)
            {
                case extMsgParts.DataPayload:
                    return dataPayload;
                case extMsgParts.DeviceID:
                    return deviceID;
                default:
                    throw new ANT_Exception("Invalid extMsgPart");
            }
        }