void Wiimote::GetCoreData(u8* const data) { // when a movie is active, the button update happens here instead of Wiimote::Step, to avoid potential desync issues. if(Movie::IsPlayingInput() || Movie::IsRecordingInput() || NetPlay::IsNetPlayRunning()) { UpdateButtonsStatus(HAS_FOCUS); } *(wm_core*)data |= m_status.buttons; }
void Wiimote::GetButtonData(u8* const data) { // when a movie is active, the button update happens here instead of Wiimote::Step, to avoid potential desync issues. if (Core::g_want_determinism) { UpdateButtonsStatus(); } ((wm_buttons*)data)->hex |= m_status.buttons.hex; }
bool Wiimote::Step() { const bool has_focus = HAS_FOCUS; // TODO: change this a bit m_motion_plus_present = m_extension->settings[0]->value != 0; // no rumble if no focus if (false == has_focus) m_rumble_on = false; m_rumble->controls[0]->control_ref->State(m_rumble_on); // when a movie is active, this button status update is disabled (moved), because movies only record data reports. if(!(Movie::IsPlayingInput() || Movie::IsRecordingInput()) || NetPlay::IsNetPlayRunning()) { UpdateButtonsStatus(has_focus); } // check if there is a read data request if (!m_read_requests.empty()) { ReadRequest& rr = m_read_requests.front(); // send up to 16 bytes to the wii SendReadDataReply(rr); //SendReadDataReply(rr.channel, rr); // if there is no more data, remove from queue if (0 == rr.size) { delete[] rr.data; m_read_requests.pop(); } // dont send any other reports return true; } // check if a status report needs to be sent // this happens on wiimote sync and when extensions are switched if (m_extension->active_extension != m_extension->switch_extension) { RequestStatus(); // Wiibrew: Following a connection or disconnection event on the Extension Port, // data reporting is disabled and the Data Reporting Mode must be reset before new data can arrive. // after a game receives an unrequested status report, // it expects data reports to stop until it sets the reporting mode again m_reporting_auto = false; return true; } return false; }
void MyFrame::FinishStop(void) { // when looping resumes, start with at least one full frame. This enables applications // controlling PHD to auto-select a new star if the star is lost while looping was stopped. assert(!CaptureActive); pGuider->ForceFullFrame(); ResetAutoExposure(); UpdateButtonsStatus(); SetStatusText(_("Stopped.")); PhdController::AbortController("Stopped capturing"); }
void Wiimote::GetButtonData(u8* const data) { // when a movie is active, the button update happens here instead of Wiimote::Step, to avoid // potential desync issues. if (Core::WantsDeterminism()) { UpdateButtonsStatus(); } reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex; }
bool Wiimote::Step() { // TODO: change this a bit m_motion_plus_present = m_extension->boolean_settings[0]->GetValue(); m_rumble->controls[0]->control_ref->State(m_rumble_on); // when a movie is active, this button status update is disabled (moved), because movies only // record data reports. if (!Core::g_want_determinism) { UpdateButtonsStatus(); } // check if there is a read data request if (!m_read_requests.empty()) { ReadRequest& rr = m_read_requests.front(); // send up to 16 bytes to the Wii SendReadDataReply(rr); // SendReadDataReply(rr.channel, rr); // if there is no more data, remove from queue if (0 == rr.size) { delete[] rr.data; m_read_requests.pop(); } // don't send any other reports return true; } // check if a status report needs to be sent // this happens on Wiimote sync and when extensions are switched if (m_extension->active_extension != m_extension->switch_extension) { RequestStatus(); // WiiBrew: Following a connection or disconnection event on the Extension Port, // data reporting is disabled and the Data Reporting Mode must be reset before new data can // arrive. // after a game receives an unrequested status report, // it expects data reports to stop until it sets the reporting mode again m_reporting_auto = false; return true; } return false; }
/* * OnExposeComplete is the dispatch routine that is called when an image has been taken * by the background thread. * * It: * - causes the image to be redrawn by calling pGuider->UpateImageDisplay() * - calls the routine to update the guider state (which may do nothing) * - calls any other appropriate state update routine depending upon the current state * - updates button state based on appropriate state variables * - schedules another exposure if CaptureActive is stil true * */ void MyFrame::OnExposeComplete(usImage *pNewFrame, bool err) { try { Debug.Write("Processing an image\n"); m_exposurePending = false; if (pGuider->GetPauseType() == PAUSE_FULL) { delete pNewFrame; Debug.Write("guider is paused, ignoring frame, not scheduling exposure\n"); return; } if (err) { Debug.Write("OnExposeComplete(): Capture Error reported\n"); delete pNewFrame; StopCapturing(); if (pGuider->IsCalibratingOrGuiding()) { pGuider->StopGuiding(); pGuider->UpdateImageDisplay(); } pGuider->Reset(false); CaptureActive = m_continueCapturing; UpdateButtonsStatus(); PhdController::AbortController("Error reported capturing image"); SetStatusText(_("Stopped.")); // some camera drivers disconnect the camera on error if (!pCamera->Connected) SetStatusText(wxEmptyString, 2); throw ERROR_INFO("Error reported capturing image"); } ++m_frameCounter; if (m_rawImageMode && !m_rawImageModeWarningDone) { WarnRawImageMode(); m_rawImageModeWarningDone = true; } // check for dark frame compatibility in case the frame size changed (binning changed) if (pCamera->DarkFrameSize() != m_prevDarkFrameSize) { CheckDarkFrameGeometry(); } pGuider->UpdateGuideState(pNewFrame, !m_continueCapturing); pNewFrame = NULL; // the guider owns it now PhdController::UpdateControllerState(); Debug.Write(wxString::Format("OnExposeCompete: CaptureActive=%d m_continueCapturing=%d\n", CaptureActive, m_continueCapturing)); CaptureActive = m_continueCapturing; if (CaptureActive) { ScheduleExposure(); } else { FinishStop(); } } catch (wxString Msg) { POSSIBLY_UNUSED(Msg); UpdateButtonsStatus(); } }