workstate.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Author: NiuJiuRu
  2. // Email: niujiuru@qq.com
  3. // Date: 2025-11-20
  4. package mcu_ctrl_board
  5. import "sync"
  6. // 定义_RTU_数据板的工作状态
  7. type WorkState uint32
  8. const (
  9. Idle WorkState = 0 // 空闲(默认)
  10. AppUpgrading WorkState = 1 << 0 // 应用程序固件-升级中
  11. PhotoCapturing WorkState = 1 << 1 // 当前相机图像-拍照中
  12. PhotoUploading WorkState = 1 << 2 // 相机图像文件-上传中
  13. SensorDataReceiving WorkState = 1 << 3 // 当前环境数据-收集中
  14. SensorDataUploading WorkState = 1 << 4 // 当前环境数据-上传中
  15. SensorHistUploading WorkState = 1 << 5 // 历史环境数据-上传中
  16. )
  17. // RTU数据板的工作状态管理器
  18. type WorkStateMgr struct {
  19. mu sync.RWMutex
  20. state WorkState
  21. }
  22. var GlobalWorkState = &WorkStateMgr{state: Idle}
  23. // 工作状态管理-添加一个状态
  24. func (mgr *WorkStateMgr) Add(s WorkState) {
  25. mgr.mu.Lock()
  26. defer mgr.mu.Unlock()
  27. mgr.state |= s
  28. }
  29. // 工作状态管理-清除一个状态
  30. func (mgr *WorkStateMgr) Remove(s WorkState) {
  31. mgr.mu.Lock()
  32. defer mgr.mu.Unlock()
  33. mgr.state &^= s
  34. }
  35. // 工作状态管理-获取当前状态
  36. // 判断某个状态是否存在
  37. func (mgr *WorkStateMgr) Get() WorkState {
  38. mgr.mu.RLock()
  39. defer mgr.mu.RUnlock()
  40. return mgr.state
  41. }
  42. // 工作状态管理-状态是否存在
  43. func (mgr *WorkStateMgr) Has(s WorkState) bool {
  44. mgr.mu.RLock()
  45. defer mgr.mu.RUnlock()
  46. return mgr.state&s != 0
  47. }