set.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package ym485
  2. import (
  3. "github.com/valyala/bytebufferpool"
  4. )
  5. // QueryAddr 查询单灯控制器的设备地址
  6. type QueryAddr struct {
  7. Dp DataPack
  8. }
  9. func (o *QueryAddr) EnCode() (*bytebufferpool.ByteBuffer, error) {
  10. return o.Dp.EnCode("AAAAAAAAAAAA", 0x13, nil)
  11. }
  12. func (o *QueryAddr) DeCode(data []byte) error {
  13. return o.Dp.DeCode(data)
  14. }
  15. // QueryAddrACK 查询单灯控制器设备地址响应
  16. type QueryAddrACK struct {
  17. Dp DataPack
  18. Addr string //单灯地址
  19. }
  20. func (o *QueryAddrACK) EnCode(Addr string) (*bytebufferpool.ByteBuffer, error) {
  21. return o.Dp.EnCode(Addr, 0x93, EncodeAddr(Addr))
  22. }
  23. func (o *QueryAddrACK) DeCode(data []byte) error {
  24. if err := o.Dp.DeCode(data); err == nil {
  25. o.Addr = DecodeAddr(o.Dp.Data[0:6])
  26. return nil
  27. } else {
  28. return err
  29. }
  30. }
  31. // PackingBasic 1E,设置单灯控制器基本设置,平台下发
  32. //9E,查询单灯控制器基本设置响应,终端上报
  33. type PackingBasic struct {
  34. Dp DataPack
  35. Mark [4]byte
  36. Enabled uint8 //各路是否使用
  37. OnOff uint8 //上电开灯/关灯
  38. Zn []uint8 //路n所属组别
  39. }
  40. func (o *PackingBasic) EnCode(Addr string, Ctl uint8, Mark [4]byte, Enabled, OnOff uint8, Zn []uint8) (*bytebufferpool.ByteBuffer, error) {
  41. copy(o.Mark[0:], Mark[0:])
  42. o.Enabled = Enabled
  43. o.OnOff = OnOff
  44. o.Zn = Zn
  45. dataBuf := make([]byte, 0, 6+len(Zn))
  46. dataBuf = append(dataBuf, o.Mark[0:]...)
  47. dataBuf = append(dataBuf, o.Enabled, o.OnOff)
  48. if len(o.Zn) > 0 {
  49. dataBuf = append(dataBuf, o.Zn...)
  50. }
  51. return o.Dp.EnCode(Addr, Ctl, dataBuf)
  52. }
  53. func (o *PackingBasic) DeCode(data []byte) error {
  54. if err := o.Dp.DeCode(data); err == nil {
  55. len0 := len(o.Dp.Data)
  56. if len0 >= 6 {
  57. copy(o.Mark[0:], o.Dp.Data[0:4])
  58. o.Enabled = o.Dp.Data[4]
  59. o.OnOff = o.Dp.Data[5]
  60. copy(o.Zn, o.Dp.Data[6:])
  61. }
  62. return nil
  63. } else {
  64. return err
  65. }
  66. }
  67. // PackingMark 9E,查询单灯控制器基本设置,平台下发
  68. //9E,查询单灯控制器软件版本,平台下发
  69. //9E,查询单灯控制器当前运行状态,平台下发
  70. type PackingMark struct {
  71. Dp DataPack
  72. Mark [4]byte
  73. }
  74. func (o *PackingMark) EnCode(Addr string, Ctl uint8, Mark [4]byte) (*bytebufferpool.ByteBuffer, error) {
  75. copy(o.Mark[0:], Mark[0:])
  76. dataBuf := make([]byte, 0, 4)
  77. dataBuf = append(dataBuf, o.Mark[0:]...)
  78. return o.Dp.EnCode(Addr, Ctl, dataBuf)
  79. }
  80. func (o *PackingMark) DeCode(data []byte) error {
  81. if err := o.Dp.DeCode(data); err == nil {
  82. len0 := len(o.Dp.Data)
  83. if len0 >= 4 {
  84. copy(o.Mark[0:], o.Dp.Data[0:4])
  85. }
  86. return nil
  87. } else {
  88. return err
  89. }
  90. }
  91. // PackingResult 9E,设置单灯控制器基本设置响应,终端上报
  92. //9E,单灯控制器按路遥控开关灯响应,终端上报
  93. //9E,单灯控制器按组遥控开关灯响应,终端上报
  94. //9E,单灯控制器按路遥控调光响应,终端上报
  95. //9E,单灯控制器按组遥控调光响应,终端上报
  96. //9E,单灯控制器按路遥控色温响应,终端上报
  97. //9E,单灯控制器按组遥控色温响应,终端上报
  98. type PackingResult struct {
  99. Dp DataPack
  100. Mark [4]byte
  101. Result byte //Y成功,N失败
  102. }
  103. func (o *PackingResult) EnCode(Addr string, Ctl uint8, Mark [4]byte, Result byte) (*bytebufferpool.ByteBuffer, error) {
  104. copy(o.Mark[0:], Mark[0:])
  105. o.Result = Result
  106. dataBuf := make([]byte, 0, 5)
  107. dataBuf = append(dataBuf, o.Mark[0:]...)
  108. dataBuf = append(dataBuf, o.Result)
  109. return o.Dp.EnCode(Addr, Ctl, dataBuf)
  110. }
  111. func (o *PackingResult) DeCode(data []byte) error {
  112. if err := o.Dp.DeCode(data); err == nil {
  113. len0 := len(o.Dp.Data)
  114. if len0 >= 5 {
  115. copy(o.Mark[0:], o.Dp.Data[0:4])
  116. o.Result = o.Dp.Data[4]
  117. }
  118. return nil
  119. } else {
  120. return err
  121. }
  122. }