SAI_IO class for using CODEC (MW8994) as analog input and output. このライブラリを登録した際のプログラム:「F746_AudioIO_Demo」
Dependents: F746_SD_WavPlayer F746_SD_GraphicEqualizer_ren0620 Joerg_turbo_ede CW_Decoder_using_FFT_on_DiscoF746NG ... more
SAI_InOut.hpp@4:2170289dfe94, 2016-06-15 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Wed Jun 15 12:53:20 2016 +0000
- Revision:
- 4:2170289dfe94
- Parent:
- 3:3bfdd8be834f
- Child:
- 5:20cc265d7aec
5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:eade5d3ae0eb | 1 | //----------------------------------------------------------- |
MikamiUitOpen | 0:eade5d3ae0eb | 2 | // SiaIO class (Header) |
MikamiUitOpen | 4:2170289dfe94 | 3 | // 2016/06/16, Copyright (c) 2016 MIKAMI, Naoki |
MikamiUitOpen | 0:eade5d3ae0eb | 4 | //----------------------------------------------------------- |
MikamiUitOpen | 0:eade5d3ae0eb | 5 | |
MikamiUitOpen | 0:eade5d3ae0eb | 6 | #ifndef F746_SAI_IO_HPP |
MikamiUitOpen | 0:eade5d3ae0eb | 7 | #define F746_SAI_IO_HPP |
MikamiUitOpen | 0:eade5d3ae0eb | 8 | |
MikamiUitOpen | 0:eade5d3ae0eb | 9 | #include "mbed.h" |
MikamiUitOpen | 0:eade5d3ae0eb | 10 | #include "stm32746g_discovery_audio.h" |
MikamiUitOpen | 0:eade5d3ae0eb | 11 | #include "BSP_AudioIn_Overwrite.hpp" |
MikamiUitOpen | 0:eade5d3ae0eb | 12 | #include "BSP_AudioOut_Overwrite.hpp" |
MikamiUitOpen | 0:eade5d3ae0eb | 13 | |
MikamiUitOpen | 0:eade5d3ae0eb | 14 | namespace Mikami |
MikamiUitOpen | 0:eade5d3ae0eb | 15 | { |
MikamiUitOpen | 0:eade5d3ae0eb | 16 | class SaiIO |
MikamiUitOpen | 0:eade5d3ae0eb | 17 | { |
MikamiUitOpen | 0:eade5d3ae0eb | 18 | public: |
MikamiUitOpen | 0:eade5d3ae0eb | 19 | enum InOutBoth { INPUT, // input only |
MikamiUitOpen | 0:eade5d3ae0eb | 20 | OUTPUT, // output only |
MikamiUitOpen | 0:eade5d3ae0eb | 21 | BOTH }; // input and output |
MikamiUitOpen | 0:eade5d3ae0eb | 22 | // Constructor |
MikamiUitOpen | 0:eade5d3ae0eb | 23 | // inputDevice: INPUT_DEVICE_DIGITAL_MICROPHONE_2 or |
MikamiUitOpen | 0:eade5d3ae0eb | 24 | // INPUT_DEVICE_INPUT_LINE_1 |
MikamiUitOpen | 0:eade5d3ae0eb | 25 | // inputDevice == 0 : not use input device |
MikamiUitOpen | 0:eade5d3ae0eb | 26 | SaiIO(InOutBoth ioBoth, int size, int fs, |
MikamiUitOpen | 0:eade5d3ae0eb | 27 | uint16_t inputDevice = 0); |
MikamiUitOpen | 0:eade5d3ae0eb | 28 | ~SaiIO(); |
MikamiUitOpen | 0:eade5d3ae0eb | 29 | |
MikamiUitOpen | 0:eade5d3ae0eb | 30 | int32_t GetLength() { return nData_; } |
MikamiUitOpen | 0:eade5d3ae0eb | 31 | |
MikamiUitOpen | 2:1aef7b703249 | 32 | void RecordIn(); |
MikamiUitOpen | 0:eade5d3ae0eb | 33 | // sw = 0: DIGITAL_MICROPHONE_2 |
MikamiUitOpen | 0:eade5d3ae0eb | 34 | // 1: LINE_1 |
MikamiUitOpen | 0:eade5d3ae0eb | 35 | void SwitchInputDevice(int sw); |
MikamiUitOpen | 0:eade5d3ae0eb | 36 | |
MikamiUitOpen | 0:eade5d3ae0eb | 37 | bool IsCaptured(); |
MikamiUitOpen | 0:eade5d3ae0eb | 38 | void ResetCaptured() { captured_ = false; } |
MikamiUitOpen | 0:eade5d3ae0eb | 39 | void Input(int16_t &xL, int16_t &xR); |
MikamiUitOpen | 0:eade5d3ae0eb | 40 | |
MikamiUitOpen | 2:1aef7b703249 | 41 | void StopIn() { BSP_AUDIO_IN_Stop(CODEC_PDWN_SW); } |
MikamiUitOpen | 2:1aef7b703249 | 42 | void PauseIn() { BSP_AUDIO_IN_Pause(); } |
MikamiUitOpen | 2:1aef7b703249 | 43 | void ResumeIn() { BSP_AUDIO_IN_Resume(); } |
MikamiUitOpen | 2:1aef7b703249 | 44 | |
MikamiUitOpen | 1:48ed86c8430a | 45 | void PlayOut(); |
MikamiUitOpen | 0:eade5d3ae0eb | 46 | bool IsXferred(); |
MikamiUitOpen | 0:eade5d3ae0eb | 47 | void ResetXferred() { xferred_ = false; } |
MikamiUitOpen | 0:eade5d3ae0eb | 48 | void Output(int16_t xL, int16_t xR); |
MikamiUitOpen | 2:1aef7b703249 | 49 | |
MikamiUitOpen | 2:1aef7b703249 | 50 | void StopOut() { BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); } |
MikamiUitOpen | 2:1aef7b703249 | 51 | void PauseOut() { BSP_AUDIO_OUT_Pause(); } |
MikamiUitOpen | 2:1aef7b703249 | 52 | void ResumeOut() { BSP_AUDIO_OUT_Resume(); } |
MikamiUitOpen | 0:eade5d3ae0eb | 53 | |
MikamiUitOpen | 0:eade5d3ae0eb | 54 | // IF you use both input and output of SAI, |
MikamiUitOpen | 0:eade5d3ae0eb | 55 | // you can use following two functions. |
MikamiUitOpen | 0:eade5d3ae0eb | 56 | bool IsCompleted() |
MikamiUitOpen | 0:eade5d3ae0eb | 57 | { return IsCaptured() && IsXferred(); } |
MikamiUitOpen | 0:eade5d3ae0eb | 58 | void Reset() |
MikamiUitOpen | 0:eade5d3ae0eb | 59 | { captured_ = false; xferred_ = false; } |
MikamiUitOpen | 0:eade5d3ae0eb | 60 | |
MikamiUitOpen | 0:eade5d3ae0eb | 61 | // Following two member functions are called from |
MikamiUitOpen | 0:eade5d3ae0eb | 62 | // callback functions in "BSP_AudioIn_Overwrite.cpp" |
MikamiUitOpen | 0:eade5d3ae0eb | 63 | static void Captured1st() { Captured(0); } |
MikamiUitOpen | 0:eade5d3ae0eb | 64 | static void Captured2nd() { Captured(bufferSize_/2); } |
MikamiUitOpen | 0:eade5d3ae0eb | 65 | |
MikamiUitOpen | 0:eade5d3ae0eb | 66 | // Following two member functions are called from |
MikamiUitOpen | 0:eade5d3ae0eb | 67 | // callback functions in "BSP_AudioOut_Overwrite.cpp" |
MikamiUitOpen | 0:eade5d3ae0eb | 68 | static void FillBuffer1st() { FillBuffer(0); } |
MikamiUitOpen | 0:eade5d3ae0eb | 69 | static void FillBuffer2nd() { FillBuffer(bufferSize_/2); } |
MikamiUitOpen | 0:eade5d3ae0eb | 70 | |
MikamiUitOpen | 0:eade5d3ae0eb | 71 | // Called form the functions in "BSP_AudioIn_Overwrite.cpp" |
MikamiUitOpen | 0:eade5d3ae0eb | 72 | // and "BSP_AudioOut_Overwrite.cpp" |
MikamiUitOpen | 0:eade5d3ae0eb | 73 | static void ErrorTrap(); |
MikamiUitOpen | 0:eade5d3ae0eb | 74 | |
MikamiUitOpen | 0:eade5d3ae0eb | 75 | private: |
MikamiUitOpen | 0:eade5d3ae0eb | 76 | const int FS_; |
MikamiUitOpen | 0:eade5d3ae0eb | 77 | const InOutBoth IOBOTH_; |
MikamiUitOpen | 0:eade5d3ae0eb | 78 | |
MikamiUitOpen | 0:eade5d3ae0eb | 79 | int16_t* inBuffer_; |
MikamiUitOpen | 0:eade5d3ae0eb | 80 | static int16_t* outBuffer_; |
MikamiUitOpen | 0:eade5d3ae0eb | 81 | static int16_t* tmp_; |
MikamiUitOpen | 0:eade5d3ae0eb | 82 | __IO int32_t inIndex_; |
MikamiUitOpen | 0:eade5d3ae0eb | 83 | __IO int32_t tmpIndex_; |
MikamiUitOpen | 0:eade5d3ae0eb | 84 | |
MikamiUitOpen | 0:eade5d3ae0eb | 85 | static int32_t nData_; |
MikamiUitOpen | 0:eade5d3ae0eb | 86 | static int32_t bufferSize_; |
MikamiUitOpen | 0:eade5d3ae0eb | 87 | static __IO bool captured_; |
MikamiUitOpen | 0:eade5d3ae0eb | 88 | static __IO int32_t inOffset_; |
MikamiUitOpen | 0:eade5d3ae0eb | 89 | static __IO bool xferred_; |
MikamiUitOpen | 0:eade5d3ae0eb | 90 | |
MikamiUitOpen | 0:eade5d3ae0eb | 91 | |
MikamiUitOpen | 0:eade5d3ae0eb | 92 | void InitCodec(uint16_t inputDevice); |
MikamiUitOpen | 3:3bfdd8be834f | 93 | void InitInput(uint16_t inputDevice); |
MikamiUitOpen | 3:3bfdd8be834f | 94 | void SetInput(); |
MikamiUitOpen | 3:3bfdd8be834f | 95 | void SetOutput(); |
MikamiUitOpen | 0:eade5d3ae0eb | 96 | void ClearBuffer(); |
MikamiUitOpen | 0:eade5d3ae0eb | 97 | |
MikamiUitOpen | 0:eade5d3ae0eb | 98 | static void Captured(int32_t offset); |
MikamiUitOpen | 0:eade5d3ae0eb | 99 | static void FillBuffer(uint32_t offset); |
MikamiUitOpen | 0:eade5d3ae0eb | 100 | }; |
MikamiUitOpen | 0:eade5d3ae0eb | 101 | } |
MikamiUitOpen | 0:eade5d3ae0eb | 102 | #endif // F746_SAI_IO_HPP |