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 }