mcpb.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // MCPB模块
  2. // 秒寻科技
  3. // zt 2024-11-11
  4. package mcpb
  5. import (
  6. "encoding/binary"
  7. "errors"
  8. "ipsomc/module/ps/psmodel"
  9. "ipsomc/module/ps/pspublic"
  10. "ipsomc/module/upgrade"
  11. "time"
  12. )
  13. type McpB struct {
  14. upgradeApi upgrade.Upgrade
  15. }
  16. // MCP-B配置响应,要将查询结果反馈给页面模型
  17. // dataList:MCP层数据队列
  18. // wLen:数据队列长度
  19. func (obj *McpB) McpUlRespB(stHeadModel *psmodel.PS_HEAD_T, dataList []byte, wLen int) error {
  20. var wCurrentLen uint16 = 0
  21. var wLtvLen uint16 = 0
  22. var wCommand uint16 = 0
  23. //判断设备响应是否成功
  24. if stHeadModel.StMcpHead.Resp == psmodel.MCP_RESP_ERR {
  25. obj.upgradeApi.UpgradeDeinit()
  26. return errors.New("设备响应错误")
  27. }
  28. //组织一个ltv-b数据
  29. wLtvLen = uint16(binary.LittleEndian.Uint16(dataList[wCurrentLen : wCurrentLen+2])) //长度
  30. wCommand = uint16(binary.LittleEndian.Uint16(dataList[wCurrentLen+2 : wCurrentLen+4])) //命令
  31. //长度判断
  32. if wLtvLen != uint16(wLen) {
  33. obj.upgradeApi.UpgradeDeinit()
  34. return errors.New("数据长度错误")
  35. }
  36. //软件模式切换响应
  37. if wCommand == pspublic.OAM_UPGRADE_SWITCH_SOFT_WORK_MODE {
  38. err := obj.upgradeApi.UpgradeNoticeFileSize(stHeadModel.StVpHead.ProjectID, stHeadModel.StVpHead.DeviceID)
  39. if err != nil {
  40. obj.upgradeApi.UpgradeDeinit()
  41. return err
  42. }
  43. } else if wCommand == pspublic.OAM_UPGRADE_NOTICE_FILE_SIZE_ { //通知文件信息
  44. err := obj.upgradeApi.UpgradeTransferFile(stHeadModel.StVpHead.ProjectID, stHeadModel.StVpHead.DeviceID)
  45. if err != nil {
  46. obj.upgradeApi.UpgradeDeinit()
  47. return err
  48. }
  49. } else if wCommand == pspublic.OAM_UPGRADE_SEND_UPGRADE_FILE { //传输文件
  50. // 创建一个在100毫秒后接收的通道
  51. ch := time.After(100 * time.Millisecond)
  52. <-ch // 阻塞直到通道接收到值
  53. err := obj.upgradeApi.UpgradeTransferFile(stHeadModel.StVpHead.ProjectID, stHeadModel.StVpHead.DeviceID)
  54. if err != nil {
  55. obj.upgradeApi.UpgradeDeinit()
  56. return err
  57. }
  58. } else if wCommand == pspublic.OAM_UPGRADE_NOTICE_UPGRADE_OVER { //升级结束
  59. obj.upgradeApi.UpgradeSuccess() //升级成功
  60. }
  61. return nil
  62. }