private byte[] WriteDCBCommand(HeatmiserStateValueChange valueChange)
        {
            List <byte> toWrite = new List <byte>();

            toWrite.Add(1);
            toWrite.Add(this.w2b(valueChange.Address)[0]);
            toWrite.Add(this.w2b(valueChange.Address)[1]);
            toWrite.Add(valueChange.NumberOfBytes);

            foreach (byte b in valueChange.Contents)
            {
                toWrite.Add(b);
            }
            return(Command(0xa3, toWrite.ToArray()));
        }
Example #2
0
        public List <HeatmiserStateValueChange> GetChangedValues()
        {
            List <HeatmiserStateValueChange> listOfChangedValues = new List <HeatmiserStateValueChange>();

            for (ushort i = 0; i < rawDCB.Length; i++)
            {
                if (rawDCB[i] != originalDCB[i])
                {
                    HeatmiserStateValueChange changedValues = new HeatmiserStateValueChange();
                    List <byte> changedData = new List <byte>();

                    switch (i)
                    {
                    case 17:
                    case 18:
                    case 21:
                    case 22:
                    case 23:
                        changedValues.Address       = i;
                        changedValues.NumberOfBytes = 1;
                        changedValues.Contents      = new byte[] { rawDCB[i] };
                        i++;
                        break;

                    case 24:
                        changedValues.Address       = 31;
                        changedValues.NumberOfBytes = 1;
                        changedValues.Contents      = new byte[] { rawDCB[i] };
                        i++;
                        break;

                    case 43:
                        changedValues.Address       = 42;
                        changedValues.NumberOfBytes = 1;
                        changedValues.Contents      = new byte[] { rawDCB[i] };
                        i++;
                        break;

                    case 25:
                    case 26:
                    case 27:
                    case 28:
                    case 29:
                    case 30:
                        changedValues.Address = 24;
                        if (i != 30)
                        {
                            i = 25;
                            changedValues.NumberOfBytes = 5;
                            changedValues.Contents      = new byte[5];
                            Array.Copy(rawDCB, 25, changedValues.Contents, 0, 5);
                        }
                        else
                        {
                            changedValues.NumberOfBytes = 1;
                            changedValues.Contents      = new byte[] { rawDCB[30] };
                        }
                        i = (ushort)(i + 5);
                        break;

                    case 31:
                        changedValues.Address       = 32;
                        changedValues.NumberOfBytes = 2;
                        changedValues.Contents      = new byte[] { rawDCB[32], rawDCB[31] };
                        i = (ushort)(i + 2);
                        break;

                    case 41:
                        changedValues.Address       = 25;
                        changedValues.NumberOfBytes = 2;
                        changedValues.Contents      = new byte[] { rawDCB[41], rawDCB[42] };
                        i = (ushort)(i + 2);
                        break;

                    case 44:
                    case 45:
                    case 46:
                    case 47:
                    case 48:
                    case 49:
                    case 50:
                        i = 44;
                        changedValues.Address       = 43;
                        changedValues.NumberOfBytes = 7;
                        changedValues.Contents      = new byte[7];
                        Array.Copy(rawDCB, 44, changedValues.Contents, 0, 7);
                        i = (ushort)(i + 7);
                        break;

                    case 51:
                    case 63:
                    case 107:
                    case 119:
                    case 131:
                    case 143:
                    case 155:
                    case 167:
                    case 179:
                        //This will need to be changed as it assumes that hour always changes
                        changedValues.Address       = (byte)(i - 4);
                        changedValues.NumberOfBytes = 12;
                        changedValues.Contents      = new byte[12];
                        for (int b = i; b < i + 12; b++)
                        {
                            changedValues.Contents[b - i] = rawDCB[b];
                        }
                        i = (ushort)(i + 12);
                        break;

                    case 75:
                    case 91:
                    case 191:
                    case 207:
                    case 223:
                    case 239:
                    case 255:
                    case 271:
                    case 287:
                        //This will need to be changed as it assumes that hour always changes
                        changedValues.Address       = (byte)(i - 4);
                        changedValues.NumberOfBytes = 16;
                        changedValues.Contents      = new byte[16];
                        for (int b = i; b < i + 16; b++)
                        {
                            changedValues.Contents[b - i] = rawDCB[b];
                        }
                        i = (ushort)(i + 16);
                        break;
                    }
                    listOfChangedValues.Add(changedValues);
                }
            }

            return(listOfChangedValues);
        }