params_cfg.go 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package mcu_ctrl_board
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. "sync"
  7. "gopkg.in/ini.v1"
  8. "hnyfkj.com.cn/rtu/bxs-sy/baseapp"
  9. )
  10. type Config struct {
  11. Version string `ini:"Version"` // 版本号
  12. CtrlMode int `ini:"CtrlMode"` // 定时控制模式(0=光控, 1=时控)
  13. LightDuration int `ini:"LightDuration"` // 光控定时时长(小时, 1-10, 仅光控模式有效)
  14. StartHour int `ini:"StartHour"` // 时控开始时间(小时, 0-23, 仅时控模式有效)
  15. EndHour int `ini:"EndHour"` // 时控结束时间(小时, 0-23, 仅时控模式有效)
  16. TakePhotoInterval int `ini:"TakePhotoIntervalMinutes"` // 拍照间隔(分钟)
  17. }
  18. var (
  19. CfgParams = &Config{
  20. Version: "0.0.0.1",
  21. CtrlMode: 1,
  22. LightDuration: 10,
  23. StartHour: 0,
  24. EndHour: 23,
  25. TakePhotoInterval: 60,
  26. }
  27. mu sync.Mutex
  28. )
  29. func loadCfgParams() error {
  30. mu.Lock()
  31. defer mu.Unlock()
  32. cfgFile := filepath.Join(baseapp.CFG_DIR, "mcuparams.ini")
  33. cfgIni, err := ini.Load(cfgFile)
  34. if err != nil {
  35. return err
  36. }
  37. if cfgIni.HasSection("MCUSchedule") {
  38. tmpCfgParams := *CfgParams
  39. if err := cfgIni.Section("MCUSchedule").MapTo(&tmpCfgParams); err != nil {
  40. return err
  41. }
  42. *CfgParams = tmpCfgParams
  43. } else {
  44. return fmt.Errorf("配置文件\"%s\"缺少\"[MCUSchedule]\"节", cfgFile)
  45. }
  46. var verCode baseapp.VersionCode
  47. err = verCode.FromString(CfgParams.Version)
  48. if err != nil {
  49. return fmt.Errorf("配置文件\"%s\"的\"MCUSchedule.Version\"值\"%s\"无效", cfgFile, CfgParams.Version)
  50. }
  51. mcuCtrlBoard_ConfParameters(uint32(verCode), uint8(CfgParams.CtrlMode), uint8(CfgParams.LightDuration), uint8(CfgParams.StartHour), uint8(CfgParams.EndHour), uint16(CfgParams.TakePhotoInterval))
  52. return nil
  53. }
  54. func SaveCfgParams(setParams *Config) error {
  55. mu.Lock()
  56. defer mu.Unlock()
  57. cfgFile := filepath.Join(baseapp.CFG_DIR, "mcuparams.ini")
  58. cfgIni, err := ini.Load(cfgFile)
  59. if err != nil {
  60. cfgIni = ini.Empty()
  61. }
  62. sec, err := cfgIni.GetSection("MCUSchedule")
  63. if err != nil {
  64. sec, _ = cfgIni.NewSection("MCUSchedule")
  65. }
  66. sec.Key("Version").SetValue(setParams.Version)
  67. sec.Key("CtrlMode").SetValue(fmt.Sprintf("%d", setParams.CtrlMode))
  68. sec.Key("LightDuration").SetValue(fmt.Sprintf("%d", setParams.LightDuration))
  69. sec.Key("StartHour").SetValue(fmt.Sprintf("%d", setParams.StartHour))
  70. sec.Key("EndHour").SetValue(fmt.Sprintf("%d", setParams.EndHour))
  71. sec.Key("TakePhotoIntervalMinutes").SetValue(fmt.Sprintf("%d", setParams.TakePhotoInterval))
  72. tmpFile := cfgFile + ".tmp"
  73. if err := cfgIni.SaveToIndent(tmpFile, " "); err != nil {
  74. return fmt.Errorf("write temp ini failed: %w", err)
  75. }
  76. if err := os.Rename(tmpFile, cfgFile); err != nil {
  77. os.Remove(tmpFile)
  78. return fmt.Errorf("replace ini failed: %w", err)
  79. }
  80. return nil
  81. }