blob: 6c16097d98495ad31cfae3ba5292239fe2046c53 [file] [log] [blame]
#include "frc971/constants.h"
#include <stddef.h>
#include <inttypes.h>
#include "aos/common/messages/RobotState.q.h"
#include "aos/atom_code/output/MotorOutput.h"
namespace frc971 {
namespace constants {
namespace {
const double kCompHorizontal = -1.77635 + 0.180;
const double kPracticeHorizontal = -1.77635 + -0.073631;
const int kCompCameraCenter = -2;
const int kPracticeCameraCenter = -5;
struct Values {
// what horizontal_offset returns
double horizontal;
// what camera_center returns
int camera_center;
// what drivetrain_motor_controllers returns
char drivetrain_controllers;
};
Values *values = NULL;
// Attempts to retrieve a new Values instance and stores it in values if
// necessary.
// Returns a valid Values instance or NULL.
const Values *GetValues() {
if (values == NULL) {
LOG(INFO, "creating a Constants for team %"PRIu16"\n",
aos::robot_state->team_id);
switch (aos::robot_state->team_id) {
case kCompTeamNumber:
values = new Values{kCompHorizontal, kCompCameraCenter,
aos::MotorOutput::TALON};
break;
case kPracticeTeamNumber:
values = new Values{kPracticeHorizontal, kPracticeCameraCenter,
aos::MotorOutput::VICTOR};
break;
default:
LOG(ERROR, "unknown team #%"PRIu16"\n",
aos::robot_state->team_id);
return NULL;
}
}
return values;
}
} // namespace
bool horizontal_offset(double *horizontal) {
const Values *const values = GetValues();
if (values == NULL) return false;
*horizontal = values->horizontal;
return true;
}
bool camera_center(int *center) {
const Values *const values = GetValues();
if (values == NULL) return false;
*center = values->camera_center;
return true;
}
bool drivetrain_motor_controllers(char *controllers) {
const Values *const values = GetValues();
if (values == NULL) return false;
*controllers = values->drivetrain_controllers;
return true;
}
} // namespace constants
} // namespace frc971