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())); }
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); }