NozzleStatusAndFillingPrice_TransactionData.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using Edge.Core.Parser.BinaryParser.Util;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace Wayne_Pump_Dart.MessageEntity.Incoming
  8. {
  9. /// <summary>
  10. /// This transaction is sent by the pump if the status is changed
  11. /// or if the pump receives the command 'RETURN STATUS' or ‘RETURN FILLING INFORMATION’.
  12. /// </summary>
  13. public class NozzleStatusAndFillingPrice_TransactionData
  14. {
  15. private TransactionData transactionData;
  16. /// <summary>
  17. /// TRANS + LNG + DATA
  18. /// </summary>
  19. /// <param name="oneTransactionFullData">TRANS + LNG + DATA</param>
  20. public NozzleStatusAndFillingPrice_TransactionData(TransactionData transactionData)
  21. {
  22. if (transactionData.TransactionNumber != 0x03)
  23. throw new ArgumentException("NozzleStatusAndFillingPrice_TransactionData must have transaction number 0x03");
  24. this.transactionData = transactionData;
  25. }
  26. public enum NozzleStatus
  27. {
  28. IN = 0x00,
  29. OUT = 0x01
  30. }
  31. /// <summary>
  32. /// without decimal points
  33. /// </summary>
  34. public int FillingPrice
  35. {
  36. get
  37. {
  38. var r = this.transactionData.RawData.Take(3).GetBCD();
  39. return r;
  40. }
  41. }
  42. /// <summary>
  43. /// Gets the nozzle status, key is the nozzle physical id.
  44. /// </summary>
  45. public KeyValuePair<byte, NozzleStatus> Status
  46. {
  47. get
  48. {
  49. //NOZIO bits 0 - 3 contain selected nozzle number.
  50. //NOZIO bit 4 contains nozzle in/out information.
  51. // 0 = in
  52. // 1 = out
  53. //02H Nozzle 2 selected, nozzle in
  54. //12H Nozzle 2 selected, nozzle out
  55. //10H No nozzle selected, nozzle out. (This is possible for a blending pump.)
  56. var nozzleStateBitMap = this.transactionData.RawData.Skip(3).First();
  57. var nozzleLogicalNumber = nozzleStateBitMap & 0x0F;
  58. var nozzleStatus = (nozzleStateBitMap & 0xF0) >> 4;
  59. return new KeyValuePair<byte, NozzleStatus>(
  60. (byte)nozzleLogicalNumber,
  61. (NozzleStatus)nozzleStatus);
  62. }
  63. }
  64. }
  65. }