/// <summary> /// Switches a locomotive function /// </summary> /// <param name="functionNumber">f-number</param> /// <param name="functionGroup">datagroup which represents the given f-number (as byte)</param> public byte GetData3Byte(int functionNumber, out byte functionGroup) { byte data3byte = 0; string binaryData = string.Empty; functionGroup = 32; if (functionNumber > -1 && functionNumber < 5) { functionGroup = 32; binaryData = "000" + ((_Functions.ContainsKey(0)) ? ((_Functions[0]) ? ("1") : ("0")) : ("0")); for (int i = 4; i > 0; i--) { binaryData += ((_Functions.ContainsKey(i)) ? ((_Functions[i]) ? ("1") : ("0")) : ("0")); } data3byte = (byte)FlakeHelper.ConvertBinaryStringToDecimal(binaryData); } if (functionNumber > 4 && functionNumber < 9) { functionGroup = 33; binaryData = "0000"; for (int i = 8; i > 4; i--) { binaryData += ((_Functions.ContainsKey(i)) ? ((_Functions[i]) ? ("1") : ("0")) : ("0")); } data3byte = (byte)FlakeHelper.ConvertBinaryStringToDecimal(binaryData); } if (functionNumber > 8 && functionNumber < 13) { functionGroup = 34; binaryData = "0000"; for (int i = 12; i > 7; i--) { binaryData += ((_Functions.ContainsKey(i)) ? ((_Functions[i]) ? ("1") : ("0")) : ("0")); } data3byte = (byte)FlakeHelper.ConvertBinaryStringToDecimal(binaryData); } if (functionNumber > 12 && functionNumber < 21) { functionGroup = 35; for (int i = 20; i > 12; i--) { binaryData += ((_Functions.ContainsKey(i)) ? ((_Functions[i]) ? ("1") : ("0")) : ("0")); } data3byte = (byte)FlakeHelper.ConvertBinaryStringToDecimal(binaryData); } if (functionNumber > 20 && functionNumber < 29) { functionGroup = 36; for (int i = 28; i > 19; i--) { binaryData += ((_Functions.ContainsKey(i)) ? ((_Functions[i]) ? ("1") : ("0")) : ("0")); } } if (functionNumber < -1 || functionNumber > 28) { // if we arrive here there is an error in the choose of functionnumber (too large) logme.Log(i18n.FlakeComunicationMsgs.ErrorReceivingFunctionNumber, logme.LogLevel.error); } return(data3byte); }
/// <summary> /// Calculate the hi and lo address /// </summary> private void CalcHiLoAddresses() { string binaryaddrress = FlakeHelper.ConvertDecimalToBinary(Address); string hi = binaryaddrress.Substring(0, 8); string lo = binaryaddrress.Substring(8, 8); Address_Hi = FlakeHelper.ConvertBinaryStringToDecimal(hi); Address_Lo = FlakeHelper.ConvertBinaryStringToDecimal(lo); }
/// <summary> /// Construcor /// </summary> public GetCentralVersion() : base(i18n.FlakeComunicationCommands.GetCentralVersionName, i18n.FlakeComunicationCommands.GetCentralVersionDesc) { _ByteArray = new byte[] { 255, 254, FlakeHelper.ConvertTwoDigitHexToByte("21"), FlakeHelper.ConvertTwoDigitHexToByte("21"), FlakeHelper.ConvertTwoDigitHexToByte("00") }; _LogMsg = string.Format(i18n.FlakeComunicationCommandsLogMsgs.GetCentralVersion); }
/// <summary> /// Construcor /// </summary> public GetCentralStateInfo() : base(i18n.FlakeComunicationCommands.GetCentralStateInfoName, i18n.FlakeComunicationCommands.GetCentralStateInfoDesc) { _ByteArray = new byte[] { 255, 254, FlakeHelper.ConvertTwoDigitHexToByte("21"), FlakeHelper.ConvertTwoDigitHexToByte("24"), FlakeHelper.ConvertTwoDigitHexToByte("05") }; _LogMsg = string.Format(i18n.FlakeComunicationCommandsLogMsgs.GetCentralStateInfo); }
/// <summary> /// Calculate the checksum of a bytearray /// </summary> /// <param name="array">bytearray to calculate the checksum for</param> /// <param name="ignoreLeadingBytes">ignore the first two bites (LI standard)</param> /// <returns>returns the checksum for the given array</returns> private static byte CalculateChecksumByteOfArray(ref byte[] array, bool ignoreLeadingBytes = true) { return(FlakeHelper.CalculateChecksumByteOfArray(array, ignoreLeadingBytes)); }