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.communication;
009
010 import com.sun.cldc.jna.Function;
011 import com.sun.cldc.jna.NativeLibrary;
012 import com.sun.cldc.jna.Pointer;
013
014 /**
015 *
016 * @author mwills
017 */
018 public final class UsageReporting {
019
020 private UsageReporting() {
021 }
022 //reporting version
023 public static final int kUsageReporting_version = 1;
024 //resources
025 public static final int kResourceType_Controller = 0;
026 public static final int kResourceType_Module = 1;
027 public static final int kResourceType_Language = 2;
028 public static final int kResourceType_CANPlugin = 3;
029 public static final int kResourceType_Accelerometer = 4;
030 public static final int kResourceType_ADXL345 = 5;
031 public static final int kResourceType_AnalogChannel = 6;
032 public static final int kResourceType_AnalogTrigger = 7;
033 public static final int kResourceType_AnalogTriggerOutput = 8;
034 public static final int kResourceType_CANJaguar = 9;
035 public static final int kResourceType_Compressor = 10;
036 public static final int kResourceType_Counter = 11;
037 public static final int kResourceType_Dashboard = 12;
038 public static final int kResourceType_DigitalInput = 13;
039 public static final int kResourceType_DigitalOutput = 14;
040 public static final int kResourceType_DriverStationCIO = 15;
041 public static final int kResourceType_DriverStationEIO = 16;
042 public static final int kResourceType_DriverStationLCD = 17;
043 public static final int kResourceType_Encoder = 18;
044 public static final int kResourceType_GearTooth = 19;
045 public static final int kResourceType_Gyro = 20;
046 public static final int kResourceType_I2C = 21;
047 public static final int kResourceType_Framework = 22;
048 public static final int kResourceType_Jaguar = 23;
049 public static final int kResourceType_Joystick = 24;
050 public static final int kResourceType_Kinect = 25;
051 public static final int kResourceType_KinectStick = 26;
052 public static final int kResourceType_PIDController = 27;
053 public static final int kResourceType_Preferences = 28;
054 public static final int kResourceType_PWM = 29;
055 public static final int kResourceType_Relay = 30;
056 public static final int kResourceType_RobotDrive = 31;
057 public static final int kResourceType_SerialPort = 32;
058 public static final int kResourceType_Servo = 33;
059 public static final int kResourceType_Solenoid = 34;
060 public static final int kResourceType_SPI = 35;
061 public static final int kResourceType_Task = 36;
062 public static final int kResourceType_Ultrasonic = 37;
063 public static final int kResourceType_Victor = 38;
064 public static final int kResourceType_Button = 39;
065 public static final int kResourceType_Command = 40;
066 public static final int kResourceType_AxisCamera = 41;
067 public static final int kResourceType_PCVideoServer = 42;
068 public static final int kResourceType_SmartDashboard = 43;
069 public static final int kResourceType_Talon = 44;
070 public static final int kResourceType_HiTechnicColorSensor = 45;
071 public static final int kResourceType_HiTechnicAccel = 46;
072 public static final int kResourceType_HiTechnicCompass = 47;
073 public static final int kResourceType_SRF08 = 48;
074 //languages
075 public static final int kLanguage_LabVIEW = 1;
076 public static final int kLanguage_CPlusPlus = 2;
077 public static final int kLanguage_Java = 3;
078 public static final int kLanguage_Python = 4;
079 //CAN
080 public static final int kCANPlugin_BlackJagBridge = 1;
081 public static final int kCANPlugin_2CAN = 2;
082 //Framework
083 public static final int kFramework_Iterative = 1;
084 public static final int kFramework_Simple = 2;
085 //Robot Drive types
086 public static final int kRobotDrive_ArcadeStandard = 1;
087 public static final int kRobotDrive_ArcadeButtonSpin = 2;
088 public static final int kRobotDrive_ArcadeRatioCurve = 3;
089 public static final int kRobotDrive_Tank = 4;
090 public static final int kRobotDrive_MecanumPolar = 5;
091 public static final int kRobotDrive_MecanumCartesian = 6;
092 //DS Compatible IO
093 public static final int kDriverStationCIO_Analog = 1;
094 public static final int kDriverStationCIO_DigitalIn = 2;
095 public static final int kDriverStationCIO_DigitalOut = 3;
096 //DS Enhanced IO
097 public static final int kDriverStationEIO_Acceleration = 1;
098 public static final int kDriverStationEIO_AnalogIn = 2;
099 public static final int kDriverStationEIO_AnalogOut = 3;
100 public static final int kDriverStationEIO_Button = 4;
101 public static final int kDriverStationEIO_LED = 5;
102 public static final int kDriverStationEIO_DigitalIn = 6;
103 public static final int kDriverStationEIO_DigitalOut = 7;
104 public static final int kDriverStationEIO_FixedDigitalOut = 8;
105 public static final int kDriverStationEIO_PWM = 9;
106 public static final int kDriverStationEIO_Encoder = 10;
107 public static final int kDriverStationEIO_TouchSlider = 11;
108 //Accelerometer connection types
109 public static final int kADXL345_SPI = 1;
110 public static final int kADXL345_I2C = 2;
111 //Commands
112 public static final int kCommand_Scheduler = 1;
113 //Smart Dashboard
114 public static final int kSmartDashboard_Instance = 1;
115
116 private static final Function nUsageReporting_reportFn = NativeLibrary.getDefaultInstance().getFunction("FRC_NetworkCommunication_nUsageReporting_report");
117
118 /**
119 * Report the usage of a resource of interest.
120 *
121 * @param resource one of the values in the tResourceType above (max value 51).
122 * @param instanceNumber an index that identifies the resource instance.
123 */
124 public static void report(int resource, int instanceNumber) {
125 report(resource, instanceNumber, 0);
126 }
127 /**
128 * Report the usage of a resource of interest.
129 *
130 * @param resource one of the values in the tResourceType above (max value 51).
131 * @param instanceNumber an index that identifies the resource instance.
132 * @param context an optional additional context number for some cases (such as module number). Set to 0 to omit.
133 */
134 public static void report(int resource, int instanceNumber, int context) {
135 report(resource, instanceNumber, context, null);
136 }
137 /**
138 * Report the usage of a resource of interest.
139 *
140 * @param resource one of the values in the tResourceType above (max value 51).
141 * @param instanceNumber an index that identifies the resource instance.
142 * @param context an optional additional context number for some cases (such as module number). Set to 0 to omit.
143 * @param feature a string to be included describing features in use on a specific resource. Setting the same resource more than once allows you to change the feature string.
144 */
145 public static void report(int resource, int instanceNumber, int context, String feature) {
146 if (feature != null) {
147 Pointer featureStringPointer = Pointer.createStringBuffer(feature);
148 nUsageReporting_reportFn.call4(resource, instanceNumber, context, featureStringPointer);
149 //featureStringPointer.free();//TODO check to see if this can get called or not
150 } else {
151 nUsageReporting_reportFn.call4(resource, instanceNumber, context, Pointer.NULL());
152 }
153 }
154 }