Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SDFileSystem_Warning_Fixed
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(); // アプリ固有のパラメータ変更(仮想関数)
}
}
-