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.BlockingFunction;
011    import com.sun.cldc.jna.NativeLibrary;
012    
013    /**
014     * Class for communicating with the NetworkCommunication library routines
015     * which check module presence.
016     * 
017     * @author pmalmsten
018     */
019    public class ModulePresence {
020    
021        public static final int kMaxModuleNumber = 2;
022    
023        public static class ModuleType {
024    
025            public static final ModuleType kUnknown = new ModuleType(0x00);
026            public static final ModuleType kAnalog = new ModuleType(0x01);
027            public static final ModuleType kDigital = new ModuleType(0x02);
028            public static final ModuleType kSolenoid = new ModuleType(0x03);
029            private final int m_intValue;
030    
031            private ModuleType(int value) {
032                m_intValue = value;
033            }
034    
035            public int getValue() {
036                return m_intValue;
037            }
038        };
039        private static final BlockingFunction getModulePresenceFn = NativeLibrary.getDefaultInstance().getBlockingFunction("FRC_NetworkCommunication_nLoadOut_getModulePresence");
040    
041        /**
042         * Determines whether the module of the given type and number is present.
043         *
044         * This method calls the appropriate C function within the NetworkCommunication
045         * library in order to get the answer.
046         *
047         * @param moduleType The type of the module to be check.
048         * @param moduleNumber The ID for this type of module to check (usually 0 or 1).
049         * @return Whether the given module is present.
050         */
051        public static boolean getModulePresence(ModuleType moduleType, int moduleNumber) {
052            return (getModulePresenceFn.call2(moduleType.getValue(), moduleNumber) == 1);
053        }
054    }