You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.1 KiB

1 year ago
1 year ago
1 year ago
  1. #pragma once
  2. #include "zi_module.hpp"
  3. #include <stdint.h>
  4. #include <functional>
  5. using namespace iflytop;
  6. int32_t ZIModule::getid() {
  7. int32_t id = 0;
  8. getid(&id);
  9. return id;
  10. };
  11. int32_t ZIModule::module_ping() { return 0; };
  12. int32_t ZIModule::module_set_reg(int32_t param_id, int32_t param_value) { return _module_xxx_reg(param_id, false, param_value); }
  13. int32_t ZIModule::module_get_reg(int32_t param_id, int32_t *param_value) { return _module_xxx_reg(param_id, true, *param_value); }
  14. int32_t ZIModule::_module_xxx_reg(int32_t param_id, bool read, int32_t &val) {
  15. if (param_id == kreg_module_version) {
  16. if (read) {
  17. module_get_version(&val);
  18. return 0;
  19. } else {
  20. return 0;
  21. }
  22. }
  23. else if (param_id == kreg_module_type) {
  24. if (read) {
  25. module_get_type(&val);
  26. return 0;
  27. } else {
  28. return 0;
  29. }
  30. }
  31. else if (param_id == kreg_module_status) {
  32. if (read) {
  33. module_get_status(&val);
  34. return 0;
  35. } else {
  36. return 0;
  37. }
  38. }
  39. else if (param_id == kreg_module_errorcode) {
  40. if (read) {
  41. val = creg.module_errorcode;
  42. return 0;
  43. } else {
  44. return 0;
  45. }
  46. }
  47. return module_xxx_reg(param_id, read, val);
  48. }
  49. int32_t ZIModule::_module_set_reg(int32_t regoff, int32_t *regval, int32_t val, int32_t min, int32_t max) {
  50. if (val < min || val > max) {
  51. return err::kparam_out_of_range;
  52. }
  53. *regval = val;
  54. return 0;
  55. }
  56. int32_t ZIModule::_module_get_reg(int32_t regoff, int32_t regval, int32_t &val) {
  57. val = regval;
  58. return 0;
  59. }
  60. int32_t ZIModule::_module_set_reg_float(int32_t regoff, float *regval, int32_t val, float precision, int32_t min, int32_t max) {
  61. if (val < min || val > max) {
  62. return err::kparam_out_of_range;
  63. }
  64. *regval = val * precision;
  65. return 0;
  66. }
  67. int32_t ZIModule::_module_get_reg_float(int32_t regoff, float regval, int32_t &val, float precision) {
  68. val = regval / precision;
  69. return 0;
  70. }
  71. int32_t ZIModule::module_get_error(int32_t *iserror) {
  72. *iserror = creg.module_errorcode;
  73. return 0;
  74. }
  75. int32_t ZIModule::module_clear_error() {
  76. creg.module_errorcode = 0;
  77. creg.module_errorbitflag0 = 0;
  78. return 0;
  79. }