001// Copyright (c) FIRST and other WPILib contributors. 002// Open Source Software; you can modify and/or share it under the terms of 003// the WPILib BSD license file in the root directory of this project. 004 005package edu.wpi.first.hal; 006 007/** 008 * Interrupt HAL JNI functions. 009 * 010 * @see "hal/Interrupts.h" 011 */ 012public class InterruptJNI extends JNIWrapper { 013 public static final int HalInvalidHandle = 0; 014 015 /** 016 * Initializes an interrupt. 017 * 018 * @return the created interrupt handle 019 * @see "HAL_InitializeInterrupts" 020 */ 021 public static native int initializeInterrupts(); 022 023 /** 024 * Frees an interrupt. 025 * 026 * @param interruptHandle the interrupt handle 027 * @see "HAL_CleanInterrupts" 028 */ 029 public static native void cleanInterrupts(int interruptHandle); 030 031 /** 032 * Waits for the defined interrupt to occur. 033 * 034 * @param interruptHandle the interrupt handle 035 * @param timeout timeout in seconds 036 * @param ignorePrevious if true, ignore interrupts that happened before waitForInterrupt was 037 * called 038 * @return the mask of interrupts that fired 039 * @see "HAL_WaitForInterrupt" 040 */ 041 public static native long waitForInterrupt( 042 int interruptHandle, double timeout, boolean ignorePrevious); 043 044 /** 045 * Waits for any interrupt covered by the mask to occur. 046 * 047 * @param interruptHandle the interrupt handle to use for the context 048 * @param mask the mask of interrupts to wait for 049 * @param timeout timeout in seconds 050 * @param ignorePrevious if true, ignore interrupts that happened before waitForInterrupt was 051 * called 052 * @return the mask of interrupts that fired 053 * @see "HAL_WaitForMultipleInterrupts" 054 */ 055 public static native long waitForMultipleInterrupts( 056 int interruptHandle, long mask, double timeout, boolean ignorePrevious); 057 058 /** 059 * Returns the timestamp for the rising interrupt that occurred most recently. 060 * 061 * <p>This is in the same time domain as getFPGATime(). It only contains the bottom 32 bits of the 062 * timestamp. If your robot has been running for over 1 hour, you will need to fill in the upper 063 * 32 bits yourself. 064 * 065 * @param interruptHandle the interrupt handle 066 * @return timestamp in microseconds since FPGA Initialization 067 */ 068 public static native long readInterruptRisingTimestamp(int interruptHandle); 069 070 /** 071 * Returns the timestamp for the falling interrupt that occurred most recently. 072 * 073 * <p>This is in the same time domain as getFPGATime(). It only contains the bottom 32 bits of the 074 * timestamp. If your robot has been running for over 1 hour, you will need to fill in the upper 075 * 32 bits yourself. 076 * 077 * @param interruptHandle the interrupt handle 078 * @return timestamp in microseconds since FPGA Initialization 079 */ 080 public static native long readInterruptFallingTimestamp(int interruptHandle); 081 082 /** 083 * Requests interrupts on a specific digital source. 084 * 085 * @param interruptHandle the interrupt handle 086 * @param digitalSourceHandle the digital source handle (either a HAL_AnalogTriggerHandle or a 087 * HAL_DigitalHandle) 088 * @param analogTriggerType the trigger type if the source is an AnalogTrigger 089 * @see "HAL_RequestInterrupts" 090 */ 091 public static native void requestInterrupts( 092 int interruptHandle, int digitalSourceHandle, int analogTriggerType); 093 094 /** 095 * Sets the edges to trigger the interrupt on. 096 * 097 * <p>Note that both edges triggered is a valid configuration. 098 * 099 * @param interruptHandle the interrupt handle 100 * @param risingEdge true for triggering on rising edge 101 * @param fallingEdge true for triggering on falling edge 102 * @see "HAL_SetInterruptUpSourceEdge" 103 */ 104 public static native void setInterruptUpSourceEdge( 105 int interruptHandle, boolean risingEdge, boolean fallingEdge); 106 107 /** 108 * Releases a waiting interrupt. 109 * 110 * <p>This will release both rising and falling waiters. 111 * 112 * @param interruptHandle the interrupt handle to release 113 * @see "HAL_ReleaseWaitingInterrupt" 114 */ 115 public static native void releaseWaitingInterrupt(int interruptHandle); 116 117 /** Utility class. */ 118 private InterruptJNI() {} 119}