diff options
Diffstat (limited to '')
-rw-r--r-- | libgamma/CRTC.java | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/libgamma/CRTC.java b/libgamma/CRTC.java new file mode 100644 index 0000000..de4abdb --- /dev/null +++ b/libgamma/CRTC.java @@ -0,0 +1,285 @@ +/* See LICENSE file for copyright and license details. */ +package libgamma; + + +/** + * Cathode ray tube controller state + * <p> + * The CRTC controls the gamma ramps for the + * monitor that is plugged in to the connector + * that the CRTC belongs to + */ +public class CRTC +{ + /** + * Type initialiser + */ + static + { + Libgamma.initialise(); + } + + + /** + * Constructor + * + * @param partition The partition this CRTC belongs to + * @param crtc The index of the CRTC within its partition + */ + public CRTC(Partition partition, int crtc) throws LibgammaException + { + this.partition = partition; + this.crtc = crtc; + long[] r = libgamma_crtc_create(partition.address, crtc); + this.address = r[0]; + if (r[1] != 0) + throw new LibgammaException((int)(r[1])); + } + + + /** + * The partition this CRTC belongs to + */ + public final Partition partition; + + /** + * The index of the CRTC within its partition + */ + public final int crtc; + + /** + * The address of the native object + */ + final long address; + + + /** + * Release resources + */ + public void close() + { + libgamma_crtc_free(this.address); + } + + /** + * Restore the gamma ramps for the CRTC to the system settings + */ + public void restore() throws LibgammaException + { + int r = libgamma_crtc_restore(this.address); + if (r != 0) + throw new LibgammaException(r); + } + + /** + * Read information about the CRTC + * + * @param fields OR:ed identifiers for the information about the CRTC that should be read + * @return Information about the CRTC + */ + public CRTCInformation get_information(int fields) + { + Object[] r = libgamma_get_crtc_information(this.address, fields); + byte[] edid = (byte[])(r[0]); + String connector_name = (String)(r[1]); + float[] gamma = (float[])(r[2]); + int[] ints = (int[])(r[3]); + return new CRTCInformation(edid, connector_name, gamma, ints); + } + + /** + * Get the current gamma ramps for the CRTC + * + * @param output The gamma ramp structure to fill + */ + public <T extends Ramp> void get_gamma(GammaRamps<T> output) throws LibgammaException + { + int r = 0; + if (output.depth == 8) r = libgamma_crtc_get_gamma_ramps8(this.address, output.address); + else if (output.depth == 16) r = libgamma_crtc_get_gamma_ramps16(this.address, output.address); + else if (output.depth == 32) r = libgamma_crtc_get_gamma_ramps32(this.address, output.address); + else if (output.depth == 64) r = libgamma_crtc_get_gamma_ramps64(this.address, output.address); + else if (output.depth == -1) r = libgamma_crtc_get_gamma_rampsf(this.address, output.address); + else if (output.depth == -2) r = libgamma_crtc_get_gamma_rampsd(this.address, output.address); + if (r != 0) + throw new LibgammaException(r); + } + + /** + * Set the gamma ramps for the CRTC + * + * @param values The gamma ramps to apply + */ + public <T extends Ramp> void set_gamma(GammaRamps<T> values) throws LibgammaException + { + int r = 0; + if (values.depth == 8) r = libgamma_crtc_set_gamma_ramps8(this.address, values.address); + else if (values.depth == 16) r = libgamma_crtc_set_gamma_ramps16(this.address, values.address); + else if (values.depth == 32) r = libgamma_crtc_set_gamma_ramps32(this.address, values.address); + else if (values.depth == 64) r = libgamma_crtc_set_gamma_ramps64(this.address, values.address); + else if (values.depth == -1) r = libgamma_crtc_set_gamma_rampsf(this.address, values.address); + else if (values.depth == -2) r = libgamma_crtc_set_gamma_rampsd(this.address, values.address); + if (r != 0) + throw new LibgammaException(r); + } + + + /** + * {@inheritDoc} + */ + public String toString() + { + return "<Site: partition = " + this.partition.toString() + ", " + + "crtc = " + Integer.toString(this.crtc) + ">"; + } + + + /** + * Create a CRTC state + * + * @param partition The partition state for the partition that the CRTC belongs to + * @param crtc The index of the CRTC within the partition + * @return Element 0: The value for {@link #address}<br> + * Element 1: Error code, zero on success + */ + private static native long[] libgamma_crtc_create(long partition, int crtc); + + /** + * Release all resources held by a CRTC state + * and free the CRTC state pointer + * + * @param address The CRTC state + */ + private static native void libgamma_crtc_free(long address); + + /** + * Restore the gamma ramps for a CRTC to the system settings for that CRTC + * + * @param address The CRTC state + * @return Zero on success, and error code on failure + */ + private static native int libgamma_crtc_restore(long address); + + /** + * Read information about a CRTC + * + * @param crtc The state of the CRTC whose information should be read + * @param fields OR:ed identifiers for the information about the CRTC that should be read + * @return Input parameters for the constructor of {@link CRTCInformation} + */ + private static native Object[] libgamma_get_crtc_information(long crtc, int fields); + + + /** + * Get the current gamma ramps for a CRTC, 8-bit gamma-depth version + * + * @param address The CRTC state + * @param ramps The gamma ramps to fill with the current values + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_get_gamma_ramps8(long address, long ramps); + + /** + * Set the gamma ramps for a CRTC, 8-bit gamma-depth version + * + * @param address The CRTC state + * @param ramps The gamma ramps to apply + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_set_gamma_ramps8(long address, long ramps); + + + /** + * Get the current gamma ramps for a CRTC, 16-bit gamma-depth version + * + * @param address The CRTC state + * @param ramps The gamma ramps to fill with the current values + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_get_gamma_ramps16(long address, long ramps); + + /** + * Set the gamma ramps for a CRTC, 16-bit gamma-depth version + * + * @param address The CRTC state + * @param ramps The gamma ramps to apply + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_set_gamma_ramps16(long address, long ramps); + + + /** + * Get the current gamma ramps for a CRTC, 32-bit gamma-depth version + * + * @param address The CRTC state + * @param ramps The gamma ramps to fill with the current values + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_get_gamma_ramps32(long address, long ramps); + + /** + * Set the gamma ramps for a CRTC, 32-bit gamma-depth version + * + * @param address The CRTC state + * @param ramps The gamma ramps to apply + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_set_gamma_ramps32(long address, long ramps); + + + /** + * Get the current gamma ramps for a CRTC, 64-bit gamma-depth version + * + * @param address The CRTC state + * @param ramps The gamma ramps to fill with the current values + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_get_gamma_ramps64(long address, long ramps); + + /** + * Set the gamma ramps for a CRTC, 64-bit gamma-depth version + * + * @param address The CRTC state + * @param ramps The gamma ramps to apply + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_set_gamma_ramps64(long address, long ramps); + + + /** + * Set the gamma ramps for a CRTC, single precision floating point version + * + * @param address The CRTC state + * @param ramps The gamma ramps to apply + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_set_gamma_rampsf(long address, long ramps); + + /** + * Get the current gamma ramps for a CRTC, single precision floating point version + * + * @param address The CRTC state + * @param ramps The gamma ramps to fill with the current values + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_get_gamma_rampsf(long address, long ramps); + + + /** + * Get the current gamma ramps for a CRTC, double precision floating point version + * + * @param address The CRTC state + * @param ramps The gamma ramps to fill with the current values + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_get_gamma_rampsd(long address, long ramps); + + /** + * Set the gamma ramps for a CRTC, double precision floating point version + * + * @param address The CRTC state + * @param ramps The gamma ramps to apply + * @return Zero on success, an error code on failure + */ + private static native int libgamma_crtc_set_gamma_rampsd(long address, long ramps); +} |