parameters.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "parameters.h"
  2. #include <string.h>
  3. Parameters g;
  4. const Parameters::Param Parameters::params[] = {
  5. { "LOCK_LEVEL", Parameters::ParamType::UINT8, (const void*)&g.lock_level, 0, 0, 2 },
  6. { "CAN_NODE", Parameters::ParamType::UINT8, (const void*)&g.can_node, 0, 0, 127 },
  7. { "UAS_ID", Parameters::ParamType::CHAR20, (const void*)&g.uas_id[0], 0, 0, 0 },
  8. { "WIFI_NAN_RATE", Parameters::ParamType::FLOAT, (const void*)&g.wifi_nan_rate, 1, 0, 5 },
  9. { "BT4_RATE", Parameters::ParamType::FLOAT, (const void*)&g.bt4_rate, 1, 0, 5 },
  10. { "BT5_RATE", Parameters::ParamType::FLOAT, (const void*)&g.bt5_rate, 1, 0, 5 },
  11. { "", Parameters::ParamType::NONE, nullptr, },
  12. };
  13. /*
  14. find by name
  15. */
  16. const Parameters::Param *Parameters::find(const char *name)
  17. {
  18. for (const auto &p : params) {
  19. if (strcmp(name, p.name) == 0) {
  20. return &p;
  21. }
  22. }
  23. return nullptr;
  24. }
  25. /*
  26. find by index
  27. */
  28. const Parameters::Param *Parameters::find_by_index(uint16_t index)
  29. {
  30. if (index >= (sizeof(params)/sizeof(params[0])-1)) {
  31. return nullptr;
  32. }
  33. return &params[index];
  34. }
  35. void Parameters::Param::set(uint8_t v) const
  36. {
  37. auto *p = (uint8_t *)ptr;
  38. *p = v;
  39. g.dirty = true;
  40. }
  41. void Parameters::Param::set(float v) const
  42. {
  43. auto *p = (float *)ptr;
  44. *p = v;
  45. g.dirty = true;
  46. }
  47. void Parameters::Param::set(const char *v) const
  48. {
  49. strncpy((char *)ptr, v, PARAM_NAME_MAX_LEN);
  50. g.dirty = true;
  51. }
  52. uint8_t Parameters::Param::get_uint8() const
  53. {
  54. const auto *p = (const uint8_t *)ptr;
  55. return *p;
  56. }
  57. float Parameters::Param::get_float() const
  58. {
  59. const auto *p = (const float *)ptr;
  60. return *p;
  61. }
  62. const char *Parameters::Param::get_char20() const
  63. {
  64. const char *p = (const char *)ptr;
  65. return p;
  66. }
  67. /*
  68. load defaults from parameter table
  69. */
  70. void Parameters::load_defaults(void)
  71. {
  72. for (const auto &p : params) {
  73. switch (p.ptype) {
  74. case ParamType::UINT8:
  75. *(uint8_t *)p.ptr = uint8_t(p.default_value);
  76. break;
  77. case ParamType::FLOAT:
  78. *(float *)p.ptr = p.default_value;
  79. break;
  80. }
  81. }
  82. }