|
| ConfigFile (uint32_t _default_host, uint32_t _default_robot) |
| Standard constructor.
|
|
| ConfigFile (const char *_default_host, uint32_t _default_robot) |
| Alternate constructor, to specify the host as a string.
|
|
| ConfigFile () |
| Alternate constructor, used when not loading from a file.
|
|
| ~ConfigFile () |
| Standard destructor.
|
|
bool | Load (const char *filename) |
| Load config from file. More...
|
|
void | InsertFieldValue (int index, const char *name, const char *value) |
| Add a (name,value) pair directly into the database, without reading from a file. More...
|
|
bool | WarnUnused () |
| Check for unused fields and print warnings. More...
|
|
bool | ReadBool (int section, const char *name, bool value) |
| Read a boolean value (one of: yes, no, true, false, 1, 0) More...
|
|
const char * | ReadString (int section, const char *name, const char *value) |
| Read a string value. More...
|
|
int | ReadInt (int section, const char *name, int value) |
| Read an integer value. More...
|
|
double | ReadFloat (int section, const char *name, double value) |
| Read a floating point (double) value. More...
|
|
double | ReadLength (int section, const char *name, double value) |
| Read a length (includes unit conversion, if any). More...
|
|
double | ReadAngle (int section, const char *name, double value) |
| Read an angle (includes unit conversion). More...
|
|
uint32_t | ReadColor (int section, const char *name, uint32_t value) |
| Read a color (includes text to RGB conversion) More...
|
|
const char * | ReadFilename (int section, const char *name, const char *value) |
| Read a filename. More...
|
|
int | GetTupleCount (int section, const char *name) |
| Get the number of values in a tuple. More...
|
|
const char * | ReadTupleString (int section, const char *name, int index, const char *value) |
| Read a string from a tuple field. More...
|
|
int | ReadTupleInt (int section, const char *name, int index, int value) |
| Read an integer from a tuple field. More...
|
|
double | ReadTupleFloat (int section, const char *name, int index, double value) |
| Read a float (double) from a tuple field. More...
|
|
double | ReadTupleLength (int section, const char *name, int index, double value) |
| Read a length from a tuple (includes units conversion) More...
|
|
double | ReadTupleAngle (int section, const char *name, int index, double value) |
| Read an angle form a tuple (includes units conversion) More...
|
|
uint32_t | ReadTupleColor (int section, const char *name, int index, uint32_t value) |
| Read a color (includes text to RGB conversion) More...
|
|
int | ReadDeviceAddr (player_devaddr_t *addr, int section, const char *name, int code, int index, const char *key) |
| Read a device id. More...
|
|
bool | ParseDriver (int section) |
|
bool | ParseInterface (int section) |
|
bool | ParseAllDrivers () |
|
bool | ParseAllInterfaces () |
|
int | GetSectionCount () |
| Get the number of sections.
|
|
const char * | GetSectionType (int section) |
| Get a section type name.
|
|
int | LookupSection (const char *type) |
| Lookup a section number by section type name. More...
|
|
int | GetSectionParent (int section) |
| Get a section's parent section. More...
|
|
void | DumpTokens () |
| Dump the token list (for debugging).
|
|
void | DumpSections () |
| Dump the section list for debugging.
|
|
void | DumpFields () |
| Dump the field list for debugging.
|
|
|
void | InitFields () |
|
bool | Save (const char *filename) |
|
void | WriteBool (int section, const char *name, bool value) |
|
void | WriteBool_Compat (int section, const char *name, bool value) |
|
void | WriteString (int section, const char *name, const char *value) |
|
void | WriteInt (int section, const char *name, int value) |
|
void | WriteFloat (int section, const char *name, double value) |
|
void | WriteLength (int section, const char *name, double value) |
|
void | WriteTupleString (int section, const char *name, int index, const char *value) |
|
void | WriteTupleInt (int section, const char *name, int index, int value) |
|
void | WriteTupleFloat (int section, const char *name, int index, double value) |
|
void | WriteTupleLength (int section, const char *name, int index, double value) |
|
void | WriteTupleAngle (int section, const char *name, int index, double value) |
|
bool | LoadTokens (FILE *file, int include) |
|
bool | LoadTokenComment (FILE *file, int *line, int include) |
|
bool | LoadTokenWord (FILE *file, int *line, int include) |
|
bool | LoadTokenInclude (FILE *file, int *line, int include) |
|
bool | LoadTokenNum (FILE *file, int *line, int include) |
|
bool | LoadTokenString (FILE *file, int *line, int include) |
|
bool | LoadTokenSpace (FILE *file, int *line, int include) |
|
bool | SaveTokens (FILE *file) |
|
void | ClearTokens () |
|
bool | AddToken (int type, const char *value, int include) |
|
bool | SetTokenValue (int index, const char *value) |
|
const char * | GetTokenValue (int index) |
|
bool | ParseTokens () |
|
bool | ParseTokenInclude (int *index, int *line) |
|
bool | ParseTokenDefine (int *index, int *line) |
|
bool | ParseTokenPlugin (int *index, int *line) |
|
bool | ParseTokenWord (int section, int *index, int *line) |
|
bool | ParseTokenSection (int section, int *index, int *line) |
|
bool | ParseTokenField (int section, int *index, int *line) |
|
bool | ParseTokenTuple (int section, int field, int *index, int *line) |
|
void | ClearMacros () |
|
int | AddMacro (const char *macroname, const char *sectionname, int line, int starttoken, int endtoken) |
|
int | LookupMacro (const char *macroname) |
|
void | DumpMacros () |
|
void | ClearSections () |
|
int | AddSection (int parent, const char *type) |
|
void | ClearFields () |
|
int | AddField (int section, const char *name, int line) |
|
void | AddFieldValue (int field, int index, int value_token) |
|
int | GetField (int section, const char *name) |
|
int | GetFieldValueCount (int field) |
|
const char * | GetFieldValue (int field, int index, bool flag_used=true) |
|
void | SetFieldValue (int field, int index, const char *value) |
|
uint32_t | LookupColor (const char *name) |
|
Class for loading configuration file information.
This class is used to load and configure drivers from a configuration text file. This file is divided into sections, with section having a set of key/value fields.
Example file format is as follows:
# This is a comment
# The keyword 'driver' begins a section
driver
(
# This line is used to identify which driver to
# instantiate
name "mydriver"
# This line lists the interfaces that the driver
# will support
provides ["position2d:0" "laser:0"]
# This line lists the devices to which the driver
# will subscribe
requires ["ptz:0"]
# An integer
key1 0
# A string
key2 "foo"
# A tuple of strings
key3 ["foo" "bar"]
# A tuple of multiple types
key4 ["foo" 3.14 42]
)
The most common use of this class is for a driver to extract configuration file options. All drivers are passed a ConfigFile pointer cf and an integer section in their contructor (see Driver::Driver). The driver code can use this information to retrieve key/value information that was given inside the appropriate driver() section in the configuration file. For example:
int maximum_speed = cf->
ReadInt(section,
"max_speed", -1);
if(maximum_speed == -1)
{
}
For each type Foo, there is a method ReadFoo() that looks for a key/value pair in the indicated section and with the type Foo. The last argument specifies a default value to return if the given key is not found. The default should either be a reasonable value or a recognizably invalid value (so that you can determine when the user did not specify a value).
Always use ReadLength for linear dimensions, positions, and time derivatives (velocities, accelerations, etc.) ; this method will return values in meters, regardless of what local units are being used in the configuration file. Similarly, always use ReadAngle for angular quanities; this method will always return values in radians.
Always use ReadFilename for filenames; this method will return absolute paths, appropriately converting any relative paths that are given in the configuration file. Non-absolute paths in the configuration file are assumed to be relative to the directory in which the configuration file itself resides.
Always use ReadColor for packed 24-bit color values.
Drivers that support multiple interfaces must use ReadDeviceAddr to find out which interfaces they have been asked to support (single-interface drivers specify their one interface in the Driver constructor). For example, to check whether the driver has been asked to support a position2d interface, and if so, to add that interface:
PLAYER_POSITION2D_CODE, -1, NULL) == 0)
{
if(this->AddInterface(position_addr) != 0)
{
this->SetError(-1);
return;
}
}
A driver can support more than interface of the same type. For example, the p2os driver supports 3 position2d interfaces: one for wheelmotors/odometry, one for compass, and one for gyro. In this case, the last argument to ReadDeviceAddr is used to differentiate them, according to key that was given in the "provides" line. For example, if in the configuration file we have:
driver
(
name "mydriver"
provides ["odometry:::position2d:0" "gyro:::position2d:1"]
)
then in the driver code we can do something like this:
PLAYER_POSITION2D_CODE, -1, "odometry") == 0)
{
if(this->AddInterface(odom_addr) != 0)
{
this->SetError(-1);
return;
}
}
PLAYER_POSITION2D_CODE, -1, "gyro") == 0)
{
if(this->AddInterface(gyro_addr) != 0)
{
this->SetError(-1);
return;
}
}
Drivers that subscribe to other devices use ReadDeviceAddr in the same way to retrieve information from the "requires" line of the configuration file.