001 /*
002 * To change this template, choose Tools | Templates
003 * and open the template in the editor.
004 */
005 package edu.wpi.first.wpilibj.image;
006
007 import com.sun.cldc.jna.Pointer;
008 import com.sun.cldc.jna.Structure;
009
010 /**
011 *
012 * @author koconnor
013 */
014 public class LinearAverages {
015
016 Pointer columnAveragesPtr;
017 int columnCount;
018 float[] columnAverages;
019 Pointer rowAveragesPtr;
020 int rowCount;
021 float[] rowAverages;
022 Pointer risingDiagAveragesPtr;
023 int risingDiagCount;
024 float[] risingDiagAverages;
025 Pointer fallingDiagAveragesPtr;
026 int fallingDiagCount;
027 float[] fallingDiagAverages;
028
029 public static class LinearAveragesMode {
030
031 public final int value;
032 static final int IMAQ_COLUMN_AVERAGES_val = 1;
033 static final int IMAQ_ROW_AVERAGES_val = 2;
034 static final int IMAQ_RISING_DIAG_AVERAGES_val = 4;
035 static final int IMAQ_FALLING_DIAG_AVERAGES_val = 8;
036 static final int IMAQ_ALL_LINEAR_AVERAGES_val = 15;
037 public static final LinearAveragesMode IMAQ_COLUMN_AVERAGES = new LinearAveragesMode(IMAQ_COLUMN_AVERAGES_val);
038 public static final LinearAveragesMode IMAQ_ROW_AVERAGES = new LinearAveragesMode(IMAQ_ROW_AVERAGES_val);
039 public static final LinearAveragesMode IMAQ_RISING_DIAG_AVERAGES = new LinearAveragesMode(IMAQ_RISING_DIAG_AVERAGES_val);
040 public static final LinearAveragesMode IMAQ_FALLING_DIAG_AVERAGES = new LinearAveragesMode(IMAQ_FALLING_DIAG_AVERAGES_val);
041 public static final LinearAveragesMode IMAQ_ALL_LINEAR_AVERAGES = new LinearAveragesMode(IMAQ_ALL_LINEAR_AVERAGES_val);
042
043 private LinearAveragesMode (int value){
044 this.value = value;
045 }
046 }
047
048 private class LinearAveragesStruct extends Structure {
049
050 public void read() {
051 columnCount = backingNativeMemory.getInt(4);
052 columnAveragesPtr = backingNativeMemory.getPointer(0, 4*columnCount);
053 columnAverages = new float[columnCount];
054 columnAveragesPtr.getFloats(0, columnAverages, 0, columnCount);
055 rowCount = backingNativeMemory.getInt(12);
056 rowAveragesPtr = backingNativeMemory.getPointer(8, 4*rowCount);
057 rowAverages = new float[rowCount];
058 rowAveragesPtr.getFloats(0, rowAverages, 0, rowCount);
059 risingDiagCount = backingNativeMemory.getInt(20);
060 risingDiagAveragesPtr = backingNativeMemory.getPointer(16, 4*risingDiagCount);
061 risingDiagAverages = new float[risingDiagCount];
062 risingDiagAveragesPtr.getFloats(0, risingDiagAverages, 0, risingDiagCount);
063 fallingDiagCount = backingNativeMemory.getInt(28);
064 fallingDiagAveragesPtr = backingNativeMemory.getPointer(24, 4*fallingDiagCount);
065 fallingDiagAverages = new float[fallingDiagCount];
066 fallingDiagAveragesPtr.getFloats(0, fallingDiagAverages, 0, fallingDiagCount);
067 }
068
069 public void write() {
070 backingNativeMemory.setPointer(0, columnAveragesPtr);
071 backingNativeMemory.setInt(4, columnCount);
072 backingNativeMemory.setPointer(8, rowAveragesPtr);
073 backingNativeMemory.setInt(12, rowCount);
074 backingNativeMemory.setPointer(16, risingDiagAveragesPtr);
075 backingNativeMemory.setInt(20, risingDiagCount);
076 backingNativeMemory.setPointer(24, fallingDiagAveragesPtr);
077 backingNativeMemory.setInt(28, fallingDiagCount);
078 }
079
080 public int size() {
081 return 32;
082 }
083
084 /**
085 * Free the memory used by this range
086 */
087 public void free() {
088 release();
089 }
090
091 /**
092 * Create a new range with the specified upper and lower boundaries
093 * @param lower The lower limit
094 * @param upper The upper limit
095 */
096 public LinearAveragesStruct(int address) {
097 useMemory(new Pointer(address, size()));
098 read();
099 }
100 }
101
102 LinearAverages(int address){
103 new LinearAveragesStruct(address);
104 }
105
106 public float[] getColumnAverages(){
107 return columnAverages;
108 }
109
110 public float[] getRowAverages(){
111 return rowAverages;
112 }
113
114 public float[] getRisingDiagAverages(){
115 return risingDiagAverages;
116 }
117
118 public float[] getFallingDiagAverages(){
119 return fallingDiagAverages;
120 }
121 }