mirror of
https://github.com/trc492/FtcTemplate.git
synced 2025-07-04 22:41:23 -07:00
Updated FtcLib.
Added OctoQuad support.
This commit is contained in:
@ -0,0 +1,225 @@
|
||||
/*
|
||||
* Copyright (c) 2022 DigitalChickenLabs
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package com.qualcomm.hardware.digitalchickenlabs;
|
||||
|
||||
public interface OctoQuad extends OctoQuadBase
|
||||
{
|
||||
/**
|
||||
* Class to represent an OctoQuad firmware version
|
||||
*/
|
||||
class FirmwareVersion
|
||||
{
|
||||
public final int maj;
|
||||
public final int min;
|
||||
public final int eng;
|
||||
|
||||
public FirmwareVersion(int maj, int min, int eng)
|
||||
{
|
||||
this.maj = maj;
|
||||
this.min = min;
|
||||
this.eng = eng;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return String.format("%d.%d.%d", maj, min, eng);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the firmware version running on the OctoQuad
|
||||
* @return the firmware version running on the OctoQuad
|
||||
*/
|
||||
FirmwareVersion getFirmwareVersion();
|
||||
|
||||
/**
|
||||
* Read a single position from the OctoQuad
|
||||
* Depending on the channel bank configuration, this may
|
||||
* either be quadrature step count, or pulse width.
|
||||
* @param idx the index of the encoder to read
|
||||
* @return the position for the specified encoder
|
||||
*/
|
||||
int readSinglePosition(int idx);
|
||||
|
||||
/**
|
||||
* Reads all positions from the OctoQuad, writing the data into
|
||||
* an existing int[] object. The previous values are destroyed.
|
||||
* Depending on the channel bank configuration, this may
|
||||
* either be quadrature step count, or pulse width.
|
||||
* @param out the int[] object to fill with new data
|
||||
*/
|
||||
void readAllPositions(int[] out);
|
||||
|
||||
/**
|
||||
* Reads all positions from the OctoQuad
|
||||
* Depending on the channel bank configuration, this may
|
||||
* either be quadrature step count, or pulse width.
|
||||
* @return an int[] object with the new data
|
||||
*/
|
||||
int[] readAllPositions();
|
||||
|
||||
/**
|
||||
* Read a selected range of encoders
|
||||
* Depending on the channel bank configuration, this may
|
||||
* either be quadrature step count, or pulse width.
|
||||
* @param idxFirst the first encoder (inclusive)
|
||||
* @param idxLast the last encoder (inclusive)
|
||||
* @return an array containing the requested encoder positions
|
||||
*/
|
||||
int[] readPositionRange(int idxFirst, int idxLast);
|
||||
|
||||
/*
|
||||
* More Reset methods in Base interface
|
||||
*/
|
||||
|
||||
/**
|
||||
* Reset multiple encoders in the OctoQuad firmware in one command
|
||||
* @param resets the encoders to be reset
|
||||
*/
|
||||
void resetMultiplePositions(boolean[] resets);
|
||||
|
||||
/**
|
||||
* Reset multiple encoders in the OctoQuad firmware in one command
|
||||
* @param indices the indices of the encoders to reset
|
||||
*/
|
||||
void resetMultiplePositions(int... indices);
|
||||
|
||||
/*
|
||||
* More direction methods in Base interface
|
||||
*/
|
||||
|
||||
/**
|
||||
* Set the direction for all encoders
|
||||
* This parameter will NOT be retained across power cycles, unless
|
||||
* you call {@link #saveParametersToFlash()} ()}
|
||||
* @param reverse 8-length direction array
|
||||
*/
|
||||
void setAllEncoderDirections(boolean[] reverse);
|
||||
|
||||
/**
|
||||
* Read a single velocity from the OctoQuad
|
||||
* NOTE: if using an absolute pulse width encoder, in order to get sane
|
||||
* velocity data, you must set the channel min/max pulse width parameter.
|
||||
* @param idx the index of the encoder to read
|
||||
* @return the velocity for the specified encoder
|
||||
*/
|
||||
short readSingleVelocity(int idx);
|
||||
|
||||
/**
|
||||
* Reads all velocities from the OctoQuad, writing the data into
|
||||
* an existing short[] object. The previous values are destroyed.
|
||||
* NOTE: if using an absolute pulse width encoder, in order to get sane
|
||||
* velocity data, you must set the channel min/max pulse width parameter.
|
||||
* @param out the short[] object to fill with new data
|
||||
*/
|
||||
void readAllVelocities(short[] out);
|
||||
|
||||
/**
|
||||
* Reads all velocities from the OctoQuad
|
||||
* NOTE: if using an absolute pulse width encoder, in order to get sane
|
||||
* velocity data, you must set the channel min/max pulse width parameter.
|
||||
* @return a short[] object with the new data
|
||||
*/
|
||||
short[] readAllVelocities();
|
||||
|
||||
/**
|
||||
* Read a selected range of encoder velocities
|
||||
* NOTE: if using an absolute pulse width encoder, in order to get sane
|
||||
* velocity data, you must set the channel min/max pulse width parameter.
|
||||
* @param idxFirst the first encoder (inclusive)
|
||||
* @param idxLast the last encoder (inclusive)
|
||||
* @return an array containing the requested velocities
|
||||
*/
|
||||
short[] readVelocityRange(int idxFirst, int idxLast);
|
||||
|
||||
class EncoderDataBlock
|
||||
{
|
||||
public int[] positions = new int[NUM_ENCODERS];
|
||||
public short[] velocities = new short[NUM_ENCODERS];
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads all encoder data from the OctoQuad, writing the data into
|
||||
* an existing {@link EncoderDataBlock} object. The previous values are destroyed.
|
||||
* @param out the {@link EncoderDataBlock} object to fill with new data
|
||||
*/
|
||||
void readAllEncoderData(EncoderDataBlock out);
|
||||
|
||||
/**
|
||||
* Reads all encoder data from the OctoQuad
|
||||
* @return a {@link EncoderDataBlock} object with the new data
|
||||
*/
|
||||
EncoderDataBlock readAllEncoderData();
|
||||
|
||||
/*
|
||||
* More velocity sample interval methods in base interface
|
||||
*/
|
||||
|
||||
/**
|
||||
* Set the velocity sample intervals for all encoders
|
||||
* This parameter will NOT be retained across power cycles, unless
|
||||
* you call {@link #saveParametersToFlash()} ()}
|
||||
* @param intvlms the sample intervals in milliseconds
|
||||
*/
|
||||
void setAllVelocitySampleIntervals(int[] intvlms);
|
||||
|
||||
/**
|
||||
* Reads all velocity sample intervals from the OctoQuad
|
||||
* @return all velocity sample intervals from the OctoQuad
|
||||
*/
|
||||
int[] getAllVelocitySampleIntervals();
|
||||
|
||||
class ChannelPulseWidthParams
|
||||
{
|
||||
public int min_length_us;
|
||||
public int max_length_us;
|
||||
|
||||
public ChannelPulseWidthParams() {};
|
||||
|
||||
public ChannelPulseWidthParams(int min_length_us, int max_length_us)
|
||||
{
|
||||
this.min_length_us = min_length_us;
|
||||
this.max_length_us = max_length_us;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the minimum/maximum pulse width reported by an absolute encoder
|
||||
* which is connected to a given channel, to allow the ability to provide
|
||||
* accurate velocity data.
|
||||
* These parameters will NOT be retained across power cycles, unless
|
||||
* you call {@link #saveParametersToFlash()} ()}
|
||||
* @param idx the channel in question
|
||||
* @param params minimum/maximum pulse width
|
||||
*/
|
||||
void setSingleChannelPulseWidthParams(int idx, ChannelPulseWidthParams params);
|
||||
|
||||
/**
|
||||
* Queries the OctoQuad to determine the currently set minimum/maxiumum pulse
|
||||
* width for an encoder channel, to allow sane velocity data.
|
||||
* @param idx the channel in question
|
||||
* @return minimum/maximum pulse width
|
||||
*/
|
||||
ChannelPulseWidthParams getSingleChannelPulseWidthParams(int idx);
|
||||
}
|
||||
|
Reference in New Issue
Block a user