]> granicus.if.org Git - esp-idf/commitdiff
component/bt: add esp_audio module
authorwangmengyang <wangmengyang@espressif.com>
Wed, 16 Nov 2016 13:58:04 +0000 (21:58 +0800)
committerwangmengyang <wangmengyang@espressif.com>
Wed, 16 Nov 2016 13:58:04 +0000 (21:58 +0800)
25 files changed:
components/esp_audio/Kconfig [new file with mode: 0644]
components/esp_audio/README [new file with mode: 0644]
components/esp_audio/component.mk [new file with mode: 0644]
components/esp_audio/include/EspAudio.h [new file with mode: 0644]
components/esp_audio/include/EspAudioCom.h [new file with mode: 0644]
components/esp_audio/include/EspAudioRecorder.h [new file with mode: 0644]
components/esp_audio/include/audio_log.h [new file with mode: 0644]
components/esp_audio/include/dlna.h [new file with mode: 0644]
components/esp_audio/include/driver/dma.h [new file with mode: 0644]
components/esp_audio/include/driver/gpio_sig_map.h [new file with mode: 0644]
components/esp_audio/include/driver/i2c.h [new file with mode: 0644]
components/esp_audio/include/driver/i2c_soft.h [new file with mode: 0644]
components/esp_audio/include/driver/i2c_struct.h [new file with mode: 0644]
components/esp_audio/include/driver/i2s.h [new file with mode: 0644]
components/esp_audio/include/driver/ledc_pwm.h [new file with mode: 0644]
components/esp_audio/include/driver/ledc_pwm_struct.h [new file with mode: 0644]
components/esp_audio/include/driver/pcnt.h [new file with mode: 0644]
components/esp_audio/include/driver/rmt_ctrl.h [new file with mode: 0644]
components/esp_audio/include/driver/spi.h [new file with mode: 0644]
components/esp_audio/include/driver/touch_pad.h [new file with mode: 0644]
components/esp_audio/include/esp_timer.h [new file with mode: 0644]
components/esp_audio/lib/libEspAudio.a [new file with mode: 0644]
components/esp_audio/lib/libMediaHal.a [new file with mode: 0644]
components/esp_audio/lib/libMisc.a [new file with mode: 0644]
components/esp_audio/lib/libdlna.a [new file with mode: 0644]

diff --git a/components/esp_audio/Kconfig b/components/esp_audio/Kconfig
new file mode 100644 (file)
index 0000000..cfaa7f2
--- /dev/null
@@ -0,0 +1,24 @@
+menu "EspAudio"
+
+config AUDIO_LOG_ERROR_EN
+    bool "Enable Audio error message"
+    default y
+    help
+        Disable it will redurce error information and run faster
+config AUDIO_LOG_WARN_EN
+    bool "Enable Audio warning message"
+    default y
+    help
+        Disable it will redurce warning information and run faster
+config AUDIO_LOG_INFO_EN
+    bool "Enable Audio normal message"
+    default y
+    help
+        Disable it will redurce normal information and run faster
+config AUDIO_LOG_DEBUG_EN
+    bool "Enable Audio debug message"
+    default n
+    help
+        Disable it will redurce debug information and run faster
+
+endmenu
diff --git a/components/esp_audio/README b/components/esp_audio/README
new file mode 100644 (file)
index 0000000..f87390e
--- /dev/null
@@ -0,0 +1,21 @@
+Date:2016-11-14\r
+更新内容:\r
+1.Recorder 支持PCM,实现录音回放的demo, 16k,16bit;\r
+2.fix 播放破音bug;\r
+3.优化按键Key为中断方式;\r
+4. API修改:EspAudioPlayerDataWrite->EspAudioPlayerStreamWrite\r
+5. API新增:EspAudioPlayerStreamCfg(uint32_t rate, uint32_t channel,uint32_t bitLen)\r
+\r
+\r
+Date:2016-11-04\r
+新增功能:\r
+1.Airpaly\r
+2.DLNA\r
+\r
+Date:2016-10-14\r
+\r
+Espressif Audio Player Library 0.5.1\r
+支持功能:\r
+1. URL播放音乐和播控\r
+2. 音频支持MP3、AAC、FLAC、WAV\r
+\r
diff --git a/components/esp_audio/component.mk b/components/esp_audio/component.mk
new file mode 100644 (file)
index 0000000..f232add
--- /dev/null
@@ -0,0 +1,29 @@
+#
+# Component Makefile
+#
+# This Makefile should, at the very least, just include $(IDF_PATH)/make/component_common.mk. By default, 
+# this will take the sources in this directory, compile them and link them into 
+# lib(subdirectory_name).a in the build directory. This behaviour is entirely configurable,
+# please read the esp-idf build system document if you need to do this.
+#
+LIBS := esp_audio
+
+COMPONENT_ADD_INCLUDEDIRS := include include/driver
+
+COMPONENT_ADD_LDFLAGS :=  \
+                           $(abspath lib/libEspAudio.a) \
+                           $(abspath lib/libMisc.a) \
+                           $(abspath lib/libMediaHal.a) \
+                           $(abspath lib/libdlna.a) \
+
+include $(IDF_PATH)/make/component_common.mk
+
+
+# this is a hack to make sure the app is re-linked if the binary
+# libraries change or are updated. If they change, the main esp32
+# library will be rebuild by AR andthis will trigger a re-linking of
+# the entire app.
+#
+# It would be better for components to be able to expose any of these
+# non-standard dependencies via get_variable, but this will do for now.
+$(COMPONENT_LIBRARY): $(ALL_LIB_FILES)
diff --git a/components/esp_audio/include/EspAudio.h b/components/esp_audio/include/EspAudio.h
new file mode 100644 (file)
index 0000000..b72e071
--- /dev/null
@@ -0,0 +1,136 @@
+// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+\r
+//     http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+\r
+#ifndef ESP_AUDIO\r
+#define ESP_AUDIO\r
+#include "esp_types.h"\r
+#include "EspAudioCom.h"\r
+\r
+\r
+\r
+/*\r
+ *  Maximum size of the URI, including null character.\r
+ */\r
+#define MAX_URI_SIZE 1024\r
+\r
+/*\r
+ *  Defines various states that the ESP player can be.\r
+ */\r
+enum EspAudioState\r
+{\r
+    AUDIOSTATE_UNINITIALIZED = 0,               /*  player  is not initialized */\r
+    AUDIOSTATE_IDLE,                            /*  player is idle */\r
+    AUDIOSTATE_STOPPED,                         /*  player is stopled */\r
+    AUDIOSTATE_TRANSIT,                         /*  player is busy in a transition */\r
+    AUDIOSTATE_PLAYING,                         /*  player is currently playing */\r
+    AUDIOSTATE_PAUSED,                          /*  player is in the paused state for playback */\r
+    AUDIOSTATE_ENDED,                           /*  player finished decoding player, without user request. */\r
+    AUDIOSTATE_ERROR,                           /*  player was given a URI that could not be played */\r
+\r
+    AUDIOSTATE_UNKNOWN                          /* unknown playstate */\r
+};\r
+\r
+\r
+typedef enum\r
+{\r
+    InputSrcType_NetSpec    = 0,    ///< Specify audio file from internet.\r
+    InputSrcType_NetLiving  = 1,    ///< Living audio stream from internet,e.g.m3u8\r
+    InputSrcType_LocalFile  = 2,    ///< Local file which store in the SD card\r
+    InputSrcType_Stream     = 3,    ///< Only audio stream,e.g.PCM\r
+    InputSrcType_Max\r
+} InputSrcType;\r
+\r
+\r
+typedef enum\r
+{\r
+    EspAudioErr_NoErr                   =0,     ///< No error\r
+    EspAudioErr_InvalidPara,                    ///< Invalid parameters\r
+    EspAudioErr_NoMem,                          ///< Malloc failed\r
+    EspAudioErr_HardwareErr,                    ///< Hardware error\r
+    EspAudioErr_OutOfRange,                     ///< length of URI is too long.\r
+    EspAudioErr_NotSupport,                     ///< Not support the\r
+\r
+} EspAudioErr;\r
+\r
+\r
+/*\r
+ *  Initializes the ESP player library.\r
+ */\r
+void EspAudio_Init(void);\r
+\r
+/*\r
+ *  Cleans up the ESP player library.\r
+ */\r
+void EspAudio_UnInit(void);\r
+\r
+/*\r
+ *  Play, stop, pause the streaming and output of player\r
+ *  EspAudio_Init must be called before these methods work.\r
+ */\r
+int EspAudio_SetupStream(const char* URI, InputSrcType UriType);\r
+/*\r
+ *  Call this method to transition to playing state.\r
+ *\r
+ *  Returns nonzero if an error occurred.\r
+ */\r
+int EspAudio_Play(void);\r
+\r
+/*\r
+ *  Call this method to stop playing ESP player.\r
+ *\r
+ *  Returns nonzero if an error occurred.\r
+ */\r
+int EspAudio_Stop(void);\r
+\r
+/*\r
+ *  Call this method to pause the playing ESP player.\r
+ *\r
+ *  Returns nonzero if an error occurred.\r
+ */\r
+int EspAudio_Pause(void);\r
+\r
+/*\r
+ *  Returns the playstate of the ESP player library.\r
+ *  Returns MEDIA_UNKNOWN if the stream could not be found.\r
+ */\r
+enum EspAudioState EspAudio_GetPlayState(void);\r
+\r
+/*\r
+ *  Get the player volume level . Volume level is from 0 to 100.\r
+ *  Returns a negative value if the stream could not be found or the value is unknown.\r
+ */\r
+int EspAudio_GetVolume(int *level);\r
+\r
+/*\r
+ *  Set the player volume level . Volume level is from 0 to 100.\r
+ *  Returns a negative value if the stream could not be found or the value is unknown.\r
+ */\r
+int EspAudio_SetVolume(int level);\r
+\r
+/*\r
+ *  Call this method to configrate stream information.\r
+ *\r
+ *  Returns nonzero if an error occurred.\r
+ */\r
+EspAudioErr EspAudioPlayerStreamCfg(uint32_t rate, uint32_t channel,uint32_t bitLen);\r
+\r
+/*\r
+ *  Call this method to flush stream data to driver.\r
+ *\r
+ *  Returns nonzero if an error occurred.\r
+ */\r
+EspAudioErr EspAudioPlayerStreamWrite(uint8_t *inData, uint32_t inSize);\r
+\r
+\r
+#endif\r
diff --git a/components/esp_audio/include/EspAudioCom.h b/components/esp_audio/include/EspAudioCom.h
new file mode 100644 (file)
index 0000000..5cec99b
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+\r
+//     http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+\r
+#ifndef _ESPAUDIOCOM_H\r
+#define _ESPAUDIOCOM_H\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include "audio_log.h"\r
+#include "EspAudioCom.h"\r
+\r
+#define ESP_AUDIO_RELEASE_MAJOR (0000)\r
+#define ESP_AUDIO_RELEASE_MINOR (51)\r
+#define ESP_AUDIO_RELEASE_VER   "0.51"\r
+\r
+\r
+typedef struct\r
+{\r
+    uint32_t type;\r
+    char   str[256];\r
+} UrlInfo;\r
+\r
+\r
+typedef enum {\r
+    StreamType_Opus,\r
+    StreamType_Pcm,  // it will be support\r
+    StreamType_Max,\r
+} StreamType;\r
+\r
+\r
+typedef enum {\r
+    StreamSampleRate_8k  = 8000,  \r
+    StreamSampleRate_16k = 16000, // This is support\r
+    StreamSampleRate_22K = 22050,\r
+    StreamSampleRate_32K = 32000,\r
+    StreamSampleRate_44k = 44100,\r
+    StreamSampleRate_48k = 48000,\r
+    StreamSampleRate_Max,\r
+} StreamSampleRate;\r
+\r
+\r
+typedef enum {
+    StreamBitLen_8BIT = 8,\r
+    StreamBitLen_16BIT = 16,\r
+    StreamBitLen_24BIT = 24,\r
+    StreamBitLen_32BIT = 32,\r
+    StreamBitLen_Max,\r
+} StreamBitLen;\r
+\r
+\r
+typedef enum {\r
+    StreamChannel_One, // it will be support\r
+    StreamChannel_Two,\r
+    StreamChannel_Max,\r
+} StreamChannel;\r
+\r
+#endif  /* _ESPAUDIOCOM_H */
\ No newline at end of file
diff --git a/components/esp_audio/include/EspAudioRecorder.h b/components/esp_audio/include/EspAudioRecorder.h
new file mode 100644 (file)
index 0000000..f1a3174
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+\r
+//     http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+\r
+#ifndef __ESPAUDIORECORDER_H__\r
+#define __ESPAUDIORECORDER_H__\r
+#include "esp_types.h"\r
+#include "EspAudio.h"\r
+\r
+\r
+//Type Definitions\r
+typedef void (*Callback_RecordData)(void *recBuf, uint32_t *recLen);\r
+\r
+typedef enum {\r
+    RecorderState_Unknown = 0,\r
+    RecorderState_Init,\r
+    RecorderState_Stoped,\r
+    RecorderState_Recording,\r
+    RecorderState_Paused,\r
+} RecorderState;\r
+\r
+typedef enum {\r
+    EncodeType_Opus = 1,\r
+    EncodeType_Pcm,  // it will be support\r
+    EncodeType_Max,\r
+} EncodeType;\r
+\r
+\r
+typedef enum {\r
+    RecorderSampleRate_8k  = 8000,  // it will be support\r
+    RecorderSampleRate_16k = 16000,\r
+    RecorderSampleRate_Max,\r
+} RecorderSampleRate;\r
+\r
+\r
+typedef enum {\r
+    RecorderChannel_One = 1, // it will be support\r
+    RecorderChannel_Two,\r
+    RecorderChannel_Max,\r
+} RecorderChannel;\r
+\r
+\r
+typedef struct {\r
+    RecorderSampleRate rate;\r
+    RecorderChannel channel;\r
+    EncodeType encodeType;\r
+    Callback_RecordData func;\r
+} RecorderAttr;\r
+\r
+\r
+EspAudioErr EspAudioRecorderStart(RecorderAttr *recorderAttr);\r
+EspAudioErr EspAudioRecorderStop(void);\r
+EspAudioErr EspAudioRecorderPause(void);\r
+EspAudioErr EspAudioRecorderResume(void);\r
+EspAudioErr EspAudioRecorderStateGet(RecorderState *state);\r
+EspAudioErr EspAudioRecorderInit(void);\r
+EspAudioErr EspAudioRecorderUninit(void);\r
+\r
+\r
+#endif //__ESPAUDIORECORDER_H__\r
diff --git a/components/esp_audio/include/audio_log.h b/components/esp_audio/include/audio_log.h
new file mode 100644 (file)
index 0000000..0d3f489
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+\r
+//     http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+\r
+#ifndef __AUDIO_LOG_H__\r
+#define __AUDIO_LOG_H__\r
+#include "esp_types.h"\r
+#include "sdkconfig.h"\r
+\r
+//*****************************************************************************\r
+//\r
+// Make sure all of the definitions in this header have a C binding.\r
+//\r
+//*****************************************************************************\r
+\r
+#ifdef __cplusplus\r
+extern "C"\r
+{\r
+#endif\r
+\r
+void __log(const char *level, const char * func, uint32_t line, const char * restrict format, ...);\r
+\r
+#ifdef CONFIG_AUDIO_LOG_INFO_EN\r
+#define LOGI(format, ...)  __log("I", __func__, __LINE__, format, ##__VA_ARGS__);\r
+#else\r
+#define LOGI(format, ...)\r
+#endif\r
+\r
+#ifdef CONFIG_AUDIO_LOG_DEBUG_EN\r
+#define LOGD(format, ...)  __log("D", __func__, __LINE__, format, ##__VA_ARGS__);\r
+#else\r
+#define LOGD(format, ...)\r
+#endif\r
+\r
+#ifdef CONFIG_AUDIO_LOG_WARN_EN\r
+#define LOGW(format, ...)  __log("W", __func__, __LINE__, format, ##__VA_ARGS__);\r
+#else\r
+#define LOGW(format, ...)\r
+#endif\r
+\r
+#ifdef CONFIG_AUDIO_LOG_ERROR_EN\r
+#define LOGE(format, ...)  __log("E", __func__, __LINE__, format, ##__VA_ARGS__);\r
+#else\r
+#define LOGE(format, ...)\r
+#endif\r
+\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif //  __AUDIO_LOG_H__\r
diff --git a/components/esp_audio/include/dlna.h b/components/esp_audio/include/dlna.h
new file mode 100644 (file)
index 0000000..f8d5b98
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef _DNLA_H_
+#define _DNLA_H_
+typedef enum  {
+    DLNA_INIT,
+    DLNA_START,
+    DLNA_STOP,
+    DLNA_MEDIA_PLAYING,
+    DLNA_MEDIA_PAUSED,
+    DLNA_MEDIA_ERROR,
+    DLNA_MEDIA_STOPPED,
+    DLNA_MEDIA_ENDED,
+    DLNA_UNINIT
+} EspDlnaState;
+
+
+typedef void (*dnlaStateCallback)(EspDlnaState state);
+
+typedef enum {
+    ESPDLNA_ERROR = -1,
+    ESPDLNA_OK = 0
+} EspDlnaErr;
+
+typedef struct {
+    char FriendlyName[128];
+    char UDN[64];
+    char SerialNumber[64];
+    int NotifyCycleSeconds;
+    unsigned short PortNum;
+} EspDlnaAttr;
+
+void dlna_task(void *pvParameters);
+EspDlnaErr EspDlnaInit(EspDlnaAttr *attr, dnlaStateCallback cb);
+EspDlnaErr EspDlnaUnInit(void);
+EspDlnaErr EspDlnaStart(void);
+EspDlnaErr EspDlnaStop(void);
+#endif
diff --git a/components/esp_audio/include/driver/dma.h b/components/esp_audio/include/driver/dma.h
new file mode 100644 (file)
index 0000000..dd7552e
--- /dev/null
@@ -0,0 +1,127 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef _DRIVER_DMA_H_
+#define _DRIVER_DMA_H__
+#include <esp_types.h>
+
+#include "esp_err.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \defgroup Driver_APIs Driver APIs
+  * @brief Driver APIs
+  */
+
+/** @addtogroup Driver_APIs
+  * @{
+  */
+
+/**
+ * @brief DMA queue description.
+ */
+typedef struct {
+    uint32_t  block_size: 12;
+    uint32_t  data_length: 12;
+    uint32_t  unused: 5;
+    uint32_t  sub_sof: 1;
+    uint32_t  eof: 1;
+    uint32_t  owner: 1;
+    uint32_t  buf_ptr;
+    uint32_t  next_link_ptr;
+} dma_queue_t;
+
+/**
+ * @brief DMA element description
+ */
+typedef struct {
+    uint32_t        *buffer_addr;
+    dma_queue_t     *first_queue;
+    dma_queue_t     *last_queue;
+    dma_queue_t     backup_queue;
+} dma_element_t;
+
+/**
+ * @brief DMA ping-pong buffer object description
+ */
+typedef struct {
+    dma_element_t   *ping;
+    dma_element_t   *pong;
+    uint32_t        len;
+    uint32_t        queue_cnt;
+} ping_pong_buf_t;
+
+
+/**
+ * @brief Create a ping-pong buffer object used by DMA.
+ *
+ * @param [in] bufLen
+ *             Set the buffer length.
+ *             --------------------
+ *             | ping   | Pong    |
+ *             --------------------
+ *             | bufLen | bufLen  |
+ *             --------------------
+ *
+ * @return uint32*, NULL:indicates parameter error, others indicates ping-pong buffer address.
+ */
+ping_pong_buf_t* dma_buf_create(uint32_t bufLen);
+
+/**
+ * @brief Reset the dma buffer length.
+ *
+ * @param [in] obj
+ *             Pointer to a struct ping_pong_buf_t that indicates the object length to be reset to bufLen.
+ *
+ * @return uint32*, ESP_FAIL:indicates parameter error, ESP_OK :indicates success.
+ */
+esp_err_t dma_buf_len_reset(ping_pong_buf_t *obj);
+
+/**
+ * @brief Set the buffer length before the start.
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t.
+ * @param [in] len
+ *             Set the transmit length .
+ *
+ * @return uint32*, ESP_FAIL:indicates parameter error, ESP_OK: indicates success.
+ */
+esp_err_t dma_buf_len_set(ping_pong_buf_t *obj, dma_element_t *element, uint32_t len);
+
+/**
+ * @brief Destroy the ping-pong buffer instance.
+ *
+ * @param [in] obj
+ *             Pointer to a struct ping_pong_buf_t that indicates the object to be destroy.
+ *
+ * @return NULL
+ */
+void dma_buf_destroy(ping_pong_buf_t *obj);
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __DMA_H__
diff --git a/components/esp_audio/include/driver/gpio_sig_map.h b/components/esp_audio/include/driver/gpio_sig_map.h
new file mode 100644 (file)
index 0000000..65f1384
--- /dev/null
@@ -0,0 +1,428 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef _DRIVER_GPIO_SIG_MAP_H_
+#define _DRIVER_GPIO_SIG_MAP_H_
+
+#define SPICLK_IN_IDX                  0
+#define SPICLK_OUT_IDX                 0
+#define SPIQ_IN_IDX                    1
+#define SPIQ_OUT_IDX                   1
+#define SPID_IN_IDX                    2
+#define SPID_OUT_IDX                   2
+#define SPIHD_IN_IDX                   3
+#define SPIHD_OUT_IDX                  3
+#define SPIWP_IN_IDX                   4
+#define SPIWP_OUT_IDX                  4
+#define SPICS0_IN_IDX                  5
+#define SPICS0_OUT_IDX                 5
+#define SPICS1_IN_IDX                  6
+#define SPICS1_OUT_IDX                 6
+#define SPICS2_IN_IDX                  7
+#define SPICS2_OUT_IDX                 7
+#define HSPICLK_IN_IDX                 8
+#define HSPICLK_OUT_IDX                        8
+#define HSPIQ_IN_IDX                   9
+#define HSPIQ_OUT_IDX                  9
+#define HSPID_IN_IDX                   10
+#define HSPID_OUT_IDX                  10
+#define HSPICS0_IN_IDX                 11
+#define HSPICS0_OUT_IDX                        11
+#define HSPIHD_IN_IDX                  12
+#define HSPIHD_OUT_IDX                 12
+#define HSPIWP_IN_IDX                  13
+#define HSPIWP_OUT_IDX                 13
+#define U0RXD_IN_IDX                   14
+#define U0TXD_OUT_IDX                  14
+#define U0CTS_IN_IDX                   15
+#define U0RTS_OUT_IDX                  15
+#define U0DSR_IN_IDX                   16
+#define U0DTR_OUT_IDX                  16
+#define U1RXD_IN_IDX                   17
+#define U1TXD_OUT_IDX                  17
+#define U1CTS_IN_IDX                   18
+#define U1RTS_OUT_IDX                  18
+#define I2CM_SCL_O_IDX                 19
+#define I2CM_SDA_I_IDX                 20
+#define I2CM_SDA_O_IDX                 20
+#define EXT_I2C_SCL_O_IDX                      21
+#define EXT_I2C_SDA_O_IDX                      22
+#define EXT_I2C_SDA_I_IDX                      22
+#define I2S0O_BCK_IN_IDX                       23
+#define I2S0O_BCK_OUT_IDX                      23
+#define I2S1O_BCK_IN_IDX                       24
+#define I2S1O_BCK_OUT_IDX                      24
+#define I2S0O_WS_IN_IDX                        25
+#define I2S0O_WS_OUT_IDX                       25
+#define I2S1O_WS_IN_IDX                        26
+#define I2S1O_WS_OUT_IDX                       26
+#define I2S0I_BCK_IN_IDX                       27
+#define I2S0I_BCK_OUT_IDX                      27
+#define I2S0I_WS_IN_IDX                        28
+#define I2S0I_WS_OUT_IDX                       28
+#define I2CEXT0_SCL_IN_IDX                     29
+#define I2CEXT0_SCL_OUT_IDX                    29
+#define I2CEXT0_SDA_IN_IDX                     30
+#define I2CEXT0_SDA_OUT_IDX                    30
+#define PWM0_SYNC0_IN_IDX                      31
+#define SDIO_TOHOST_INT_OUT_IDX                        31
+#define PWM0_SYNC1_IN_IDX                      32
+#define PWM0_OUT0A_IDX                 32
+#define PWM0_SYNC2_IN_IDX                      33
+#define PWM0_OUT0B_IDX                 33
+#define PWM0_F0_IN_IDX                 34
+#define PWM0_OUT1A_IDX                 34
+#define PWM0_F1_IN_IDX                 35
+#define PWM0_OUT1B_IDX                 35
+#define PWM0_F2_IN_IDX                 36
+#define PWM0_OUT2A_IDX                 36
+#define GPIO_BT_ACTIVE_IDX                     37
+#define PWM0_OUT2B_IDX                 37
+#define GPIO_BT_PRIORITY_IDX                   38
+#define PCNT_SIG_CH0_IN0_IDX                   39
+#define PCNT_SIG_CH1_IN0_IDX                   40
+#define GPIO_WLAN_ACTIVE_IDX                   40
+#define PCNT_CTRL_CH0_IN0_IDX                  41
+#define BB_DIAG0_IDX                   41
+#define PCNT_CTRL_CH1_IN0_IDX                  42
+#define BB_DIAG1_IDX                   42
+#define PCNT_SIG_CH0_IN1_IDX                   43
+#define BB_DIAG2_IDX                   43
+#define PCNT_SIG_CH1_IN1_IDX                   44
+#define BB_DIAG3_IDX                   44
+#define PCNT_CTRL_CH0_IN1_IDX                  45
+#define BB_DIAG4_IDX                   45
+#define PCNT_CTRL_CH1_IN1_IDX                  46
+#define BB_DIAG5_IDX                   46
+#define PCNT_SIG_CH0_IN2_IDX                   47
+#define BB_DIAG6_IDX                   47
+#define PCNT_SIG_CH1_IN2_IDX                   48
+#define BB_DIAG7_IDX                   48
+#define PCNT_CTRL_CH0_IN2_IDX                  49
+#define BB_DIAG8_IDX                   49
+#define PCNT_CTRL_CH1_IN2_IDX                  50
+#define BB_DIAG9_IDX                   50
+#define PCNT_SIG_CH0_IN3_IDX                   51
+#define BB_DIAG10_IDX                  51
+#define PCNT_SIG_CH1_IN3_IDX                   52
+#define BB_DIAG11_IDX                  52
+#define PCNT_CTRL_CH0_IN3_IDX                  53
+#define BB_DIAG12_IDX                  53
+#define PCNT_CTRL_CH1_IN3_IDX                  54
+#define BB_DIAG13_IDX                  54
+#define PCNT_SIG_CH0_IN4_IDX                   55
+#define BB_DIAG14_IDX                  55
+#define PCNT_SIG_CH1_IN4_IDX                   56
+#define BB_DIAG15_IDX                  56
+#define PCNT_CTRL_CH0_IN4_IDX                  57
+#define BB_DIAG16_IDX                  57
+#define PCNT_CTRL_CH1_IN4_IDX                  58
+#define BB_DIAG17_IDX                  58
+#define BB_DIAG18_IDX                  59
+#define BB_DIAG19_IDX                  60
+#define HSPICS1_IN_IDX                 61
+#define HSPICS1_OUT_IDX                        61
+#define HSPICS2_IN_IDX                 62
+#define HSPICS2_OUT_IDX                        62
+#define VSPICLK_IN_IDX                 63
+#define VSPICLK_OUT_MUX_IDX                    63
+#define VSPIQ_IN_IDX                   64
+#define VSPIQ_OUT_IDX                  64
+#define VSPID_IN_IDX                   65
+#define VSPID_OUT_IDX                  65
+#define VSPIHD_IN_IDX                  66
+#define VSPIHD_OUT_IDX                 66
+#define VSPIWP_IN_IDX                  67
+#define VSPIWP_OUT_IDX                 67
+#define VSPICS0_IN_IDX                 68
+#define VSPICS0_OUT_IDX                        68
+#define VSPICS1_IN_IDX                 69
+#define VSPICS1_OUT_IDX                        69
+#define VSPICS2_IN_IDX                 70
+#define VSPICS2_OUT_IDX                        70
+#define PCNT_SIG_CH0_IN5_IDX                   71
+#define LEDC_HS_SIG_OUT0_IDX                   71
+#define PCNT_SIG_CH1_IN5_IDX                   72
+#define LEDC_HS_SIG_OUT1_IDX                   72
+#define PCNT_CTRL_CH0_IN5_IDX                  73
+#define LEDC_HS_SIG_OUT2_IDX                   73
+#define PCNT_CTRL_CH1_IN5_IDX                  74
+#define LEDC_HS_SIG_OUT3_IDX                   74
+#define PCNT_SIG_CH0_IN6_IDX                   75
+#define LEDC_HS_SIG_OUT4_IDX                   75
+#define PCNT_SIG_CH1_IN6_IDX                   76
+#define LEDC_HS_SIG_OUT5_IDX                   76
+#define PCNT_CTRL_CH0_IN6_IDX                  77
+#define LEDC_HS_SIG_OUT6_IDX                   77
+#define PCNT_CTRL_CH1_IN6_IDX                  78
+#define LEDC_HS_SIG_OUT7_IDX                   78
+#define PCNT_SIG_CH0_IN7_IDX                   79
+#define LEDC_LS_SIG_OUT0_IDX                   79
+#define PCNT_SIG_CH1_IN7_IDX                   80
+#define LEDC_LS_SIG_OUT1_IDX                   80
+#define PCNT_CTRL_CH0_IN7_IDX                  81
+#define LEDC_LS_SIG_OUT2_IDX                   81
+#define PCNT_CTRL_CH1_IN7_IDX                  82
+#define LEDC_LS_SIG_OUT3_IDX                   82
+#define RMT_SIG_IN0_IDX                        83
+#define LEDC_LS_SIG_OUT4_IDX                   83
+#define RMT_SIG_IN1_IDX                        84
+#define LEDC_LS_SIG_OUT5_IDX                   84
+#define RMT_SIG_IN2_IDX                        85
+#define LEDC_LS_SIG_OUT6_IDX                   85
+#define RMT_SIG_IN3_IDX                        86
+#define LEDC_LS_SIG_OUT7_IDX                   86
+#define RMT_SIG_IN4_IDX                        87
+#define RMT_SIG_OUT0_IDX                       87
+#define RMT_SIG_IN5_IDX                        88
+#define RMT_SIG_OUT1_IDX                       88
+#define RMT_SIG_IN6_IDX                        89
+#define RMT_SIG_OUT2_IDX                       89
+#define RMT_SIG_IN7_IDX                        90
+#define RMT_SIG_OUT3_IDX                       90
+#define RMT_SIG_OUT4_IDX                       91
+#define RMT_SIG_OUT5_IDX                       92
+#define EXT_ADC_START_IDX                      93
+#define RMT_SIG_OUT6_IDX                       93
+#define CAN_RX_IDX                     94
+#define RMT_SIG_OUT7_IDX                       94
+#define I2CEXT1_SCL_IN_IDX                     95
+#define I2CEXT1_SCL_OUT_IDX                    95
+#define I2CEXT1_SDA_IN_IDX                     96
+#define I2CEXT1_SDA_OUT_IDX                    96
+#define HOST_CARD_DETECT_N_1_IDX                       97
+#define HOST_CCMD_OD_PULLUP_EN_N_IDX                   97
+#define HOST_CARD_DETECT_N_2_IDX                       98
+#define HOST_RST_N_1_IDX                       98
+#define HOST_CARD_WRITE_PRT_1_IDX                      99
+#define HOST_RST_N_2_IDX                       99
+#define HOST_CARD_WRITE_PRT_2_IDX                      100
+#define GPIO_SD0_OUT_IDX                       100
+#define HOST_CARD_INT_N_1_IDX                  101
+#define GPIO_SD1_OUT_IDX                       101
+#define HOST_CARD_INT_N_2_IDX                  102
+#define GPIO_SD2_OUT_IDX                       102
+#define PWM1_SYNC0_IN_IDX                      103
+#define GPIO_SD3_OUT_IDX                       103
+#define PWM1_SYNC1_IN_IDX                      104
+#define GPIO_SD4_OUT_IDX                       104
+#define PWM1_SYNC2_IN_IDX                      105
+#define GPIO_SD5_OUT_IDX                       105
+#define PWM1_F0_IN_IDX                 106
+#define GPIO_SD6_OUT_IDX                       106
+#define PWM1_F1_IN_IDX                 107
+#define GPIO_SD7_OUT_IDX                       107
+#define PWM1_F2_IN_IDX                 108
+#define PWM1_OUT0A_IDX                 108
+#define PWM0_CAP0_IN_IDX                       109
+#define PWM1_OUT0B_IDX                 109
+#define PWM0_CAP1_IN_IDX                       110
+#define PWM1_OUT1A_IDX                 110
+#define PWM0_CAP2_IN_IDX                       111
+#define PWM1_OUT1B_IDX                 111
+#define PWM1_CAP0_IN_IDX                       112
+#define PWM1_OUT2A_IDX                 112
+#define PWM1_CAP1_IN_IDX                       113
+#define PWM1_OUT2B_IDX                 113
+#define PWM1_CAP2_IN_IDX                       114
+#define PWM2_OUT1H_IDX                 114
+#define PWM2_FLTA_IDX                  115
+#define PWM2_OUT1L_IDX                 115
+#define PWM2_FLTB_IDX                  116
+#define PWM2_OUT2H_IDX                 116
+#define PWM2_CAP1_IN_IDX                       117
+#define PWM2_OUT2L_IDX                 117
+#define PWM2_CAP2_IN_IDX                       118
+#define PWM2_OUT3H_IDX                 118
+#define PWM2_CAP3_IN_IDX                       119
+#define PWM2_OUT3L_IDX                 119
+#define PWM3_FLTA_IDX                  120
+#define PWM2_OUT4H_IDX                 120
+#define PWM3_FLTB_IDX                  121
+#define PWM2_OUT4L_IDX                 121
+#define PWM3_CAP1_IN_IDX                       122
+#define PWM3_CAP2_IN_IDX                       123
+#define CAN_TX_IDX                     123
+#define PWM3_CAP3_IN_IDX                       124
+#define CAN_BUS_OFF_ON_IDX                     124
+#define ATCK_IN_IDX                    125
+#define CAN_CLKOUT_IDX                 125
+#define ATMS_IN_IDX                    126
+#define ATDI_IN_IDX                    127
+#define ATDO_OUT_IDX                   127
+#define SPID4_IN_IDX                   128
+#define SPID4_OUT_IDX                  128
+#define SPID5_IN_IDX                   129
+#define SPID5_OUT_IDX                  129
+#define SPID6_IN_IDX                   130
+#define SPID6_OUT_IDX                  130
+#define SPID7_IN_IDX                   131
+#define SPID7_OUT_IDX                  131
+#define HSPID4_IN_IDX                  132
+#define HSPID4_OUT_IDX                 132
+#define HSPID5_IN_IDX                  133
+#define HSPID5_OUT_IDX                 133
+#define HSPID6_IN_IDX                  134
+#define HSPID6_OUT_IDX                 134
+#define HSPID7_IN_IDX                  135
+#define HSPID7_OUT_IDX                 135
+#define VSPID4_IN_IDX                  136
+#define VSPID4_OUT_IDX                 136
+#define VSPID5_IN_IDX                  137
+#define VSPID5_OUT_IDX                 137
+#define VSPID6_IN_IDX                  138
+#define VSPID6_OUT_IDX                 138
+#define VSPID7_IN_IDX                  139
+#define VSPID7_OUT_IDX                 139
+#define I2S0I_DATA_IN0_IDX                     140
+#define I2S0O_DATA_OUT0_IDX                    140
+#define I2S0I_DATA_IN1_IDX                     141
+#define I2S0O_DATA_OUT1_IDX                    141
+#define I2S0I_DATA_IN2_IDX                     142
+#define I2S0O_DATA_OUT2_IDX                    142
+#define I2S0I_DATA_IN3_IDX                     143
+#define I2S0O_DATA_OUT3_IDX                    143
+#define I2S0I_DATA_IN4_IDX                     144
+#define I2S0O_DATA_OUT4_IDX                    144
+#define I2S0I_DATA_IN5_IDX                     145
+#define I2S0O_DATA_OUT5_IDX                    145
+#define I2S0I_DATA_IN6_IDX                     146
+#define I2S0O_DATA_OUT6_IDX                    146
+#define I2S0I_DATA_IN7_IDX                     147
+#define I2S0O_DATA_OUT7_IDX                    147
+#define I2S0I_DATA_IN8_IDX                     148
+#define I2S0O_DATA_OUT8_IDX                    148
+#define I2S0I_DATA_IN9_IDX                     149
+#define I2S0O_DATA_OUT9_IDX                    149
+#define I2S0I_DATA_IN10_IDX                    150
+#define I2S0O_DATA_OUT10_IDX                   150
+#define I2S0I_DATA_IN11_IDX                    151
+#define I2S0O_DATA_OUT11_IDX                   151
+#define I2S0I_DATA_IN12_IDX                    152
+#define I2S0O_DATA_OUT12_IDX                   152
+#define I2S0I_DATA_IN13_IDX                    153
+#define I2S0O_DATA_OUT13_IDX                   153
+#define I2S0I_DATA_IN14_IDX                    154
+#define I2S0O_DATA_OUT14_IDX                   154
+#define I2S0I_DATA_IN15_IDX                    155
+#define I2S0O_DATA_OUT15_IDX                   155
+#define ATRST_IN_IDX                   156
+#define I2S0O_DATA_OUT16_IDX                   156
+#define I2S0O_DATA_OUT17_IDX                   157
+#define I2S0O_DATA_OUT18_IDX                   158
+#define I2S0O_DATA_OUT19_IDX                   159
+#define I2S0O_DATA_OUT20_IDX                   160
+#define I2S0O_DATA_OUT21_IDX                   161
+#define I2S0O_DATA_OUT22_IDX                   162
+#define I2S0O_DATA_OUT23_IDX                   163
+#define I2S1I_BCK_IN_IDX                       164
+#define I2S1I_BCK_OUT_IDX                      164
+#define I2S1I_WS_IN_IDX                        165
+#define I2S1I_WS_OUT_IDX                       165
+#define I2S1I_DATA_IN0_IDX                     166
+#define I2S1O_DATA_OUT0_IDX                    166
+#define I2S1I_DATA_IN1_IDX                     167
+#define I2S1O_DATA_OUT1_IDX                    167
+#define I2S1I_DATA_IN2_IDX                     168
+#define I2S1O_DATA_OUT2_IDX                    168
+#define I2S1I_DATA_IN3_IDX                     169
+#define I2S1O_DATA_OUT3_IDX                    169
+#define I2S1I_DATA_IN4_IDX                     170
+#define I2S1O_DATA_OUT4_IDX                    170
+#define I2S1I_DATA_IN5_IDX                     171
+#define I2S1O_DATA_OUT5_IDX                    171
+#define I2S1I_DATA_IN6_IDX                     172
+#define I2S1O_DATA_OUT6_IDX                    172
+#define I2S1I_DATA_IN7_IDX                     173
+#define I2S1O_DATA_OUT7_IDX                    173
+#define I2S1I_DATA_IN8_IDX                     174
+#define I2S1O_DATA_OUT8_IDX                    174
+#define I2S1I_DATA_IN9_IDX                     175
+#define I2S1O_DATA_OUT9_IDX                    175
+#define I2S1I_DATA_IN10_IDX                    176
+#define I2S1O_DATA_OUT10_IDX                   176
+#define I2S1I_DATA_IN11_IDX                    177
+#define I2S1O_DATA_OUT11_IDX                   177
+#define I2S1I_DATA_IN12_IDX                    178
+#define I2S1O_DATA_OUT12_IDX                   178
+#define I2S1I_DATA_IN13_IDX                    179
+#define I2S1O_DATA_OUT13_IDX                   179
+#define I2S1I_DATA_IN14_IDX                    180
+#define I2S1O_DATA_OUT14_IDX                   180
+#define I2S1I_DATA_IN15_IDX                    181
+#define I2S1O_DATA_OUT15_IDX                   181
+#define I2S1O_DATA_OUT16_IDX                   182
+#define I2S1O_DATA_OUT17_IDX                   183
+#define I2S1O_DATA_OUT18_IDX                   184
+#define I2S1O_DATA_OUT19_IDX                   185
+#define I2S1O_DATA_OUT20_IDX                   186
+#define I2S1O_DATA_OUT21_IDX                   187
+#define I2S1O_DATA_OUT22_IDX                   188
+#define I2S1O_DATA_OUT23_IDX                   189
+#define I2S0I_H_SYNC_IDX                       190
+#define PWM3_OUT1H_IDX                 190
+#define I2S0I_V_SYNC_IDX                       191
+#define PWM3_OUT1L_IDX                 191
+#define I2S0I_H_ENABLE_IDX                     192
+#define PWM3_OUT2H_IDX                 192
+#define I2S1I_H_SYNC_IDX                       193
+#define PWM3_OUT2L_IDX                 193
+#define I2S1I_V_SYNC_IDX                       194
+#define PWM3_OUT3H_IDX                 194
+#define I2S1I_H_ENABLE_IDX                     195
+#define PWM3_OUT3L_IDX                 195
+#define PWM3_OUT4H_IDX                 196
+#define PWM3_OUT4L_IDX                 197
+#define U2RXD_IN_IDX                   198
+#define U2TXD_OUT_IDX                  198
+#define U2CTS_IN_IDX                   199
+#define U2RTS_OUT_IDX                  199
+#define EMAC_MDC_I_IDX                 200
+#define EMAC_MDC_O_IDX                 200
+#define EMAC_MDI_I_IDX                 201
+#define EMAC_MDO_O_IDX                 201
+#define EMAC_CRS_I_IDX                 202
+#define EMAC_CRS_O_IDX                 202
+#define EMAC_COL_I_IDX                 203
+#define EMAC_COL_O_IDX                 203
+#define PCMFSYNC_IN_IDX                        204
+#define BT_AUDIO0_IRQ_IDX                      204
+#define PCMCLK_IN_IDX                  205
+#define BT_AUDIO1_IRQ_IDX                      205
+#define PCMDIN_IDX                     206
+#define BT_AUDIO2_IRQ_IDX                      206
+#define BLE_AUDIO0_IRQ_IDX                     207
+#define BLE_AUDIO1_IRQ_IDX                     208
+#define BLE_AUDIO2_IRQ_IDX                     209
+#define PCMFSYNC_OUT_IDX                       210
+#define PCMCLK_OUT_IDX                 211
+#define PCMDOUT_IDX                    212
+#define BLE_AUDIO_SYNC0_P_IDX                  213
+#define BLE_AUDIO_SYNC1_P_IDX                  214
+#define BLE_AUDIO_SYNC2_P_IDX                  215
+#define ANT_SEL0_IDX                   216
+#define ANT_SEL1_IDX                   217
+#define ANT_SEL2_IDX                   218
+#define ANT_SEL3_IDX                   219
+#define ANT_SEL4_IDX                   220
+#define ANT_SEL5_IDX                   221
+#define ANT_SEL6_IDX                   222
+#define ANT_SEL7_IDX                   223
+#define SIG_IN_FUNC224_IDX                     224
+#define SIG_IN_FUNC225_IDX                     225
+#define SIG_IN_FUNC226_IDX                     226
+#define SIG_IN_FUNC227_IDX                     227
+#define SIG_IN_FUNC228_IDX                     228
+
+#endif /* _DRIVER_GPIO_SIG_MAP_H_ */
diff --git a/components/esp_audio/include/driver/i2c.h b/components/esp_audio/include/driver/i2c.h
new file mode 100644 (file)
index 0000000..a3106a8
--- /dev/null
@@ -0,0 +1,166 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+\r
+//     http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+#ifndef _DRIVER_I2C_H_\r
+#define _DRIVER_I2C_H_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+#include "esp_types.h"\r
+#include "soc/i2c_reg.h"\r
+#include "soc/soc.h"\r
+#include "soc/dport_reg.h"\r
+\r
+#define I2C_DEV(i)   ((i2c_dev_t *)(REG_I2C_BASE(i)))\r
+#define I2C_APB_CLK_FREQ  APB_CLK_FREQ\r
+#define I2C_COMD_REG(i2c_no, cmd_no) (I2C_COMD0_REG(i2c_no)+ (cmd_no)*4 )\r
+#define I2C_COMMAND_DONE (BIT(31))\r
+#define I2C_COMMAND_DONE_M (BIT(31))\r
+#define I2C_COMMAND_DONE_V 0x1\r
+#define I2C_COMMAND_DONE_S 31\r
+#define I2C_COMMAND_OP_CODE   0x7\r
+#define I2C_COMMAND_OP_CODE_M  ((I2C_COMMAND_OP_CODE_V)<<(I2C_COMMAND_OP_CODE_S))\r
+#define I2C_COMMAND_OP_CODE_V 0x7\r
+#define I2C_COMMAND_OP_CODE_S  11\r
+#define I2C_COMMAND_ACK_VALUE   (BIT(10))\r
+#define I2C_COMMAND_ACK_VALUE_M (BIT(10))\r
+#define I2C_COMMAND_ACK_VALUE_V     0x1\r
+#define I2C_COMMAND_ACK_VALUE_S     10\r
+#define I2C_COMMAND_ACK_EXP     (BIT(9))\r
+#define I2C_COMMAND_ACK_EXP_M   (BIT(9))\r
+#define I2C_COMMAND_ACK_EXP_V       0x1\r
+#define I2C_COMMAND_ACK_EXP_S       9\r
+#define I2C_COMMAND_ACK_EN      (BIT(8))\r
+#define I2C_COMMAND_ACK_EN_M   (BIT(8))\r
+#define I2C_COMMAND_ACK_EN_V           0x1\r
+#define I2C_COMMAND_ACK_EN_S           8\r
+#define I2C_COMMAND_BYTE_NUM     0xff\r
+#define I2C_COMMAND_BYTE_NUM_M  0xff\r
+#define I2C_COMMAND_BYTE_NUM_V  0xff\r
+#define I2C_COMMAND_BYTE_NUM_S     0\r
+\r
+typedef enum{\r
+    I2C_SLAVE_MODE = 0,\r
+    I2C_MASTER_MODE,\r
+}enum_i2c_mode_t;\r
+\r
+typedef enum{\r
+    I2C_CMD_RESTART = 0,\r
+    I2C_CMD_WRITE,\r
+    I2C_CMD_READ,\r
+    I2C_CMD_STOP,\r
+    I2C_CMD_END\r
+}enum_cmd_opcode_t;\r
+\r
+typedef enum{\r
+    I2C0 = 0,  // 0x3ff53000\r
+    I2C1 ,     // 0x3ff67000\r
+    I2C_MAX\r
+} enum_i2c_port_t;\r
+\r
+typedef struct{\r
+    enum_i2c_mode_t mode;\r
+    uint8_t addr_10bit_en;\r
+    uint16_t slave_addr;\r
+    uint32_t clk_speed;\r
+}i2c_config_t;\r
+\r
+typedef struct{\r
+    uint8_t byte_num;\r
+    uint8_t ack_en;\r
+    uint8_t ack_exp;\r
+    uint8_t ack_val;\r
+    enum_cmd_opcode_t op_code;\r
+}i2c_cmd_def_t;\r
+\r
+\r
+/**\r
+ * @brief  Reset I2C tx fifo, flush the data in tx fifo.\r
+ *\r
+ * @param  enum_i2c_port_t i2c_no : I2C port num (I2C0 or I2C1)\r
+ *\r
+ * @return null\r
+ */\r
+void i2c_reset_tx_fifo(enum_i2c_port_t i2c_no );\r
+\r
+/**\r
+ * @brief  Fill the tx fifo with the given data bytes\r
+ *\r
+ * @param  enum_i2c_port_t i2c_no : I2C port num (I2C0 or I2C1)\r
+ * @param  uint8_t *data          : pointer to the data buffer\r
+ * @param  uint8_t len            : data length of the data\r
+ *\r
+ * @return null\r
+ */\r
+void i2c_tx_fifo_push(enum_i2c_port_t i2c_no,uint8_t *data , uint8_t len);\r
+\r
+/**\r
+ * @brief  Reset I2C rx fifo, flush the data in rx fifo.\r
+ *\r
+ * @param  enum_i2c_port_t i2c_no : I2C port num (I2C0 or I2C1)\r
+ *\r
+ * @return null\r
+ */\r
+void i2c_reset_rx_fifo(enum_i2c_port_t i2c_no);\r
+\r
+/**\r
+ * @brief  Fill the tx fifo with the given data bytes\r
+ *\r
+ * @param  enum_i2c_port_t i2c_no : I2C port num (I2C0 or I2C1)\r
+ * @param  uint8_t cmd_idx        : i2c command index(at most 16 commands one time)\r
+ * @param  i2c_cmd_def_t* cmd     : command definition.\r
+ *\r
+ * @return null\r
+ */\r
+void i2c_config_cmd(enum_i2c_port_t i2c_no,uint8_t cmd_idx, i2c_cmd_def_t* cmd);\r
+\r
+/**\r
+ * @brief  Start sending data to i2c bus.The data is defined in the command registers.Stop when there is a "STOP" command\r
+ *\r
+ * @param  enum_i2c_port_t i2c_no : I2C port num (I2C0 or I2C1)\r
+ *\r
+ * @return null\r
+ */\r
+void i2c_start(enum_i2c_port_t i2c_no);\r
+\r
+/**\r
+ * @brief  Set and initialize i2c params\r
+ *\r
+ * @param  enum_i2c_port_t i2c_no : I2C port num (I2C0 or I2C1)\r
+ * @param  i2c_config_t* i2c_conf : i2c setting param struct\r
+ *\r
+ * @return null\r
+ */\r
+void i2c_init( enum_i2c_port_t i2c_no, i2c_config_t* i2c_conf);\r
+\r
+/**\r
+ * @brief  Set and initialize i2c interruption handler\r
+ *\r
+ * @param  uint8_t cpu_num        : CPU number (PRO_CPU_NUM or APP_CPU_NUM)\r
+ * @param  enum_i2c_port_t i2c_no : I2C port num (I2C0 or I2C1)\r
+ * @param  uint8_t i2c_intr_num   : i2c interrupt number, set this value according to interrupt cpu using table, Please see the core-isa.h\r
+ * @param  void (* fn)(void* )    : i2c interrupt handler\r
+ * @param  void * arg             : param pointer of i2c interrupt handler\r
+ *\r
+ * @return null\r
+ */\r
+void i2c_intr_register(uint8_t cpu_num,enum_i2c_port_t i2c_no,uint8_t i2c_intr_num,void (* fn)(void* ),void * arg);\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif  /*_DRIVER_I2C_H_*/\r
diff --git a/components/esp_audio/include/driver/i2c_soft.h b/components/esp_audio/include/driver/i2c_soft.h
new file mode 100644 (file)
index 0000000..a0b34bb
--- /dev/null
@@ -0,0 +1,193 @@
+#ifndef __I2C_MASTER_H__\r
+#define __I2C_MASTER_H__\r
+\r
+#include <stdio.h>\r
+#include "driver/gpio.h"\r
+#include "esp_types.h"\r
+#include "rom/ets_sys.h"\r
+\r
+#if 0\r
+#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_MTMS_U\r
+#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_MTDO_U\r
+#define I2C_MASTER_SDA_GPIO 14\r
+#define I2C_MASTER_SCL_GPIO 15\r
+#define I2C_MASTER_SDA_FUNC FUNC_MTMS_GPIO14\r
+#define I2C_MASTER_SCL_FUNC FUNC_MTDO_GPIO15\r
+#endif\r
+\r
+#if 0\r
+#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO26_U\r
+#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_GPIO27_U\r
+#define I2C_MASTER_SDA_GPIO 26\r
+#define I2C_MASTER_SDA_PIN GPIO_Pin_26\r
+\r
+#define I2C_MASTER_SCL_PIN GPIO_Pin_27\r
+#define I2C_MASTER_SCL_GPIO 27\r
+#define I2C_MASTER_SDA_FUNC FUNC_GPIO26_GPIO26\r
+#define I2C_MASTER_SCL_FUNC FUNC_GPIO27_GPIO27\r
+#endif\r
+\r
+#if 1\r
+\r
+#define I2C_MASTER_SDA_GPIO 21\r
+#define I2C_MASTER_SDA_PIN GPIO_SEL_21\r
+\r
+#define I2C_MASTER_SCL_PIN GPIO_SEL_19\r
+#define I2C_MASTER_SCL_GPIO 19\r
+#endif\r
+\r
+#if 0\r
+#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO23_U\r
+#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_GPIO5_U\r
+#define I2C_MASTER_SDA_GPIO 23\r
+#define I2C_MASTER_SDA_PIN GPIO_Pin_23\r
+\r
+#define I2C_MASTER_SCL_PIN GPIO_Pin_5\r
+#define I2C_MASTER_SCL_GPIO 5\r
+#define I2C_MASTER_SDA_FUNC FUNC_GPIO23_GPIO23\r
+#define I2C_MASTER_SCL_FUNC FUNC_GPIO5_GPIO5\r
+#endif\r
+\r
+#define I2C_MASTER_SDA_HIGH_SCL_HIGH()  \\r
+    gpio_set_level(I2C_MASTER_SDA_GPIO,1);\\r
+    gpio_set_level(I2C_MASTER_SCL_GPIO,1);\r
+\r
+#define I2C_MASTER_SDA_HIGH_SCL_LOW()  \\r
+    gpio_set_level(I2C_MASTER_SDA_GPIO,1);\\r
+    gpio_set_level(I2C_MASTER_SCL_GPIO,0);\r
+\r
+#define I2C_MASTER_SDA_LOW_SCL_HIGH()  \\r
+    gpio_set_level(I2C_MASTER_SDA_GPIO,0);\\r
+    gpio_set_level(I2C_MASTER_SCL_GPIO,1);\r
+\r
+#define I2C_MASTER_SDA_LOW_SCL_LOW()  \\r
+    gpio_set_level(I2C_MASTER_SDA_GPIO,0);\\r
+    gpio_set_level(I2C_MASTER_SCL_GPIO,0);\r
+\r
+/** \defgroup Driver_APIs Driver APIs\r
+  * @brief Driver APIs\r
+  */\r
+\r
+/** @addtogroup Driver_APIs\r
+  * @{\r
+  */\r
+\r
+/** \defgroup I2C_Driver_APIs I2C_MASTER Driver APIs\r
+  * @brief UART driver APIs\r
+  */\r
+\r
+/** @addtogroup I2C_MASTER_Driver_APIs\r
+  * @{\r
+  */\r
+\r
+/**\r
+  * @brief   i2c_master_gpio_init,config SDA and SCL gpio to open-drain output mode.\r
+  *\r
+  * @param   null\r
+  *\r
+  * @return  null\r
+  */\r
+void i2c_master_gpio_init(void);\r
+\r
+/**\r
+  * @brief   i2c_master_gpio_init,config SDA and SCL gpio to open-drain output mode.\r
+  *\r
+  * @param  initilize I2C bus to enable i2c operations.\r
+  *\r
+  * @return  null\r
+  */\r
+void i2c_master_init(void);\r
+\r
+#define i2c_master_wait    ets_delay_us\r
+\r
+\r
+/**\r
+  * @brief   i2c_master_gpio_init,config SDA and SCL gpio to open-drain output mode.\r
+  *\r
+  * @param  set i2c to stop sending state.\r
+  *\r
+  * @return  null\r
+  */\r
+void i2c_master_stop(void);\r
+\r
+/**\r
+  * @brief   i2c_master_gpio_init,config SDA and SCL gpio to open-drain output mode.\r
+  *\r
+  * @param  set i2c to start sending state.\r
+  *\r
+  * @return  null\r
+  */\r
+void i2c_master_start(void);\r
+\r
+/**\r
+  * @brief   i2c_master_gpio_init,config SDA and SCL gpio to open-drain output mode.\r
+  *\r
+  * @param  set ack to i2c bus as level value.\r
+  *\r
+  * @return  null\r
+  */\r
+void i2c_master_setAck(uint8_t level);\r
+\r
+/**\r
+  * @brief   confirm if peer send ack.\r
+  *\r
+  * @param null\r
+  *\r
+  * @return  null\r
+  */\r
+uint8_t i2c_master_getAck(void);\r
+\r
+/**\r
+  * @brief   read Byte from i2c bus.\r
+  *\r
+  * @param null\r
+  *\r
+  * @return  the byte which read from i2c bus.\r
+  */\r
+uint8_t i2c_master_readByte(void);\r
+\r
+/**\r
+  * @brief   write wrdata value(one byte) into i2c.\r
+  *\r
+  * @param uint8_t wrdata:write value\r
+  *\r
+  * @return  null\r
+  */\r
+void i2c_master_writeByte(uint8_t wrdata);\r
+\r
+/**\r
+  * @brief   i2c_master_checkAck.\r
+  *\r
+  * @param null\r
+  *\r
+  * @return  the result of check ack\r
+  */\r
+bool i2c_master_checkAck(void);\r
+\r
+/**\r
+  * @brief   i2c master send Ack.\r
+  *\r
+  * @param null\r
+  *\r
+  * @return  null\r
+  */\r
+void i2c_master_send_ack(void);\r
+\r
+/**\r
+  * @brief   i2c master send Nack.\r
+  *\r
+  * @param null\r
+  *\r
+  * @return  null\r
+  */\r
+void i2c_master_send_nack(void);\r
+\r
+/**\r
+  * @}\r
+  */\r
+\r
+/**\r
+  * @}\r
+  */\r
+\r
+#endif\r
diff --git a/components/esp_audio/include/driver/i2c_struct.h b/components/esp_audio/include/driver/i2c_struct.h
new file mode 100644 (file)
index 0000000..71711b2
--- /dev/null
@@ -0,0 +1,419 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+\r
+//     http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+\r
+#ifndef _DRIVER_II2C_STRUCT_H_\r
+#define _DRIVER_II2C_STRUCT_H_\r
+\r
+\r
+typedef struct I2C_DEV{\r
+       union {\r
+               struct {\r
+                       unsigned int scl_low_period: 14;\r
+                       unsigned int reserved14: 18;\r
+               } fld;\r
+               uint32_t val;\r
+       } SCL_LOW_PERIOD;\r
+       union {\r
+               struct {\r
+                       unsigned int sda_force_out: 1;\r
+                       unsigned int scl_force_out: 1;\r
+                       unsigned int sample_scl_level: 1;\r
+                       unsigned int reserved3: 1;\r
+                       unsigned int ms_mode: 1;\r
+                       unsigned int trans_start: 1;\r
+                       unsigned int tx_lsb_first: 1;\r
+                       unsigned int rx_lsb_first: 1;\r
+                       unsigned int clk_en: 1;\r
+                       unsigned int reserved9: 23;\r
+               } fld;\r
+               uint32_t val;\r
+       } CTR;\r
+       union {\r
+               struct {\r
+                       unsigned int ack_rec: 1;\r
+                       unsigned int slave_rw: 1;\r
+                       unsigned int time_out: 1;\r
+                       unsigned int arb_lost: 1;\r
+                       unsigned int bus_busy: 1;\r
+                       unsigned int slave_addressed: 1;\r
+                       unsigned int byte_trans: 1;\r
+                       unsigned int reserved7: 1;\r
+                       unsigned int rxfifo_cnt: 6;\r
+                       unsigned int reserved14: 4;\r
+                       unsigned int txfifo_cnt: 6;\r
+                       unsigned int scl_main_state_last: 3;\r
+                       unsigned int reserved27: 1;\r
+                       unsigned int scl_state_last: 3;\r
+                       unsigned int reserved31: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } SR;\r
+       union {\r
+               struct {\r
+                       unsigned int time_out_reg: 20;\r
+                       unsigned int reserved20: 12;\r
+               } fld;\r
+               uint32_t val;\r
+       } TO;\r
+       union {\r
+               struct {\r
+                       unsigned int slave_addr: 15;\r
+                       unsigned int reserved15: 16;\r
+                       unsigned int addr_10bit_en: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } SLAVE_ADDR;\r
+       union {\r
+               struct {\r
+                       unsigned int rxfifo_start_addr: 5;\r
+                       unsigned int rxfifo_end_addr: 5;\r
+                       unsigned int txfifo_start_addr: 5;\r
+                       unsigned int txfifo_end_addr: 5;\r
+                       unsigned int reserved20: 12;\r
+               } fld;\r
+               uint32_t val;\r
+       } RXFIFO_ST;\r
+       union {\r
+               struct {\r
+                       unsigned int rxfifo_full_thrhd: 5;\r
+                       unsigned int txfifo_empty_thrhd: 5;\r
+                       unsigned int nonfifo_en: 1;\r
+                       unsigned int fifo_addr_cfg_en: 1;\r
+                       unsigned int rx_fifo_rst: 1;\r
+                       unsigned int tx_fifo_rst: 1;\r
+                       unsigned int nonfifo_rx_thres: 6;\r
+                       unsigned int nonfifo_tx_thres: 6;\r
+                       unsigned int reserved26: 6;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_FIFO_CONF;\r
+       union {\r
+               struct {\r
+                       unsigned int fifo_data: 8;\r
+                       unsigned int reserved8: 24;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_DATA;\r
+       union {\r
+               struct {\r
+                       unsigned int rxfifo_full_int_raw: 1;\r
+                       unsigned int txfifo_empty_int_raw: 1;\r
+                       unsigned int rxfifo_ovf_int_raw: 1;\r
+                       unsigned int end_detect_int_raw: 1;\r
+                       unsigned int slave_tran_comp_int_raw: 1;\r
+                       unsigned int arbitration_lost_int_raw: 1;\r
+                       unsigned int master_tran_comp_int_raw: 1;\r
+                       unsigned int trans_complete_int_raw: 1;\r
+                       unsigned int time_out_int_raw: 1;\r
+                       unsigned int trans_start_int_raw: 1;\r
+                       unsigned int ack_err_int_raw: 1;\r
+                       unsigned int rx_rec_full_int_raw: 1;\r
+                       unsigned int tx_send_empty_int_raw: 1;\r
+                       unsigned int reserved13: 19;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_INT_RAW;\r
+       union {\r
+               struct {\r
+                       unsigned int rxfifo_full_int_clr: 1;\r
+                       unsigned int txfifo_empty_int_clr: 1;\r
+                       unsigned int rxfifo_ovf_int_clr: 1;\r
+                       unsigned int end_detect_int_clr: 1;\r
+                       unsigned int slave_tran_comp_int_clr: 1;\r
+                       unsigned int arbitration_lost_int_clr: 1;\r
+                       unsigned int master_tran_comp_int_clr: 1;\r
+                       unsigned int trans_complete_int_clr: 1;\r
+                       unsigned int time_out_int_clr: 1;\r
+                       unsigned int trans_start_int_clr: 1;\r
+                       unsigned int ack_err_int_clr: 1;\r
+                       unsigned int rx_rec_full_int_clr: 1;\r
+                       unsigned int tx_send_empty_int_clr: 1;\r
+                       unsigned int reserved13: 19;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_INT_CLR;\r
+       union {\r
+               struct {\r
+                       unsigned int rxfifo_full_int_ena: 1;\r
+                       unsigned int txfifo_empty_int_ena: 1;\r
+                       unsigned int rxfifo_ovf_int_ena: 1;\r
+                       unsigned int end_detect_int_ena: 1;\r
+                       unsigned int slave_tran_comp_int_ena: 1;\r
+                       unsigned int arbitration_lost_int_ena: 1;\r
+                       unsigned int master_tran_comp_int_ena: 1;\r
+                       unsigned int trans_complete_int_ena: 1;\r
+                       unsigned int time_out_int_ena: 1;\r
+                       unsigned int trans_start_int_ena: 1;\r
+                       unsigned int ack_err_int_ena: 1;\r
+                       unsigned int rx_rec_full_int_ena: 1;\r
+                       unsigned int tx_send_empty_int_ena: 1;\r
+                       unsigned int reserved13: 19;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_INT_ENA;\r
+       union {\r
+               struct {\r
+                       unsigned int rxfifo_full_int_st: 1;\r
+                       unsigned int txfifo_empty_int_st: 1;\r
+                       unsigned int rxfifo_ovf_int_st: 1;\r
+                       unsigned int end_detect_int_st: 1;\r
+                       unsigned int slave_tran_comp_int_st: 1;\r
+                       unsigned int arbitration_lost_int_st: 1;\r
+                       unsigned int master_tran_comp_int_st: 1;\r
+                       unsigned int trans_complete_int_st: 1;\r
+                       unsigned int time_out_int_st: 1;\r
+                       unsigned int trans_start_int_st: 1;\r
+                       unsigned int ack_err_int_st: 1;\r
+                       unsigned int rx_rec_full_int_st: 1;\r
+                       unsigned int tx_send_empty_int_st: 1;\r
+                       unsigned int reserved13: 19;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_INT_STATUS;\r
+       union {\r
+               struct {\r
+                       unsigned int sda_hold_time: 10;\r
+                       unsigned int reserved10: 22;\r
+               } fld;\r
+               uint32_t val;\r
+       } SDA_HOLD;\r
+       union {\r
+               struct {\r
+                       unsigned int sda_sample_time: 10;\r
+                       unsigned int reserved10: 22;\r
+               } fld;\r
+               uint32_t val;\r
+       } SDA_SAMPLE;\r
+       union {\r
+               struct {\r
+                       unsigned int scl_high_period: 14;\r
+                       unsigned int reserved14: 18;\r
+               } fld;\r
+               uint32_t val;\r
+       } SCL_HIGH_PERIOD;\r
+       uint32_t reserved_3c;\r
+       union {\r
+               struct {\r
+                       unsigned int scl_start_hold_time: 10;\r
+                       unsigned int reserved10: 22;\r
+               } fld;\r
+               uint32_t val;\r
+       } SCL_START_HOLD;\r
+       union {\r
+               struct {\r
+                       unsigned int scl_rstart_setup_time: 10;\r
+                       unsigned int reserved10: 22;\r
+               } fld;\r
+               uint32_t val;\r
+       } SCL_RSTART_SETUP;\r
+       union {\r
+               struct {\r
+                       unsigned int scl_stop_hold_time: 14;\r
+                       unsigned int reserved14: 18;\r
+               } fld;\r
+               uint32_t val;\r
+       } SCL_STOP_HOLD;\r
+       union {\r
+               struct {\r
+                       unsigned int scl_stop_setup_time: 10;\r
+                       unsigned int reserved10: 22;\r
+               } fld;\r
+               uint32_t val;\r
+       } SCL_STOP_SETUP;\r
+       union {\r
+               struct {\r
+                       unsigned int scl_filter_thres: 3;\r
+                       unsigned int scl_filter_en: 1;\r
+                       unsigned int reserved4: 28;\r
+               } fld;\r
+               uint32_t val;\r
+       } SCL_FILTER_CFG;\r
+       union {\r
+               struct {\r
+                       unsigned int sda_filter_thres: 3;\r
+                       unsigned int sda_filter_en: 1;\r
+                       unsigned int reserved4: 28;\r
+               } fld;\r
+               uint32_t val;\r
+       } SDA_FILTER_CFG;\r
+       union {\r
+               struct {\r
+                       //unsigned int command: 14;\r
+                       unsigned int command_byte_num: 8;\r
+                       unsigned int command_ack_en: 1;\r
+                       unsigned int command_ack_exp: 1;\r
+                       unsigned int command_ack_val: 1;\r
+                       unsigned int command_op_code: 3;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD[16];\r
+#if 0\r
+       union {\r
+               struct {\r
+                       unsigned int command1: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command1_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD1;\r
+       union {\r
+               struct {\r
+                       unsigned int command2: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command2_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD2;\r
+       union {\r
+               struct {\r
+                       unsigned int command3: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command3_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD3;\r
+       union {\r
+               struct {\r
+                       unsigned int command4: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command4_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD4;\r
+       union {\r
+               struct {\r
+                       unsigned int command5: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command5_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD5;\r
+       union {\r
+               struct {\r
+                       unsigned int command6: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command6_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD6;\r
+       union {\r
+               struct {\r
+                       unsigned int command7: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command7_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD7;\r
+       union {\r
+               struct {\r
+                       unsigned int command8: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command8_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD8;\r
+       union {\r
+               struct {\r
+                       unsigned int command9: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command9_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD9;\r
+       union {\r
+               struct {\r
+                       unsigned int command10: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command10_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD10;\r
+       union {\r
+               struct {\r
+                       unsigned int command11: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command11_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD11;\r
+       union {\r
+               struct {\r
+                       unsigned int command12: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command12_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD12;\r
+       union {\r
+               struct {\r
+                       unsigned int command13: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command13_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD13;\r
+       union {\r
+               struct {\r
+                       unsigned int command14: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command14_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD14;\r
+       union {\r
+               struct {\r
+                       unsigned int command15: 14;\r
+                       unsigned int reserved14: 17;\r
+                       unsigned int command15_done: 1;\r
+               } fld;\r
+               uint32_t val;\r
+       } I2C_COMD15;\r
+#endif\r
+       uint32_t reserved_98;\r
+       uint32_t reserved_9c;\r
+       uint32_t reserved_a0;\r
+       uint32_t reserved_a4;\r
+       uint32_t reserved_a8;\r
+       uint32_t reserved_ac;\r
+       uint32_t reserved_b0;\r
+       uint32_t reserved_b4;\r
+       uint32_t reserved_b8;\r
+       uint32_t reserved_bc;\r
+       uint32_t reserved_c0;\r
+       uint32_t reserved_c4;\r
+       uint32_t reserved_c8;\r
+       uint32_t reserved_cc;\r
+       uint32_t reserved_d0;\r
+       uint32_t reserved_d4;\r
+       uint32_t reserved_d8;\r
+       uint32_t reserved_dc;\r
+       uint32_t reserved_e0;\r
+       uint32_t reserved_e4;\r
+       uint32_t reserved_e8;\r
+       uint32_t reserved_ec;\r
+       uint32_t reserved_f0;\r
+       uint32_t reserved_f4;\r
+       //struct {\r
+       //      uint32_t val;\r
+       //}I2C_DATE;\r
+       uint32_t reserved_fc;\r
+       //struct {\r
+       //      uint32_t val;\r
+       //}I2C_FIFO_START_ADDR;\r
+}I2C_TypeDef;\r
+\r
+\r
+#endif\r
diff --git a/components/esp_audio/include/driver/i2s.h b/components/esp_audio/include/driver/i2s.h
new file mode 100644 (file)
index 0000000..f74fdc7
--- /dev/null
@@ -0,0 +1,431 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+#ifndef _DRIVER_I2S_H_
+#define _DRIVER_I2S_H_
+#include "soc/dport_reg.h"
+#include "soc/i2s_reg.h"
+#include <stdint.h>
+#include "dma.h"
+#include "soc/soc.h"
+#include "esp_err.h"
+
+#define ETS_I2S0_INUM     17
+#define ETS_I2S1_INUM     17
+
+#define ESP_I2S1_INTR_ATTACH(func, arg) \
+    xt_set_interrupt_handler(ETS_I2S1_INUM, (func), (void *)(arg))
+
+
+//*****************************************************************************
+//
+// Make sure all of the definitions in this header have a C binding.
+//
+//*****************************************************************************
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \defgroup Driver_APIs Driver APIs
+ * @brief Driver APIs
+ */
+
+/** @addtogroup Driver_APIs
+ * @{
+ */
+
+/** \defgroup I2S_Driver_APIs I2S Driver APIs
+ * @brief I2S driver APIs
+ */
+
+/** @addtogroup I2S_Driver_APIs
+ * @{
+ */
+
+// ena:1 enable audio pll;
+//     0 disable audio pll;
+// freq = (xtal * (sdm2 + 4))/((o_div+2)*2)
+// xtal is 40M/26M
+// (xtal * (sdm2 + 4)):240 ~ 600MHz
+// o_div              :  0 ~ 31
+void rtc_plla_ena(uint8_t ena, uint32_t sdm2, uint32_t o_div);
+
+
+/**
+ * @brief Two I2S module.I2S0 has support pdm.
+ *
+ */
+typedef enum {
+    I2S_NUM_I2S0  = 0x0,
+    I2S_NUM_I2S1  = 0x1,
+    I2S_NUM_MAX   = I2S_NUM_I2S1,
+} i2s_num_t;
+
+/**
+ * @brief I2S module working mode.
+ *
+ */
+typedef enum {
+    I2S_MODE_MASTER_TX   = 1,
+    I2S_MODE_MASTER_RX   = 2,
+    I2S_MODE_SLAVE_TX    = 3,
+    I2S_MODE_SLAVE_RX    = 4,
+} i2s_mode_t;
+
+/**
+ * @brief I2S bit width per sample.
+ *
+ */
+typedef enum {
+    I2S_BITS_PER_SAMPLE_8BIT   = 8,
+    I2S_BITS_PER_SAMPLE_16BIT   = 16,
+    I2S_BITS_PER_SAMPLE_24BIT   = 24,
+    I2S_BITS_PER_SAMPLE_32BIT   = 32,
+} i2s_sample_bits_t;
+
+/**
+ * @brief I2S audio data formats.
+ *
+ */
+typedef enum {
+    I2S_STD_FORMAT_I2S,
+    I2S_STD_FORMAT_MSB,
+    I2S_STD_FORMAT_LSB,
+    I2S_STD_FORMAT_PCM_SHORT,
+    I2S_STD_FORMAT_PCM_LONG,
+} i2s_std_format_t;
+
+/**
+ * @brief I2S data port interface type
+ */
+typedef enum {
+    I2S_IFACE_TYPE_DMA,
+    I2S_IFACE_TYPE_CPU,
+} i2s_interface_t;
+
+
+/**
+ * @brief I2S channel format type
+ */
+typedef enum {
+    I2S_CHANNEL_FMT_RIGHT_LEFT,
+    I2S_CHANNEL_FMT_ALL_RIGHT,
+    I2S_CHANNEL_FMT_ALL_LEFT,
+    I2S_CHANNEL_FMT_ONLY_RIGHT,
+    I2S_CHANNEL_FMT_ONLY_LEFT,
+} i2s_channel_fmt_t;
+
+/**
+ * @brief I2S audio sample rate per second, measured in Hz.
+ *
+ */
+typedef enum {
+    I2S_SAMPLE_RATE_96K  = 96000,
+    I2S_SAMPLE_RATE_48K  = 48000,
+    I2S_SAMPLE_RATE_44K  = 44100,
+    I2S_SAMPLE_RATE_32K  = 32000,
+    I2S_SAMPLE_RATE_22K  = 22050,
+    I2S_SAMPLE_RATE_16K  = 16000,
+    I2S_SAMPLE_RATE_11K  = 11025,
+    I2S_SAMPLE_RATE_8K   = 8000,
+} i2s_sample_rate_t;
+
+/**
+ * @brief PDM sample rate ratio, measured in Hz.
+ *
+ */
+typedef enum {
+    PDM_SAMPLE_RATE_RATIO_64,
+    PDM_SAMPLE_RATE_RATIO_128,
+} pdm_sample_rate_ratio_t;
+
+/**
+ * @brief PDM PCM convter enable/disable.
+ *
+ */
+typedef enum {
+    PDM_PCM_CONV_ENABLE,
+    PDM_PCM_CONV_DISABLE,
+} pdm_pcm_conv_t;
+
+/**
+ * @brief I2s module work type.
+ *
+ */
+typedef enum {
+    I2S_MODULE_WORK_TYPE_I2S,
+    I2S_MODULE_WORK_TYPE_PDM,
+} i2s_module_work_type_t;
+
+
+// @brief I2S interrupt source defined.
+typedef enum {
+    I2S_INT_SRC_ONE_BUF_SEND_DONE = I2S_OUT_EOF_INT_ENA,          //BIT(12) One package buffer has been sent.
+    I2S_INT_SRC_ONE_BUF_RECV_DONE = I2S_IN_SUC_EOF_INT_ENA,       //BIT(9) Received one package buffer 
+
+    I2S_INT_SRC_TX_EMPTY          = I2S_TX_REMPTY_INT_ENA,        //BIT(5) Tx buffer is empty
+    I2S_INT_SRC_RX_FULL           = I2S_RX_WFULL_INT_ENA,         //BIT(2) Rx buffer is full
+    I2S_INT_SRC_TX_HALF_EMPTY     = I2S_TX_PUT_DATA_INT_ENA,      //BIT(1) Tx buffer is half empty
+    I2S_INT_SRC_RX_HALF_FULL      = I2S_RX_TAKE_DATA_INT_ENA,     //BIT(0) Rx buffer is half full
+} i2s_int_src_t;
+
+/**
+ * @brief I2S attribute
+ */
+typedef struct {
+    i2s_module_work_type_t       type;
+    i2s_mode_t                   mode;
+    i2s_sample_rate_t            rate;
+    i2s_sample_bits_t            bits;
+    i2s_std_format_t             std;
+    i2s_interface_t              iface;
+    i2s_channel_fmt_t            channel;
+    pdm_sample_rate_ratio_t      ratio;
+    pdm_pcm_conv_t               conv;
+} i2s_module_info_t;
+
+/**
+ * @brief I2S attribute
+ */
+typedef struct {
+    i2s_module_info_t  tx_mode;
+    i2s_module_info_t  rx_mode;
+} i2s_attr_t;
+
+// I2S DMA attribite
+typedef struct {
+    uint32_t              mode;
+    uint32_t              buf_size;
+    ping_pong_buf_t      *buf;
+} i2s_dma_attr_t;
+
+
+/**
+ * @brief      Initialize I2s with a given module.
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @param[in]  pAttr    Pointer to a struct i2s_attr_t that indicates I2S working attribution.
+ *
+ * @return     None
+ *
+ */
+void i2s_init(i2s_num_t i2sNum, i2s_attr_t *pAttr);
+
+/**
+ * @brief      Reset I2s with a given module.
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @return     None
+ *
+ */
+void i2s_reset(i2s_num_t i2sNum);
+
+/**
+ * @brief      Start I2s module
+ *
+ * @param[in]  type   Indicates I2s module which mode will be working.
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @param[in]  mode    Indicates I2S working mode.
+ *
+ * @return     None
+ *
+ */
+void i2s_start(i2s_module_work_type_t type, i2s_num_t i2sNum, i2s_mode_t mode);
+
+/**
+ * @brief      Stop I2s module.
+ *
+ * @param[in]  type    Indicates I2s module which mode will be stop.
+ *
+ * @param[in]  i2sNum   Number of i2s module.
+ *
+ * @param[in]  mode    Indicates I2S working mode.
+ *
+ * @return     None
+ *
+ */
+void i2s_stop(i2s_module_work_type_t type, i2s_num_t i2sNum, i2s_mode_t mode);
+
+/**
+ * @brief      Set i2s module clock.
+ *
+ * @param[in]  rate   bit clock.
+ *
+ * @param[in]  bits    bit length.
+ *
+ * @return     None
+ *
+ */
+void i2s_clk_set(int rate, int bits);
+
+/**
+ * @brief      Enable I2s DMA mode.
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @param[in]  mode    Pointer to a struct i2s_attr_t that indicates I2S working attribution.
+ *
+ * @return     None
+ *
+ */
+void i2s_dma_enable(i2s_num_t i2sNum, i2s_mode_t mode);
+
+/**
+ * @brief      Disable I2s DMA mode.
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @param[in]  mode    Pointer to a struct i2s_attr_t that indicates I2S working attribution.
+ *
+ * @return     None
+ *
+ */
+void i2s_dma_disable(i2s_num_t i2sNum, i2s_mode_t mode);
+
+/**
+ * @brief      Get ping buffer address.
+ *
+ * @param[in]  obj   Number of i2s module
+ *
+ * @return     None
+ *
+ */
+uint32_t* i2s_dma_ping_buf_get(i2s_dma_attr_t *obj);
+
+/**
+ * @brief      Get pong buffer address.
+ *
+ * @param[in]  obj   Number of i2s module
+ *
+ * @param[in]  pAttr    Pointer to a struct i2s_attr_t that indicates I2S working attribution.
+ *
+ * @return     None
+ *
+ */
+uint32_t* i2s_dma_pong_buf_get(i2s_dma_attr_t *obj);
+
+/**
+ * @brief      Get without working ping-pong buffer address.
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @param[in]  obj    Pointer to a struct i2s_attr_t that indicates I2S working attribution.
+ *
+ * @return     None
+ *
+ */
+uint32_t* i2s_dma_status_get(i2s_num_t i2sNum, i2s_dma_attr_t *obj);
+
+/**
+ * @brief      Set the Ping-Pong buffer to the destination
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @param[in]  obj    Pointer to a struct i2s_attr_t that indicates I2S working attribution.
+ *
+ * @return     None
+ *
+ */
+void i2s_dma_dest_add_set(i2s_num_t i2sNum, i2s_dma_attr_t *obj);
+
+/**
+ * @brief      Initialize DMA and create a I2S DMA instance.
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @param[in]  obj    Pointer to a struct i2s_attr_t that indicates I2S working attribution.
+ *
+ * @param[in]  isr    Pointer to a function that will be called
+ *
+ * @return     -1:indicates parameter error, -2: DMA buffer init failure, others indicates success.
+ *
+ */
+int i2s_dma_init(i2s_num_t i2sNum, i2s_dma_attr_t* obj, void *isr);
+
+/**
+ * @brief      Destroy the I2S DMA instance.
+ *
+ * @param[in]  obj   Pointer to a struct i2s_attr_t that indicates I2S working attribution.
+ *
+ * @return     ESP_FAIL:indicates parameter error, ESP_OK :indicates success.
+ *
+ */
+esp_err_t i2s_dma_uninit(i2s_dma_attr_t *obj);
+
+/**
+ * @brief      Enable the I2s module interrupt source.
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @param[in]  intSrc   Indicates which interrupt source to be enable.
+ *
+ * @return     None
+ *
+ */
+void i2s_int_enable(i2s_num_t i2sNum, i2s_int_src_t intSrc);
+
+/**
+ * @brief      Disable the I2s module interrupt source.
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @param[in]  intSrc   Indicates which interrupt source to be disable.
+ *
+ * @return     None
+ *
+ */
+void i2s_int_disable(i2s_num_t i2sNum, i2s_int_src_t intSrc);
+
+/**
+ * @brief      Clear the I2s module interrupt source.
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @param[in]  intSrc   Indicates which interrupt source to be clear.
+ *
+ * @return     None
+ *
+ */
+void i2s_int_clear(i2s_num_t i2sNum, i2s_int_src_t intSrc);
+
+/**
+ * @brief      Get the I2s module interrupt source
+ *
+ * @param[in]  i2sNum   Number of i2s module
+ *
+ * @return     None
+ *
+ */
+uint32_t i2s_int_status_get(i2s_num_t i2sNum);
+
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __I2S_H__
diff --git a/components/esp_audio/include/driver/ledc_pwm.h b/components/esp_audio/include/driver/ledc_pwm.h
new file mode 100644 (file)
index 0000000..7b54810
--- /dev/null
@@ -0,0 +1,281 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef _DRIVER_LEDC_PWM_H_
+#define _DRIVER_LEDC_PWM_H_
+
+#include "soc/soc.h"
+#include "soc/ledc_reg.h"
+#include "driver/gpio.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------
+                   HSCHX_LEDC_PWM
+---------------------------------------------------*/
+#define LEDC_HSCHX_CONF0_REG(CHANNEL)  (LEDC_HSCH0_CONF0_REG+0X14*(CHANNEL)) 
+#define LEDC_HSCHX_HPOINT_REG(CHANNEL) (LEDC_HSCH0_HPOINT_REG+0X14*(CHANNEL))
+#define LEDC_HSCHX_DUTY_REG(CHANNEL)   (LEDC_HSCH0_DUTY_REG+0X14*(CHANNEL))
+#define LEDC_HSCHX_CONF1_REG(CHANNEL)   (LEDC_HSCH0_CONF1_REG+0X14*(CHANNEL))
+#define LEDC_HSCHX_DUTY_R_REG(CHANNEL) (LEDC_HSCH0_DUTY_R_REG+0X14*(CHANNEL))
+/*-------------------------------------------------
+                   LSCHX_LEDC_PWM
+--------------------------------------------------*/
+#define LEDC_LSCHX_CONF0_REG(CHANNEL)  (LEDC_LSCH0_CONF0_REG+0X14*(CHANNEL)) 
+#define LEDC_LSCHX_HPOINT_REG(CHANNEL) (LEDC_LSCH0_HPOINT_REG+0X14*(CHANNEL))
+#define LEDC_LSCHX_DUTY_REG(CHANNEL)   (LEDC_LSCH0_DUTY_REG+0X14*(CHANNEL))
+#define LEDC_LSCHX_CONF1_REG(CHANNEL)   (LEDC_LSCH0_CONF1_REG+0X14*(CHANNEL))
+#define LEDC_LSCHX_DUTY_R_REG(CHANNEL) (LEDC_LSCH0_DUTY_R_REG+0X14*(CHANNEL))
+
+/*---------------------------------------------------
+               HTIMERX_LEDC_PWM
+---------------------------------------------------*/
+#define LEDC_HSTIMERX_CONF_REG(TIME) (LEDC_HSTIMER0_CONF_REG+0X08*(TIME))
+#define LEDC_HSTIMERX_VALUE_REG(TIME) (LEDC_HSTIMER0_VALUE_REG+0X08*(TIME))
+/*----------------------------------------------
+               LTIMERX_LEDC_PWM
+-----------------------------------------------*/
+#define LEDC_LSTIMERX_CONF_REG(TIME) (LEDC_LSTIMER0_CONF_REG+0X08*(TIME))
+#define LEDC_LSTIMERX_VALUE_REG(TIME) (LEDC_LSTIMER0_VALUE_REG+0X08*(TIME))
+
+enum ledc_pwm_mode{
+    LEDC_HIGH_SPEED_MODE=0, /**< Ledc high speed mode */
+    LEDC_LOW_SPEED_MODE,     /**< Ledc low speed mode */
+};
+enum ledc_pwm_intr_type{
+    LEDC_INTR_DISABLE=0,/**< Disable ledc interrupt */
+    LEDC_INTR_CHANGE_END,    /**< Enable ledc interrupt */
+};
+enum ledc_pwm_increase_direction{
+    LEDC_DIR_DECREASE=0,/**<ledc change decrease direction */
+    LEDC_DIR_INCREASE=1,/**<ledc change increase direction */
+};
+enum ledc_timer_source{
+    LEDC_TIMER0=0,/**<ledc source time TIME0 */
+    LEDC_TIMER1,  /**<ledc source time TIME1 */
+    LEDC_TIMER2,  /**<ledc source time TIME2 */
+    LEDC_TIMER3,  /**<ledc source time TIME3 */
+};
+enum ledc_pwm_channel{
+    LEDC_PWM_CHANNEL0=0,/**<ledc channel 0 */
+    LEDC_PWM_CHANNEL1,  /**<ledc channel 1 */
+    LEDC_PWM_CHANNEL2,  /**<ledc channel 2 */
+    LEDC_PWM_CHANNEL3,  /**<ledc channel 3 */
+    LEDC_PWM_CHANNEL4,  /**<ledc channel 4 */
+    LEDC_PWM_CHANNEL5,  /**<ledc channel 5 */
+    LEDC_PWM_CHANNEL6,  /**<ledc channel 6 */
+    LEDC_PWM_CHANNEL7,  /**<ledc channel 7 */
+};
+enum ledc_pwm_duty_depth{
+    LEDC_PWM_DUTY_DEPTH_10_BIT=10, /**<ledc pwm depth 10Bit */
+    LEDC_PWM_DUTY_DEPTH_11_BIT=11, /**<ledc pwm depth 11Bit */
+    LEDC_PWM_DUTY_DEPTH_12_BIT=12, /**<ledc pwm depth 12Bit */
+    LEDC_PWM_DUTY_DEPTH_13_BIT=13, /**<ledc pwm depth 13Bit */
+    LEDC_PWM_DUTY_DEPTH_14_BIT=14, /**<ledc pwm depth 14Bit */
+    LEDC_PWM_DUTY_DEPTH_15_BIT=15, /**<ledc pwm depth 15Bit */
+};
+typedef struct ledc_event_message{
+    enum ledc_pwm_mode mode;
+    enum ledc_pwm_channel channel;
+}ledc_event_msg_t;
+
+typedef void (*ledc_event_callback)(ledc_event_msg_t ledc_mes);
+
+typedef struct ledc_pwm_channel_config{
+    gpio_num_t gpio_num;
+    enum ledc_pwm_channel channel;
+    enum ledc_pwm_intr_type intr_enable;
+    /*if selet same time,the fre and the ledc_depth must be same*/
+    enum ledc_timer_source time;
+    uint32_t fre_hz;
+    uint16_t duty;
+    enum ledc_pwm_duty_depth ledc_pre_depth;
+}ledc_channel_config_t;
+
+/**
+ * @brief         ledc common configuration
+ *
+ * User this Function,config ledc the channel output gpio_num,interrupt,source time,frequench(Hz),start duty,ledc depth
+ *
+ * @param[in]  mode : select the ledc mode,high mode and low mode,now we only support high mode ,next will add low mode
+ *
+ * @param[in]  ledc_channel_config_t  ledc_channel_config_t.gpio_num       : the ledc output gpio_num,if you want to use gpio16,
+ *                                                                       ledc_channel_config_t.gpio_num=GPIO_NUM_16
+ *
+ *                                  ledc_channel_config_t.channel        : current configuration channel
+ *                                  ledc_channel_config_t.intr_enable    : config interrupe ,Gradient interrupt enable  or Gradient interrupt disable
+ *                                  ledc_channel_config_t.time           : select the time of channel, when different channel ,select same time ,their
+ *                                                                       fre_hz and ledc_pre_depth must be same
+ *                                  ledc_channel_config_t.fre_hz         : ledc channel frequech(Hz),when different channel ,select same time ,their
+ *                                                                       fre_hz and ledc_pre_depth must be same
+ *                                  ledc_channel_config_t.duty           : ledc channel duty,if the ledc_pre_depth = 10,the duty range is [0,2**10],
+ *                                  ledc_channel_config_t.ledc_pre_depth : ledc channel duty depth when different channel ,select same time ,their
+ *                                                                       fre_hz and ledc_pre_depth must be same
+ * @return       None
+ *
+ */
+void ledc_pwm_channel_config(enum ledc_pwm_mode mode,ledc_channel_config_t* ledc_channel_config);
+
+/**
+ * @brief         ledc start
+ *
+ * After call ledc_pwm_set_fre,ledc_pwm_set_duty,ledc_pwm_set_gradient need to call this function
+ *
+ * @param[in]  mode    : select the ledc mode,high mode and low mode,now we only support high mode ,next will add low mode
+ *
+ * @param[in]  channel : current configuration channel
+ *
+ * @return       None
+ *
+ */
+void ledc_pwm_start(enum ledc_pwm_mode mode,enum ledc_pwm_channel channel);
+
+/**
+ * @brief         ledc stop
+ *
+ * Disable ledc output,and set idle level
+ *
+ * @param[in]  mode    : select the ledc mode,high mode and low mode,now we only support high mode ,next will add low mode
+ *
+ * @param[in]  channel : current configuration channel
+ *
+ * @return       None
+ *
+ */
+void ledc_pwm_stop(enum ledc_pwm_mode mode,enum ledc_pwm_channel channel,uint8_t idle_level);
+
+/**
+ * @brief         ledc set fre
+ *
+ * Set ledc fre ,the unit is Hz,After the function calls the ledc_pwm_start function, the function can take effect.
+ *
+ * @param[in]  mode    : select the ledc mode,high mode and low mode,now we only support high mode ,next will add low mode
+ *
+ * @param[in]  channel : current configuration channel
+ *
+ * @param[in]  fre_hz  : set the ledc fre
+ *
+ * @return       None
+ *
+ */
+void ledc_pwm_set_fre(enum ledc_pwm_mode mode,enum ledc_pwm_channel channel,uint32_t fre_hz);
+
+/**
+ * @brief         ledc set duty
+ *
+ * Set ledc duty ,After the function calls the ledc_pwm_start function, the function can take effect.
+ *
+ * @param[in]  mode    : select the ledc mode,high mode and low mode,now we only support high mode ,next will add low mode
+ *
+ * @param[in]  channel : current configuration channel
+ *
+ * @param[in]  duty  : set the ledc duty ,if the ledc_pre_depth = 10,the duty range is [0,2**10]
+ *
+ * @return       None
+ *
+ */
+void ledc_pwm_set_duty(enum ledc_pwm_mode mode,enum ledc_pwm_channel channel,uint16_t duty);
+
+/**
+ * @brief         ledc get duty
+ *
+ * @param[in]  mode    : select the ledc mode,high mode and low mode,now we only support high mode ,next will add low mode
+ *
+ * @param[in]  channel : current configuration channel
+ *
+ *
+ * @return       current ledc duty
+ *
+ */
+uint32_t ledc_pwm_get_duty(enum ledc_pwm_mode mode,enum ledc_pwm_channel channel);
+
+/**
+ * @brief         ledc get fre
+ *
+ * @param[in]  mode    : select the ledc mode,high mode and low mode,now we only support high mode ,next will add low mode
+ *
+ * @param[in]  channel : current configuration channel
+ *
+ * @return       current ledc fre
+ *
+ */
+uint32_t ledc_pwm_get_fre_hz(enum ledc_pwm_mode mode,enum ledc_pwm_channel channel);
+
+/**
+ * @brief          register ledc interrupt occur callback function
+ *
+ * User this Function,register interrupt event callback . when ledc interrupt is triggered , the event callback
+ * will give appliacation .ledc_event_callback is called by ledc interrupt , so the ledc_event_callback
+ * should be completed in a very short period of time. If you want to deal with a lot of things,Please Creat
+ * a task ,and post message from the gpio_event_callback to the task.
+ *
+ * @param[in]  func : the func will be called,when ledc interrupt is triggered ,and the param of func is the
+ *                    ledc interrupt channl and the mode
+ *
+ *
+ * @return       None
+ *
+ */
+void ledc_register_event_callback(ledc_event_callback func);
+
+/**
+ * @brief         ledc set gradient
+ *
+ * Set ledc gradient , After the function calls the ledc_pwm_start function , the function can take effect.
+ *
+ * @param[in]  mode                 : select the ledc mode,high mode and low mode,now we only support high mode ,next will add low mode
+ *
+ * @param[in]  channel              : current configuration channel
+ *
+ * @param[in]  duty                 : set the start of the gradient duty , if the ledc_pre_depth = 10,the duty range is [0,2**10]
+ *
+ * @param[in]  gradule_direction    : set the direction of the gradient
+ *
+ * @param[in]  gradule_num          : set the number of the gradient
+ *
+ * @param[in]  duty_cyle_num        : set how many ledc pwm tick each time the gradient lasts
+ *
+ * @param[in]  duty_scale           : set gradient change amplitude
+
+ * @return       None
+ *
+ */
+void ledc_pwm_set_gradient(enum ledc_pwm_mode mode,uint8_t channel,uint32_t duty,enum ledc_pwm_increase_direction gradule_direction,
+        uint16_t gradule_num,uint16_t duty_cyle_num,uint16_t duty_scale);
+/**
+ * @brief   register ledc interrupt handler
+ *
+ * @param   uint8_t ledc_intr_num     : ledc interrupt num,check the info in soc.h, and please see the core-isa.h for more details
+ * @param   void (* fn)(void* )       : intr handler function
+ * @param   void * arg                : parameter for handler
+ *
+ * @return  null
+ */
+void ledc_intr_handler_register(uint8_t ledc_intr_num,void (* fn)(void* ),void * arg);
+
+/**
+ * @brief   default ledc interrupt init function to initialize the ledc intrrupt parameters.
+ *
+ * @param   uint8_t pcnt_intr_num    : ledc interrupt num,check the info in soc.h, and please see the core-isa.h for more details
+ *
+ * @return  null
+ */
+void ledc_intr_init_default(uint8_t ledc_intr_num);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DRIVER_LEDC_PWM_H_ */
diff --git a/components/esp_audio/include/driver/ledc_pwm_struct.h b/components/esp_audio/include/driver/ledc_pwm_struct.h
new file mode 100644 (file)
index 0000000..6bd19a4
--- /dev/null
@@ -0,0 +1,309 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef _DRIVER_LEDC_PWM_STRUCT_H_
+#define _DRIVER_LEDC_PWM_STRUCT_H_
+
+#include "soc/ledc_reg.h"
+
+#define ledc_reg_s ((ledc_reg*)(DR_REG_LEDC_BASE))
+
+typedef struct ledc_pwm_s {
+       struct ledcH_channel_config{
+               union {
+                       struct {
+                               unsigned int timer_sel_hsch0: 2;
+                               unsigned int sig_out_en_hsch0: 1;
+                               unsigned int idle_lv_hsch0: 1;
+                               unsigned int reserved4: 27;
+                               unsigned int clk_en: 1;
+                       } ;
+                       uint32_t val;
+               } LEDC_HSCHX_CONF0;
+               union {
+                       struct {
+                               unsigned int hpoint_hsch0: 20;
+                               unsigned int reserved20: 12;
+                       } ;
+                       uint32_t val;
+               } LEDC_HSCHX_HPOINT;
+               union {
+                       struct {
+                               unsigned int duty_hsch0: 25;
+                               unsigned int reserved25: 7;
+                       } ;
+                       uint32_t val;
+               } LEDC_HSCHX_DUTY;
+               union {
+                       struct {
+                               unsigned int duty_scale_hsch0: 10;
+                               unsigned int duty_cycle_hsch0: 10;
+                               unsigned int duty_num_hsch0: 10;
+                               unsigned int duty_inc_hsch0: 1;
+                               unsigned int duty_start_hsch0: 1;
+                       } ;
+                       uint32_t val;
+               } LEDC_HSCHX_CONF1;
+               union {
+                       struct {
+                               unsigned int duty_hsch0: 25;
+                               unsigned int reserved25: 7;
+                       } ;
+                       uint32_t val;
+               } LEDC_HSCHX_DUTY_R;
+       }ledch_channel_config[8];
+       struct ledcL_channel_config{
+               union {
+                       struct {
+                               unsigned int timer_sel_lsch0: 2;
+                               unsigned int sig_out_en_lsch0: 1;
+                               unsigned int idle_lv_lsch0: 1;
+                               unsigned int para_up_lsch0: 1;
+                               unsigned int reserved5: 27;
+                       } ;
+                       uint32_t val;
+               } LEDC_LSCHX_CONF0;
+               union {
+                       struct {
+                               unsigned int hpoint_lsch0: 20;
+                               unsigned int reserved20: 12;
+                       } ;
+                       uint32_t val;
+               } LEDC_LSCHX_HPOINT;
+               union {
+                       struct {
+                               unsigned int duty_lsch0: 25;
+                               unsigned int reserved25: 7;
+                       } ;
+                       uint32_t val;
+               } LEDC_LSCHX_DUTY;
+               union {
+                       struct {
+                               unsigned int duty_scale_lsch0: 10;
+                               unsigned int duty_cycle_lsch0: 10;
+                               unsigned int duty_num_lsch0: 10;
+                               unsigned int duty_inc_lsch0: 1;
+                               unsigned int duty_start_lsch0: 1;
+                       } ;
+                       uint32_t val;
+               } LEDC_LSCHX_CONF1;
+               union {
+                       struct {
+                               unsigned int duty_lsch0: 25;
+                               unsigned int reserved25: 7;
+                       } ;
+                       uint32_t val;
+               } LEDC_LSCHX_DUTY_R;
+       }ledcl_channel_config[8];
+       struct ledcH_time_config{
+               union {
+                       struct {
+                               unsigned int hstimer0_lim: 5;
+                               unsigned int div_num_hstimer0: 18;
+                               unsigned int hstimer0_pause: 1;
+                               unsigned int hstimer0_rst: 1;
+                               unsigned int tick_sel_hstimer0: 1;
+                               unsigned int reserved26: 6;
+                       } ;
+                       uint32_t val;
+               } LEDC_HSTIMERX_CONF;
+               union {
+                       struct {
+                               unsigned int hstimer0_cnt: 20;
+                               unsigned int reserved20: 12;
+                       } ;
+                       uint32_t val;
+               } LEDC_HSTIMERX_VALUE;
+       }ledch_time_config[4];
+       struct ledcL_timer_config{
+               union {
+                       struct {
+                               unsigned int lstimer0_lim: 5;
+                               unsigned int div_num_lstimer0: 18;
+                               unsigned int lstimer0_pause: 1;
+                               unsigned int lstimer0_rst: 1;
+                               unsigned int tick_sel_lstimer0: 1;
+                               unsigned int lstimer0_para_up: 1;
+                               unsigned int reserved27: 5;
+                       } ;
+                       uint32_t val;
+               } LEDC_LSTIMERX_CONF;
+               union {
+                       struct {
+                               unsigned int lstimer0_cnt: 20;
+                               unsigned int reserved20: 12;
+                       } ;
+                       uint32_t val;
+               } LEDC_LSTIMERX_VALUE;
+               
+       }ledcl_time_config[4];
+               union {
+                       struct {
+                               unsigned int hstimer0_ovf_int_raw: 1;
+                               unsigned int hstimer1_ovf_int_raw: 1;
+                               unsigned int hstimer2_ovf_int_raw: 1;
+                               unsigned int hstimer3_ovf_int_raw: 1;
+                               unsigned int lstimer0_ovf_int_raw: 1;
+                               unsigned int lstimer1_ovf_int_raw: 1;
+                               unsigned int lstimer2_ovf_int_raw: 1;
+                               unsigned int lstimer3_ovf_int_raw: 1;
+                               unsigned int duty_chng_end_hsch0_int_raw: 1;
+                               unsigned int duty_chng_end_hsch1_int_raw: 1;
+                               unsigned int duty_chng_end_hsch2_int_raw: 1;
+                               unsigned int duty_chng_end_hsch3_int_raw: 1;
+                               unsigned int duty_chng_end_hsch4_int_raw: 1;
+                               unsigned int duty_chng_end_hsch5_int_raw: 1;
+                               unsigned int duty_chng_end_hsch6_int_raw: 1;
+                               unsigned int duty_chng_end_hsch7_int_raw: 1;
+                               unsigned int duty_chng_end_lsch0_int_raw: 1;
+                               unsigned int duty_chng_end_lsch1_int_raw: 1;
+                               unsigned int duty_chng_end_lsch2_int_raw: 1;
+                               unsigned int duty_chng_end_lsch3_int_raw: 1;
+                               unsigned int duty_chng_end_lsch4_int_raw: 1;
+                               unsigned int duty_chng_end_lsch5_int_raw: 1;
+                               unsigned int duty_chng_end_lsch6_int_raw: 1;
+                               unsigned int duty_chng_end_lsch7_int_raw: 1;
+                               unsigned int reserved24: 8;
+                       } ;
+                       uint32_t val;
+               } LEDC_INT_RAW;
+               union {
+                       struct {
+                               unsigned int hstimer0_ovf_int_st: 1;
+                               unsigned int hstimer1_ovf_int_st: 1;
+                               unsigned int hstimer2_ovf_int_st: 1;
+                               unsigned int hstimer3_ovf_int_st: 1;
+                               unsigned int lstimer0_ovf_int_st: 1;
+                               unsigned int lstimer1_ovf_int_st: 1;
+                               unsigned int lstimer2_ovf_int_st: 1;
+                               unsigned int lstimer3_ovf_int_st: 1;
+                               unsigned int duty_chng_end_hsch0_int_st: 1;
+                               unsigned int duty_chng_end_hsch1_int_st: 1;
+                               unsigned int duty_chng_end_hsch2_int_st: 1;
+                               unsigned int duty_chng_end_hsch3_int_st: 1;
+                               unsigned int duty_chng_end_hsch4_int_st: 1;
+                               unsigned int duty_chng_end_hsch5_int_st: 1;
+                               unsigned int duty_chng_end_hsch6_int_st: 1;
+                               unsigned int duty_chng_end_hsch7_int_st: 1;
+                               unsigned int duty_chng_end_lsch0_int_st: 1;
+                               unsigned int duty_chng_end_lsch1_int_st: 1;
+                               unsigned int duty_chng_end_lsch2_int_st: 1;
+                               unsigned int duty_chng_end_lsch3_int_st: 1;
+                               unsigned int duty_chng_end_lsch4_int_st: 1;
+                               unsigned int duty_chng_end_lsch5_int_st: 1;
+                               unsigned int duty_chng_end_lsch6_int_st: 1;
+                               unsigned int duty_chng_end_lsch7_int_st: 1;
+                               unsigned int reserved24: 8;
+                       } ;
+                       uint32_t val;
+               } LEDC_INT_ST;
+               union {
+                       struct {
+                               unsigned int hstimer0_ovf_int_ena: 1;
+                               unsigned int hstimer1_ovf_int_ena: 1;
+                               unsigned int hstimer2_ovf_int_ena: 1;
+                               unsigned int hstimer3_ovf_int_ena: 1;
+                               unsigned int lstimer0_ovf_int_ena: 1;
+                               unsigned int lstimer1_ovf_int_ena: 1;
+                               unsigned int lstimer2_ovf_int_ena: 1;
+                               unsigned int lstimer3_ovf_int_ena: 1;
+                               unsigned int duty_chng_end_hsch0_int_ena: 1;
+                               unsigned int duty_chng_end_hsch1_int_ena: 1;
+                               unsigned int duty_chng_end_hsch2_int_ena: 1;
+                               unsigned int duty_chng_end_hsch3_int_ena: 1;
+                               unsigned int duty_chng_end_hsch4_int_ena: 1;
+                               unsigned int duty_chng_end_hsch5_int_ena: 1;
+                               unsigned int duty_chng_end_hsch6_int_ena: 1;
+                               unsigned int duty_chng_end_hsch7_int_ena: 1;
+                               unsigned int duty_chng_end_lsch0_int_ena: 1;
+                               unsigned int duty_chng_end_lsch1_int_ena: 1;
+                               unsigned int duty_chng_end_lsch2_int_ena: 1;
+                               unsigned int duty_chng_end_lsch3_int_ena: 1;
+                               unsigned int duty_chng_end_lsch4_int_ena: 1;
+                               unsigned int duty_chng_end_lsch5_int_ena: 1;
+                               unsigned int duty_chng_end_lsch6_int_ena: 1;
+                               unsigned int duty_chng_end_lsch7_int_ena: 1;
+                               unsigned int reserved24: 8;
+                       } ;
+                       uint32_t val;
+               } LEDC_INT_ENA;
+               union {
+                       struct {
+                               unsigned int hstimer0_ovf_int_clr: 1;
+                               unsigned int hstimer1_ovf_int_clr: 1;
+                               unsigned int hstimer2_ovf_int_clr: 1;
+                               unsigned int hstimer3_ovf_int_clr: 1;
+                               unsigned int lstimer0_ovf_int_clr: 1;
+                               unsigned int lstimer1_ovf_int_clr: 1;
+                               unsigned int lstimer2_ovf_int_clr: 1;
+                               unsigned int lstimer3_ovf_int_clr: 1;
+                               unsigned int duty_chng_end_hsch0_int_clr: 1;
+                               unsigned int duty_chng_end_hsch1_int_clr: 1;
+                               unsigned int duty_chng_end_hsch2_int_clr: 1;
+                               unsigned int duty_chng_end_hsch3_int_clr: 1;
+                               unsigned int duty_chng_end_hsch4_int_clr: 1;
+                               unsigned int duty_chng_end_hsch5_int_clr: 1;
+                               unsigned int duty_chng_end_hsch6_int_clr: 1;
+                               unsigned int duty_chng_end_hsch7_int_clr: 1;
+                               unsigned int duty_chng_end_lsch0_int_clr: 1;
+                               unsigned int duty_chng_end_lsch1_int_clr: 1;
+                               unsigned int duty_chng_end_lsch2_int_clr: 1;
+                               unsigned int duty_chng_end_lsch3_int_clr: 1;
+                               unsigned int duty_chng_end_lsch4_int_clr: 1;
+                               unsigned int duty_chng_end_lsch5_int_clr: 1;
+                               unsigned int duty_chng_end_lsch6_int_clr: 1;
+                               unsigned int duty_chng_end_lsch7_int_clr: 1;
+                               unsigned int reserved24: 8;
+                       } ;
+                       uint32_t val;
+               } LEDC_INT_CLR;
+               union {
+               struct {
+                       unsigned int apb_clk_sel: 1;
+                       unsigned int reserved1: 31;
+               } ;
+               uint32_t val;
+       } LEDC_CONF;
+       uint32_t reserved_194;
+       uint32_t reserved_198;
+       uint32_t reserved_19c;
+       uint32_t reserved_1a0;
+       uint32_t reserved_1a4;
+       uint32_t reserved_1a8;
+       uint32_t reserved_1ac;
+       uint32_t reserved_1b0;
+       uint32_t reserved_1b4;
+       uint32_t reserved_1b8;
+       uint32_t reserved_1bc;
+       uint32_t reserved_1c0;
+       uint32_t reserved_1c4;
+       uint32_t reserved_1c8;
+       uint32_t reserved_1cc;
+       uint32_t reserved_1d0;
+       uint32_t reserved_1d4;
+       uint32_t reserved_1d8;
+       uint32_t reserved_1dc;
+       uint32_t reserved_1e0;
+       uint32_t reserved_1e4;
+       uint32_t reserved_1e8;
+       uint32_t reserved_1ec;
+       uint32_t reserved_1f0;
+       uint32_t reserved_1f4;
+       uint32_t reserved_1f8;
+       struct {
+               uint32_t val;
+       } LEDC_DATE1;
+}ledc_reg;
+
+#endif /* _DRIVER_LEDC_PWM_STRUCT_H_ */
diff --git a/components/esp_audio/include/driver/pcnt.h b/components/esp_audio/include/driver/pcnt.h
new file mode 100644 (file)
index 0000000..56ba6f9
--- /dev/null
@@ -0,0 +1,243 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef _DRIVER_PCNT_H_
+#define _DRIVER_PCNT_H_
+
+#include <stdbool.h>
+#include "soc/dport_reg.h"
+#include "soc/pcnt_reg.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+//register address redefine,just only use simple
+#define PCNT_UX_CONF0(Channel) (PCNT_U0_CONF0_REG+(Channel)*12)
+#define PCNT_UX_CONF1(Channel) (PCNT_U0_CONF1_REG+(Channel)*12)
+#define PCNT_UX_CONF2(Channel) (PCNT_U0_CONF2_REG+(Channel)*12)
+#define PCNT_CNT_CURRENT_VALUE(Channel) ( PCNT_U0_CNT_REG+((Channel)*4))
+#define PCNT_UX_STATUS(Channel) (PCNT_U0_STATUS_REG+(Channel)*4)
+//if user not use pin param ,please give this define
+#define PCNT_INVALID_PIN_PARAM (40)
+
+typedef enum {
+    PCNT_CHANNEL0=0,
+    PCNT_CHANNEL1=1,
+    PCNT_CHANNEL2=2,
+    PCNT_CHANNEL3=3,
+    PCNT_CHANNEL4=4,
+    PCNT_CHANNEL5=5,
+    PCNT_CHANNEL6=6,
+    PCNT_CHANNEL7=7,
+}enum_pcnt_channel_t;
+//Control Mode
+enum pcnt_ctrl_high_level{
+    PCNT_H_LEVEL_INCREASE=0,
+    PCNT_H_LEVEL_DECREASE=1,
+    PCNT_H_LEVEL_FORBIDDEN=2,
+};
+enum pcnt_ctrl_low_level{
+    PCNT_L_LEVEL_INCREASE=0,
+    PCNT_L_LEVEL_DECREASE=1,
+    PCNT_L_LEVEL_FORBIDDEN=2,
+};
+//Sig Mode
+enum pcnt_sig_positive_edge{
+    PCNT_POSEDGE_INCREASE=1,
+    PCNT_POSEDGE_DECREASE=2,
+    PCNT_POSEDGE_FORBIDDEN=0,
+};
+enum pcnt_sig_negative_edge{
+    PCNT_NEGEDGE_INCREASE=1,
+    PCNT_NEGEDGE_DECREASE=2,
+    PCNT_NEGEDGE_FORBIDDEN=0,
+};
+
+//Gate Config
+typedef struct {
+    uint8_t ctrl_pin_num;
+    uint8_t sig_pin_num;
+    enum pcnt_ctrl_high_level ctrl_high_level;
+    enum pcnt_ctrl_low_level ctrl_low_level;
+    enum pcnt_sig_positive_edge sig_positive_edge;
+    enum pcnt_sig_negative_edge sig_negative_edge;
+}pcnt_gate_t;
+//Channel Config
+typedef struct {
+    enum_pcnt_channel_t channel;
+    int16_t L_limit;
+    int16_t H_limit;
+    uint16_t Filter_tick;
+    pcnt_gate_t * Gate0;
+    pcnt_gate_t * Gate1;
+}Pcnt_channel_config;
+
+typedef enum pcnt_intr_type{
+    PCNT_CNT_EQU_THRESH1=BIT(2),
+    PCNT_CNT_EQU_THRESH0=BIT(3),
+    PCNT_CNT_LESS_THAN_LIMIT_L=BIT(4),
+    PCNT_CNT_EXCEED_LIMIT_H=BIT(5),
+    PCNT_CNT_ZERO_RELATED=BIT(6),
+}enum_intr_type_t;
+
+enum pcnt_count_zero_intr_type{
+    PCNT_CNT_INCREASE_TO_ZERO=0,
+    PCNT_CNT_DECREASE_TO_ZERO=1,
+    PCNT_CNT_NEGATIVE=2,
+    PCNT_CNT_POSITIVE=3,
+};
+
+enum pcnt_intr_mask{
+    PCNT_THRESH1_INTR_ENABLE=PCNT_THR_THRES1_EN_U0,
+    PCNT_THRESH0_INTR_ENABLE=PCNT_THR_THRES0_EN_U0,
+    PCNT_L_LIMIT_INTR_ENABLE=PCNT_THR_L_LIM_EN_U0,
+    PCNT_H_LIMIT_INTR_ENABLE=PCNT_THR_H_LIM_EN_U0,
+    PCNT_ZERO_INTR_ENABLE=PCNT_THR_ZERO_EN_U0,
+    PCNT_ALL_INTR_ENABLE = (PCNT_THR_THRES1_EN_U0|PCNT_THR_THRES0_EN_U0|PCNT_THR_L_LIM_EN_U0|PCNT_THR_H_LIM_EN_U0|PCNT_THR_ZERO_EN_U0)
+};
+
+typedef struct{
+    enum_pcnt_channel_t channel;
+    int16_t thres1;
+    int16_t thres0;
+    uint32_t PcntIntrEnMask;
+}pcnt_intr_config;
+
+typedef struct pcnt_event_message{
+    enum_pcnt_channel_t channel;
+    enum_intr_type_t intr_type;
+}pcnt_event_mes;
+
+typedef void (*pcnt_event_callback)(pcnt_event_mes pcnt_message);
+
+/**
+ * @brief        resert pcnt counter,the pcnt cnt is cleared zero
+ *
+ * @param[in]  channel : the channel of the pcnt
+ *
+ * @return       true    : reset succed
+ *             fail    : reset fail
+ *
+ */
+bool pcnt_reset_counter(enum_pcnt_channel_t channel);
+
+/**
+ * @brief        start pnct counter
+ *
+ * @param[in]  channel : the channel of the pcnt
+ *
+ * @return       None
+ *
+ */
+void pcnt_start_counter(enum_pcnt_channel_t channel);
+
+/**
+ * @brief         get the pcnt counter value
+ *
+ * @param[in]  channel : the channel of the pcnt
+ *
+ * @return       the value of the pcnt
+ *
+ */
+int16_t pcnt_get_counter_value(enum_pcnt_channel_t channel);
+
+/**
+ * @brief         enable the pcnt pcnt interrupt
+ *
+ * @param[in]  channel : the channel of the pcnt
+ *
+ * @return       None
+ *
+ */
+void pcnt_enable_channel_intr(enum_pcnt_channel_t channel);
+
+/**
+ * @brief         disable the pcnt pcnt interrupt
+ *
+ * @param[in]   channel : the channel of the pcnt
+ *
+ * @return       None
+ *
+ */
+void pcnt_disable_channel_intr(enum_pcnt_channel_t channel);
+/**
+ * @brief          register pcnt interrupt occur callback function
+ *
+ * Use this Function,register interrupt event callback . when pcnt interrupt is triggered , the event callback
+ * will give appliacation .pcnt_event_callback is called by pcnt interrupt , so the gpio_event_callback
+ * should be completed in a very short period of time. If you want to deal with a lot of things,Please Creat
+ * a task ,and post message from the pcnt_event_callback to the task.
+ *
+ * @param[in]  func : the func will be called,when pcnt interrupt is triggered ,and the param of func is the
+ *                    number of the pnct channel occurs interrupt and intr type
+ *
+ *
+ * @return       None
+ *
+ */
+void pcnt_register_event_callback(pcnt_event_callback func);
+
+/**
+ * @brief         config the pcnt pcnt interrupt
+ *
+ * @param[in]   intr_config   intr_config.channel        : the channel of pcnt
+ *                            intr_config.thres1         : the intr threshold1
+ *                            intr_config.thres0         : the intr threshold0
+ *                            intr_config.PcntIntrEnMask : reference the enum pcnt_intr_mask.if user want to enable thres1 intr
+ *                                                          and thres0 intr,PcntIntrEnMask=PCNT_THRESH1_INTR_ENABLE|PCNT_THRESH0_INTR_ENABLE.
+ *
+ * @return       None
+ *
+ */
+void pcnt_set_intr(pcnt_intr_config* intr_config);
+
+/**
+ * @brief         pcnt common configuration
+ *
+ * @param[in]   channel_config   channel_config.channel     : the channel of pcnt
+ *                               channel_config.L_limit     : the counter range [L_limit,H_limit]
+ *                               channel_config.H_limit     : the counter range [L_limit,H_limit]
+ *                               channel_config.Filter_tick : the counter filte tick cnt ,tick=80M
+ *                               channel_config.Gate0       : config the Gate0
+ *                               channel_config.Gate1       : config the Gate1
+ *
+ * @return       None
+ *
+ */
+void pcnt_init_channel(Pcnt_channel_config *channel_config);
+
+/**
+ * @brief   register pcnt interrupt handler
+ *
+ * @param   uint8_t pcnt_intr_num     : pcnt interrupt num,check the info in soc.h, and please see the core-isa.h for more details
+ * @param   void (* fn)(void* )       : intr handler function
+ * @param   void * arg                : parameter for handler
+ *
+ * @return  null
+ */
+void pcnt_intr_handler_register(uint8_t pcnt_intr_num,void (* fn)(void* ),void * arg);
+
+/**
+ * @brief   default pcnt interrupt init function to initialize the pcnt intrrupt parameters.
+ *
+ * @param   uint8_t pcnt_intr_num    : pcnt interrupt num,check the info in soc.h, and please see the core-isa.h for more details
+ *
+ * @return  null
+ */
+void pcnt_intr_init_default(uint8_t pcnt_intr_num);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DRIVER_PCNT_H_ */
diff --git a/components/esp_audio/include/driver/rmt_ctrl.h b/components/esp_audio/include/driver/rmt_ctrl.h
new file mode 100644 (file)
index 0000000..652f212
--- /dev/null
@@ -0,0 +1,256 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef _DRIVER_RMT_CTRL_H_
+#define _DRIVER_RMT_CTRL_H_
+
+#include <stdbool.h>
+#include "soc/rmt_reg.h"
+#include "soc/dport_reg.h"
+#include "driver/gpio.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define RMT_CHANNEL_MEMORY_CHAR_CNT (256)
+#define RMT_CHANNEL_MEMORY_WORD_CNT (RMT_CHANNEL_MEMORY_CHAR_CNT/4)
+#define RMT_DIV_CLK_KHZ        (320)//Do not change this
+
+#define RMT_CHXCONF1(CHANNEL) ((RMT_CH0CONF1_REG)+((CHANNEL)*0X08))
+#define RMT_CHXCONF0(CHANNEL) ((RMT_CH0CONF0_REG)+((CHANNEL)*0X08))
+#define RMT_CHXSTATUS(CHANNEL) ((RMT_CH0STATUS_REG)+((CHANNEL)*0X04))
+#define RMT_CHXCARRIER_DUTY(CHANNEL) ((RMT_CH0CARRIER_DUTY_REG)+(CHANNEL)*0X04)
+#define RMT_CHXADDR_REG(CHANNEL)  (RMT_CH0ADDR_REG+((CHANNEL)*0X04))
+#define RMT_CHXSTATUS_REG(CHANNEL) (RMT_CH0STATUS_REG+((CHANNEL)*0X04))
+#define RMT_CHX_MEMEOY(channel) (DR_REG_RMT_BASE+0X800+0X4*(channel*0x40))
+
+//Config0
+#define RMT_GET_REG_CARRIER_OUT_LV_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF0(CHANNEL),RMT_CARRIER_OUT_LV_CH0_V, RMT_CARRIER_OUT_LV_CH0_S)
+#define RMT_SET_REG_CARRIER_OUT_LV_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF0(CHANNEL),RMT_CARRIER_OUT_LV_CH0_V,(val),RMT_CARRIER_OUT_LV_CH0_S)
+#define RMT_GET_REG_CARRIER_EN_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF0(CHANNEL),RMT_CARRIER_EN_CH0_V, RMT_CARRIER_EN_CH0_S)
+#define RMT_SET_REG_CARRIER_EN_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF0(CHANNEL),RMT_CARRIER_EN_CH0_V,(val),RMT_CARRIER_EN_CH0_S)
+#define RMT_GET_REG_MEM_SIZE_CHX(CHANNEL)      GET_PERI_REG_BITS2(RMT_CHXCONF0(CHANNEL),RMT_MEM_SIZE_CH0_V, RMT_MEM_SIZE_CH0_S)
+#define RMT_SET_REG_MEM_SIZE_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF0(CHANNEL),RMT_MEM_SIZE_CH0_V,(val),RMT_MEM_SIZE_CH0_S)
+#define RMT_GET_REG_IDLE_THRES_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF0(CHANNEL),RMT_IDLE_THRES_CH0_V, RMT_IDLE_THRES_CH0_S)
+#define RMT_SET_REG_IDLE_THRES_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF0(CHANNEL),RMT_IDLE_THRES_CH0_V,(val),RMT_IDLE_THRES_CH0_S)
+#define RMT_GET_REG_DIV_CNT_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF0(CHANNEL),RMT_DIV_CNT_CH0_V, RMT_DIV_CNT_CH0_S)
+#define RMT_SET_REG_DIV_CNT_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF0(CHANNEL),RMT_DIV_CNT_CH0_V,(val),RMT_DIV_CNT_CH0_S)
+//Config1
+#define RMT_GET_REG_IDLE_OUT_EN_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL), RMT_IDLE_OUT_EN_CH0_V, RMT_IDLE_OUT_EN_CH0_S)
+#define RMT_SET_REG_IDLE_OUT_EN_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL),RMT_IDLE_OUT_EN_CH0_V,(val),RMT_IDLE_OUT_EN_CH0_S)
+#define RMT_GET_REG_IDLE_OUT_LV_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL), RMT_IDLE_OUT_LV_CH0_V, RMT_IDLE_OUT_LV_CH0_S)
+#define RMT_SET_REG_IDLE_OUT_LV_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL) ,RMT_IDLE_OUT_LV_CH0_V,(val),RMT_IDLE_OUT_LV_CH0_S)
+#define RMT_GET_REG_REF_ALWAYS_ON_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL), RMT_REF_ALWAYS_ON_CH0_V, RMT_REF_ALWAYS_ON_CH0_S)
+#define RMT_SET_REG_REF_ALWAYS_ON_CHX(CHANNEL,val)     SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL),RMT_REF_ALWAYS_ON_CH0_V,(val),RMT_REF_ALWAYS_ON_CH0_S)
+#define RMT_GET_REG_REF_CNT_RST_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL), RMT_REF_CNT_RST_CH0_V, RMT_REF_CNT_RST_CH0_S)
+#define RMT_SET_REG_REF_CNT_RST_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL),RMT_REF_CNT_RST_CH0_V,(val),RMT_REF_CNT_RST_CH0_S)
+#define RMT_GET_REG_RX_FILTER_THRES_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL), RMT_RX_FILTER_THRES_CH0_V, RMT_RX_FILTER_THRES_CH0_S)
+#define RMT_SET_REG_RX_FILTER_THRES_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL),RMT_RX_FILTER_THRES_CH0_V,(val),RMT_RX_FILTER_THRES_CH0_S)
+#define RMT_GET_REG_RX_FILTER_EN_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL), RMT_RX_FILTER_EN_CH0_V, RMT_RX_FILTER_EN_CH0_S)
+#define RMT_SET_REG_RX_FILTER_EN_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL),RMT_RX_FILTER_EN_CH0_V,(val),RMT_RX_FILTER_EN_CH0_S)
+#define RMT_GET_REG_TX_CONTI_MODE_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL), RMT_TX_CONTI_MODE_CH0_V, RMT_TX_CONTI_MODE_CH0_S)
+#define RMT_SET_REG_TX_CONTI_MODE_CHX(CHANNEL,val)     SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL),RMT_TX_CONTI_MODE_CH0_V,(val),RMT_TX_CONTI_MODE_CH0_S)
+#define RMT_GET_REG_MEM_OWNER_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL), RMT_MEM_OWNER_CH0_V, RMT_MEM_OWNER_CH0_S)
+#define RMT_SET_REG_MEM_OWNER_CHX(CHANNEL,val) SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL),RMT_MEM_OWNER_CH0_V,(val),RMT_MEM_OWNER_CH0_S)
+#define RMT_GET_REG_APB_MEM_RST_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL), RMT_APB_MEM_RST_CH0_V, RMT_APB_MEM_RST_CH0_S)
+#define RMT_SET_REG_APB_MEM_RST_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL) ,RMT_APB_MEM_RST_CH0_V,(val),RMT_APB_MEM_RST_CH0_S)
+#define RMT_GET_REG_MEM_RD_RST_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL) , RMT_MEM_RD_RST_CH0_V, RMT_MEM_RD_RST_CH0_S)
+#define RMT_SET_REG_MEM_RD_RST_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL) ,RMT_MEM_RD_RST_CH0_V,(val),RMT_MEM_RD_RST_CH0_S)
+#define RMT_GET_REG_MEM_WR_RST_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL) , RMT_MEM_WR_RST_CH0_V, RMT_MEM_WR_RST_CH0_S)
+#define RMT_SET_REG_MEM_WR_RST_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL) ,RMT_MEM_WR_RST_CH0_V,(val),RMT_MEM_WR_RST_CH0_S)
+#define RMT_GET_REG_RX_EN_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL) , RMT_RX_EN_CH0_V, RMT_RX_EN_CH0_S)
+#define RMT_SET_REG_RX_EN_CHX(CHANNEL,val)     SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL) ,RMT_RX_EN_CH0_V,(val),RMT_RX_EN_CH0_S)
+#define RMT_GET_REG_TX_START_CHX(CHANNEL)      GET_PERI_REG_BITS2(RMT_CHXCONF1(CHANNEL) , RMT_TX_START_CH0_V, RMT_TX_START_CH0_S)
+#define RMT_SET_REG_TX_START_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCONF1(CHANNEL) ,RMT_TX_START_CH0_V,(val),RMT_TX_START_CH0_S)
+//Carrier
+#define RMT_GET_REG_CARRIER_HIGH_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCARRIER_DUTY(CHANNEL) , RMT_CARRIER_HIGH_CH0_V, RMT_CARRIER_HIGH_CH0_S)
+#define RMT_SET_REG_CARRIER_HIGH_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCARRIER_DUTY(CHANNEL) ,RMT_CARRIER_HIGH_CH0_V,(val),RMT_CARRIER_HIGH_CH0_S)
+#define RMT_GET_REG_CARRIER_LOW_CHX(CHANNEL)  GET_PERI_REG_BITS2(RMT_CHXCARRIER_DUTY(CHANNEL) , RMT_CARRIER_LOW_CH0_V, RMT_CARRIER_LOW_CH0_S)
+#define RMT_SET_REG_CARRIER_LOW_CHX(CHANNEL,val)  SET_PERI_REG_BITS(RMT_CHXCARRIER_DUTY(CHANNEL) ,RMT_CARRIER_LOW_CH0_V,(val),RMT_CARRIER_LOW_CH0_S)
+
+#define RMT_GET_MEM_TX_WRAP_EN()  GET_PERI_REG_BITS2(RMT_APB_CONF_REG , RMT_MEM_TX_WRAP_EN_V, RMT_MEM_TX_WRAP_EN_S)
+#define RMT_SET_MEM_TX_WRAP_EN(val)  SET_PERI_REG_BITS(RMT_APB_CONF_REG ,RMT_MEM_TX_WRAP_EN_V,(val),RMT_MEM_TX_WRAP_EN_S)
+#define RMT_GET_APB_FIFO_MASK()  GET_PERI_REG_BITS2(RMT_APB_CONF_REG , RMT_APB_FIFO_MASK_V, RMT_APB_FIFO_MASK_S)
+#define RMT_SET_APB_FIFO_MASK(val)  SET_PERI_REG_BITS(RMT_APB_CONF_REG ,RMT_APB_FIFO_MASK_V,(val),RMT_APB_FIFO_MASK_S)
+
+enum rmt_channel{
+    RMT_CTRL_CHANNEL0=0, /**< Rmt Channel0 */
+    RMT_CTRL_CHANNEL1,   /**< Rmt Channel1 */
+    RMT_CTRL_CHANNEL2,   /**< Rmt Channel2 */
+    RMT_CTRL_CHANNEL3,   /**< Rmt Channel3 */
+    RMT_CTRL_CHANNEL4,   /**< Rmt Channel4 */
+    RMT_CTRL_CHANNEL5,   /**< Rmt Channel5 */
+    RMT_CTRL_CHANNEL6,   /**< Rmt Channel6 */
+    RMT_CTRL_CHANNEL7,   /**< Rmt Channel7 */
+};
+enum rmt_ram_owner{
+    RMT_RAM_OWNER_HARDWARE=0,/**< Rmt Rx mode ,Memory owner RMT_RAM_OWNER_HARDWARE */
+    RMT_RAM_OWNER_SOFTWARE=1,/**< Rmt Rx mode ,Memory owner RMT_RAM_OWNER_SOFTWARE */
+};
+enum rmt_source_clk{
+    RMT_BASECLK_REF=0,/**< Rmt Clk is Refclk defautl is 1MHz */
+    RMT_BASECLK_APB,/**< Rmt Clk is APB CLK defautl is 80MHz */
+};
+enum rmt_ctrl_mode{
+    RMT_TX_MODE=0,/**< Rmt TX Mode */
+    RMT_RX_MODE,  /**< Rmt RX Mode */
+};
+enum rmt_idle_level{
+    RMT_IDLE_LOW_LEVEL=0,/**< Rmt TX IDLE Low Level */
+    RMT_IDLE_HIGH_LEVEL, /**< Rmt TX IDLE High Level */
+};
+enum rmt_carrier_level{
+    RMT_CARRIER_LOW_LEVEL=0,/**< Rmt Carrier Low Level */
+    RMT_CARRIER_HIGH_LEVEL, /**< Rmt Carrier High Level */
+};
+
+typedef struct rmt_ctrl_tx{
+    uint32_t carrier_fre_Hz;             /**< Rmt Carrier Fre */
+    uint8_t carrier_duty;                /**< Rmt Carrier duty */
+    enum rmt_idle_level idle_level;      /**< Rmt Idle level */
+    enum rmt_carrier_level carrier_level;/**< Rmt Carrier level */
+}rmt_ctrl_tx_config_t;
+
+typedef struct rmt_ctrl_rx{
+    uint8_t filter_tick_cnt;       /**< Rmt filter tick  cnt */
+    uint16_t rx_threshold_tick_cnt;/**< Rmt rx  interrupt threshold */
+}rmt_ctrl_rx_config_t;
+
+typedef struct rmt_ctrl_config{
+    enum rmt_ctrl_mode rmt_mode;
+    enum rmt_channel channel;
+    gpio_num_t gpio_num;
+    uint8_t channel_mem_cnt;//NAME
+    bool intr_enable;
+    union{
+        rmt_ctrl_tx_config_t tx_config;
+        rmt_ctrl_rx_config_t rx_config;
+    }mode_config;
+}rmt_ctrl_channel_config_t;
+
+typedef struct rmt_event_message{
+    enum rmt_ctrl_mode mode;
+    enum rmt_channel channel;
+}rmt_event_msg_t;
+
+typedef void (*rmt_event_callback)(rmt_event_msg_t rmt_message);
+
+/**
+ * @brief          register rmt interrupt occur callback function
+ *
+ * Use this Function,register interrupt event callback . when rmt interrupt is triggered , the event callback
+ * will give appliacation .rmt_event_callback is called by rmt interrupt , so the rmt_event_callback
+ * should be completed in a very short period of time. If you want to deal with a lot of things,Please Creat
+ * a task ,and post message from the rmt_event_callback to the task.
+
+ * @param[in]  func : the func will be called,when rmt interrupt is triggered ,and the param of func is the
+ *                    mode of rmt and channel of rmt
+ *
+ *
+ * @return       None
+ *
+ */
+void rmt_register_event_callback(rmt_event_callback func);
+
+/**
+ * @brief         rmt common configuration
+ *
+ * User this Function,config rmt the channel tx mode or rx mode
+ *
+ * @param[in]  rmt_config  rmt_config.rmt_mode              : select rmt tx mode or rx mode.
+ *                         rmt_config.rmt_channel           : current configuration channel.
+ *                         rmt_config.gpio_num              : tx or rx mode ,signagle use the gpio.
+ *                         rmt_config.channel_mem_cnt       : the tx or rx used the memory block cnt,every mem cnt have 256Byte contents
+ *                         rmt_config.intr_enable           : enable or disable tx or rx interrupt.when enable tx mode , send the tx memory end ,will trigger
+ *                                                            tx event . when enable rx mode ,rx line idle time beyond rx_threshold_tick_cnt will trigger rx
+ *                                                            event.
+ *                         rmt_config.mode_config.tx_config : tx common config.
+ *                         rmt_config.mode_config.rx_config : rx common config.
+ *
+ * @return       None
+ *
+ */
+void rmt_ctrl_init(rmt_ctrl_channel_config_t* rmt_config);
+
+/**
+ * @brief         write rmt tx memory
+ *
+ * When rmt tx memory content is 0x00,the tx will stop,and trigger tx intr event
+ *
+ * @param[in]  channel  : rmt tx channel
+ *             mem      : write the mem to tx memory
+ *             cnt      : the cnt max is   rmt_config.channel_mem_cnt *32
+ *
+ * @return       None
+ *
+ */
+void rmt_ctrl_tx_wr_memory(enum rmt_channel channel,uint32_t* mem,uint16_t cnt);
+
+/**
+ * @brief         rmt rx start
+ *
+ * @param[in]  channel  : rmt rx channel
+ *
+ * @return       None
+ *
+ */
+void rmt_ctrl_rx_start(enum rmt_channel channel);
+
+/**
+ * @brief         rmt tx start
+ *
+ * @param[in]  channel  : rmt tx channel
+ *
+ * @return       None
+ *
+ */
+void rmt_ctrl_tx_start(enum rmt_channel channel);
+
+/**
+ * @brief        rmt read rx memory
+ *
+ * @param[in]  channel  : rmt rx channel
+ *
+ * @param[in]  mem      : the rx memory data copy to the mem,the mem content cnt = rmt_config.channel_mem_cnt *32
+ *
+ * @return       rx memory  number of received data
+ *
+ */
+uint16_t rmt_ctrl_rx_rd_memory(enum rmt_channel channel,uint32_t* mem);
+/**
+ * @brief   register rmt interrupt handler
+ *
+ * @param   uint8_t ledc_intr_num     : rmt interrupt num,check the info in soc.h, and please see the core-isa.h for more details
+ * @param   void (* fn)(void* )       : intr handler function
+ * @param   void * arg                : parameter for handler
+ *
+ * @return  null
+ */
+void rmt_intr_handler_register(uint8_t rmt_intr_num,void (* fn)(void* ),void * arg);
+/**
+ * @brief   default rmt interrupt init function to initialize the rmt intrrupt parameters.
+ *
+ * @param   uint8_t rmt_intr_num    : ledc interrupt num,check the info in soc.h, and please see the core-isa.h for more details
+ *
+ * @return  null
+ */
+
+void rmt_intr_init_default(uint8_t rmt_intr_num);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DRIVER_RMT_CTRL_H_ */
diff --git a/components/esp_audio/include/driver/spi.h b/components/esp_audio/include/driver/spi.h
new file mode 100644 (file)
index 0000000..72540d2
--- /dev/null
@@ -0,0 +1,493 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef _DRIVER_SPI_H_
+#define _DRIVER_SPI_H_
+#include "soc/dport_reg.h"
+#include "spi.h"
+#include "soc/spi_reg.h"
+#include <esp_types.h>
+#include "dma.h"
+#include "esp_err.h"
+
+#define ETS_SPI_INUM        8
+#define ETS_HSIP_INUM       8
+#define ETS_I2S_INUM        9
+#define ETS_RTC_INUM        9
+#define ETS_RMT_CTRL_INUM   9
+#define ETS_GPIO_INUM       18
+#define ETS_MAX_INUM        16
+#define ETS_I2C0_INUM     17
+//#define ETS_I2S0_INUM     17
+#define ETS_SPI1_INUM     17
+#define ETS_SPI2_INUM     17
+#define ETS_SPI3_INUM     17
+#define ETS_PCNT_INUM     17
+#define ETS_LEDC_INUM     18
+
+
+//*****************************************************************************
+//
+// Make sure all of the definitions in this header have a C binding.
+//
+//*****************************************************************************
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ * @brief Support SPI1/SPI2/SPI3 module.
+ *
+ */
+typedef enum {
+    SPI_NUM_SPI1  = 0x1,
+    SPI_NUM_SPI2  = 0x2,
+    SPI_NUM_SPI3  = 0x3,
+    SPI_NUM_MAX   = SPI_NUM_SPI3,
+} spi_num_t;
+
+/**
+ * @brief The SPI module can work in either master or slave mode.
+ *
+ */
+typedef enum {
+    SPI_MODE_MASTER = 0,
+    SPI_MODE_SLAVE  = 1,
+} spi_mode_t;
+
+/**
+ *  @brief SPI sub mode
+ *
+ * Support 4 sub modes based on SPI clock polarity and phase.
+ * SPI_CPOL SPI_CPHA  SubMode
+ *   0        0        0
+ *   0        1        1
+ *   1        0        2
+ *   1        1        3
+ */
+typedef enum {
+    SPI_SUBMODE_0 = 0,
+    SPI_SUBMODE_1 = 1,
+    SPI_SUBMODE_2 = 2,
+    SPI_SUBMODE_3 = 3,
+} spi_sub_mode_t;
+
+/**
+ * @brief The SPI module working speed.
+ *
+ * @attention Max speed 80MHz
+ *
+ */
+typedef enum {
+    SPI_SPEED_2MHZ  = 40,
+    SPI_SPEED_5MHZ  = 16,
+    SPI_SPEED_8MHZ  = 10,
+    SPI_SPEED_10MHZ = 8,
+    SPI_SPEED_16MHZ = 5,
+    SPI_SPEED_20MHZ = 4,
+} spi_speed_t;
+
+/**
+ * @brief The SPI mode working speed.
+ *
+ */
+typedef enum {
+    SPI_BIT_ORDER_MSB_FIRST = 0,
+    SPI_BIT_ORDER_LSB_FIRST = 1,
+} spi_bit_order_t;
+
+// @brief SPI interrupt source defined.
+typedef enum {
+    SPI_INT_SRC_TRANS_DONE = SPI_TRANS_DONE,
+    SPI_INT_SRC_WR_STA_DONE = SPI_SLV_WR_STA_DONE,
+    SPI_INT_SRC_RD_STA_DONE = SPI_SLV_RD_STA_DONE,
+    SPI_INT_SRC_WR_BUF_DONE = SPI_SLV_WR_BUF_DONE,
+    SPI_INT_SRC_RD_BUF_DONE = SPI_SLV_RD_BUF_DONE,
+    SPI_INT_SRC_ONE_BUF_RECV_DONE = SPI_IN_SUC_EOF_INT_ENA,
+    SPI_INT_SRC_ONE_BUF_SEND_DONE = SPI_OUT_EOF_INT_ENA,
+} spi_int_src_t;
+
+/**
+ * @brief The SPI mode working speed.
+ *
+ */
+typedef enum {
+    SPI_WORK_MODE_HALF = 0,
+    SPI_WORK_MODE_FULL = 1,
+} spi_work_mode_t;
+
+/**
+ * @brief The SPI DMA channels.
+ *
+ */
+typedef enum {
+    SPI_DMA_CHANNEL_0 = 1,
+    SPI_DMA_CHANNEL_1 = 2,
+} spi_dma_channel_t;
+
+/**
+ * @brief The SPI dma direction.
+ *
+ */
+typedef enum {
+    SPI_DMA_DIR_IN        = 1,
+    SPI_DMA_DIR_OUT       = 2,
+} spi_dma_dir_t;
+
+#pragma pack(1)
+/**
+ * @brief SPI attribute
+ */
+typedef struct {
+    spi_mode_t          mode;            ///< Master or slave mode
+    spi_sub_mode_t      sub_mode;        ///< SPI SPI_CPOL SPI_CPHA mode
+    spi_speed_t         speed;           ///< SPI Clock
+    spi_bit_order_t     bit_order;       ///< SPI bit order
+    spi_work_mode_t     half_mode;       ///< Half or Full work mode
+} spi_attr_t;
+
+/**
+* @brief SPI attribute
+*/
+typedef struct {
+    uint16_t    cmd;                 ///< Command value
+    uint8_t     cmd_len;             ///< Command byte length
+    uint32_t    *addr;               ///< Point to address value
+    uint8_t     addr_len;             ///< Address byte length
+    uint32_t    *tx_data;             ///< Point to send data buffer
+    uint8_t     tx_data_len;          ///< Send data byte length.
+    uint32_t    *rx_data;             ///< Point to recevie data buffer
+    uint8_t     rx_data_len;          ///< Recevie Data byte length.
+} spi_data_t;
+
+// SPI DMA attribite
+typedef struct {
+    spi_num_t           spi_num;     ///< Spi number
+    uint32_t            mode;        ///< Spi work mode
+    uint32_t            buf_size;    ///< Size of buffer
+    spi_dma_dir_t       dir;         ///< Direction of data,in or out.
+    spi_dma_channel_t   channel;     ///< Channel of DMA
+    ping_pong_buf_t     *buf;        ///< Buffer address
+} spi_dma_attr_t;
+#pragma pack()
+
+/**
+ * @brief Get SPI ping buffer address.
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ *
+ * @return uint32_t*, NULL:indicates parameter error, others indicates ping buffer address.
+ */
+uint32_t* spi_dma_ping_buf_get(spi_dma_attr_t *obj);
+
+/**
+ * @brief Get SPI pong buffer address.
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ *
+ * @return uint32_t*, NULL:indicates parameter error, others indicates pong buffer address.
+ */
+uint32_t* spi_dma_pong_buf_get(spi_dma_attr_t *obj);
+
+/**
+ * @brief Get without working ping-pong buffer address.
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ *
+ * @return uint32_t*, NULL:indicates parameter error, others indicates not working buffer address.
+ */
+uint32_t* spi_dma_status_get(spi_dma_attr_t *obj);
+
+/**
+ * @brief Configrate the Ping-Pong buffer to the destination
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ *
+ * @return None.
+ */
+int32_t spi_dma_memcpy(spi_dma_attr_t *obj, void *src, uint32_t len);
+
+/**
+ * @brief Configrate the Ping-Pong buffer to the destination
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ *
+ * @return None.
+ */
+void spi_dma_dest_add_set(spi_dma_attr_t *obj);
+
+/**
+ * @brief Reset the SPI DMA instance
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ * @param [in] isr
+ *             Indicates which function to be called, when interrupt hanpened.
+ *
+ * @return None.
+ */
+void spi_dma_rest(spi_dma_attr_t *obj);
+
+/**
+ * @brief Initialize DMA and create a SPI DMA instance
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ * @param [in] isr
+ *             Indicates which function to be called, when interrupt hanpened.
+ *
+ * @return -1:indicates parameter error, -2: DMA buffer init failure, others indicates success.
+ */
+int spi_dma_init(spi_dma_attr_t *obj, void *isr);
+
+/**
+ * @brief Destroy the SPI DMA instance
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ *
+ * @return int, -1:indicates parameter error, others indicates success.
+ */
+int spi_dma_uninit(spi_dma_attr_t *obj);
+
+/**
+ * @brief Configrate the Ping-Pong buffer to the destination
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ *
+ * @return None.
+ */
+void spi_dma_int_enable(spi_num_t spiNum, spi_int_src_t intSrc);
+
+/**
+ * @brief Configrate the Ping-Pong buffer to the destination
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ *
+ * @return None.
+ */
+void spi_dma_int_disable(spi_num_t spiNum, spi_int_src_t intSrc);
+
+/**
+ * @brief Configrate the Ping-Pong buffer to the destination
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ *
+ * @return None.
+ */
+void spi_dma_int_clear(spi_num_t spiNum);
+
+/**
+ * @brief Configrate the Ping-Pong buffer to the destination
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ *
+ * @return None.
+ */
+int32_t spi_dma_int_status_get(spi_num_t spiNum);
+
+/**
+ * @brief Start e SPI DMA instance
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ * @param [in] len
+ *             Indicates how many data to be called.
+ *
+ * @return None.
+ */
+void spi_dma_start(spi_dma_attr_t *obj, uint32_t len);
+
+/**
+ * @brief Stop the SPI DMA transmit
+ *
+ * @param [in] obj
+ *             Pointer to a struct spi_dma_attr_t that indicates SPI DMA working attribution.
+ *
+ * @return None.
+ */
+void spi_dma_stop(spi_dma_attr_t *obj);
+
+/**
+ * @brief Initialize SPI module.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ * @param [in] pAttr
+ *              Pointer to a struct spi_attr_t that indicates SPI working attribution.
+ *
+ * @return void.
+ */
+void spi_init(spi_num_t spiNum, spi_attr_t* pAttr);
+
+/**
+ * @brief Set slave address value by master.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ * @param [in] addr
+ *             Slave address to be set.
+ *
+ * @return void.
+ */
+void spi_master_cfg_addr(spi_num_t spiNum, uint32_t addr);
+
+/**
+ * @brief Set command value by master.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ * @param [in] cmd
+ *             Command will be send to slave.
+ *
+ * @return void.
+ */
+void spi_master_cfg_cmd(spi_num_t spiNum, uint32_t cmd);
+
+/**
+ * @brief Send data to slave from master.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ * @param [in] pInData
+ *             Pointer to a spi_data_t strcuture that indicates data, address and command will be send.
+ *
+ * @return int, -1:indicates failure,others indicates success.
+ */
+int spi_master_send_data(spi_num_t spiNum, spi_data_t* pInData);
+
+/**
+ * @brief Receive data from slave by master.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ * @param [in] pOutData
+ *             Point to data buffer.
+ *
+ * @return int, -1:indicates failure,others indicates success.
+ *
+ */
+int spi_master_recv_data(spi_num_t spiNum, spi_data_t* pData);
+
+/**
+ * @brief Load data to slave send buffer.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ * @param [in] pOutData
+ *             Point to data buffer.
+ * @param [in] outLen
+ *             The number of bytes to be set.
+ *
+ * @return int, -1:indicates failure,others indicates success.
+ */
+int spi_slave_send_data(spi_num_t spiNum, uint32_t *pOutData, uint8_t outLen);
+
+/**
+ * @brief Receive data by slave.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ * @param [in] isrFunc
+ *             isrFunc is a pointer to the function to be called when the SPI interrupt occurs.
+ *
+ * @return int, -1:indicates failure,others indicates success.
+ */
+int spi_slave_recv_data(spi_num_t spiNum, void(*isrFunc)(void*));
+
+/**
+ * @brief Set slave status by master.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ *
+ * @param [in] data
+ *             Data will be write to slave SPI_WR_STATUS.
+ *
+ * @return void.
+ */
+void spi_master_send_status(spi_num_t spiNum, uint8_t data);
+
+/**
+ * @brief Get salve status by master.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ *
+ * @return int, -1: indicates failure; other value in slave status.
+ */
+int spi_master_recv_status(spi_num_t spiNum);
+
+/**
+ * @brief Enable SPI module interrupt source.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ *
+ * @param [in] intSrc
+ *              Indicates which interrupt source to enable.
+ *
+ * @return void.
+ */
+void spi_int_enable(spi_num_t spiNum, spi_int_src_t intSrc);
+
+/**
+ * @brief Disable SPI module interrupt source.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ *
+ * @param [in] intSrc
+ *              Indicates which interrupt source to disable.
+ *
+ * @return void.
+ */
+void spi_int_disable(spi_num_t spiNum, spi_int_src_t intSrc);
+
+/**
+ * @brief Clear all of spi interrupt.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ *
+ * @return void.
+ */
+void spi_int_clear(spi_num_t spiNum);
+
+/**
+ * @brief Get the spi interrupt status.
+ *
+ * @param [in] spiNum
+ *             Indicates which submode to be used.
+ *
+ * @return void.
+ */
+int32_t spi_int_status_get(spi_num_t spiNum);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //  __SPI_H__
diff --git a/components/esp_audio/include/driver/touch_pad.h b/components/esp_audio/include/driver/touch_pad.h
new file mode 100644 (file)
index 0000000..1590127
--- /dev/null
@@ -0,0 +1,105 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+\r
+//     http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+\r
+#ifndef _DRIVER_TOUCH_PAD_H_\r
+#define _DRIVER_TOUCH_PAD_H_\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+#define ETS_RTC_INTR_INUM  19  \r
+\r
+\r
+typedef enum{\r
+       TOUCH_PAD_NUM0=0,  //GPIO4\r
+       TOUCH_PAD_NUM1,    //GPIO0\r
+       TOUCH_PAD_NUM2,   //GPIO2\r
+       TOUCH_PAD_NUM3,   //GPIO15\r
+       TOUCH_PAD_NUM4,   //GPIO13\r
+       TOUCH_PAD_NUM5,   //GPIO12\r
+       TOUCH_PAD_NUM6,   //GPIO14\r
+       TOUCH_PAD_NUM7,   //GPIO27\r
+       TOUCH_PAD_NUM8,   //GPIO33\r
+       TOUCH_PAD_NUM9,   //GPIO32\r
+       TOUCH_PAD_MAX,\r
+}enum_touch_pad_t;\r
+\r
+typedef struct touch_message{\r
+       enum_touch_pad_t touch_num;\r
+}touch_message_t;\r
+typedef void (*touch_event_callback)(touch_message_t touch_mes);\r
+/**\r
+* @brief           touch module int\r
+*\r
+*This function int touch pad module ,enable touch module\r
+*\r
+* @return        None             \r
+*             \r
+*/\r
+void touch_module_init();\r
+\r
+/**\r
+* @brief           config touch pad intr callback thresold\r
+*\r
+*When you touch the pad ,touch_pad_register reduce .When the touch_pad_register less than threshold\r
+*will trigger the touch event callback\r
+*\r
+* @param[in]  touch_num  : config touch num\r
+*\r
+* @param[in]  threshold : interrupt threshold  ,When the touch_pad_register less than threshold£¬\r
+*                         will trigger the touch event callback.User can use touch_pad_read function\r
+*                         to determine the threshold.\r
+*\r
+* @return        None             \r
+*             \r
+*/\r
+void touch_pad_config(enum_touch_pad_t touch_num,uint16_t threshold);\r
+\r
+/**\r
+* @brief           register touch pad interrupt occur callback function\r
+*\r
+* Use this Function,register interrupt event callback . when touch pad interrupt is triggered , the event callback\r
+* will give appliacation .touch_event_callback is called by touch interrupt , so the touch_event_callback\r
+* should be completed in a very short period of time. If you want to deal with a lot of things,Please Creat\r
+* a task ,and post message from the gpio_event_callback to the task.\r
+*\r
+* @param[in]  func : the func will be called,when touch interrupt is triggered ,and the param of func is the \r
+*                    number of the touch pad num occurs interrupt\r
+*\r
+*\r
+* @return        None             \r
+*             \r
+*/\r
+void touch_module_register_event_callback(touch_event_callback touch_event_cb);\r
+\r
+/**\r
+* @brief           get touch pad touch_pad_register number\r
+*\r
+*User can use this function to determine the the interrupt threshold .When you do not touch  the \r
+*pad ,read the touch_pad_read number(NumNotTouch) by the touch_pad_register.When you touch the pad ,read the touch_pad_register\r
+*number(NumTouch) by the touch_pad_read.Normal NumNotTouch>NumTouch,so you can select a interrupt threshold\r
+*\r
+* @param[in]  touch_num  : touch num\r
+*\r
+*\r
+* @return        -1   : the touch num is err\r
+*            Other : the number of the touch_pad_read\r
+*             \r
+*/\r
+int32_t touch_pad_read(enum_touch_pad_t touch_num);\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif\r
+\r
diff --git a/components/esp_audio/include/esp_timer.h b/components/esp_audio/include/esp_timer.h
new file mode 100644 (file)
index 0000000..a75c12b
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * ESPRSSIF MIT License
+ *
+ * Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
+ *
+ * Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP32 only, in which case,
+ * it is free of charge, to any person obtaining a copy of this software and associated
+ * documentation files (the "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the Software is furnished
+ * to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef __ESP_TIMER_H__
+#define __ESP_TIMER_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include "esp_types.h"
+/* timer related */
+typedef void os_timer_func_t(void *timer_arg);
+
+typedef struct _os_timer_t {
+    struct _os_timer_t *timer_next;
+    void               *timer_handle;
+    uint32_t             timer_expire;
+    uint32_t             timer_period;
+    os_timer_func_t    *timer_func;
+    bool               timer_repeat_flag;
+    void               *timer_arg;
+} os_timer_t;
+
+/** \defgroup Timer_APIs Software timer APIs
+  * @brief Software timer APIs
+  *
+  * Timers of the following interfaces are software timers. Functions of the timers are executed during the tasks.
+  * Since a task can be stopped, or be delayed because there are other tasks with higher priorities, the following os_timer interfaces cannot guarantee the precise execution of the timers.
+  *    -  For the same timer, os_timer_arm (or os_timer_arm_us)  cannot be invoked repeatedly. os_timer_disarm should be invoked first.
+  *    -  os_timer_setfn can only be invoked when the timer is not enabled, i.e., after  os_timer_disarm or before os_timer_arm (or os_timer_arm_us).
+  *
+  */
+
+/** @addtogroup Timer_APIs
+  * @{
+  */
+
+/**
+  * @brief     Set the timer callback function.
+  *
+  * @attention 1. The callback function must be set in order to enable the timer.
+  * @attention 2. Operating system scheduling is disabled in timer callback.
+  *
+  * @param     os_timer_t *ptimer : Timer structure
+  * @param     os_timer_func_t *pfunction : timer callback function
+  * @param     void *parg : callback function parameter
+  *
+  * @return    null
+  */
+void os_timer_setfn(os_timer_t *ptimer, os_timer_func_t *pfunction, void *parg);
+
+/**
+  * @brief  Enable the millisecond timer.
+  *
+  * @param  os_timer_t *ptimer : timer structure
+  * @param  uint32_t milliseconds : Timing, unit: millisecond, the maximum value allowed is 0x41893
+  * @param  bool repeat_flag : Whether the timer will be invoked repeatedly or not
+  *
+  * @return null
+  */
+void os_timer_arm(os_timer_t *ptimer, uint32_t msec, bool repeat_flag);
+
+/**
+  * @brief  Disarm the timer
+  *
+  * @param  os_timer_t *ptimer : Timer structure
+  *
+  * @return null
+  */
+void os_timer_disarm(os_timer_t *ptimer);
+
+/**
+  * @}
+  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/components/esp_audio/lib/libEspAudio.a b/components/esp_audio/lib/libEspAudio.a
new file mode 100644 (file)
index 0000000..e2d9387
Binary files /dev/null and b/components/esp_audio/lib/libEspAudio.a differ
diff --git a/components/esp_audio/lib/libMediaHal.a b/components/esp_audio/lib/libMediaHal.a
new file mode 100644 (file)
index 0000000..5fdbd3f
Binary files /dev/null and b/components/esp_audio/lib/libMediaHal.a differ
diff --git a/components/esp_audio/lib/libMisc.a b/components/esp_audio/lib/libMisc.a
new file mode 100644 (file)
index 0000000..4a9c71a
Binary files /dev/null and b/components/esp_audio/lib/libMisc.a differ
diff --git a/components/esp_audio/lib/libdlna.a b/components/esp_audio/lib/libdlna.a
new file mode 100644 (file)
index 0000000..c973c4a
Binary files /dev/null and b/components/esp_audio/lib/libdlna.a differ