public static       RemoteXControlMessage[] FromBytes(byte[] controlMessagesBytes)
        {
            int currPos = 0;
            List <RemoteXControlMessage> controlMessages = new List <RemoteXControlMessage>();
            int beginPos = 0;

            int loopCount = 0;

            while (beginPos < controlMessagesBytes.Length)
            {
                currPos = beginPos;
                char possibleBeginChar = BitConverter.ToChar(controlMessagesBytes, currPos);
                if (possibleBeginChar != BEGIN_CHAR)
                {
                    beginPos++;
                    continue;
                }
                currPos += sizeof(char);
                //===============================================================
                int dataType = BitConverter.ToInt32(controlMessagesBytes, currPos);
                currPos += sizeof(int);
                //================================================================
                int valueCount = BitConverter.ToInt32(controlMessagesBytes, currPos);
                currPos += sizeof(int);
                //================================================================
                float[] sensorData = new float[valueCount];
                for (int i = 0; i < valueCount; i++)
                {
                    sensorData[i] = BitConverter.ToSingle(controlMessagesBytes, currPos + sizeof(float) * i);
                }
                currPos += valueCount * sizeof(float);
                //===============================================================
                char possibleEndChar = BitConverter.ToChar(controlMessagesBytes, currPos);
                if (possibleEndChar != END_CHAR)
                {
                    beginPos++;
                    continue;
                }
                currPos += sizeof(char);
                beginPos = currPos;
                RemoteXControlMessage controlMessage = new RemoteXControlMessage(dataType, sensorData);
                controlMessages.Add(controlMessage);
                loopCount++;
            }
            if (loopCount > 1)
            {
                System.Diagnostics.Debug.WriteLine("LOOP COUNT: " + loopCount);
            }
            return(controlMessages.ToArray());
        }
        public static RemoteXControlMessage FromString(string sControlMessage)
        {
            string[] tempSs = sControlMessage.Split('|');
            sControlMessage = sControlMessage.Remove(0, 1);
            sControlMessage = sControlMessage.Remove(sControlMessage.Length - 1, 1);
            string[] sTypeAndData = sControlMessage.Split('|');
            string   sType        = sTypeAndData[0];

            sType = sType.Remove(0, 5);
            sType = sType.Trim();
            int    type      = int.Parse(sType);
            string sDataOnly = sTypeAndData[1].Remove(0, 7);

            sDataOnly = sDataOnly.Replace(" ", "");
            string[] sFloatDatas = sDataOnly.Split(',');
            float[]  values      = new float[sFloatDatas.Length];
            for (int i = 0; i < values.Length; i++)
            {
                values[i] = float.Parse(sFloatDatas[i]);
            }
            RemoteXControlMessage restoredData = new RemoteXControlMessage(type, values);

            return(restoredData);
        }