/** * Copy status data from the DS task for the user. This is used primarily to set digital outputs * on the DS. */ protected void setData() { synchronized (m_semaphore) { FRCControl.setStatusData( getBatteryVoltage(), m_digitalOut, m_updateNumber, m_dashboardInUseHigh.getBytes(), m_dashboardInUseHigh.getBytesLength(), m_dashboardInUseLow.getBytes(), m_dashboardInUseLow.getBytesLength(), Semaphore.WAIT_FOREVER); m_dashboardInUseHigh.flush(); m_dashboardInUseLow.flush(); } }
/** * DriverStation constructor. * * <p>The single DriverStation instance is created statically with the instance static member * variable. */ protected DriverStation() { m_controlData = new FRCCommonControlData(); m_semaphore = new Object(); m_dataSem = new Object(); m_dashboardInUseHigh = m_dashboardDefaultHigh = new Dashboard(m_semaphore); m_dashboardInUseLow = m_dashboardDefaultLow = new Dashboard(m_semaphore); // m_controlData is initialized in constructor FRCCommonControlData. m_batteryChannel = new AnalogChannel(kBatterySlot, kBatteryChannel); Semaphore.Options options = new Semaphore.Options(); options.setPrioritySorted(true); m_packetDataAvailableSem = new Semaphore(options, false); FRCControl.setNewDataSem(m_packetDataAvailableSem); m_thread = new Thread(new DriverStationTask(this), "FRCDriverStation"); m_thread.setPriority((Thread.NORM_PRIORITY + Thread.MAX_PRIORITY) / 2); m_thread.start(); }
/** * Copy data from the DS task for the user. If no new data exists, it will just be returned, * otherwise the data will be copied from the DS polling loop. */ protected synchronized void getData() { FRCControl.getCommonControlData(m_controlData, Semaphore.WAIT_FOREVER); m_newControlData = true; }