亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? yampp3.c

?? fat文件系統的源碼 老外寫的FAT32文件系統 還是有用的
?? C
?? 第 1 頁 / 共 3 頁
字號:

			case EV_NEXTD:						// Switch to next dir
				wSongNum = checkdir() + wFirstInDir; 
				goto PLAY;

#ifdef ENABLE_NAVL
			case EV_PREVL:			// Switch to previous start letter 

				nTemp = nLastPosL - 1;
				while (nTemp < nLastPosL)
				{
					if (LetterTable[nTemp].letter < *LONG_NAME)
						break;
					else
						nTemp--;
				}
				if (nTemp >= nLastPosL)
					nTemp = nLastPosL - 1;

				wSongNum = LetterTable[nTemp].song_num;
				goto PLAY;

			case EV_NEXTL:						// Switch to next start letter
				for (nTemp = 1; nTemp < nLastPosL; nTemp++)
				{
					if (LetterTable[nTemp].letter > *LONG_NAME)
						break;
				}
				if (nTemp >= nLastPosL)
					nTemp = 0;
				wSongNum = LetterTable[nTemp].song_num;
				goto PLAY;
#endif

#ifdef ENABLE_NUMERIC
			case EV_NUMBER:
				pTrack = number;
				tot_sw = 10;
				goto DISPUPD;
#endif

			case EV_PREV10:	wSongNum -= 10;	goto PLAY;

			case EV_NEXT10:	wSongNum += 10;	goto PLAY;

			case EV_PREV:
#ifdef NEW_PREV
 				if(dwPlayed > 0x0600)
					goto PLAY;
#endif
				if (bRandom == 0)			// in normal mode
				{
					if (wSongNum == 0)
						wSongNum = wMaxSongs - 1;
					else
						wSongNum--;
					goto PLAY;
				}
				else 
					goto RAND;			// in any random mode

			case EV_NEXT: 
NEXT_SONG:			if (bRandom == 0)
				{
					wSongNum++;			// in normal mode
					goto PLAY;
				}
RAND:				switch (bRandom)
				{

					case 1:	wSongNum = do_rand(wMaxSongs);	// random from all songs on disk
						break;

					case 2:	nTemp = do_rand(checkdir());		// random from current directory
						if (nTemp == -1)			// no more songs in current dir.
						{
							nTemp = checkdir();		// calculate number of first song
							wSongNum = nTemp + wFirstInDir;	// in next directory
							if (wSongNum >= wMaxSongs)
								wFirstInDir = wSongNum = 0;
							nTemp = do_rand(checkdir());	// random from this directory
						}
						wSongNum = nTemp + wFirstInDir;		// set new song number
						break;
				}
				// fall through

			case EV_PLAY:
				eeprom_wb(EEPROM_AUTOPLAY,true);	// Write autoplay flags
PLAY:
				lcd_clrscr();
				lcd_puts_p(PSTR("Loading..."));
				vs1001_reset(bLoudness);		// Mandatory!

				if (wSongNum >= wMaxSongs)		// Protect for song number error
					wSongNum = 0;

				if (!get_dir_entry(wSongNum))		// Find song
				{
					if (!get_dir_entry(wSongNum))	// Not found ??? Try again.
					{	wSongNum = 0;		// Something wrong
						continue;
					}
				}
				eeprom_ww(EEPROM_SONGPOS, wSongNum);
				PRINT_p(PSTR("\nPlaying #"));
				pTrack = unsigned2str(wSongNum + 1, trackstr); 
				PRINT(pTrack); 
				UART_SendByte(' ');
#if (LCD_LINES == 2)
				scroll_line = src = strcat(DIR_NAME, LONG_NAME);
#else
				scroll_line = src = LONG_NAME;
#ifdef DIR_SCROLL
				dir_scroll_line = DIR_NAME;
				dir_scroll_length = strlen(DIR_NAME);
				dir_scroll_pos = 0;
#endif
#endif
				scroll_pos = 0;
				scroll_length = 4;			// To add ' >> ' sign
				while (*src++)
					scroll_length++;
				src--;

				lcd_clrscr();
#if (LCD_LINES == 2)
				PRINT(scroll_line);			// directory and file name
				lcd_puts(scroll_line);
#endif
				if(scroll_length > LCD_LINE_LENGTH+4)	// only if scrolling needed
				{
					*((u32*)src)++ = 0x203E3E20L;	// adding " >> " sign
					*src = 0;
				}
#if (LCD_LINES == 4)
				// dir name centering
#ifdef DIR_SCROLL
				if(dir_scroll_length < LCD_LINE_LENGTH)	// only if no dir name scrolling
					lcd_gotoxy(LCD_LINE_LENGTH/2 - (dir_scroll_length+1)/2, 0);
#else //DIR_SCROLL
				i= strlen(DIR_NAME);
				if(i < LCD_LINE_LENGTH)			// only if no dir name scrolling
					lcd_gotoxy(LCD_LINE_LENGTH/2 - (i+1)/2, 0);
#endif //DIR_SCROLL
				lcd_puts(DIR_NAME);			// display directory
				PRINT(DIR_NAME);
				PRINT_p(PSTR(" / "));
				lcd_gotoxy(0,1);			// Second line = filename
				lcd_puts(LONG_NAME);			// Just display it 
				PRINT(LONG_NAME);
#endif // (LCD_LINES == 4)
				wAddTime = 0;
				dwPlayed = 0;
#ifdef REMAIN_TIME
				wSongTime = (u16)(dwFileSize / (4 * 125)); // Song time calculation
#endif
				nDispUpd = tot_sw = 10;
				load_buffers();
				bPlaying = true;
#ifdef OLD_VS1001
				wPlayT = 0;
#endif				
				lcd_frame();
				break;

			case EV_STOP:
				vs1001_reset(0);			// VS1001 reset for flush buffer
				bPlaying = false;
				lcd_clrscr();
				lcd_puts_p(PSTR(" yampp-3   STOP"));
				eeprom_wb(EEPROM_AUTOPLAY,false);	// write autoplay flag
				LastEntry = -1;
				ATA_SpinDown();				// spindown HDD
				break;

			case EV_VOLDN:
				if (nVolume <= MIN_VOLUME-VOL_STEP) 
					nVolume += VOL_STEP;
				else
					nVolume = MIN_VOLUME;
				goto SETVOL;

			case EV_VOLUP:
				if (nVolume >= VOL_STEP) 
					nVolume -= VOL_STEP;
				else
					nVolume = 0;
SETVOL:				setvolume(nVolume);
				break;

			case EV_LOUDNESS:
				bLoudness = !bLoudness;
				*(loudstr+4) = bLoudness ? '+' : '-';
				vs1001_write(VS1001_MODE, 0x0080 * (bLoudness == true)); // write bit SM_BASS to VS1001K
				eeprom_wb(EEPROM_LOUDNESS, bLoudness);
				tot_sw = 14;				
				goto DISPUPD;
#ifdef REMAIN_TIME
			case EV_REMAIN:
				bTimeMode = !bTimeMode;
				tot_sw = 0;
				goto DISPUPD;
#endif				
			case EV_RANDOM:
				bRandom = (bRandom + 1) % 3 ;			// change random mode from 0 to 2
				*(randstr+4) = randmod[bRandom];
				eeprom_wb(EEPROM_RANDOM, bRandom);
				tot_sw = 12;				
DISPUPD:			nDispUpd = 10;
				break;

//jesper 011207	start			
			case EV_PAUSE:
				event = EV_IDLE;
#if (LCD_LINES == 2)
				lcd_gotoxy(LCD_LINE_LENGTH - 6 - 2*(LCD_LINE_LENGTH != 16),1);	// 2 line
				lcd_puts_p(PSTR("Paused"));
#else
				lcd_gotoxy(0,2);			// 3 line
				lcd_puts_p(PSTR("Paused"));
				printsp();
#endif
				while (rec80_active()) ;		// wait for key release
				do
				{
					WDR;				// Give watchdog full time
					if (UART_HasChar())		// Check all input controls
						event = get_char_event();
					if (rec80_active())
						event = ir_event();
					if (event == EV_IDLE)
						event = get_key_event();
				} while (event == EV_IDLE);
#if (LCD_LINES == 4)
#ifdef PROGRESBAR_II
				lcd_frame();
#else
				lcd_gotoxy(0,2);			// 3 line
				printsp();
#endif
#endif //(LCD_LINES == 4)
				break;
//jesper 011207 end	

#ifdef FFWD_SEARCH
			case EV_FFWD:
				for (i = 0; i < 0x18000 / CLUSTER_SIZE; i++)	// Number of clusters to skip 6 second
				{
					if (!ReadNextCluster())			// Skip clusters,
						goto NEXT_SONG;			// Play next song
					dwPlayed += CLUSTER_SIZE / 32;		// Update pumped bytes counter
				}
				wAddTime += 6;					// Its accurate only for 128kbps files
										// and no room for best calculation
										// on VBR files its totally imposible
SEARCHGO:			vs1001_setvolume(nVolume+40, nVolume+40);	// Decrease volume by 20dB for eliminate 
										// sound scratches
				bFfwdMute = true;
				load_buffers();
				tot_sw = 0;
				goto DISPUPD;
#endif // FFWD_SEARCH

#ifdef FREW_SEARCH
			case EV_FREW:
				if (wBackStepPos > 0)
				{
					dwCurrentCluster = Rev_Table[--wBackStepPos];
					dwPlayed = wBackStepPos * (0x18000 / 32);
					wAddTime -= 5;
					lcd_frame();
					goto SEARCHGO;
				}
#endif
			default:
				break;
		} // switch (event)

		event = EV_IDLE;			// We always go back to IDLE when
							//  exiting switch

									
		if (bPlaying)
		{
#ifdef ENABLE_NUMERIC
			if (LastEvent == EV_NUMBER && (nKeyTime > 14 || pNum == number+4))
			{
				LastEvent = EV_IDLE;
				nTemp = Numb2Int();
				pNum = number;
				*pNum = 0;
				if (nTemp <= wMaxSongs)
				{
					wSongNum = nTemp-1;
					goto PLAY;
				}
				pTrack = unsigned2str(wSongNum + 1, trackstr);
			}
#endif

//-------------------READ MPEG STREAM FROM HDD AND SENDING DATA TO VS1001 ---------------------------

			nWrites = MAX_CONS_WRITES;				// This count prevents indefinite
										// data sending to VS1001
			while (bit_is_set(PINB, PB2) && pUpdBuf == 0)
			{
				vs1001_send_32(pPlayData);			// Feed data to VS1001
				pPlayData += 32;				// Advance pointer
				if (pPlayData == BUFFER2P+BUFFER_SIZE) 		// End of Buffer 2
				{
					pPlayData = BUFFER1P;			// Pointer to Start buffer1
					pUpdBuf = BUFFER2P;			// Reload Buffer2
				}
				else if (pPlayData == BUFFER1P+BUFFER_SIZE)	// End of Buffer 1
				{
					pUpdBuf = BUFFER1P;			// Reload Buffer1
				}

				dwPlayed++;					// Count already pumped blocks (32 bytes)

				if (--nWrites == 0)				// if vs1001 needs to more data
				{
					vs1001_reset(bLoudness);		// try resetting it
					break;
				}
			}

			if (bFfwdMute && (nDispUpd == 3))			// If fast forward volume downed
			{
				vs1001_setvolume(nVolume,nVolume);		// Restore volume
				bFfwdMute = false;
			}

			i = CheckAndAdvanceCluster();
			if (pUpdBuf && i != NO_DATA)				// if any buffer need reload
			{
				ReadBuffer(pUpdBuf);				// reload buffer
				pUpdBuf = 0;					// mark as just loaded
			}
#ifdef CHECK_FILESIZE
			if ((i == NO_DATA && pUpdBuf) || (dwPlayed >= dwFileSize))	// No more data to play
#else
			if (i == NO_DATA && pUpdBuf)					// No more data to play
#endif
			{							// Try to autoplay next song
				event = EV_NEXT;
				continue;
			}


			if (nDispUpd >= 5)					// Update display info every 500ms
			{
#ifdef ENABLE_LCD
				if (scroll_length > LCD_LINE_LENGTH+4)		// Scroll song name every 500ms
				{						// if its length is more than lcd length
	 				lcd_gotoxy(0, LCD_LINES/2 - 1);
					for (nTemp = 0; nTemp < LCD_LINE_LENGTH; nTemp++)
						lcd_putchar(scroll_line[(scroll_pos + nTemp) % scroll_length]);
					scroll_pos++;
				}

#if (LCD_LINES == 4) && (defined DIR_SCROLL)

				if (dir_scroll_length > LCD_LINE_LENGTH)	// Scroll dir name 
				{						// if its length is more than LCD row chars
					lcd_gotoxy(0,0);
					for (nTemp = 0; nTemp < LCD_LINE_LENGTH; nTemp++)
						lcd_putchar(dir_scroll_line[(dir_scroll_pos + nTemp) % dir_scroll_length]);
					dir_scroll_pos++;
				}
#endif

				dispbar();
				dst = timestr;

//--------------------------------------------------------------------------------------------------------------------
#if (LCD_LINES == 2)
#ifdef REMAIN_TIME
				lcd_gotoxy(LCD_LINE_LENGTH - 7 - 2*(LCD_LINE_LENGTH != 16), 1);	// Line 2
#else
				lcd_gotoxy(LCD_LINE_LENGTH - 6 - 2*(LCD_LINE_LENGTH != 16), 1);	// Line 2
#endif
				if (tot_sw < 10)	// 0-9
				{
					src = timestr;
#ifdef OLD_VS1001
					wPlayTime = wPlayT / 10 + wAddTime;	// seconds
#ifdef FREW_SEARCH
					if (wPlayTime > 32768) wAddTime = -(wPlayT / 10);
#endif

#else  //OLD_VS1001
					wPlayTime = vs1001_read(VS1001_PLAYTIME) + wAddTime;
#endif  //OLD_VS1001

#ifdef REMAIN_TIME
					if (bTimeMode)
					{
						wPlayTime = wSongTime - wPlayTime;
						lcd_putchar('-');
					}
					else
						lcd_putchar(' ');
#endif
					if (wPlayTime < 0) wPlayTime = 0;
					divt = udiv(wPlayTime, 600);
					*src++ = '0' + (u08)divt.quot % 10;	 // song time up to 99 min
					divt = udiv(divt.rem, 60);
					*src++ = '0' + (u08)divt.quot;
					*src++ = ':';
					divt = udiv(divt.rem, 10);
					*src++ = '0' + (u08)divt.quot;
					*src++ = '0' + (u08)divt.rem;			
					*src = 0;
				}
				else if (tot_sw < 12)	// 10-11
				{
					*dst++ = '#';
					src = pTrack;
					while ((*dst = *src++)) dst++;
					while (dst < &timestr[5])
						*dst++ = ' ';
					dst = timestr;
				}
				else if (tot_sw < 14)	// 12-13
				{
					dst = randstr;
				}
				else if (tot_sw < 16)	// 14-15
				{
					dst = loudstr;
				}
	
#ifdef REMAIN_TIME
				if (tot_sw > 9)
						lcd_putchar(' ');
#endif

				tot_sw += 1;
				if (tot_sw >= 16)
					tot_sw = 0;
				lcd_puts(dst);
#if (LCD_LINE_LENGTH != 16)
				lcd_putchar(' ');		// separator
				lcd_putchar(1);			// speaker sign
#endif

#endif  //(LCD_LINES == 2)

//--------------------------------------------------------------------------------------------------------------------
#if (LCD_LINES == 4)
#ifdef REMAIN_TIME
				lcd_gotoxy(LCD_LINE_LENGTH - 6,2);			// Line 3
#else
				lcd_gotoxy(LCD_LINE_LENGTH - 5,2);			// Line 3
#endif
				src = timestr;
#ifdef OLD_VS1001
				wPlayTime = wPlayT / 10 + wAddTime;	// seconds
#ifdef FREW_SEARCH
				if (wPlayTime > 32768) wAddTime = -(wPlayT / 10);
#endif
#else  //OLD_VS1001
				wPlayTime = vs1001_read(VS1001_PLAYTIME) + wAddTime;
#endif  //OLD_VS1001

#ifdef REMAIN_TIME
				if (bTimeMode)
				{
					wPlayTime = wSongTime - wPlayTime;
					lcd_putchar('-');
				}
				else
					lcd_putchar(' ');
#endif
				if (wPlayTime < 0) wPlayTime = 0;
				divt = udiv(wPlayTime, 600);
				*src++ = '0' + (u08)divt.quot % 10;	// song time up to 99 min
				divt = udiv(divt.rem, 60);
				*src++ = '0' + (u08)divt.quot;
				*src++ = ':';
				divt = udiv(divt.rem, 10);
				*src++ = '0' + (u08)divt.quot;
				*src++ = '0' + (u08)divt.rem;			
				*src = 0;

				lcd_puts(dst);			// display time, line 3, x= 15 - 19
				lcd_putchar('\n');		// goto line 4

				dst = timestr;
				*dst++ = '#';
				src = pTrack;
				while ((*dst = *src++)) dst++;
				while (dst < &timestr[5])

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国三级中文字幕hd久久精品| 国产欧美日韩麻豆91| 亚洲成av人影院| 欧美日韩激情在线| 免费国产亚洲视频| 久久久久久久久久久99999| 国产成人午夜视频| 国产精品二三区| 欧美剧在线免费观看网站| 久久精品国产亚洲aⅴ| 国产欧美日韩精品一区| 色婷婷av一区二区三区软件| 午夜婷婷国产麻豆精品| 26uuu精品一区二区| 不卡大黄网站免费看| 亚洲综合一区二区三区| 欧美不卡一区二区三区| 不卡在线视频中文字幕| 亚洲一区二区三区爽爽爽爽爽| 欧美精品v国产精品v日韩精品| 久久精品99国产精品| 中文字幕一区在线观看| 欧美一区二区三区电影| caoporen国产精品视频| 日精品一区二区| 欧美国产成人精品| 欧美精品少妇一区二区三区 | 亚洲视频中文字幕| 欧美在线观看视频在线| 韩国v欧美v日本v亚洲v| 一区二区三区国产精华| 精品国产伦一区二区三区观看体验| 成人av网站大全| 免费人成网站在线观看欧美高清| 国产精品美女久久久久aⅴ | 色婷婷久久久综合中文字幕 | 处破女av一区二区| 美女视频黄 久久| 一区二区三区日本| 久久亚洲欧美国产精品乐播| 欧美日韩你懂得| 波多野结衣亚洲一区| 狠狠色丁香婷婷综合| 亚洲午夜一区二区| 一区二区中文字幕在线| 精品第一国产综合精品aⅴ| 欧美午夜精品久久久久久超碰| 风间由美性色一区二区三区| 九一久久久久久| 午夜电影网一区| 亚洲国产一区二区a毛片| 国产精品欧美久久久久无广告| 日韩一区二区三区三四区视频在线观看 | 国产成人高清视频| 蜜臀av一区二区| 视频一区二区中文字幕| 亚洲免费电影在线| 国产精品污www在线观看| 精品国产髙清在线看国产毛片| 欧美日韩三级视频| 欧美中文字幕一区二区三区| 91影院在线免费观看| 国产成人8x视频一区二区 | 性做久久久久久久免费看| 国产精品狼人久久影院观看方式| www欧美成人18+| 日韩欧美的一区二区| 91麻豆精品国产91久久久| 欧美日韩另类一区| 欧美在线三级电影| 欧美三级三级三级| 欧美猛男gaygay网站| 欧美日本不卡视频| 91精品黄色片免费大全| 欧美亚洲尤物久久| 欧美日韩免费高清一区色橹橹| 在线视频综合导航| 欧美日韩亚洲综合一区二区三区| 日本道精品一区二区三区 | 日韩在线a电影| 日韩精品成人一区二区在线| 男男成人高潮片免费网站| 日日摸夜夜添夜夜添国产精品| 天天av天天翘天天综合网色鬼国产| 亚洲18女电影在线观看| 免费人成黄页网站在线一区二区| 麻豆成人久久精品二区三区红| 精品一区二区三区免费播放| 国产激情视频一区二区在线观看| 懂色av一区二区三区免费看| 99久久久久久| 欧美美女激情18p| 精品国产髙清在线看国产毛片 | 欧美国产精品中文字幕| 亚洲日韩欧美一区二区在线| 亚洲一区二区在线观看视频| 午夜精品一区二区三区电影天堂| 美女脱光内衣内裤视频久久网站| 国产一二精品视频| av成人动漫在线观看| 欧美日韩第一区日日骚| 精品精品国产高清a毛片牛牛| 国产午夜精品一区二区三区嫩草| 国产精品日韩精品欧美在线| 亚洲黄色av一区| 蜜臀久久99精品久久久久久9 | 免费观看在线色综合| 国产99久久久久久免费看农村| 一本到不卡精品视频在线观看 | 在线精品视频一区二区三四| 5858s免费视频成人| 久久嫩草精品久久久精品一| 国产精品久久久久四虎| 日本亚洲三级在线| 成人免费va视频| 91精品国产欧美一区二区18| 欧美激情在线免费观看| 亚洲成av人综合在线观看| 国产成a人亚洲| 88在线观看91蜜桃国自产| 久久久久久影视| 亚洲国产综合视频在线观看| 国产老肥熟一区二区三区| 欧美日韩一区国产| 欧美激情一区不卡| 日韩国产一区二| 91蜜桃视频在线| 精品国产电影一区二区| 亚洲一区二区三区四区在线观看 | 精品一区二区国语对白| 在线观看免费一区| 国产精品入口麻豆九色| 捆绑紧缚一区二区三区视频 | 成人久久18免费网站麻豆| 日韩午夜在线观看| 亚洲一二三四在线观看| 成人黄色一级视频| 日韩精品专区在线影院重磅| 亚洲成人动漫一区| 色94色欧美sute亚洲线路一久 | 欧美午夜精品久久久久久超碰| 欧美经典一区二区三区| 久久99国产精品麻豆| 欧美精品日韩综合在线| 亚洲精品视频一区| 99久久精品久久久久久清纯| 久久精品视频网| 久久99久久99精品免视看婷婷| 欧美精品久久久久久久久老牛影院| 亚洲欧美一区二区不卡| 99久久精品一区二区| 欧美国产欧美亚州国产日韩mv天天看完整| 日日夜夜免费精品| 欧美日韩一区二区三区不卡| 亚洲最新视频在线播放| eeuss鲁一区二区三区| 中文字幕的久久| 国产不卡视频一区| 国产亚洲一区二区三区在线观看 | av网站免费线看精品| 国产免费久久精品| 国产成人精品网址| 欧美国产禁国产网站cc| 不卡的av电影在线观看| 国产精品丝袜黑色高跟| 国产99一区视频免费| 欧美经典一区二区| 波波电影院一区二区三区| 亚洲国产成人自拍| 成人黄色av网站在线| 中文字幕在线一区免费| 色94色欧美sute亚洲13| 亚洲午夜久久久久久久久电影网 | 久久成人18免费观看| wwwwxxxxx欧美| 风间由美一区二区av101 | 一区二区三区不卡在线观看| 日本久久电影网| 日韩精品91亚洲二区在线观看| 欧美一区二区三区思思人| 久久99精品久久久久久动态图| 国产亚洲欧洲一区高清在线观看| 国产91在线|亚洲| 亚洲色图欧洲色图婷婷| 欧美日韩日日骚| 久久99国产精品尤物| 亚洲国产精品国自产拍av| 色婷婷精品久久二区二区蜜臂av | 欧美日韩中文另类| 蜜桃av噜噜一区| 国产人久久人人人人爽| 91色|porny| 青青青爽久久午夜综合久久午夜| 久久精品亚洲精品国产欧美| 91一区在线观看| 美女被吸乳得到大胸91| 国产精品免费免费| 日本久久一区二区| 国产资源精品在线观看| 亚洲三级在线观看|