IdeError ideWriteSector( const void *buffer, IdeChannel channel, IdeDrive drive, u32 sector ) { ChannelCli( channel ); if( !waitWhileBusy(channel) ) return IdeErrorTimeOut; WriteReg( channel, IdeRegNSec, 1 ); WriteReg( channel, IdeReg0Sec, sector & 0x000000FF ); WriteReg( channel, IdeReg1Sec, (sector & 0x0000FF00) >> 8 ); WriteReg( channel, IdeReg2Sec, (sector & 0x00FF0000) >> 16 ); WriteReg( channel, IdeReg3Sec, 0xE0 | ((sector & 0x0F000000)>>24) | ((drive & 0x1)<<4) ); if( !waitWhileBusy(channel) ) return IdeErrorTimeOut; if( !waitUntilReady(channel) ) return IdeErrorTimeOut; WriteReg( channel, IdeRegCommand, IdeCmdWrite ); if( !waitWhileBusy(channel) ) return IdeErrorTimeOut; if( !waitUntilDrq(channel) ) return IdeErrorTimeOut; if( (ReadReg(channel,IdeRegStatus) & IdeStatusError) ) { u8 error = ReadReg( channel, IdeRegError ); ResetController( channel ); return error; }; ASM("cld ; rep ; outsw" :: "d" (channel + IdeRegData), "c" (0x100), "S" (buffer) ); ChannelSti( channel ); return 0; };
BOOL CST202T_SATA::SetLookAhead( ) { BYTE bError = 0; BYTE bStatus = 0; // select device SelectDevice(); // wait for device to acknowledge selection WaitForDisc(WAIT_TYPE_NOT_BUSY, 100); WaitForDisc(WAIT_TYPE_READY, 1000); WaitOnBusy(TRUE); // write command WriteFeature(ATA_ENABLE_LOOKAHEAD); WriteCommand(ATAPI_CMD_SET_FEATURES); // wait for device to respond to command WaitOnBusy(TRUE); WaitForDisc(WAIT_TYPE_NOT_BUSY, 200); // check response bStatus = GetBaseStatus(); bError = GetError(); if ((bStatus & ATA_STATUS_ERROR) && (bError & ATA_ERROR_ABORTED)) { DEBUGMSG(ZONE_ERROR, (_T( "Atapi!CDisk::SetLookAhead> Failed to enable read look-ahead; status(%02X), error(%02X)\r\n" ), bStatus, bError)); ResetController(FALSE); return FALSE; } return TRUE; }
int main() { DWORD dwRes; #if 0 // Clean-up vXbox devices dwRes = UnPlugForce(1); dwRes = UnPlugForce(2); dwRes = UnPlugForce(3); dwRes = UnPlugForce(4); #endif // 0 // Display status and wait C_DisplayStatus(); getchar(); UCHAR nSlots = 100; dwRes = GetNumEmptyBusSlots(&nSlots); DisplayError(dwRes); SHORT vJoyVer = GetvJoyVersion(); BOOL exist = (STATUS_SUCCESS == isVBusExist()); BYTE Led[4]; XINPUT_VIBRATION Vib; LONG MaxX; char c[3]; BOOL Plugged, UnPlugged, Pressed, GetN; UINT iSlot; // Plug-in vBox device 1, Display status and wait dwRes = isControllerPluggedIn(1, &Plugged); DisplayError(dwRes); dwRes = PlugIn(1); DisplayError(dwRes); dwRes = isControllerPluggedIn(1, &Plugged); DisplayError(dwRes); dwRes = ResetController(1); DisplayError(dwRes); C_DisplayStatus(); getchar(); // Interactive: Ask user which device to acquire HDEVICE h1 = C_AcqDevice(); getchar(); C_DisplayDeviceInfo(h1); getchar(); getchar(); C_DisplayStatus(); C_DisplayAllDeviceCtrls(); // Loop through interactive tests C_Test(h1); //dwRes = ResetControllerDPad(4); getchar(); return (0); }
extern "C" void mplayer_osd_draw(int level) { if ((mplayer_get_pause() == 1) && (first_enter == 1)) { ResetController(); first_enter = 0; } //Y-osd button used because libmenu is off GuiTrigger osdMenu; osdMenu.SetButtonOnlyTrigger(-1, 0, PAD_BUTTON_Y); GuiButton osdBtn(20, 20); osdBtn.SetTrigger(&osdMenu); osdBtn.SetSelectable(false); mainWindow->Append(&osdBtn); if (osd_show) { double duration = mplayer_get_duration(); double elapsed = mplayer_get_elapsed(); struct XenosSurface * img = video_osd_progress_bar_front->GetImage(); float pourcents = (float) (elapsed * 100) / (float) duration; float width = (float) osd_duration_bar_width * (pourcents / 100.0); img->width = width; format_time(osd_duration, duration); format_time(osd_cur_time, elapsed); video_osd_info_cur_time->SetText(osd_cur_time); video_osd_info_duration->SetText(osd_duration); if (last_level != level) { video_osd_info_filename->SetText(mplayer_get_filename()); video_osd_info_filename->SetMaxWidth(644); video_osd_info_filename->SetScroll(SCROLL_HORIZONTAL); } video_osd_progress_bar_front->SetImage(img, img->width, img->height); video_osd_play->SetVisible(false); video_osd_pause->SetVisible(false); video_osd_stop->SetVisible(false); video_osd_rewind->SetVisible(false); video_osd_forward->SetVisible(false); video_osd_next->SetVisible(false); video_osd_prev->SetVisible(false); switch (mplayer_get_status()) { case 1: video_osd_play->SetVisible(true); break; case 2: video_osd_pause->SetVisible(true); break; case 3: video_osd_stop->SetVisible(true); break; case 4: video_osd_rewind->SetVisible(true); break; case 5: video_osd_forward->SetVisible(true); break; case 6: video_osd_next->SetVisible(true); break; case 7: video_osd_prev->SetVisible(true); break; default: break; } // show file info if (osd_display_info) { if (!video_osd_infobar->IsVisible()) video_osd_infobar->SetVisible(true); } else { if (video_osd_infobar->IsVisible()) video_osd_infobar->SetVisible(false); } if (level == 3) { if (!osd_options_window->IsVisible()) osd_options_window->SetVisible(true); } else { if (osd_options_window->IsVisible()) osd_options_window->SetVisible(false); osd_display_info = 0; osd_display_option_subtitle = 0; osd_display_option_audio = 0; osd_display_option_video = 0; } } else { osd_display_info = 0; } OsdSubtitlesOptions(); OsdAudioOptions(); OsdVideoOptions(); Menu_Frame(); last_level = level; mainWindow->Draw(); if (level == 3) { //this fixes non intended key-presses when osd is not 3 (like when seekbar is present) UpdatePads(); for (int i = 0; i < 4; i++) { mainWindow->Update(&userInput[i]); } if ((mplayer_get_pause() == 1) && (osdBtn.GetState() == STATE_CLICKED)) { osd_level = 1; osd_display_info = 0; osd_display_option_subtitle = 0; osd_display_option_audio = 0; osd_display_option_video = 0; } } mainWindow->Remove(&osdBtn); }