AP_Param: make it easier to show the value of a parameter
This commit is contained in:
parent
7ad293e270
commit
9171d5587d
@ -306,7 +306,7 @@ const struct AP_Param::Info *AP_Param::find_var_info_group(const struct GroupInf
|
|||||||
uint8_t group_shift,
|
uint8_t group_shift,
|
||||||
uint32_t * group_element,
|
uint32_t * group_element,
|
||||||
const struct GroupInfo **group_ret,
|
const struct GroupInfo **group_ret,
|
||||||
uint8_t * idx)
|
uint8_t * idx) const
|
||||||
{
|
{
|
||||||
uintptr_t base = PGM_POINTER(&_var_info[vindex].ptr);
|
uintptr_t base = PGM_POINTER(&_var_info[vindex].ptr);
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
@ -390,12 +390,12 @@ const struct AP_Param::Info *AP_Param::find_var_info(uint32_t *
|
|||||||
|
|
||||||
|
|
||||||
// find the info structure for a variable
|
// find the info structure for a variable
|
||||||
const struct AP_Param::Info *AP_Param::find_var_info_token(const ParamToken *token,
|
const struct AP_Param::Info *AP_Param::find_var_info_token(const ParamToken &token,
|
||||||
uint32_t * group_element,
|
uint32_t * group_element,
|
||||||
const struct GroupInfo ** group_ret,
|
const struct GroupInfo ** group_ret,
|
||||||
uint8_t * idx)
|
uint8_t * idx) const
|
||||||
{
|
{
|
||||||
uint8_t i = token->key;
|
uint8_t i = token.key;
|
||||||
uint8_t type = PGM_UINT8(&_var_info[i].type);
|
uint8_t type = PGM_UINT8(&_var_info[i].type);
|
||||||
uintptr_t base = PGM_POINTER(&_var_info[i].ptr);
|
uintptr_t base = PGM_POINTER(&_var_info[i].ptr);
|
||||||
if (type == AP_PARAM_GROUP) {
|
if (type == AP_PARAM_GROUP) {
|
||||||
@ -483,7 +483,7 @@ bool AP_Param::scan(const AP_Param::Param_header *target, uint16_t *pofs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add a X,Y,Z suffix to the name of a Vector3f element
|
// add a X,Y,Z suffix to the name of a Vector3f element
|
||||||
void AP_Param::add_vector3f_suffix(char *buffer, size_t buffer_size, uint8_t idx)
|
void AP_Param::add_vector3f_suffix(char *buffer, size_t buffer_size, uint8_t idx) const
|
||||||
{
|
{
|
||||||
uint8_t len = strnlen(buffer, buffer_size);
|
uint8_t len = strnlen(buffer, buffer_size);
|
||||||
if ((size_t)(len+2) > buffer_size) {
|
if ((size_t)(len+2) > buffer_size) {
|
||||||
@ -507,7 +507,7 @@ void AP_Param::add_vector3f_suffix(char *buffer, size_t buffer_size, uint8_t idx
|
|||||||
//
|
//
|
||||||
// If the variable is a group member, prepend the group name.
|
// If the variable is a group member, prepend the group name.
|
||||||
//
|
//
|
||||||
void AP_Param::copy_name_token(const ParamToken *token, char *buffer, size_t buffer_size, bool force_scalar)
|
void AP_Param::copy_name_token(const ParamToken &token, char *buffer, size_t buffer_size, bool force_scalar) const
|
||||||
{
|
{
|
||||||
uint32_t group_element;
|
uint32_t group_element;
|
||||||
const struct GroupInfo *ginfo;
|
const struct GroupInfo *ginfo;
|
||||||
@ -991,7 +991,7 @@ AP_Param *AP_Param::next_scalar(ParamToken *token, enum ap_var_type *ptype)
|
|||||||
|
|
||||||
|
|
||||||
/// cast a variable to a float given its type
|
/// cast a variable to a float given its type
|
||||||
float AP_Param::cast_to_float(enum ap_var_type type)
|
float AP_Param::cast_to_float(enum ap_var_type type) const
|
||||||
{
|
{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case AP_PARAM_INT8:
|
case AP_PARAM_INT8:
|
||||||
@ -1009,7 +1009,39 @@ float AP_Param::cast_to_float(enum ap_var_type type)
|
|||||||
|
|
||||||
|
|
||||||
// print the value of all variables
|
// print the value of all variables
|
||||||
void AP_Param::show_all(void)
|
void AP_Param::show(const AP_Param *ap, const char *s,
|
||||||
|
enum ap_var_type type, AP_HAL::BetterStream *port)
|
||||||
|
{
|
||||||
|
switch (type) {
|
||||||
|
case AP_PARAM_INT8:
|
||||||
|
port->printf_P(PSTR("%s: %d\n"), s, (int)((AP_Int8 *)ap)->get());
|
||||||
|
break;
|
||||||
|
case AP_PARAM_INT16:
|
||||||
|
port->printf_P(PSTR("%s: %d\n"), s, (int)((AP_Int16 *)ap)->get());
|
||||||
|
break;
|
||||||
|
case AP_PARAM_INT32:
|
||||||
|
port->printf_P(PSTR("%s: %ld\n"), s, (long)((AP_Int32 *)ap)->get());
|
||||||
|
break;
|
||||||
|
case AP_PARAM_FLOAT:
|
||||||
|
port->printf_P(PSTR("%s: %f\n"), s, ((AP_Float *)ap)->get());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// print the value of all variables
|
||||||
|
void AP_Param::show(const AP_Param *ap, const ParamToken &token,
|
||||||
|
enum ap_var_type type, AP_HAL::BetterStream *port)
|
||||||
|
{
|
||||||
|
char s[AP_MAX_NAME_SIZE+1];
|
||||||
|
ap->copy_name_token(token, s, sizeof(s), true);
|
||||||
|
s[AP_MAX_NAME_SIZE] = 0;
|
||||||
|
show(ap, s, type, port);
|
||||||
|
}
|
||||||
|
|
||||||
|
// print the value of all variables
|
||||||
|
void AP_Param::show_all(AP_HAL::BetterStream *port)
|
||||||
{
|
{
|
||||||
ParamToken token;
|
ParamToken token;
|
||||||
AP_Param *ap;
|
AP_Param *ap;
|
||||||
@ -1018,26 +1050,7 @@ void AP_Param::show_all(void)
|
|||||||
for (ap=AP_Param::first(&token, &type);
|
for (ap=AP_Param::first(&token, &type);
|
||||||
ap;
|
ap;
|
||||||
ap=AP_Param::next_scalar(&token, &type)) {
|
ap=AP_Param::next_scalar(&token, &type)) {
|
||||||
char s[AP_MAX_NAME_SIZE+1];
|
show(ap, token, type, port);
|
||||||
ap->copy_name_token(&token, s, sizeof(s), true);
|
|
||||||
s[AP_MAX_NAME_SIZE] = 0;
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case AP_PARAM_INT8:
|
|
||||||
hal.console->printf_P(PSTR("%s: %d\n"), s, (int)((AP_Int8 *)ap)->get());
|
|
||||||
break;
|
|
||||||
case AP_PARAM_INT16:
|
|
||||||
hal.console->printf_P(PSTR("%s: %d\n"), s, (int)((AP_Int16 *)ap)->get());
|
|
||||||
break;
|
|
||||||
case AP_PARAM_INT32:
|
|
||||||
hal.console->printf_P(PSTR("%s: %ld\n"), s, (long)((AP_Int32 *)ap)->get());
|
|
||||||
break;
|
|
||||||
case AP_PARAM_FLOAT:
|
|
||||||
hal.console->printf_P(PSTR("%s: %f\n"), s, ((AP_Float *)ap)->get());
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#ifndef AP_PARAM_H
|
#ifndef AP_PARAM_H
|
||||||
#define AP_PARAM_H
|
#define AP_PARAM_H
|
||||||
|
#include <AP_HAL.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@ -125,7 +126,7 @@ public:
|
|||||||
/// @param buffer The destination buffer
|
/// @param buffer The destination buffer
|
||||||
/// @param bufferSize Total size of the destination buffer.
|
/// @param bufferSize Total size of the destination buffer.
|
||||||
///
|
///
|
||||||
void copy_name_token(const ParamToken *token, char *buffer, size_t bufferSize, bool force_scalar=false);
|
void copy_name_token(const ParamToken &token, char *buffer, size_t bufferSize, bool force_scalar=false) const;
|
||||||
|
|
||||||
/// Find a variable by name.
|
/// Find a variable by name.
|
||||||
///
|
///
|
||||||
@ -191,7 +192,19 @@ public:
|
|||||||
static void erase_all(void);
|
static void erase_all(void);
|
||||||
|
|
||||||
/// print the value of all variables
|
/// print the value of all variables
|
||||||
static void show_all(void);
|
static void show_all(AP_HAL::BetterStream *port);
|
||||||
|
|
||||||
|
/// print the value of one variable
|
||||||
|
static void show(const AP_Param *param,
|
||||||
|
const char *name,
|
||||||
|
enum ap_var_type ptype,
|
||||||
|
AP_HAL::BetterStream *port);
|
||||||
|
|
||||||
|
/// print the value of one variable
|
||||||
|
static void show(const AP_Param *param,
|
||||||
|
const ParamToken &token,
|
||||||
|
enum ap_var_type ptype,
|
||||||
|
AP_HAL::BetterStream *port);
|
||||||
|
|
||||||
/// Returns the first variable
|
/// Returns the first variable
|
||||||
///
|
///
|
||||||
@ -209,7 +222,7 @@ public:
|
|||||||
static AP_Param * next_scalar(ParamToken *token, enum ap_var_type *ptype);
|
static AP_Param * next_scalar(ParamToken *token, enum ap_var_type *ptype);
|
||||||
|
|
||||||
/// cast a variable to a float given its type
|
/// cast a variable to a float given its type
|
||||||
float cast_to_float(enum ap_var_type type);
|
float cast_to_float(enum ap_var_type type) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// EEPROM header
|
/// EEPROM header
|
||||||
@ -259,15 +272,15 @@ private:
|
|||||||
uint8_t group_shift,
|
uint8_t group_shift,
|
||||||
uint32_t * group_element,
|
uint32_t * group_element,
|
||||||
const struct GroupInfo ** group_ret,
|
const struct GroupInfo ** group_ret,
|
||||||
uint8_t * idx);
|
uint8_t * idx) const;
|
||||||
const struct Info * find_var_info(
|
const struct Info * find_var_info(
|
||||||
uint32_t * group_element,
|
uint32_t * group_element,
|
||||||
const struct GroupInfo ** group_ret,
|
const struct GroupInfo ** group_ret,
|
||||||
uint8_t * idx);
|
uint8_t * idx);
|
||||||
const struct Info * find_var_info_token(const ParamToken *token,
|
const struct Info * find_var_info_token(const ParamToken &token,
|
||||||
uint32_t * group_element,
|
uint32_t * group_element,
|
||||||
const struct GroupInfo ** group_ret,
|
const struct GroupInfo ** group_ret,
|
||||||
uint8_t * idx);
|
uint8_t * idx) const;
|
||||||
static const struct Info * find_by_header_group(
|
static const struct Info * find_by_header_group(
|
||||||
struct Param_header phdr, void **ptr,
|
struct Param_header phdr, void **ptr,
|
||||||
uint8_t vindex,
|
uint8_t vindex,
|
||||||
@ -280,7 +293,7 @@ private:
|
|||||||
void add_vector3f_suffix(
|
void add_vector3f_suffix(
|
||||||
char *buffer,
|
char *buffer,
|
||||||
size_t buffer_size,
|
size_t buffer_size,
|
||||||
uint8_t idx);
|
uint8_t idx) const;
|
||||||
static AP_Param * find_group(
|
static AP_Param * find_group(
|
||||||
const char *name,
|
const char *name,
|
||||||
uint8_t vindex,
|
uint8_t vindex,
|
||||||
@ -399,7 +412,7 @@ public:
|
|||||||
|
|
||||||
/// AP_ParamT types can implement AP_Param::cast_to_float
|
/// AP_ParamT types can implement AP_Param::cast_to_float
|
||||||
///
|
///
|
||||||
float cast_to_float(void) {
|
const float cast_to_float(void) const {
|
||||||
return (float)_value;
|
return (float)_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user