Il y avait des problèmes dans la libraire...
Dependencies: ST_FREQUENCY_DIVIDER ST_I2S USBDEVICE
Fork of X_NUCLEO_CCA02M1 by
Diff: BSP/XNucleoCCA02M1.h
- Revision:
- 2:9f389fd8fb2e
- Child:
- 16:4ab2eac7be21
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BSP/XNucleoCCA02M1.h Fri Apr 21 10:33:08 2017 +0200 @@ -0,0 +1,314 @@ +/** + ****************************************************************************** + * @file XNucleoCCA02M1.h + * @author AST / Software Platforms and Cloud + * @version V1.0 + * @date October 17th, 2016 + * @brief Class header file for the X_NUCLEO_CCA02M1 expansion board. + ****************************************************************************** + * @attention + * + * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + + +/* Generated with STM32CubeTOO -----------------------------------------------*/ + + +/* Define to prevent recursive inclusion -------------------------------------*/ + +#ifndef __X_NUCLEO_CCA02M1_CLASS_H +#define __X_NUCLEO_CCA02M1_CLASS_H + + +/* Includes ------------------------------------------------------------------*/ + +/* ACTION 1 ------------------------------------------------------------------* + * Include here platform specific header files. * + *----------------------------------------------------------------------------*/ +#include "mbed.h" +#include "I2S.h" +#include "FrequencyDivider.h" +#include "USBAudio.h" +/* ACTION 2 ------------------------------------------------------------------* + * Include here expansion board configuration's header files. * + *----------------------------------------------------------------------------*/ +/* ACTION 3 ------------------------------------------------------------------* + * Include here expansion board's components' header files. * + * * + * Example: * + * #include "COMPONENT_1.h" * + * #include "COMPONENT_2.h" * + *----------------------------------------------------------------------------*/ +#include "component_def.h" +#include "PDM2PCMAudio.h" + + +/* Definitions ---------------------------------------------------------------*/ + +/* Maximum number of mounted "X-NUCLEO-CCA02M1" Expansion Boards. */ +#define EXPBRD_MOUNTED_NR_MAX 1 + +/* Bytes per sample. */ +#define BYTES_PER_SAMPLE 2 + +/* Default paramters. */ +#define DEFAULT_FREQUENCY 32000 +#define DEFAULT_CHANNELS 2 + +/* PCM buffer size and thresholds in ms. */ +#define PCM_BUFFER_TH_LOW_ms 1 +#define PCM_BUFFER_TH_MED_ms 4 +#define PCM_BUFFER_TH_HIG_ms 7 +#define PCM_BUFFER_SIZE_ms 9 + + +/* Types ---------------------------------------------------------------------*/ + +/* Audio processor initialization structure. */ +typedef struct +{ + uint32_t frequency; + uint8_t channels; +} XNucleoCCA02M1_init_t; + + +/* Classes -------------------------------------------------------------------*/ + +/** Class representing a X_NUCLEO_CCA02M1 board. + */ +class XNucleoCCA02M1 +{ +public: + + /*** Constructor, Destructor, and Initialization Methods ***/ + + /** + * @brief Constructor. + * @param dpin pin name of the data input/output pin of the I2S device. + * @param clk pin name of the clock pin of the I2S device. + * @param wsel pin name of the word select output pin of the I2S device (might be NC for PDM sources). + * @param fdpin pin name of the data input pin of the I2S device (for full-duplex operations, default = NC). + * @param mck pin name of the master clock output pin of the I2S device (additional pin when needed for some external audio devices, default = NC) + */ + XNucleoCCA02M1(PinName dpin, PinName clk, PinName wsel = NC, PinName fdpin = NC, PinName mck = NC) : + dev_i2s(dpin, clk, wsel, fdpin, mck), + _usb_enabled(false), + _volume(PDM2PCM_NOGAIN_VOLUME), + _decimation_factor(PDM2PCM_DECIMATION_FACTOR), + _frequency(DEFAULT_FREQUENCY), + _channels(DEFAULT_CHANNELS), + _callback_attached(false) +#ifdef X_NUCLEO_CCA02M1_DEBUG + , _i2s_signal(D13), + _usb_signal(D12), + _buffer_overrun(D11), + _buffer_underrun(D10) +#endif + { + /* Checking stackability. */ + if (!(_number_of_boards < EXPBRD_MOUNTED_NR_MAX)) + error("Instantiation of the X_NUCLEO_CCA02M1 expansion board failed: it can be stacked up to %d times.\r\n", EXPBRD_MOUNTED_NR_MAX); + _XNucleoCCA02M1_Id = _number_of_boards++; + } + + /** + * @brief Destructor. + */ + virtual ~XNucleoCCA02M1(void) {} + + + /*** Public Component Related Methods ***/ + + /** + * @brief Initializing the X_NUCLEO_CCA02M1 board. + * @param init Pointer to device specific initalization structure. + * @retval "0" in case of success, an error code otherwise. + */ + virtual status_t init(void *init = NULL); + + /** + * @brief Enabling transmission via USB. + * @param None. + * @retval "0" in case of success, an error code otherwise. + */ + virtual status_t enable_usb(void); + + /** + * @brief Disabling transmission via USB. + * @param None. + * @retval "0" in case of success, an error code otherwise. + */ + virtual status_t disable_usb(void); + + /** + * @brief Start recording audio. + * @param None. + * @retval "0" in case of success, an error code otherwise. + */ + virtual status_t record(void); + + /** + * @brief Attach a user-defined callback that will be executed whenever PCM + * data are ready, i.e. once each millisecond. + * The provided PCM buffer will be filled by the microphones. + * @param fptr Callback to attach. + * @retval None. + */ + void attach(void (*fptr) (int16_t *PCM_buffer, uint16_t PCM_buffer_bytes)); + + /** + * @brief Attach a user-defined non-static callback that will be executed + * whenever PCM data are ready, i.e. once each millisecond. + * The provided PCM buffer will be filled by the microphones. + * @param tptr Pointer to an object. + * @param mptr Pointer to an object's callback. + * @retval None. + */ + template<typename T> + void attach(T *tptr, void (T::*mptr) (int16_t *PCM_buffer, uint16_t PCM_buffer_bytes)); + + + /*** Other Public Expansion Board Related Methods ***/ + + /*** Public Expansion Board Related Attributes ***/ + + /* ACTION 4 --------------------------------------------------------------* + * Declare here a public attribute for each expansion board's component. * + * You will have to call these attributes' public methods within your * + * main program. * + * * + * Example: * + * COMPONENT_1 *component_1; * + * COMPONENT_2 *component_2; * + *------------------------------------------------------------------------*/ + + +protected: + + /*** Protected Expansion Board Related Related Methods ***/ + + /* ACTION 5 --------------------------------------------------------------* + * Declare here a protected initialization method for each expansion * + * board's component. * + * * + * Example: * + * bool init_COMPONENT_1(void); * + * bool init_COMPONENT_2(void); * + *------------------------------------------------------------------------*/ + /** + * @brief I2S callback which is executed whenever PCM data are ready, i.e. once + * each millisecond. + * @param narg Narg flag. + * @retval None. + */ + void i2s_callback(int narg); + + /** + * @brief Sending PCM data via USB. + * @param None. + * @retval None. + */ + void usb_handler(void); + + + /*** Expansion Board's Instance Variables ***/ + + /* ACTION 6 --------------------------------------------------------------* + * Declare here the component's static and non-static data, one variable * + * per line. * + * * + * Example: * + * int instance_id; * + * static int number_of_instances; * + *------------------------------------------------------------------------*/ +public: + + /* I2S Audio Device (exclusive). */ + I2S dev_i2s; + + +protected: + + /* USB Audio Device. */ + USBAudio *_usb_audio; + bool _usb_enabled; + + /* PDM to PCM conversion library. */ + PDM2PCMAudio *_pdm2pcm; + + /* PDM to PCM conversion parameters. */ + uint32_t _volume; + uint32_t _decimation_factor; + + /* Microphone parameters. */ + uint32_t _frequency; + uint32_t _channels; + + /* Size of the buffers to store audio data. */ + uint32_t _PDM_samples_one_ms; + uint32_t _PDM_samples_two_ms; + uint32_t _PCM_samples_one_ms; + + /* Input and output audio buffers. */ + uint16_t *_PDM_buffer_two_ms; /* Input double-buffered PDM audio data, from microphones. */ + int16_t *_PCM_buffer_n_ms; /* Output n-ms-buffered PCM audio data, to USB. */ + + /* Support audio buffers for processing data. */ + uint16_t *_PDM_buffer_one_ms; + int16_t *_USB_PCM_buffer_one_ms; + int16_t *_USER_PCM_buffer_one_ms; + + /* Indexes of the output PCM buffer. */ + static uint32_t _PCM_buffer_read_index; + static uint32_t _PCM_buffer_write_index; + + /* User-defined PCM-data-ready callback. */ + Callback<void(int16_t *PCM_buffer, uint16_t PCM_buffer_bytes)> _callback; + bool _callback_attached; + + /* Accessing shared areas: the PCM buffer. */ + static SingletonPtr<PlatformMutex> _mutex; + + /* Expansion board identifier. */ + uint8_t _XNucleoCCA02M1_Id; + + /* Number of expansion boards. */ + static uint8_t _number_of_boards; + +#ifdef X_NUCLEO_CCA02M1_DEBUG + /* Signals for debugging purposes. */ + DigitalOut _i2s_signal; + DigitalOut _usb_signal; + DigitalOut _buffer_overrun; + DigitalOut _buffer_underrun; +#endif +}; + +#endif /* __X_NUCLEO_CCA02M1_CLASS_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/