mirror of
https://gitee.com/beecue/fastbee.git
synced 2025-12-21 10:25:54 +08:00
更新硬件SDK
This commit is contained in:
@@ -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 */
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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-----------------------------------------------*/
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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");
|
||||
@@ -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()
|
||||
@@ -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 对应到-32765,5 对应到 0,10 对应到+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 对应到-32765,5 对应到 0,10 对应到+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”读成“yī”
|
||||
说明: 默认合成号码时“1”读成“yāo”。
|
||||
char str[] = "[y1]大家好,我是小宙";
|
||||
luat_audio_play_tts_text(0, str, sizeof(str));//audio 播报TTS 的接口
|
||||
```
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
# 玩转Air780E的趣味音频播放
|
||||
|
||||
Air780E 开发板内置了顺信7149Audio Codec,驱动能力相对较弱,为了广大开发者可以驱动各种各样的喇叭、玩的开心,我们准备了音频PA扩展板。同时准备了在线的云喇叭控制平台——合宙小工具 http://tools.openluat.com/tools/yunlaba
|
||||
|
||||

|
||||
|
||||
云平台下发数据的格式采用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项目
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
喜欢的小伙伴,赶紧去试试吧。
|
||||
Reference in New Issue
Block a user