blob: bfa3ee60255cd1f8203831ffae5d9726ce50b17c [file] [log] [blame]
/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2011. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
#include "SmartDashboard/SmartDashboard.h"
#include "NetworkCommunication/UsageReporting.h"
#include "NamedSendable.h"
#include "WPIErrors.h"
#include "networktables/NetworkTable.h"
ITable* SmartDashboard::m_table = NULL;
std::map<ITable *, Sendable *> SmartDashboard::m_tablesToData;
void SmartDashboard::init(){
m_table = NetworkTable::GetTable("SmartDashboard");
}
//TODO usage reporting
/**
* Maps the specified key to the specified value in this table.
* The key can not be NULL.
* The value can be retrieved by calling the get method with a key that is equal to the original key.
* @param keyName the key
* @param value the value
*/
void SmartDashboard::PutData(std::string key, Sendable *data)
{
if (data == NULL)
{
//TODO wpi_setWPIErrorWithContext(NullParameter, "value");
return;
}
ITable* dataTable = m_table->GetSubTable(key);
dataTable->PutString("~TYPE~", data->GetSmartDashboardType());
data->InitTable(dataTable);
m_tablesToData[dataTable] = data;
}
/**
* Maps the specified key (where the key is the name of the {@link SmartDashboardNamedData}
* to the specified value in this table.
* The value can be retrieved by calling the get method with a key that is equal to the original key.
* @param value the value
*/
void SmartDashboard::PutData(NamedSendable *value)
{
if (value == NULL)
{
//TODO wpi_setWPIErrorWithContext(NullParameter, "value");
return;
}
PutData(value->GetName(), value);
}
/**
* Returns the value at the specified key.
* @param keyName the key
* @return the value
*/
//TODO Sendable *SmartDashboard::GetData(std::string key)
/*{
ITable* subtable = m_table->GetSubTable(keyName);
Sendable *data = m_tablesToData[subtable];
if (data == NULL)
{
wpi_setWPIErrorWithContext(SmartDashboardMissingKey, keyName);
return NULL;
}
return data;
}*/
/**
* Maps the specified key to the specified complex value (such as an array) in this table.
* The key can not be NULL.
* The value can be retrieved by calling the RetrieveValue method with a key that is equal to the original key.
* @param keyName the key
* @param value the value
*/
void SmartDashboard::PutValue(std::string keyName, ComplexData& value)
{
m_table->PutValue(keyName, value);
}
/**
* Retrieves the complex value (such as an array) in this table into the complex data object
* The key can not be NULL.
* @param keyName the key
* @param value the object to retrieve the value into
*/
void SmartDashboard::RetrieveValue(std::string keyName, ComplexData& value)
{
m_table->RetrieveValue(keyName, value);
}
/**
* Maps the specified key to the specified value in this table.
* The key can not be NULL.
* The value can be retrieved by calling the get method with a key that is equal to the original key.
* @param keyName the key
* @param value the value
*/
void SmartDashboard::PutBoolean(std::string keyName, bool value)
{
m_table->PutBoolean(keyName, value);
}
/**
* Returns the value at the specified key.
* @param keyName the key
* @return the value
*/
bool SmartDashboard::GetBoolean(std::string keyName)
{
return m_table->GetBoolean(keyName);
}
/**
* Maps the specified key to the specified value in this table.
* The key can not be NULL.
* The value can be retrieved by calling the get method with a key that is equal to the original key.
* @param keyName the key
* @param value the value
*/
void SmartDashboard::PutNumber(std::string keyName, double value){
m_table->PutNumber(keyName, value);
}
/**
* Returns the value at the specified key.
* @param keyName the key
* @return the value
*/
double SmartDashboard::GetNumber(std::string keyName)
{
return m_table->GetNumber(keyName);
}
/**
* Maps the specified key to the specified value in this table.
* Neither the key nor the value can be NULL.
* The value can be retrieved by calling the get method with a key that is equal to the original key.
* @param keyName the key
* @param value the value
*/
void SmartDashboard::PutString(std::string keyName, std::string value)
{
m_table->PutString(keyName, value);
}
/**
* Returns the value at the specified key.
* @param keyName the key
* @param value the buffer to fill with the value
* @param valueLen the size of the buffer pointed to by value
* @return the length of the string
*/
int SmartDashboard::GetString(std::string keyName, char *outBuffer, unsigned int bufferLen){
std::string value = m_table->GetString(keyName);
unsigned int i;
for(i = 0; i<bufferLen-1&&i<value.length(); ++i)
outBuffer[i] = (char)value.at(i);
outBuffer[i] = '\0';
return i;
}
/**
* Returns the value at the specified key.
* @param keyName the key
* @return the value
*/
std::string SmartDashboard::GetString(std::string keyName)
{
return m_table->GetString(keyName);
}