SAI_IO class for using CODEC (MW8994) as analog input and output. このライブラリを登録した際のプログラム:「F746_AudioIO_Demo」

Dependencies:   Array_Matrix

Dependents:   F746_SD_WavPlayer F746_SD_GraphicEqualizer_ren0620 Joerg_turbo_ede CW_Decoder_using_FFT_on_DiscoF746NG ... more

Committer:
MikamiUitOpen
Date:
Mon May 09 13:31:36 2016 +0000
Revision:
2:1aef7b703249
Parent:
1:48ed86c8430a
Child:
3:3bfdd8be834f
3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:eade5d3ae0eb 1 //-----------------------------------------------------------
MikamiUitOpen 0:eade5d3ae0eb 2 // SiaIO class (Header)
MikamiUitOpen 1:48ed86c8430a 3 // 2016/05/09, 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 0:eade5d3ae0eb 93 void InitInput();
MikamiUitOpen 0:eade5d3ae0eb 94 void InitOutput();
MikamiUitOpen 0:eade5d3ae0eb 95 void ClearBuffer();
MikamiUitOpen 0:eade5d3ae0eb 96
MikamiUitOpen 0:eade5d3ae0eb 97 static void Captured(int32_t offset);
MikamiUitOpen 0:eade5d3ae0eb 98 static void FillBuffer(uint32_t offset);
MikamiUitOpen 0:eade5d3ae0eb 99 };
MikamiUitOpen 0:eade5d3ae0eb 100 }
MikamiUitOpen 0:eade5d3ae0eb 101 #endif // F746_SAI_IO_HPP