yaokong.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package ym485
  2. import "github.com/valyala/bytebufferpool"
  3. // PackingTurnOnOff 1E,单灯控制器按路遥控开关灯
  4. //1E,单灯控制器按组遥控开关灯
  5. type PackingTurnOnOff struct {
  6. Dp DataPack
  7. Mark [4]byte
  8. Senabled byte //各组是否有效
  9. Kenabled byte //各组开灯/关灯
  10. }
  11. func (o *PackingTurnOnOff) EnCode(Addr string, Mark [4]byte, Senabled, Kenabled byte) (*bytebufferpool.ByteBuffer, error) {
  12. copy(o.Mark[0:], Mark[0:])
  13. o.Senabled = Senabled
  14. o.Kenabled = Kenabled
  15. dataBuf := make([]byte, 0, 6)
  16. dataBuf = append(dataBuf, o.Mark[0:]...)
  17. dataBuf = append(dataBuf, o.Senabled, o.Kenabled)
  18. return o.Dp.EnCode(Addr, 0x1E, dataBuf)
  19. }
  20. func (o *PackingTurnOnOff) DeCode(data []byte) error {
  21. if err := o.Dp.DeCode(data); err == nil {
  22. len0 := len(o.Dp.Data)
  23. if len0 >= 6 {
  24. copy(o.Mark[0:], o.Dp.Data[0:4])
  25. o.Senabled = o.Dp.Data[4]
  26. o.Kenabled = o.Dp.Data[5]
  27. }
  28. return nil
  29. } else {
  30. return err
  31. }
  32. }
  33. // PackingBrightnessColor 1E,单灯控制器按路遥控调光/色温
  34. //1E,单灯控制器按组遥控调光/色温
  35. type PackingBrightnessColor struct {
  36. Dp DataPack
  37. Mark [4]byte
  38. Senabled byte //各路/组是否有效
  39. Sn []byte //路n调光值/色温值
  40. }
  41. func (o *PackingBrightnessColor) EnCode(Addr string, Mark [4]byte, Senabled byte, Sn []byte) (*bytebufferpool.ByteBuffer, error) {
  42. copy(o.Mark[0:], Mark[0:])
  43. o.Senabled = Senabled
  44. o.Sn = Sn
  45. dataBuf := make([]byte, 0, 5+len(o.Sn))
  46. dataBuf = append(dataBuf, o.Mark[0:]...)
  47. dataBuf = append(dataBuf, o.Senabled)
  48. dataBuf = append(dataBuf, o.Sn...)
  49. return o.Dp.EnCode(Addr, 0x1E, dataBuf)
  50. }
  51. func (o *PackingBrightnessColor) DeCode(data []byte) error {
  52. if err := o.Dp.DeCode(data); err == nil {
  53. len0 := len(o.Dp.Data)
  54. if len0 >= 5 {
  55. copy(o.Mark[0:], o.Dp.Data[0:4])
  56. o.Senabled = o.Dp.Data[4]
  57. if len0 > 5 {
  58. copy(o.Sn, o.Dp.Data[5:])
  59. }
  60. }
  61. return nil
  62. } else {
  63. return err
  64. }
  65. }