示例#1
0
        private static string GetComposedValue(
            BitsRange bitsRange,
            int registerLength,
            int byteIndex,
            string[] byteParameterNames)
        {
            byte[] byteMasks = bitsRange.GetByteMasks(registerLength, byteIndex);

            bool anyMask      = false;
            var  byteMaskList = new List <string>();

            for (int i = 0; i < byteMasks.Length; i++)
            {
                if (byteMasks[i] > 0)
                {
                    bool needsMask = byteMasks[i] != 0xFF;

                    string byteMask = !needsMask
                        ? byteParameterNames[i]
                        : $"({byteParameterNames[i]} & {ToHex(byteMasks[i], 2)})";

                    int shift = bitsRange.FromBits - (byteIndex - i) * 8;

                    byteMask = ShiftValue(byteMask, shift);

                    byteMaskList.Add(byteMask);

                    if (needsMask)
                    {
                        anyMask = true;
                    }
                }
            }

            string composedValue;
            bool   needsCasting;

            if ((byteMaskList.Count == 1) && !anyMask)
            {
                needsCasting  = false;
                composedValue = byteMaskList[0];
            }
            else
            {
                needsCasting  = true;
                composedValue = ((byteMaskList.Count == 1) && anyMask)
                    ? $"{string.Join(" | ", byteMaskList)}"
                    : $"({string.Join(" | ", byteMaskList)})";
            }

            if (needsCasting)
            {
                composedValue = $"({GetIntegerType(bitsRange)})" + composedValue;
            }

            return(composedValue);
        }
示例#2
0
        private static string[] GetDecomposedValues(
            string name,
            BitsRange bitsRange,
            int registerLength,
            int byteIndex,
            bool isNumeric)
        {
            byte[] byteMasks = bitsRange.GetByteMasks(registerLength, byteIndex);

            var getAsBytesValues = new string[registerLength];

            if (!isNumeric)
            {
                name = $"({GetIntegerType(bitsRange)}){name}";
            }

            for (int i = 0; i < byteMasks.Length; i++)
            {
                if (byteMasks[i] > 0)
                {
                    bool needsMask = byteMasks[i] != 0xFF;

                    int shift = (byteIndex - i) * 8 - bitsRange.FromBits;

                    string propertyMask = ShiftValue(name, shift);

                    if (needsMask)
                    {
                        propertyMask = $"(byte)({propertyMask} & {ToHex(byteMasks[i], 2)})";
                    }
                    else if (bitsRange.ByteCount > 1)
                    {
                        propertyMask = "(byte)" + propertyMask;
                    }

                    getAsBytesValues[i] = propertyMask;
                }
            }

            return(getAsBytesValues);
        }