更新硬件SDK

This commit is contained in:
kerwincui
2023-03-04 03:44:56 +08:00
parent dcdf6e1b7c
commit e39d3d2f03
1900 changed files with 663153 additions and 0 deletions

View File

@@ -0,0 +1,350 @@
#ifndef __RTE_DEVICE_H
#define __RTE_DEVICE_H
#include "ec618.h"
/* Peripheral IO Mode Select, Must Configure First !!!
Note, when receiver works in DMA_MODE, interrupt is also enabled to transfer tailing bytes.
*/
#define POLLING_MODE 0x1
#define DMA_MODE 0x2
#define IRQ_MODE 0x3
#define UNILOG_MODE 0x4
#define RTE_UART0_TX_IO_MODE UNILOG_MODE
#define RTE_UART0_RX_IO_MODE IRQ_MODE
#define USART0_RX_TRIG_LVL (30)
#define RTE_UART1_TX_IO_MODE DMA_MODE
#define RTE_UART1_RX_IO_MODE DMA_MODE
#define RTE_UART2_TX_IO_MODE POLLING_MODE
#define RTE_UART2_RX_IO_MODE DMA_MODE
#define RTE_SPI0_IO_MODE POLLING_MODE
#define RTE_SPI1_IO_MODE POLLING_MODE
#define RTE_I2C0_IO_MODE POLLING_MODE
#define RTE_I2C1_IO_MODE POLLING_MODE
// I2C0 (Inter-integrated Circuit Interface) [Driver_I2C0]
// Configuration settings for Driver_I2C0 in component ::Drivers:I2C
#define RTE_I2C0 1
// { PAD_PIN28}, // 0 : gpio13 / 2 : I2C0 SCL
// { PAD_PIN27}, // 0 : gpio12 / 2 : I2C0 SDA
#define RTE_I2C0_SCL_BIT 28 // AUDIO use 28
#define RTE_I2C0_SCL_FUNC PAD_MUX_ALT2
#define RTE_I2C0_SDA_BIT 27 // AUDIO use 27
#define RTE_I2C0_SDA_FUNC PAD_MUX_ALT2
// DMA
// Tx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_I2C0_DMA_TX_EN 0
#define RTE_I2C0_DMA_TX_REQID DMA_REQUEST_I2C0_TX
// Rx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_I2C0_DMA_RX_EN 0
#define RTE_I2C0_DMA_RX_REQID DMA_REQUEST_I2C0_RX
// I2C1 (Inter-integrated Circuit Interface) [Driver_I2C1]
// Configuration settings for Driver_I2C1 in component ::Drivers:I2C
#define RTE_I2C1 1
// { PAD_PIN20}, // 0 : gpio5 / 2 : I2C1 SCL
// { PAD_PIN19}, // 0 : gpio4 / 2 : I2C1 SDA
#define RTE_I2C1_SCL_BIT 20
#define RTE_I2C1_SCL_FUNC PAD_MUX_ALT2
#define RTE_I2C1_SDA_BIT 19
#define RTE_I2C1_SDA_FUNC PAD_MUX_ALT2
// DMA
// Tx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_I2C1_DMA_TX_EN 1
#define RTE_I2C1_DMA_TX_REQID DMA_REQUEST_I2C1_TX
// Rx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_I2C1_DMA_RX_EN 1
#define RTE_I2C1_DMA_RX_REQID DMA_REQUEST_I2C1_RX
// UART0 (Universal asynchronous receiver transmitter) [Driver_USART0]
// Configuration settings for Driver_USART0 in component ::Drivers:USART
#define RTE_UART0_CTS_PIN_EN 0
#define RTE_UART0_RTS_PIN_EN 0
// { PAD_PIN27}, // 0 : gpio12 / 3 : UART0 RTSn
// { PAD_PIN28}, // 0 : gpio13 / 3 : UART0 CTSn
// { PAD_PIN29}, // 0 : gpio14 / 3 : UART0 RXD
// { PAD_PIN30}, // 0 : gpio15 / 3 : UART0 TXD
#define RTE_UART0_RTS_BIT 27
#define RTE_UART0_RTS_FUNC PAD_MUX_ALT3
#define RTE_UART0_CTS_BIT 28
#define RTE_UART0_CTS_FUNC PAD_MUX_ALT3
#define RTE_UART0_RX_BIT 29
#define RTE_UART0_RX_FUNC PAD_MUX_ALT3
#define RTE_UART0_TX_BIT 30
#define RTE_UART0_TX_FUNC PAD_MUX_ALT3
// DMA
// Tx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_UART0_DMA_TX_REQID DMA_REQUEST_USART0_TX
// Rx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_UART0_DMA_RX_REQID DMA_REQUEST_USART0_RX
// UART1 (Universal asynchronous receiver transmitter) [Driver_USART1]
// Configuration settings for Driver_USART1 in component ::Drivers:USART
#define RTE_UART1_CTS_PIN_EN 1
#define RTE_UART1_RTS_PIN_EN 1
// { PAD_PIN31}, // 0 : gpio16 / 1 : UART1 RTS
// { PAD_PIN32}, // 0 : gpio17 / 1 : UART1 CTS
// { PAD_PIN33}, // 0 : gpio18 / 1 : UART1 RXD
// { PAD_PIN34}, // 0 : gpio19 / 1 : UART1 TXD
#define RTE_UART1_RTS_BIT 31
#define RTE_UART1_RTS_FUNC PAD_MUX_ALT1
#define RTE_UART1_CTS_BIT 32
#define RTE_UART1_CTS_FUNC PAD_MUX_ALT1
#define RTE_UART1_RX_BIT 33
#define RTE_UART1_RX_FUNC PAD_MUX_ALT1
#define RTE_UART1_TX_BIT 34
#define RTE_UART1_TX_FUNC PAD_MUX_ALT1
// DMA
// Tx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_UART1_DMA_TX_REQID DMA_REQUEST_USART1_TX
// Rx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_UART1_DMA_RX_REQID DMA_REQUEST_USART1_RX
// UART2 (Universal asynchronous receiver transmitter) [Driver_USART2]
// Configuration settings for Driver_USART2 in component ::Drivers:USART
#define RTE_UART2_CTS_PIN_EN 0
#define RTE_UART2_RTS_PIN_EN 0
// { PAD_PIN25}, // 0 : gpio10 / 3 : UART2 RXD
// { PAD_PIN26}, // 0 : gpio11 / 3 : UART2 TXD
#define RTE_UART2_RX_BIT 25
#define RTE_UART2_RX_FUNC PAD_MUX_ALT3
#define RTE_UART2_TX_BIT 26
#define RTE_UART2_TX_FUNC PAD_MUX_ALT3
// DMA
// Tx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_UART2_DMA_TX_REQID DMA_REQUEST_USART2_TX
// Rx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_UART2_DMA_RX_REQID DMA_REQUEST_USART2_RX
// SPI0 (Serial Peripheral Interface) [Driver_SPI0]
// Configuration settings for Driver_SPI0 in component ::Drivers:SPI
#define RTE_SPI0 1
// { PAD_PIN21}, // 0 : gpio16 / 1 : UART1 RTS / 2 : SPI0 SSn
// { PAD_PIN22}, // 0 : gpio11 / 1 : UART1 CTS / 2 : SPI0 MOSI
// { PAD_PIN23}, // 0 : gpio14 / 1 : UART1 RXD / 2 : SPI0 MISO
// { PAD_PIN24}, // 0 : gpio15 / 1 : UART1 TXD / 2 : SPI0 SCLK
#define RTE_SPI0_SSN_BIT 21
#define RTE_SPI0_SSN_FUNC PAD_MUX_ALT2
#define RTE_SPI0_MOSI_BIT 22
#define RTE_SPI0_MOSI_FUNC PAD_MUX_ALT2
#define RTE_SPI0_MISO_BIT 23
#define RTE_SPI0_MISO_FUNC PAD_MUX_ALT2
#define RTE_SPI0_SCLK_BIT 24
#define RTE_SPI0_SCLK_FUNC PAD_MUX_ALT2
#define RTE_SPI0_SSN_GPIO_INSTANCE 1
#define RTE_SPI0_SSN_GPIO_INDEX 0
// DMA
// Tx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_SPI0_DMA_TX_REQID DMA_REQUEST_SPI0_TX
// Rx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_SPI0_DMA_RX_REQID DMA_REQUEST_SPI0_RX
// SPI1 (Serial Peripheral Interface) [Driver_SPI1]
// Configuration settings for Driver_SPI1 in component ::Drivers:SPI
#define RTE_SPI1 1
// { PAD_PIN13}, // 0 : gpio2 / 1 : UART0 RTSn / 3 : SPI1 SSn
// { PAD_PIN14}, // 0 : gpio3 / 1 : UART0 CTSn / 3 : SPI1 MOSI
// { PAD_PIN15}, // 0 : gpio4 / 1 : UART0 RXD / 3 : SPI1 MISO
// { PAD_PIN16}, // 0 : gpio5 / 1 : UART0 TXD / 3 : SPI1 SCLK
#define RTE_SPI1_SSN_BIT 13
#define RTE_SPI1_SSN_FUNC PAD_MUX_ALT3
#define RTE_SPI1_MOSI_BIT 14
#define RTE_SPI1_MOSI_FUNC PAD_MUX_ALT3
#define RTE_SPI1_MISO_BIT 15
#define RTE_SPI1_MISO_FUNC PAD_MUX_ALT3
#define RTE_SPI1_SCLK_BIT 16
#define RTE_SPI1_SCLK_FUNC PAD_MUX_ALT3
#define RTE_SPI1_SSN_GPIO_INSTANCE 0
#define RTE_SPI1_SSN_GPIO_INDEX 2
// DMA
// Tx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_SPI1_DMA_TX_REQID DMA_REQUEST_SPI1_TX
// Rx
// Channel <0=>0 <1=>1 <2=>2 <3=>3 <4=>4 <5=>5 <6=>6 <7=>7
#define RTE_SPI1_DMA_RX_REQID DMA_REQUEST_SPI1_RX
// PWM0 Controller [Driver_PWM0]
// Configuration settings for Driver_PWM0 in component ::Drivers:PWM
#define RTE_PWM 1
#define EFUSE_INIT_MODE POLLING_MODE
#define L2CTLS_INIT_MODE POLLING_MODE
#define FLASH_BARE_RW_MODE 1
#define RTE_UART0 1
#define RTE_UART1 1
#define RTE_UART2 1
/* to enable external thermal */
#define EXTERNAL_NTC_EXIST 0
#if (RTE_UART1 == 1)
#define UART1_DTR_PAD_INDEX 26 // GPIO11
#define UART1_DTR_GPIO_INSTANCE 0
#define UART1_DTR_GPIO_PIN 11
#define UART1_RI_PAD_INDEX 44 // AONIO 4 = GPIO24
#define UART1_RI_GPIO_INSTANCE 1
#define UART1_RI_GPIO_PIN 8
#define UART1_RI_PWM_INSTANCE 1
#define UART1_RI_PWM_CLK_ID FCLK_TIMER1
#define UART1_RI_PWM_CLK_SEL FCLK_TIMER1_SEL_26M
#define UART1_DCD_PAD_INDEX 45 // AONIO 5 = GPIO25
#define UART1_DCD_GPIO_INSTANCE 1
#define UART1_DCD_GPIO_PIN 9
#endif
#if (RTE_UART2 == 1)
#define UART2_DTR_PAD_INDEX 25 // GPIO10
#define UART2_DTR_GPIO_INSTANCE 0
#define UART2_DTR_GPIO_PIN 10
#define UART2_RI_PAD_INDEX 43 // AONIO 3 = GPIO23
#define UART2_RI_GPIO_INSTANCE 1
#define UART2_RI_GPIO_PIN 7
#define UART2_RI_PWM_INSTANCE 0
#define UART2_RI_PWM_CLK_ID FCLK_TIMER0
#define UART2_RI_PWM_CLK_SEL FCLK_TIMER0_SEL_26M
#define UART2_DCD_PAD_INDEX 47 // AONIO 7 = GPIO27
#define UART2_DCD_GPIO_INSTANCE 1
#define UART2_DCD_GPIO_PIN 11
#endif
#define NETLIGHT_PAD_INDEX 46 // AONIO 6 = GPIO26
#define NETLIGHT_PAD_ALT_FUNC PAD_MUX_ALT5
#define NETLIGHT_PWM_INSTANCE 3
//USIM1 OPTION1
#define USIM1_URST_OP1_PAD_INDEX 19 // GPIO4
#define USIM1_URST_OP1_GPIO_INSTANCE 0
#define USIM1_URST_OP1_GPIO_PIN 4
#define USIM1_UCLK_OP1_PAD_INDEX 20 // GPIO5
#define USIM1_UCLK_OP1_GPIO_INSTANCE 0
#define USIM1_UCLK_OP1_GPIO_PIN 5
#define USIM1_UIO_OP1_PAD_INDEX 21 // GPIO6
#define USIM1_UIO_OP1_GPIO_INSTANCE 0
#define USIM1_UIO_OP1_GPIO_PIN 6
//USIM1 OPTION2
#define USIM1_UIO_OP2_PAD_INDEX 27 // GPIO12
#define USIM1_UIO_OP2_GPIO_INSTANCE 0
#define USIM1_UIO_OP2_GPIO_PIN 12
#define USIM1_URST_OP2_PAD_INDEX 28 // GPIO13
#define USIM1_URST_OP2_GPIO_INSTANCE 0
#define USIM1_URST_OP2_GPIO_PIN 13
#define USIM1_UCLK_OP2_PAD_INDEX 29 // GPIO14
#define USIM1_UCLK_OP2_GPIO_INSTANCE 0
#define USIM1_UCLK_OP2_GPIO_PIN 14
//USIM1 clock latched by AONIO, for example, use AONIO-6 test on EVB
#define AONIO_6_PAD_INDEX 46 // AONIO 6 = GPIO26
#define AONIO_6_GPIO_INSTANCE 1
#define AONIO_6_GPIO_PIN 10
#define RTE_CSPI0 0
#define RTE_CSPI0_MCLK_PAD_ADDR 39
#define RTE_CSPI0_MCLK_FUNC PAD_MUX_ALT1
#define RTE_CSPI0_PCLK_PAD_ADDR 35
#define RTE_CSPI0_PCLK_FUNC PAD_MUX_ALT1
#define RTE_CSPI0_CS_PAD_ADDR 36
#define RTE_CSPI0_CS_FUNC PAD_MUX_ALT1
#define RTE_CSPI0_SDO0_PAD_ADDR 37
#define RTE_CSPI0_SDO0_FUNC PAD_MUX_ALT1
#define RTE_CSPI0_SDO1_PAD_ADDR 38
#define RTE_CSPI0_SDO1_FUNC PAD_MUX_ALT1
// DMA CSPI0 Request ID
#define RTE_CSPI0_DMA_RX_REQID DMA_REQUEST_I2S0_RX
// CSPI1 Configuration
#define RTE_CSPI1 1
#define RTE_CSPI1_MCLK_PAD_ADDR 18
#define RTE_CSPI1_MCLK_FUNC PAD_MUX_ALT1
#define RTE_CSPI1_PCLK_PAD_ADDR 19
#define RTE_CSPI1_PCLK_FUNC PAD_MUX_ALT1
#define RTE_CSPI1_CS_PAD_ADDR 20
#define RTE_CSPI1_CS_FUNC PAD_MUX_ALT1
#define RTE_CSPI1_SDO0_PAD_ADDR 21
#define RTE_CSPI1_SDO0_FUNC PAD_MUX_ALT1
#define RTE_CSPI1_SDO1_PAD_ADDR 22
#define RTE_CSPI1_SDO1_FUNC PAD_MUX_ALT1
// DMA CSPI1 Request ID
#define RTE_CSPI1_DMA_RX_REQID DMA_REQUEST_I2S1_RX
#endif /* __RTE_DEVICE_H */

View File

@@ -0,0 +1,69 @@
#ifndef _AUDIO_TASK_
#define _AUDIO_TASK_
#include "string.h"
#include "common_api.h"
#include "luat_debug.h"
#include "luat_rtos.h"
#include "luat_gpio.h"
#include "luat_audio_play_ec618.h"
#include "luat_i2s_ec618.h"
#include "ivTTSSDKID_all.h"
#include "ivTTS.h"
#include "FreeRTOS.h"
#include "queue.h"
#define WAIT_PLAY_FLAG (0x1)
#include "osasys.h"
#define CODEC_PWR_PIN HAL_GPIO_12
#define CODEC_PWR_PIN_ALT_FUN 4
#define PA_PWR_PIN HAL_GPIO_25
#define PA_PWR_PIN_ALT_FUN 0
#define LED2_PIN HAL_GPIO_24
#define LED2_PIN_ALT_FUN 0
#define LED3_PIN HAL_GPIO_23
#define LED3_PIN_ALT_FUN 0
#define LED4_PIN HAL_GPIO_27
#define LED4_PIN_ALT_FUN 0
#define CHARGE_EN_PIN HAL_GPIO_2
#define CHARGE_EN_PIN_ALT_FUN 0
typedef struct
{
uint32_t priority;
uint32_t playType;
union
{
struct
{
char *data;
uint8_t len;
} tts;
struct
{
audio_play_info_t *info;
uint8_t count;
} file;
} message;
void *userParam;
} audioQueueData;
typedef enum
{
MONEY_PLAY = 0,
PAD_PLAY,
SYS_PLAY
} AUDIO_PLAY_PRIORITY;
typedef enum
{
TTS_PLAY = 0,
FILE_PLAY,
} AUDI;
void audio_task_init(void);
#endif

View File

@@ -0,0 +1,24 @@
#ifndef _NET_LED_TASK_H
#define _NET_LED_TASK_H
#include "common_api.h"
#include "luat_debug.h"
#include "luat_rtos.h"
#include "luat_gpio.h"
#include "luat_mobile.h"
#include "FreeRTOS.h"
#include "queue.h"
#define NET_LED_PIN HAL_GPIO_27
void Task_netinfo_call(void);
void NET_LED_Task(void);
#endif

View File

@@ -0,0 +1,30 @@
#ifndef _WEB_AUDIO_H
#define _WEB_AUDIO_H
#include "string.h"
#include "common_api.h"
#include "luat_mobile.h"
#include "luat_debug.h"
#include "luat_rtos.h"
#include "luat_gpio.h"
#include "luat_audio_play_ec618.h"
#include "luat_i2s_ec618.h"
#include "ivTTSSDKID_all.h"
#include "ivTTS.h"
#include "MQTTClient.h"
#include "FreeRTOS.h"
#include "queue.h"
#define WAIT_PLAY_FLAG (0x1)
#include "HTTPClient.h"
#include "osasys.h"
#include "luat_fs.h"
#define HOST "lbsmqtt.airm2m.com"
#define PORT 1883
#define client_id "60561eae30594a88bd432627a36240d9"
#define User "username"
#define Password "password"
#endif

View File

@@ -0,0 +1,138 @@
#include "audio_Task.h"
QueueHandle_t audioQueueHandle = NULL;
/*-------------------------------------------------audio define-----------------------------------------------*/
static osEventFlagsId_t waitAudioPlayDone = NULL;
static HANDLE g_s_delay_timer;
/*-------------------------------------------------audio define-----------------------------------------------*/
/*------------------------------------------------audio-----------------------------------------------*/
void audio_data_cb(uint8_t *data, uint32_t len, uint8_t bits, uint8_t channels)
{
// LUAT_DEBUG_PRINT("%x,%d,%d,%d", data, len, bits, channels);
}
void app_pa_on(uint32_t arg)
{
luat_gpio_set(PA_PWR_PIN, 1);
}
void audio_event_cb(uint32_t event, void *param)
{
// PadConfig_t pad_config;
// GpioPinConfig_t gpio_config;
LUAT_DEBUG_PRINT("%d", event);
switch (event)
{
case LUAT_MULTIMEDIA_CB_AUDIO_DECODE_START:
luat_gpio_set(CODEC_PWR_PIN, 1);
luat_audio_play_write_blank_raw(0, 6, 1);
break;
case LUAT_MULTIMEDIA_CB_AUDIO_OUTPUT_START:
luat_rtos_timer_start(g_s_delay_timer, 200, 0, app_pa_on, NULL);
break;
case LUAT_MULTIMEDIA_CB_TTS_INIT:
audio_play_tts_set_param(0, ivTTS_PARAM_INPUT_CODEPAGE, ivTTS_CODEPAGE_GBK);
break;
case LUAT_MULTIMEDIA_CB_TTS_DONE:
if (!luat_audio_play_get_last_error(0))
{
luat_audio_play_write_blank_raw(0, 1, 0);
}
break;
case LUAT_MULTIMEDIA_CB_AUDIO_DONE:
luat_rtos_timer_stop(g_s_delay_timer);
LUAT_DEBUG_PRINT("audio play done, result=%d!", luat_audio_play_get_last_error(0));
luat_gpio_set(PA_PWR_PIN, 0);
luat_gpio_set(CODEC_PWR_PIN, 0);
break;
}
}
void audio_task(void *param)
{
ivCStrA sdk_id = AISOUND_SDK_USERID_16K;
luat_rtos_timer_create(&g_s_delay_timer);
luat_audio_play_global_init(audio_event_cb, audio_data_cb, luat_audio_play_file_default_fun, luat_audio_play_tts_default_fun, NULL);
luat_audio_play_tts_set_resource(ivtts_16k, sdk_id, NULL);
//air780E <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ES7149<34><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
luat_i2s_base_setup(0, I2S_MODE_I2S, I2S_FRAME_SIZE_16_16);
audioQueueData audioQueueRecv = {0};
uint32_t result = 0;
while (1)
{
if (xQueueReceive(audioQueueHandle, &audioQueueRecv, portMAX_DELAY))
{
// audio_play_tts_text(0, audioQueueRecv.data, sizeof(audioQueueRecv.data));
LUAT_DEBUG_PRINT("this is play priority %d", audioQueueRecv.priority);
LUAT_DEBUG_PRINT("this is play playType %d", audioQueueRecv.playType);
if (audioQueueRecv.priority == MONEY_PLAY)
{
if (audioQueueRecv.playType == TTS_PLAY)
{
// DBG("TEST data address %d", sizeof(audioQueueRecv.message.data));
luat_audio_play_tts_text(0, audioQueueRecv.message.tts.data, audioQueueRecv.message.tts.len);
}
else if (audioQueueRecv.playType == FILE_PLAY)
{
LUAT_DEBUG_PRINT("TEST address 2 %p", audioQueueRecv.message.file.info);
luat_audio_play_multi_files(0, audioQueueRecv.message.file.info, audioQueueRecv.message.file.count);
}
}
else if (audioQueueRecv.priority == PAD_PLAY)
{
}
result = osEventFlagsWait(waitAudioPlayDone, WAIT_PLAY_FLAG, osFlagsWaitAll, 20000);
if (audioQueueRecv.playType == TTS_PLAY)
{
LUAT_DEBUG_PRINT("FREE MY AUDIO TTS");
free(audioQueueRecv.message.tts.data);
}
else if (audioQueueRecv.playType == FILE_PLAY)
{
free(audioQueueRecv.message.file.info);
LUAT_DEBUG_PRINT("FREE MY AUDIO FILE");
}
}
// luat_audio_play_tts_text(0, str, sizeof(str));
// luat_rtos_task_sleep(1000);
}
}
void audio_task_init(void)
{
luat_gpio_cfg_t gpio_cfg;
luat_gpio_set_default_cfg(&gpio_cfg);
luat_rtos_task_handle audio_task_handle;
gpio_cfg.pin = LED2_PIN;
gpio_cfg.pull = LUAT_GPIO_DEFAULT;
luat_gpio_open(&gpio_cfg);
gpio_cfg.pin = LED3_PIN;
luat_gpio_open(&gpio_cfg);
gpio_cfg.pin = LED4_PIN;
luat_gpio_open(&gpio_cfg);
gpio_cfg.pin = CHARGE_EN_PIN;
luat_gpio_open(&gpio_cfg);
gpio_cfg.pin = PA_PWR_PIN;
luat_gpio_open(&gpio_cfg);
gpio_cfg.pin = CODEC_PWR_PIN;
luat_gpio_open(&gpio_cfg);
gpio_cfg.alt_fun = CODEC_PWR_PIN_ALT_FUN;
luat_gpio_open(&gpio_cfg);
audioQueueHandle = xQueueCreate(100, sizeof(audioQueueData));
audioQueueData powerOn = {0};
powerOn.playType = TTS_PLAY;
powerOn.priority = MONEY_PLAY;
char str[] = "<EFBFBD><EFBFBD>ӭʹ<EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
powerOn.message.tts.data = malloc(sizeof(str));
memcpy(powerOn.message.tts.data, str, sizeof(str));
powerOn.message.tts.len = sizeof(str);
if (pdTRUE != xQueueSend(audioQueueHandle, &powerOn, 0))
{
LUAT_DEBUG_PRINT("start send audio fail");
}
luat_rtos_task_create(&audio_task_handle, 5*1024, 60, "audio", audio_task, NULL, NULL);
}
/*------------------------------------------------audio-----------------------------------------------*/

View File

@@ -0,0 +1,95 @@
#include "net_led_Task.h"
#include "audio_Task.h"
extern QueueHandle_t audioQueueHandle;
uint8_t link_UP = 0;
/*-----------------------------------------------------------mobile event----------------------------------------------------------*/
static void mobile_event_callback_t(LUAT_MOBILE_EVENT_E event, uint8_t index, uint8_t status)
{
switch (event)
{
case LUAT_MOBILE_EVENT_NETIF:
switch (status)
{
case LUAT_MOBILE_NETIF_LINK_ON:
LUAT_DEBUG_PRINT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>");
link_UP = 1;
audioQueueData net_link = {0};
net_link.playType = TTS_PLAY;
net_link.priority = MONEY_PLAY;
char str[] = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>";
net_link.message.tts.data = malloc(sizeof(str));
memcpy(net_link.message.tts.data, str, sizeof(str));
net_link.message.tts.len = sizeof(str);
if (pdTRUE != xQueueSend(audioQueueHandle, &net_link, 0))
{
LUAT_DEBUG_PRINT("start send audio fail");
}
break;
default:
link_UP = 0;
LUAT_DEBUG_PRINT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
break;
}
case LUAT_MOBILE_EVENT_SIM:
switch (status)
{
case LUAT_MOBILE_SIM_READY:break;
case LUAT_MOBILE_NO_SIM:
LUAT_DEBUG_PRINT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SIM<EFBFBD><EFBFBD>");
audioQueueData sim_state = {0};
sim_state.playType = TTS_PLAY;
sim_state.priority = MONEY_PLAY;
char str[] = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><EFBFBD>";
sim_state.message.tts.data = malloc(sizeof(str));
memcpy(sim_state.message.tts.data, str, sizeof(str));
sim_state.message.tts.len = sizeof(str);
if (pdTRUE != xQueueSend(audioQueueHandle, &sim_state, 0))
{
LUAT_DEBUG_PRINT("start send audio fail");
}
default:
break;
}
default:
break;
}
}
void Task_netinfo_call(void)
{
luat_mobile_event_register_handler(mobile_event_callback_t);
}
/*-----------------------------------------------------------mobile event-------------------------------------------------------*/
/*-----------------------------------------------------------NET_LED begin-------------------------------------------------------*/
static void NET_LED_FUN(void *param)
{
luat_gpio_cfg_t net_led_cfg;
luat_gpio_set_default_cfg(&net_led_cfg);
net_led_cfg.pin=NET_LED_PIN;
luat_gpio_open(&net_led_cfg);
while (1)
{
if (link_UP)
{
luat_gpio_set(NET_LED_PIN,1);
luat_rtos_task_sleep(500);
luat_gpio_set(NET_LED_PIN,0);
luat_rtos_task_sleep(500);
}
else
{
luat_gpio_set(NET_LED_PIN,0);
luat_rtos_task_sleep(500);
}
}
}
void NET_LED_Task(void)
{
luat_rtos_task_handle NET_LED_Task_HANDLE;
luat_rtos_task_create(&NET_LED_Task_HANDLE,1*1024,20,"NET_LED_TASK",NET_LED_FUN,NULL,NULL);
}

View File

@@ -0,0 +1,242 @@
#include "web_audio.h"
#include "audio_Task.h"
#include "net_led_Task.h"
extern QueueHandle_t audioQueueHandle;
extern uint8_t link_UP;
char mqtt_subTopic[40];
static char subTopic[] = "test20220929/";
static HttpClientContext AirM2mhttpClient;
#define HTTP_RECV_BUF_SIZE (11520)
#define HTTP_HEAD_BUF_SIZE (800)
/*------------------------------------------------http------------------------------------------------*/
static INT32 httpGetData(CHAR *getUrl, CHAR *buf, UINT32 len)
{
HTTPResult result = HTTP_INTERNAL;
HttpClientData clientData = {0};
UINT32 count = 0;
uint16_t headerLen = 0;
LUAT_DEBUG_ASSERT(buf != NULL,0,0,0);
clientData.headerBuf = malloc(HTTP_HEAD_BUF_SIZE);
clientData.headerBufLen = HTTP_HEAD_BUF_SIZE;
clientData.respBuf = buf;
clientData.respBufLen = len;
result = httpSendRequest(&AirM2mhttpClient, getUrl, HTTP_GET, &clientData);
LUAT_DEBUG_PRINT("send request result=%d", result);
if (result != HTTP_OK)
goto exit;
do {
LUAT_DEBUG_PRINT("recvResponse loop.");
memset(clientData.headerBuf, 0, clientData.headerBufLen);
memset(clientData.respBuf, 0, clientData.respBufLen);
result = httpRecvResponse(&AirM2mhttpClient, &clientData);
if(result == HTTP_OK || result == HTTP_MOREDATA){
headerLen = strlen(clientData.headerBuf);
if(headerLen > 0)
{
LUAT_DEBUG_PRINT("total content length=%d", clientData.recvContentLength);
}
if(clientData.blockContentLen > 0)
{
LUAT_DEBUG_PRINT("response content:{%s}", (uint8_t*)clientData.respBuf);
}
count += clientData.blockContentLen;
LUAT_DEBUG_PRINT("has recv=%d", count);
}
} while (result == HTTP_MOREDATA || result == HTTP_CONN);
LUAT_DEBUG_PRINT("result=%d", result);
if (AirM2mhttpClient.httpResponseCode < 200 || AirM2mhttpClient.httpResponseCode > 404)
{
LUAT_DEBUG_PRINT("invalid http response code=%d",AirM2mhttpClient.httpResponseCode);
} else if (count == 0 || count != clientData.recvContentLength) {
LUAT_DEBUG_PRINT("data not receive complete");
} else {
LUAT_DEBUG_PRINT("receive success");
}
exit:
free(clientData.headerBuf);
return result;
}
static void task_test_https(CHAR *getUrl, uint16_t *buf, UINT32 len)
{
//HttpClientData clientData = {0};
//char *recvBuf = malloc(HTTP_RECV_BUF_SIZE);
HTTPResult result = HTTP_INTERNAL;
result = httpConnect(&AirM2mhttpClient,getUrl);
if (result == HTTP_OK)
{
httpGetData(getUrl, buf, len);
httpClose(&AirM2mhttpClient);
}
else
{
LUAT_DEBUG_PRINT("http client connect error");
}
}
void messageArrived(MessageData *data)
{
luat_audio_play_info_t info[1];
memset(info, 0, sizeof(info));
static uint32_t *tmpbuff[HTTP_RECV_BUF_SIZE]={0};
uint32_t status;
LUAT_DEBUG_PRINT("mqtt Message arrived on topic %d%s: %d%s", data->topicName->lenstring.len, data->topicName->lenstring.data, data->message->payloadlen, data->message->payload);
char *p = (char *)data->message->payload;
uint8_t payload_len = data->message->payloadlen;
for (size_t i = 0; i < data->message->payloadlen; i++)
{
LUAT_DEBUG_PRINT("ceshi%c", p[i]);
}
if (p[0] == 0)
{
uint16_t TTS_Len = p[4];
CHAR *TTS=malloc(TTS_Len*sizeof(char));
if (TTS_Len == payload_len - 5)
{
memcpy(TTS, p + 5, TTS_Len);
luat_audio_play_tts_text(0, TTS, TTS_Len);
}
else
{
int URL_Len = p[9 + TTS_Len];
CHAR *URL=malloc(URL_Len*sizeof(char));
memset(URL,'\0',URL_Len*sizeof(char));
memcpy(TTS, p + 5, TTS_Len);
memcpy(URL, p + 10 + TTS_Len, URL_Len);
task_test_https(URL, tmpbuff, HTTP_RECV_BUF_SIZE);
info[0].path = NULL;
info[0].address = (uint32_t)tmpbuff;
info[0].rom_data_len = sizeof(tmpbuff);
luat_audio_play_tts_text(0, TTS, TTS_Len);
luat_rtos_task_sleep(2000);
luat_audio_play_multi_files(0, info, 1);
free(URL);
}
luat_rtos_task_sleep(2000);
free(TTS);
}
else if (p[0] == 1)
{
uint16_t URL_Len = p[4];
CHAR *URL=malloc(URL_Len*sizeof(char));
memset(URL,'\0',URL_Len*sizeof(char));
if (URL_Len == payload_len - 5)
{
memcpy(URL, p + 5, URL_Len);
task_test_https(URL, tmpbuff, HTTP_RECV_BUF_SIZE);
FILE* fp1 = luat_fs_fopen("test1.mp3", "wb+");
status = luat_fs_fwrite((uint8_t *)tmpbuff, sizeof(tmpbuff), 1, fp1);
if (status == 0)
{
while (1);
}
luat_fs_fclose(fp1);
info[0].path = "test1.mp3";
luat_audio_play_multi_files(0, info, 1);
luat_rtos_task_sleep(3000);
}
else
{
int TTS_Len = p[9 + URL_Len];
CHAR *TTS=malloc(TTS_Len*sizeof(char));
memcpy(URL, p + 5, URL_Len);
memcpy(TTS, p + 10 + URL_Len, TTS_Len);
task_test_https(URL, tmpbuff, HTTP_RECV_BUF_SIZE);
info[0].path = NULL;
info[0].address = (uint32_t)tmpbuff;
info[0].rom_data_len = sizeof(tmpbuff);
luat_audio_play_multi_files(0, info, 1);
luat_rtos_task_sleep(2000);
luat_audio_play_tts_text(0, TTS, TTS_Len);
free(TTS);
}
free(URL);
}
luat_rtos_task_sleep(2000);
memset(tmpbuff, 0, HTTP_RECV_BUF_SIZE);
}
static void mqtt_demo(void)
{
CHAR IMEI[20] = {0};
if (luat_mobile_get_imei(0, IMEI, sizeof(IMEI)))
{
sprintf(mqtt_subTopic, "%s%s", subTopic, IMEI);
LUAT_DEBUG_PRINT("imei%s", mqtt_subTopic);
}
int rc = 0;
MQTTClient mqttClient;
static Network n = {0};
MQTTPacket_connectData connectData = MQTTPacket_connectData_initializer;
connectData.MQTTVersion = 4;
connectData.clientID.cstring = IMEI;
connectData.username.cstring = User;
connectData.password.cstring = Password;
connectData.keepAliveInterval = 120;
while (1)
{
while (!link_UP)
{
luat_rtos_task_sleep(1000);
}
if ((rc = mqtt_connect(&mqttClient, &n, HOST, PORT, &connectData)) == 0)
{
audioQueueData MQTT_link = {0};
MQTT_link.playType = TTS_PLAY;
MQTT_link.priority = MONEY_PLAY;
char str[] = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳɹ<EFBFBD>";
MQTT_link.message.tts.data = malloc(sizeof(str));
memcpy(MQTT_link.message.tts.data, str, sizeof(str));
MQTT_link.message.tts.len = sizeof(str);
if (pdTRUE != xQueueSend(audioQueueHandle, &MQTT_link, 0))
{
LUAT_DEBUG_PRINT("start send audio fail");
}
}
else
{
audioQueueData MQTT_link = {0};
MQTT_link.playType = TTS_PLAY;
MQTT_link.priority = MONEY_PLAY;
char str[] = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>";
MQTT_link.message.tts.data = malloc(sizeof(str));
memcpy(MQTT_link.message.tts.data, str, sizeof(str));
MQTT_link.message.tts.len = sizeof(str);
if (pdTRUE != xQueueSend(audioQueueHandle, &MQTT_link, 0))
{
LUAT_DEBUG_PRINT("start send audio fail");
}
}
if ((rc = MQTTSubscribe(&mqttClient, mqtt_subTopic, 0, messageArrived)) != 0)
LUAT_DEBUG_PRINT("mqtt Return code from MQTT subscribe is %d\n", rc);
while (1)
{
luat_rtos_task_sleep(1000);
}
}
}
static void mqttclient_task_init(void)
{
luat_rtos_task_handle mqttclient_task_handle;
luat_rtos_task_create(&mqttclient_task_handle, 4*1024, 80, "mqttclient", mqtt_demo, NULL, NULL);
}
/*------------------------------------------------------MQTT event-----------------------------------------------------------------*/
INIT_HW_EXPORT(Task_netinfo_call, "0");
INIT_TASK_EXPORT(mqttclient_task_init, "1");
INIT_TASK_EXPORT(audio_task_init, "2");
INIT_TASK_EXPORT(NET_LED_Task, "3");

View File

@@ -0,0 +1,31 @@
local TARGET_NAME = "web_audio"
local LIB_DIR = "$(buildir)/".. TARGET_NAME .. "/"
local LIB_NAME = "lib" .. TARGET_NAME .. ".a "
includes(SDK_TOP .. "/thirdparty/audio_decoder")
target(TARGET_NAME)
set_kind("static")
set_targetdir(LIB_DIR)
add_defines("MQTT_TASK",{public = true})
includes(SDK_TOP .. "/thirdparty/mqtt")
add_deps("mqtt")
add_includedirs(SDK_TOP .. "/thirdparty/mqtt/MQTTClient-C/src",{public = true})
add_files(SDK_TOP .. "/thirdparty/mqtt/MQTTClient-C/src/*.c",{public = true})
includes(SDK_TOP .. "/thirdparty/httpclient")
add_deps("httpclient")
add_deps("audio_decoder")
includes(SDK_TOP .. "/thirdparty/miniz")
add_deps("miniz")
add_includedirs(SDK_TOP .. "/PLAT/core/tts/include/16k_lite_ver",{public = true})
add_includedirs("/inc",{public = true})
add_files("/src/*.c",{public = true})
--可以继续增加add_includedirs和add_files
--自动链接
LIB_USER = LIB_USER .. SDK_TOP .. LIB_DIR .. LIB_NAME .. " "
LIB_USER = LIB_USER .. SDK_TOP .. "/PLAT/core/lib/libaisound50_16K.a "
--甚至可以加入自己的库
target_end()

View File

@@ -0,0 +1,126 @@
# 合宙Air780E TTS 参数设置格式可以变声的TTS
1.原始格式(选择默认参数)
```c
char str[] = "大家好,我是小宙";
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
```
2.设置发音人
设置代码参考,发音人同时只能设置一个
```c
格式: [m*] (*=51~55)
51 许久
52 许多
53 晓萍
54 唐老鸭
55 许宝宝
选择许多(52)作为发音人
char str[] = "[m52]大家好,我是小宙";
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
```
3.设置发音风格
```c
格式: [f*] (*=0/1/2)
参数: 0 一字一顿
1 平铺直叙
2 有声有色
说明: 默认为平铺直叙风格。
char str[] = "[f1]大家好,我是小宙";
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
```
4.选择语种
```c
格式: [g*] (*=0/1/2)
参数: 0 自动判断
1 汉语普通话
2 英语语种
3 法语
说明:默认语种为自动判断。
char str[] = "[g0]大家好,我是小宙";
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
```
5.设置数字处理策略
```c
格式: [n*] (*=0/1/2)
参数: 0 自动判断
1 数字作号码处理
2 数字作数值处理
说明: 默认为自动判断。
char str[] = "[n1]大家好,我是小宙";
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
```
6.英文数字 0 的朗读设置
```c
格式: [o*] (*=0/1)
参数: 0 英文数字 0 读做“O
1 英文数字 0 读做“zero
说明: 默认为英文数字 0 读做“zero”。
注意:0 只有作为号码朗读时,标记才会生效,0 处理为数值时,一律读作 zero
char str[] = "[o1]大家好,我是小宙";
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
```
7.静音一段时间
```c
格式: [p*] (*=无符号整数)
参数: * 静音的时间长度,单位:毫秒(ms)
char str[] = "[p2000]大家好,我是小宙";
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
```
8.设置语速
```c
格式: [s*] (*=0~10)
参数: * 0-10
说明: 默认语速值为 5,语速的调节范围为默认语速的一半到两倍,即 0 的值比默认语速慢一半,10 的值比默认语速快一倍。
char str[] = "[s5]大家好,我是小宙";
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
```
9.设置语调
```c
格式: [t*] (*=0~10)
参数: * 语调值对应到参数设置的值为 6553*(值-5),即 0 对应到-327655 对应到 010 对应到+32765
说明: 默认语调值为 5,语调的调节范围为默认语调基频下 64Hz 到上 128Hz
char str[] = "[t5]大家好,我是小宙";
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
```
10.设置音量
```c
格式: [v*] (*=0~10)
参数: * 音量值对应到参数设置的值为 6553*(值-5),即 0 对应到-327655 对应到 010 对应到+32765
说明: 音量的调节范围为静音到音频设备支持的最大值,默认值 5 为中间音量。
char str[] = "[v1]大家好,我是小宙";
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
```
11.设置汉语号码中“1”的读法
```c
格式: [y*] (*=0/1)
参数: 0 合成号码时“1”读成“yāo
1 合成号码时“1”读成“
说明: 默认合成号码时“1”读成“yāo”。
char str[] = "[y1]大家好,我是小宙";
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
```

View File

@@ -0,0 +1,41 @@
# 玩转Air780E的趣味音频播放
Air780E 开发板内置了顺信7149Audio Codec驱动能力相对较弱为了广大开发者可以驱动各种各样的喇叭、玩的开心我们准备了音频PA扩展板。同时准备了在线的云喇叭控制平台——合宙小工具 http://tools.openluat.com/tools/yunlaba
![](C:\Users\WL\Desktop\屏幕截图 2022-11-15 182029.png)
云平台下发数据的格式采用GBK编码
0表示后面是普通文字0后面四个字节表示文字长度。1表示后面是音频1后面四个字节表示url的长度
准备工作:
1.合宙Air780E开发板
2.合宙Air780E开发板喇叭扩展板
3.喇叭一个
整体硬件搭配图:
<img src="C:\Users\WL\Desktop\微信图片_20221115110941.jpg" alt="微信图片_20221115110941" />
<img src="C:\Users\WL\Desktop\微信图片_20221115110950.jpg" alt="微信图片_20221115110950" />
演示方案一:普通音频播放
1.通过合宙小工具云平台下发文字播报内容支付宝到账8000元
2.通过合宙小工具云平台下发音频+文字的播报付款成功8000元
演示方案二设置TTS的播报参数设置发音风格发音人等体验不一样的趣味TTS语音播报
TTS个性化设置格式参考Gitee仓库project文件下的web_audio项目
喜欢的小伙伴,赶紧去试试吧。