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 Jan 23 13:35:07 2017 +0000
Revision:
9:25a9655d6a0e
Parent:
5:20cc265d7aec
Child:
10:eb439bbba0f2
10

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:eade5d3ae0eb 1 //-----------------------------------------------------------
MikamiUitOpen 9:25a9655d6a0e 2 // SaiIO class (Header)
MikamiUitOpen 9:25a9655d6a0e 3 // 2017/01/23, Copyright (c) 2017 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 5:20cc265d7aec 13 #include "Array.hpp"
MikamiUitOpen 0:eade5d3ae0eb 14
MikamiUitOpen 0:eade5d3ae0eb 15 namespace Mikami
MikamiUitOpen 0:eade5d3ae0eb 16 {
MikamiUitOpen 0:eade5d3ae0eb 17 class SaiIO
MikamiUitOpen 0:eade5d3ae0eb 18 {
MikamiUitOpen 0:eade5d3ae0eb 19 public:
MikamiUitOpen 0:eade5d3ae0eb 20 enum InOutBoth { INPUT, // input only
MikamiUitOpen 0:eade5d3ae0eb 21 OUTPUT, // output only
MikamiUitOpen 0:eade5d3ae0eb 22 BOTH }; // input and output
MikamiUitOpen 0:eade5d3ae0eb 23 // Constructor
MikamiUitOpen 0:eade5d3ae0eb 24 // inputDevice: INPUT_DEVICE_DIGITAL_MICROPHONE_2 or
MikamiUitOpen 0:eade5d3ae0eb 25 // INPUT_DEVICE_INPUT_LINE_1
MikamiUitOpen 0:eade5d3ae0eb 26 // inputDevice == 0 : not use input device
MikamiUitOpen 0:eade5d3ae0eb 27 SaiIO(InOutBoth ioBoth, int size, int fs,
MikamiUitOpen 0:eade5d3ae0eb 28 uint16_t inputDevice = 0);
MikamiUitOpen 5:20cc265d7aec 29 virtual ~SaiIO() {}
MikamiUitOpen 0:eade5d3ae0eb 30
MikamiUitOpen 0:eade5d3ae0eb 31 int32_t GetLength() { return nData_; }
MikamiUitOpen 0:eade5d3ae0eb 32
MikamiUitOpen 2:1aef7b703249 33 void RecordIn();
MikamiUitOpen 0:eade5d3ae0eb 34 // sw = 0: DIGITAL_MICROPHONE_2
MikamiUitOpen 0:eade5d3ae0eb 35 // 1: LINE_1
MikamiUitOpen 0:eade5d3ae0eb 36 void SwitchInputDevice(int sw);
MikamiUitOpen 0:eade5d3ae0eb 37
MikamiUitOpen 0:eade5d3ae0eb 38 bool IsCaptured();
MikamiUitOpen 5:20cc265d7aec 39 // Input using SAI
MikamiUitOpen 5:20cc265d7aec 40 void Input(int16_t &xL, int16_t &xR)
MikamiUitOpen 5:20cc265d7aec 41 { (this->*InputFp)(xL, xR); }
MikamiUitOpen 0:eade5d3ae0eb 42
MikamiUitOpen 2:1aef7b703249 43 void StopIn() { BSP_AUDIO_IN_Stop(CODEC_PDWN_SW); }
MikamiUitOpen 2:1aef7b703249 44 void PauseIn() { BSP_AUDIO_IN_Pause(); }
MikamiUitOpen 2:1aef7b703249 45 void ResumeIn() { BSP_AUDIO_IN_Resume(); }
MikamiUitOpen 2:1aef7b703249 46
MikamiUitOpen 1:48ed86c8430a 47 void PlayOut();
MikamiUitOpen 0:eade5d3ae0eb 48 bool IsXferred();
MikamiUitOpen 5:20cc265d7aec 49 // Output using SAI
MikamiUitOpen 0:eade5d3ae0eb 50 void Output(int16_t xL, int16_t xR);
MikamiUitOpen 2:1aef7b703249 51
MikamiUitOpen 2:1aef7b703249 52 void StopOut() { BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); }
MikamiUitOpen 2:1aef7b703249 53 void PauseOut() { BSP_AUDIO_OUT_Pause(); }
MikamiUitOpen 2:1aef7b703249 54 void ResumeOut() { BSP_AUDIO_OUT_Resume(); }
MikamiUitOpen 0:eade5d3ae0eb 55
MikamiUitOpen 0:eade5d3ae0eb 56 // IF you use both input and output of SAI,
MikamiUitOpen 0:eade5d3ae0eb 57 // you can use following two functions.
MikamiUitOpen 0:eade5d3ae0eb 58 bool IsCompleted()
MikamiUitOpen 0:eade5d3ae0eb 59 { return IsCaptured() && IsXferred(); }
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 5:20cc265d7aec 79 Array<int16_t> inBuffer_;
MikamiUitOpen 5:20cc265d7aec 80 static Array<int16_t> outBuffer_;
MikamiUitOpen 5:20cc265d7aec 81 static Array<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 void InitCodec(uint16_t inputDevice);
MikamiUitOpen 3:3bfdd8be834f 92 void InitInput(uint16_t inputDevice);
MikamiUitOpen 3:3bfdd8be834f 93 void SetInput();
MikamiUitOpen 3:3bfdd8be834f 94 void SetOutput();
MikamiUitOpen 0:eade5d3ae0eb 95 void ClearBuffer();
MikamiUitOpen 0:eade5d3ae0eb 96
MikamiUitOpen 5:20cc265d7aec 97 // This function pointer is assigned by
MikamiUitOpen 5:20cc265d7aec 98 // InputNormal() or InputReversal()
MikamiUitOpen 5:20cc265d7aec 99 void (SaiIO::*InputFp)(int16_t &, int16_t &);
MikamiUitOpen 5:20cc265d7aec 100 // For line input
MikamiUitOpen 5:20cc265d7aec 101 void InputNormal(int16_t &xL, int16_t &xR);
MikamiUitOpen 5:20cc265d7aec 102 // For MEMS microphone input
MikamiUitOpen 5:20cc265d7aec 103 void InputReversal(int16_t &xL, int16_t &xR);
MikamiUitOpen 5:20cc265d7aec 104
MikamiUitOpen 0:eade5d3ae0eb 105 static void Captured(int32_t offset);
MikamiUitOpen 0:eade5d3ae0eb 106 static void FillBuffer(uint32_t offset);
MikamiUitOpen 0:eade5d3ae0eb 107 };
MikamiUitOpen 0:eade5d3ae0eb 108 }
MikamiUitOpen 0:eade5d3ae0eb 109 #endif // F746_SAI_IO_HPP