SPKT
Dependencies: SDFileSystem_Warning_Fixed
Dependents: DISCO-F746_WAV_PLAYER WAV
Diff: SD_PlayerSkeleton.cpp
- Revision:
- 5:7c8f0fc9dfb6
- Parent:
- 4:d730d024ac32
- Child:
- 6:6fe2b62f259d
--- a/SD_PlayerSkeleton.cpp Mon Nov 07 00:54:55 2016 +0000 +++ b/SD_PlayerSkeleton.cpp Tue Nov 08 05:03:43 2016 +0000 @@ -1,14 +1,14 @@ //-------------------------------------------------------------- // SD プレーヤー用抽象基底クラス // -// 2016/11/07, Copyright (c) 2016 MIKAMI, Naoki +// 2016/11/08, Copyright (c) 2016 MIKAMI, Naoki //-------------------------------------------------------------- #include "SD_PlayerSkeleton.hpp" namespace Mikami { - SD_PlayerSkeleton::SD_PlayerSkeleton(string str, int fs, bool reset) + SD_PlayerSkeleton::SD_PlayerSkeleton(string str, int fs, bool resetButton) : FRAME_SIZE_(2048), sn_(FRAME_SIZE_), mySai_(SaiIO::OUTPUT, FRAME_SIZE_, fs), sdReader_(FRAME_SIZE_), @@ -16,64 +16,62 @@ selector_(0, 22, 256, 37, sdReader_), menu_(BG_LEFT_, 2, BG_WIDTH_, BG_HEIGHT_, 5, (string[]){"OPEN", "PLAY", "PAUSE", "RESUME", "STOP"}, - 0, 2, 1), - resetActive_(reset) + 0, 2, 1) { if (!selector_.CreateTable()) BlinkLabel errLabel(240, 100, "SD CARD ERROR", Label::CENTER); menu_.InactivateAll(); menu_.Activate(0); - if (resetActive_) reset_ = new ResetButton(); + if (resetButton) reset_ = new ResetButton(); + else reset_ = NULL; } void SD_PlayerSkeleton::Execute() { - bool playOk = false; + bool playAfterPause = false; + int32_t loopCount; + + while (!menu_.Touched(0)) // OPEN がタッチされるまで待つ + CheckCtrl(); + SelectFile(); bool whileFirst = true; - int32_t loopCount; while (true) { - if (!playOk) + if (!playAfterPause) // PAUSE 後の PLAY ではない場合 { - if (whileFirst) + if (!whileFirst) // while ループで初回の処理ではない場合 { - whileFirst = false; - while (!menu_.Touched(0)) // OPEN がタッチされるまで待つ - CheckCtrl(); - SelectFile(); - } - else - { - menu_.Activate(1); // PLAY 有効 + menu_.Activate(1); // PLAY ボタン有効 int touch10; while (!menu_.GetTouchedNumber(touch10)) CheckCtrl(); if (touch10 == 0) SelectFile(); } + whileFirst = false; loopCount = SD_Open(); - while (!menu_.Touched(1)) // PLAY がタッチされるまで待つ + while (!menu_.Touched(1)) // PLAY がタッチされるまで待つ CheckCtrl(); } - else + else // PAUSE 後の PLAY の場合 loopCount = SD_Open(); selector_.Erase(0, 0, BG_LEFT_-4, 272); title_.Draw(); - Display(); // アプリ固有の表示処理 - if (resetActive_) reset_->Draw(); + Display(); // アプリ固有の表示処理(仮想関数) + if (reset_ != NULL) reset_->Draw(); - menu_.Inactivate(0); // OPEN 無効 - menu_.Activate(2); // PAUSE 有効 - menu_.Activate(4); // STOP 有効 + menu_.Inactivate(0); // OPEN ボタン無効 + menu_.Activate(2); // PAUSE ボタン有効 + menu_.Activate(4); // STOP ボタン有効 - playOk = false; + playAfterPause = false; bool stopOk = false; - Clear(); // アプリ固有のクリア処理 + Clear(); // アプリ固有のクリア処理(仮想関数) mySai_.PlayOut(); // Play 開始 @@ -82,10 +80,10 @@ int touch42 = -1; menu_.GetTouchedNumber(touch42); if (touch42 == 4) break; // STOP - if (touch42 == 2) // PAUSE + if (touch42 == 2) // PAUSE ボタンがタッチされた場合の処理 { - menu_.Inactivate(2); // PAUSE 無効 - menu_.Activate(3); // RESUME 有効 + menu_.Inactivate(2); // PAUSE ボタン無効 + menu_.Activate(3); // RESUME ボタン有効 mySai_.PauseOut(); // PLAY か RESUME か STOP がタッチされるまで待つ @@ -94,28 +92,30 @@ CheckCtrl(); switch (touch134) { - case 1: playOk = true; // 最初から PLAY + case 1: playAfterPause = true; // 最初から PLAY break; - case 3: mySai_.ResumeOut(); // PAUSE したところから PLAY 再開 - menu_.Activate(2); + case 3: mySai_.ResumeOut(); // PAUSE したところから + menu_.Activate(2); // PLAY 再開 menu_.Inactivate(3); menu_.TouchedColor(1); break; - case 4: stopOk = true; // STOP + case 4: stopOk = true; // STOP break; } } - if (playOk || stopOk) break; + if (playAfterPause || stopOk) break; CheckCtrl(); - // 1フレーム分の信号処理の実行 + // アプリ固有の1フレーム分の信号処理(純粋仮想関数) SignalProcessing(); } mySai_.StopOut(); - menu_.Activate(0); // OPEN 有効 - if (!playOk) menu_.Activate(1); // PLAY 有効 - for (int n=2; n<5; n++) // その他は無効 + menu_.Activate(0); // OPEN ボタン有効 + if (!playAfterPause) + menu_.Activate(1); // PLAY ボタン有効 + for (int n=2; n<5; n++) // その他のボタンは無効 menu_.Inactivate(n); + sdReader_.Close(); // SD のファイルのクローズ } } @@ -143,21 +143,19 @@ // selectedName: 選択されたファイル名 void SD_PlayerSkeleton::SelectFile() { - selector_.DisplayFileList(); + selector_.DisplayFileList(); title_.Draw("Select file"); + menu_.Inactivate(1); // PLAY ボタン無効 do - { if (selector_.Select(fileName_)) - menu_.Activate(1); // PLAY 有効 - wait_ms(200); - } while (!menu_.Touched(1)); // PLAY がタッチされるまで繰り返す + menu_.Activate(1); // PLAY ボタン有効 + while (!menu_.Touched(1)); // PLAY ボタンがタッチされるまで繰り返す } // パネル操作のチェック void SD_PlayerSkeleton::CheckCtrl() { - if (resetActive_) reset_->Do(); - Modefy(); + if (reset_ != NULL) reset_->Do(); + Modefy(); // アプリ固有のパラメータ変更(仮想関数) } } -