blob: 1b8da851d44d2c6c90357836e5e29746d8d6f9f0 [file] [log] [blame]
Austin Schuh812d0d12021-11-04 20:16:48 -07001// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
Brian Silverman8fce7482020-01-05 13:18:21 -08004
5#include "frc/BuiltInAccelerometer.h"
6
7#include <hal/Accelerometer.h>
8#include <hal/FRCUsageReporting.h>
Austin Schuh812d0d12021-11-04 20:16:48 -07009#include <wpi/sendable/SendableBuilder.h>
10#include <wpi/sendable/SendableRegistry.h>
Brian Silverman8fce7482020-01-05 13:18:21 -080011
Austin Schuh812d0d12021-11-04 20:16:48 -070012#include "frc/Errors.h"
Brian Silverman8fce7482020-01-05 13:18:21 -080013
14using namespace frc;
15
16BuiltInAccelerometer::BuiltInAccelerometer(Range range) {
17 SetRange(range);
18
19 HAL_Report(HALUsageReporting::kResourceType_Accelerometer, 0, 0,
20 "Built-in accelerometer");
Austin Schuh812d0d12021-11-04 20:16:48 -070021 wpi::SendableRegistry::AddLW(this, "BuiltInAccel");
Brian Silverman8fce7482020-01-05 13:18:21 -080022}
23
24void BuiltInAccelerometer::SetRange(Range range) {
25 if (range == kRange_16G) {
Austin Schuh812d0d12021-11-04 20:16:48 -070026 throw FRC_MakeError(err::ParameterOutOfRange, "{}",
27 "16G range not supported (use k2G, k4G, or k8G)");
Brian Silverman8fce7482020-01-05 13:18:21 -080028 }
29
30 HAL_SetAccelerometerActive(false);
Austin Schuh812d0d12021-11-04 20:16:48 -070031 HAL_SetAccelerometerRange(static_cast<HAL_AccelerometerRange>(range));
Brian Silverman8fce7482020-01-05 13:18:21 -080032 HAL_SetAccelerometerActive(true);
33}
34
Austin Schuh812d0d12021-11-04 20:16:48 -070035double BuiltInAccelerometer::GetX() {
36 return HAL_GetAccelerometerX();
37}
Brian Silverman8fce7482020-01-05 13:18:21 -080038
Austin Schuh812d0d12021-11-04 20:16:48 -070039double BuiltInAccelerometer::GetY() {
40 return HAL_GetAccelerometerY();
41}
Brian Silverman8fce7482020-01-05 13:18:21 -080042
Austin Schuh812d0d12021-11-04 20:16:48 -070043double BuiltInAccelerometer::GetZ() {
44 return HAL_GetAccelerometerZ();
45}
Brian Silverman8fce7482020-01-05 13:18:21 -080046
Austin Schuh812d0d12021-11-04 20:16:48 -070047void BuiltInAccelerometer::InitSendable(wpi::SendableBuilder& builder) {
Brian Silverman8fce7482020-01-05 13:18:21 -080048 builder.SetSmartDashboardType("3AxisAccelerometer");
Austin Schuh1e69f942020-11-14 15:06:14 -080049 builder.AddDoubleProperty(
Austin Schuh812d0d12021-11-04 20:16:48 -070050 "X", [=] { return GetX(); }, nullptr);
Austin Schuh1e69f942020-11-14 15:06:14 -080051 builder.AddDoubleProperty(
Austin Schuh812d0d12021-11-04 20:16:48 -070052 "Y", [=] { return GetY(); }, nullptr);
Austin Schuh1e69f942020-11-14 15:06:14 -080053 builder.AddDoubleProperty(
Austin Schuh812d0d12021-11-04 20:16:48 -070054 "Z", [=] { return GetZ(); }, nullptr);
Brian Silverman8fce7482020-01-05 13:18:21 -080055}