AP_Param: make it easier to show the value of a parameter

This commit is contained in:
Andrew Tridgell 2013-04-19 17:46:40 +10:00
parent 7ad293e270
commit 9171d5587d
2 changed files with 62 additions and 36 deletions

View File

@ -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;
}
} }
} }

View File

@ -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;
} }