001 package edu.wpi.first.wpilibj.fpga; 002 003 import com.ni.rio.*; 004 import edu.wpi.first.wpilibj.communication.BumARioHandle; 005 006 public abstract class tSystem implements ExpectedFPGASignature//, DMAChannelDescriptors 007 { 008 protected static int m_DeviceHandle=0; 009 private static int m_ReferenceCount=0; 010 public static NiRioStatus status = new NiRioStatus(); 011 012 private static final String kRIO_DEVICE_NAME = "RIO0"; 013 private static final int kFPGA_RESET_REGISTER = 0x8102; 014 private static final int kFPGA_COMMAND_REGISTER = 0x8104; 015 private static final int kFPGA_COMMAND_ENABLE_CLEAR = 4; 016 private static final int kFPGA_COMMAND_ENABLE_IN = 2; 017 private static final int kFPGA_INTERRUPT_BASE_ADDRESS = 0x8000; 018 private static final int kFPGA_SIGNATURE_REGISTER = 0x8108; 019 private static final int kMITE_IOPCR_REGISTER = 0x470; 020 private static final int kMITE_IOPCR_32BIT = 0xC00231; 021 022 protected tSystem() 023 { 024 NiRioStatus versionStatus = new NiRioStatus(); 025 if (m_DeviceHandle == 0) 026 { 027 // Bum a RIO handle from network communications 028 m_DeviceHandle = BumARioHandle.bum(status.getPointer()); 029 030 // Check the GUID 031 int hwGUID[] = new int[4]; 032 for(int i=0; i<4; i++) 033 { 034 NiRioStatus cleanStatus = new NiRioStatus(); 035 036 hwGUID[i] = NiFpga.readU32(m_DeviceHandle, kFPGA_SIGNATURE_REGISTER, cleanStatus); 037 status.setStatus(cleanStatus); 038 if (hwGUID[i] != kExpectedFPGASignature[i]) 039 { 040 // versionStatus.setStatus(NiRioStatus.kRIOStatusVersionMismatch); 041 } 042 } 043 044 System.out.print("FPGA Hardware GUID: "); 045 printGUID(hwGUID); 046 System.out.println(""); 047 System.out.print("FPGA Software GUID: "); 048 printGUID(kExpectedFPGASignature); 049 System.out.println(""); 050 } 051 status.setStatus(versionStatus); 052 } 053 054 private static void printGUID(int guid[]) 055 { 056 System.out.print("0x"); 057 for(int i=0; i<4; i++) 058 { 059 long longVar = guid[i]; 060 String word = Long.toString(longVar & 0xFFFFFFFFL, 16); 061 while (word.length() < 8) 062 { 063 word = "0" + word; 064 } 065 System.out.print(word); 066 } 067 } 068 069 protected void finalize() 070 { 071 } 072 073 public int[] getFpgaGuid(NiRioStatus status) 074 { 075 int[] guid = {0,0,0,0}; 076 if (m_DeviceHandle == 0) 077 { 078 status.setStatus(NiRioStatus.kRIOStatusInvalidHandle); 079 return guid; 080 } 081 082 for(int i=0; i<4; i++) 083 { 084 guid[i] = NiFpga.readU32(m_DeviceHandle, kFPGA_SIGNATURE_REGISTER, status); 085 } 086 return guid; 087 } 088 089 /** 090 * Releases the native C++ resources held by the tSystem instance. 091 */ 092 public void Release() 093 { 094 } 095 }