private static IEnumerable <byte> BuildByteArray(IgnitionMap ignitionMap) { List <byte> command = new List <byte>(); //Rpm and Load Bins command.AddRange(ignitionMap.RpmBins.Select(item => (byte)(item.HighValue / 100))); command.AddRange(ignitionMap.LoadBins.Select(item => item.HighValue)); //Advance Map for (byte loadIndex = 0; loadIndex < 10; loadIndex++) { for (byte rpmIndex = 0; rpmIndex < 10; rpmIndex++) { command.Add(ignitionMap[loadIndex, rpmIndex]); } } //User Output Types command.Add ((byte)( ((byte)ignitionMap.UserOutput1.OutputType & 0x03) + (((byte)ignitionMap.UserOutput2.OutputType & 0x03) << 2) + (((byte)ignitionMap.UserOutput3.OutputType & 0x03) << 4) + (((byte)ignitionMap.UserOutput4.OutputType & 0x03) << 6) )); //User Output Modes command.Add ((byte)( ((byte)ignitionMap.UserOutput1.OutputMode & 0x01) + (((byte)ignitionMap.UserOutput2.OutputMode & 0x01) << 1) + (((byte)ignitionMap.UserOutput3.OutputMode & 0x01) << 2) + (((byte)ignitionMap.UserOutput4.OutputMode & 0x01) << 3) )); //User Output Thresholds command.Add((byte)(ignitionMap.UserOutput1.Threshold / (ignitionMap.UserOutput1.OutputType == UserOutputType.Rpm ? 100 : 1))); command.Add((byte)(ignitionMap.UserOutput2.Threshold / (ignitionMap.UserOutput2.OutputType == UserOutputType.Rpm ? 100 : 1))); command.Add((byte)(ignitionMap.UserOutput3.Threshold / (ignitionMap.UserOutput3.OutputType == UserOutputType.Rpm ? 100 : 1))); command.Add((byte)(ignitionMap.UserOutput4.Threshold / (ignitionMap.UserOutput4.OutputType == UserOutputType.Rpm ? 100 : 1))); command.Add((byte)(ignitionMap.RevLimitThreshold / 100)); command.Add((byte)(ignitionMap.ShiftLightThreshold / 100)); //Advance Correction Bins, Values and Peak Hold Count command.AddRange(ignitionMap.AdvanceCorrection.Bins.Select(item => (byte)(item.HighValue / 100))); command.AddRange(ignitionMap.AdvanceCorrection.Values.Select(item => unchecked ((byte)item))); command.Add((byte)((ignitionMap.AdvanceCorrection.PeakHoldCount & 0xFF00) >> 8)); command.Add((byte)(ignitionMap.AdvanceCorrection.PeakHoldCount & 0x00FF)); return(command); }
internal UpdateIgnitionConfigurationCommand(IgnitionMap ignitionMap) : base(0x55, BuildByteArray(ignitionMap)) { }