/*******************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only
* intended for use with Renesas products. No other uses are authorized. This
* software is owned by Renesas Electronics Corporation and is protected under
* all applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software
* and to discontinue the availability of this software. By using this software,
* you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
* Copyright (C) 2014 Renesas Electronics Corporation. All rights reserved.
*******************************************************************************/
/******************************************************************************
* System Name : RZ/A1L R7S721021 FLAC Playback Sample Program
* File Name   : readme.txt
* $Rev        : Rev.1.00.00
* $Date       : Jul 2,2014
******************************************************************************/
/**********************************************************************************
*
* History     : Jul 2,2014 Rev.1.00.00     新規作成
***********************************************************************************/

1. はじめに

  本サンプルコードは、RZ/A1Lグループ R7S721021を搭載した
  CPUボード (CEV-RZ/A1L)にて動作確認しています。
  お客様のソフトウエア開発時に技術参考資料としてご利用ください。

  ****************************** ご 注 意 ******************************
   本サンプルコードはすべて参考資料であり、その動作を保証するもの
   ではありません。実際のシステムに組み込む場合はシステム全体で
   十分に評価し、お客様の責任において適用可否を判断してください。
   本サンプルソフトでは、再生ボリュームの調整は行っていません。
   音源のボリュームによっては、イヤホン、または、スピーカから非常に
   大きな音声が出力する可能性がありますので十分にご注意ください。
  ****************************** ご 注 意 ******************************


2. ディレクトリ内容
  本サンプルコードで使用するファイルは、RZ/A1Hディレクトリおよびファイル構成の
  説明ファイル(filecomposition.txt)に示しています。


3. 動作環境
  サンプルコードの動作環境を以下に示します。

    CPU          : RZ/A1L
    評価ボード   : CEV-RZ/A1L(Computex)
    コンパイラ   : GNUARM-RZ Ver14.01(KPIT)
    統合開発環境 : emIDE Ver.2.16(SEGGER)
    エミュレータ : JLinkARM_V484(SEGGER)


4. サンプルコードの内容

  本サンプルコードは、メイン・スレッド、デコード・スレッド、音声出力・スレッドで
  構成しています。
  以下に、各スレッドの処理概要を説明します。
  
  メイン・スレッドは、PCからのコマンドを受信し、デコード・スレッドへ再生指示を行います。
  デコード・スレッドでは、メイン・スレッドからの指示により、FLACファイルのデコードを
  行い、PCMデータをサンプリングレート変換した後、PCM出力バッファに格納します。
  音声出力スレッドでは、PCM出力バッファに格納されているPCMデータをUSBオーディオ・クラス・
  ドライバ経由で出力します。


5. サンプルコードの動作確認条件

  (1) ブートモード
    - ブートモード1（シリアルフラッシュブート）

  (2) 動作周波数
    CPUボード(CEV-RZ/A1L)はRZ/A1Lのクロックモード1で、USB_X1端子に48MHzのクロックが
    入力されています。
    各クロックは以下の周波数となります。
      - CPUクロック(Iφ)     : 384MHz
      - 内部バスクロック(Bφ): 128MHz
      - 周辺クロック1(P1φ)  : 64MHz
      - 周辺クロック0(P0φ)  : 32MHz

  (3) キャッシュの設定
    L1キャッシュの初期設定をMMUを設定することにより行っています。L1キャッシュ
    の有効または無効の領域については、RZ/A1H初期設定例のアプリケーションノートの
    「MMUの設定」を参照してください。

  (4) FLACファイルの拡張子
    本サンプルソフトで再生可能なFlacファイルの拡張子は"fla"です。
    ※大文字と小文字は同一視します。

  (5) サンプリング周波数について
    本サンプルソフトでは、Flacファイルのデコードデータを、SCUXにより
    固定のサンプリング周波数に変換して外部に出力します。初期値では96.0kHzに変換します。
    使用するUSBオーディオ変換アダプタによって、サンプルソフトが出力する周波数を
    変更してください。

    サンプルソフトでは、USBオーディオ変換アダプタをUSBコネクタに接続すると
    以下の示す情報をターミナル出力します。

    "Sampling Rate of your audio device is 0xXXXXXX"
       0xXXXXXXに接続されたUSBオーディオ変換アダプタが対応しているサンプリング周波数
       を表示します。

    "Sampling Rate of this program is 0xYYYYYY"
       0xYYYYYYにサンプルソフトが出力するサンプリング周波数を表示します。

    0xXXXXXXと0xYYYYYYで示す数値が一致しない場合は、以下に示すヘッダファイルに存在する、
    マクロ定義USB_USER_SAMPLE_RATEの値を変更してください。

    [フォルダ]
      ManualPlayデモ :RZ_A1L_RTX_Audio_Sample\ManualPlay\App\src\drivers\usb_host_driver
                      \usb_host_class_driver\haudio\inc\usb_host_user.h
      AutoPlayデモ   :RZ_A1L_RTX_Audio_Sample\AutoPlay\App\src\drivers\usb_host_driver
                      \usb_host_class_driver\haudio\inc\usb_host_user.h

    [変更箇所]
      USB_USER_SAMPLE_RATE                 USB_USER_SAMPLE_96_0KHZ
                                          ~~~~~~~~~~~~~~~~~~~~~~~~~

      STRM_OUT_SAMPLE_RATEへ設定は以下定義から選択してください。
        #define    USB_USER_SAMPLE_44_1KHZ              (0xAC44)
        #define    USB_USER_SAMPLE_48_0KHZ              (0xBB80)
        #define    USB_USER_SAMPLE_96_0KHZ              (0x017700)

  (6) 量子化ビット数について
    本サンプルソフトでは、Flacファイルのデコードデータを、USBオーディオ変換アダプタが
    対応する量子化ビット数に変換して外部に出力します。
    本サンプルソフトは、8, 16, 24ビットの量子化ビット数に変換可能です。


6. サンプルコードの動作手順

  本サンプルコードを動作させる場合は、以下の手順に従ってください。
  なお、emIDEの操作及び、シリアルフラッシュへの書き込みについては別資料を参照してください。

  本サンプルコードのプロジェクトとして、以下に示す2種類のプロジェクトがあります。

  AutoPlay  :ファイルリストを自動で作成して再生するサンプルコード
  ManualPlay:ファイル名を指定して再生するサンプルコード

  6.1.共通操作
    (1) ハードウェアの接続
      CEV-RZ/A1LのUSB_FCNとPCをUSBケーブルで接続してください。
      J-Linkを使用する場合は、J-Linkも接続してください。

    (2) PCソフトの起動
      デバッグ出力の表示とコマンド入力のためターミナルソフトを起動してください。
      シリアルポートの設定内容は、以下の通りです。
        ボーレート : 115200
        データ     : 8bit
        パリティ   : none
        ストップ   : 1bit
        フロー制御 : none

    (3-1) プログラムのダウンロード J-Linkを使用する場合
      emIDEを起動し、実行するプロジェクトを選択します。
      emIDEの[Debug]メニューの[Start/Continue]を選択すると
      プログラムのダウンロードを開始します。

    (3-2) シリアルフラッシュへプログラムを書き込む場合
      シリアルフラッシュへのプログラム書き込み方法をインタフェース2014年10月号を
      参照してください。1回シリアルフラッシュへプログラムを書き込めば
      以降は電源ONのみでプログラムが起動します。

    (3-3) u-bootでプログラムをロードする場合
      以下に示すバイナリファイルのどちらか一方をUSBメモリのルートフォルダに格納します。
      [フォルダ]
        ManualPlayデモ :RZ_A1L_RTX_Audio_Sample\AutoPlay\output\Debug\exe\player.bin
        AutoPlayデモ   :RZ_A1L_RTX_Audio_Sample\ManualPlay\output\Debug\exe\player.bin

      (A) USBメモリをCEV-RZ/A1Lに挿入します。
          ターミナルソフト上に"=>"が表示されていない場合、
          Enterキーを押下して"=>"を表示してください。

      (B) "=> usb start[enter]"
          USB機能を有効にします。

      (C) "=> fatload usb 0 0x20090000 player.bin[enter]"
          USBメモリのバイナリファイルを0x20090000番地にロードします。
          プログラムのメモリ配置を変更した場合、メモリ配置に合わせてロードする番地を
          変更してください。

      (D) "=> usb stop[enter]"
          USB機能を無効にします。

      (E) USBメモリをCEV-RZ/A1Lから抜去します。
      
      (F) "=> go 0x20090000[enter]"
          0x20090000番地にジャンプしてプログラムを実行します。
          プログラムのメモリ配置を変更した場合は、メモリ配置に合わせてジャンプ先番地を
          変更してください。

    (4) USBデバイスの接続〜オーディオデバイスの選択
      プログラムを実行すると
      "Please connect USB Device."をターミナルに表示します。
      この表示を確認してからUSB HUB、USBメモリ、Audio Classデバイスの順に
      CEV-RZ/A1Lに接続します。
      接続に成功すると、ターミナルにUSB接続情報を表示します。
       
      USB接続情報例）
        Attach DEVICE UNKNOWN
        Full-speed device is connected port=0
        Device descriptor fields
        ：
        Interface Class HUB Device
        ：
        HUB CONNECT device address 1 port=0
        Attach DEVICE UNKNOWN
        Full-speed device is connected port=0
        Device descriptor fields
        ：
        MSCD CONNECT device address 2 port=0
        search drive
        SECTOR SIZE is 512
         Side=0 MBR Sector=0 PBR Sector=32
        USB device_address=2 total_drive=1
        Attach DEVICE UNKNOWN
         Full-speed device is connected port=0
            Device descriptor fields
        ：
        Interface Class Audio Device
        ：
        AUDIO CONNECT device address 3 port=0

    (5) USBメモリの選択
      (4)のメッセージに続き、ターミナルに以下のメッセージを表示します。
        "Please select Drive number of USB memory:"

      ここで'0'を入力し、Enterキーを押下します。
      Enterキー押下後、USBメモリのアタッチに成功した場合、以下のメッセージを
      表示します。

        Attach USB drive 0

    (6) USBオーディオデバイスの選択
      続いて以下に示すメッセージを表示しますので、Audio デバイスの
      デバイスアドレスを設定します。
        Please select USB Audio device address:

      Audioデバイスのデバイスアドレスは、(4)で表示したUSB接続情報から参照できます。
      (4)の例であれば、アドレスは'3'となりますので
      '3'を入力し、Enterキーを押下します。

      USB接続情報例）
        "AUDIO CONNECT device address 3 port=0"

    (7) オーディオファイルの再生
      使用するプロジェクトファイルに合わせて6.2または6.3へ進んでください。

    (8) USBデバイスの抜去
      プログラム実行中にUSBデバイスを抜去した場合は、下記のメッセージを表示します。
      再度USBデバイスを接続することで、音楽再生を再開することができます。

        Detach DEVICE HUB 1 port=0
        Detach DEVICE AUDIO 2 port=0

  6.2.ManualPlayデモ
    (1)ファイル一覧の取得
      6.1 (6)の操作完了後、下記のメッセージを表示します。

        "Please select music file"

      ターミナルに"dir"を入力し、ファイル一覧を取得します。
      ファイル一覧はルートフォルダのみとなります。

    (2)ファイルの再生
      dirコマンドで取得したファイル一覧からファイルを指定し
      再生を行います。
      play <filename> [Enter]

      playで再生を開始すると、FLACファイルにTAG情報がある場合は
      TAG情報を表示します。

      Start Play.のメッセージ表示後、音声出力を開始します。
      End Play.のメッセージ表示で、音声出力が終了します。

    (3)再生用コマンド
      ManualPlayモードで実行できるコマンドを下記に示します。
      dir              :ルートフォルダのファイル一覧を表示します。
      play <File name> :File nameで指定したファイルの再生を開始します。
      stop             :ファイルの再生を終了します。

  6.3.AutoPlayデモ
    (1)ファイルリストの作成
      6-1の操作完了後、下記のメッセージを表示し、FLACファイルのファイルリストを作成します。
        Scan USB Memory start

      ファイルリストの作成に成功した場合は、ファイル一覧を表示します。

      ファイル一覧の例）
        Success scan files
        0 : AAAAAA.FLA
        1 : BBBBBB.FLA
        2 : CCCCCC.FLA
        3 : DDDDDD.FLA
        4 : EEEEEE.FLA
        5 : FFFFFF.FLA
        6 : GGGGGG.FLA
        ：
        30 : ABCDEF.FLA
        ：
        ※ファイルリストの作成に失敗した場合は、以下のメッセージを表示しますので
          USBメモリを差し替えてください。

          "No flac file"

    (2) ファイルの再生
      ファイルリストの作成後、ファイルリストの先頭に登録された曲から自動で再生を
      開始します。
      曲再生時のメッセージの表示は、ManualPlayモードと同様です。

    (3) その他操作
      play      :ポーズを解除します
      pause     :ポーズ状態にします。
      trackup   :一つ次の曲を再生します。
                 最終曲で実行した場合は、先頭の曲を再生します。
      trackdown :一つ前の曲に遷移します。
                 先頭曲で実行した場合は、先頭の曲を再生します。


7. 注意事項

  7.1.動作環境
    ご使用のUSB-HUB、USBメモリ、USBオーディオ変換デバイスによっては、正常に接続できない、
    または、FLACファイルを再生中に音切れが発生する可能性があります。

  7.2.FLACファイルのブロック数
    本サンプルソフトでは、4096、4608ブロック数のFLACファイルで動作確認しています。
    その他のブロック数のFLACファイルは、正常に再生できない可能性があります。

  7.3.再生ボリューム
    本サンプルソフトでは、再生ボリュームの調整は行っていません。音源のボリュームによっては、
    イヤホン、または、スピーカから非常に大きな音声が出力する可能性がありますので十分に
    ご注意ください。


以上
