001 /*----------------------------------------------------------------------------*/
002 /* Copyright (c) FIRST 2008-2012. All Rights Reserved. */
003 /* Open Source Software - may be modified and shared by FRC teams. The code */
004 /* must be accompanied by the FIRST BSD license file in the root directory of */
005 /* the project. */
006 /*----------------------------------------------------------------------------*/
007
008 package edu.wpi.first.wpilibj;
009
010 import edu.wpi.first.wpilibj.communication.UsageReporting;
011 import edu.wpi.first.wpilibj.livewindow.LiveWindow;
012 import edu.wpi.first.wpilibj.livewindow.LiveWindowSendable;
013 import edu.wpi.first.wpilibj.parsing.ISensor;
014 import edu.wpi.first.wpilibj.tables.ITable;
015
016 /**
017 * Alias for counter class.
018 * Implement the gear tooth sensor supplied by FIRST. Currently there is no reverse sensing on
019 * the gear tooth sensor, but in future versions we might implement the necessary timing in the
020 * FPGA to sense direction.
021 */
022 public class GearTooth extends Counter implements ISensor {
023
024 private static final double kGearToothThreshold = 55e-6;
025
026 /**
027 * Common code called by the constructors.
028 */
029 public void enableDirectionSensing(boolean directionSensitive) {
030 if (directionSensitive) {
031 setPulseLengthMode(kGearToothThreshold);
032 }
033 }
034
035 /**
036 * Construct a GearTooth sensor given a channel.
037 *
038 * The default module is assumed.
039 *
040 * @param channel The GPIO channel on the digital module that the sensor is connected to.
041 * @param directionSensitive Enable the pulse length decoding in hardware to specify count direction.
042 */
043 public GearTooth(final int channel, boolean directionSensitive) {
044 super(channel);
045 enableDirectionSensing(directionSensitive);
046 if(directionSensitive){
047 UsageReporting.report(UsageReporting.kResourceType_GearTooth, channel, DigitalModule.getDefaultDigitalModule()-1, "D");
048 }else{
049 UsageReporting.report(UsageReporting.kResourceType_GearTooth, channel, DigitalModule.getDefaultDigitalModule()-1);
050 }
051 }
052
053 /**
054 * Construct a GearTooth sensor given a channel.
055 *
056 * The default module is assumed.
057 * No direction sensing is assumed.
058 *
059 * @param channel The GPIO channel on the digital module that the sensor is connected to.
060 */
061 public GearTooth(final int channel) {
062 this(channel,false);
063 }
064
065 /**
066 * Construct a GearTooth sensor given a channel and module.
067 *
068 * @param slot The slot in the chassis that the digital module is plugged in to.
069 * @param channel The GPIO channel on the digital module that the sensor is connected to.
070 * @param directionSensitive Enable the pulse length decoding in hardware to specify count direction.
071 */
072 public GearTooth(final int slot, final int channel, boolean directionSensitive) {
073 super(slot, channel);
074 enableDirectionSensing(directionSensitive);
075 if(directionSensitive) {
076 UsageReporting.report(UsageReporting.kResourceType_GearTooth, channel, DigitalModule.getDefaultDigitalModule()-1, "D");
077 }
078 else {
079 UsageReporting.report(UsageReporting.kResourceType_GearTooth, channel, DigitalModule.getDefaultDigitalModule()-1);
080 }
081 LiveWindow.addSensor("GearTooth", slot, channel, this);
082 }
083
084 /**
085 * Construct a GearTooth sensor given a channel and module.
086 *
087 * No direction sensing is assumed.
088 *
089 * @param slot The slot in the chassis that the digital module is plugged in to.
090 * @param channel The GPIO channel on the digital module that the sensor is connected to.
091 */
092 public GearTooth(final int slot, final int channel) {
093 this(slot, channel,false);
094 }
095
096 /**
097 * Construct a GearTooth sensor given a digital input.
098 * This should be used when sharing digial inputs.
099 *
100 * @param source An object that fully descibes the input that the sensor is connected to.
101 * @param directionSensitive Enable the pulse length decoding in hardware to specify count direction.
102 */
103 public GearTooth(DigitalSource source, boolean directionSensitive) {
104 super(source);
105 enableDirectionSensing(directionSensitive);
106 }
107
108 /**
109 * Construct a GearTooth sensor given a digital input.
110 * This should be used when sharing digial inputs.
111 *
112 * No direction sensing is assumed.
113 *
114 * @param source An object that fully descibes the input that the sensor is connected to.
115 */
116 public GearTooth(DigitalSource source) {
117 this(source,false);
118 }
119
120 /*
121 * Live Window code, only does anything if live window is activated.
122 */
123 public String getSmartDashboardType(){
124 return "Gear Tooth";
125 }
126 }