Initial commit: TXW82x FPV v2.7.0.7-42229 SDK + project sources

This commit is contained in:
2026-07-06 11:30:13 +08:00
commit e76462eeb7
3451 changed files with 1415300 additions and 0 deletions

325
sdk/include/hal/i2s.h Normal file
View File

@@ -0,0 +1,325 @@
#ifndef _HAL_I2S_H_
#define _HAL_I2S_H_
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief i2s bit width per sample type
*/
enum i2s_sample_bits {
/*! Compatible version: V0
*@Describe:
* i2s bit width per sample: 8bits
*/
I2S_SAMPLE_BITS_8BITS,
/*! Compatible version: V0
*@Describe:
* i2s bit width per sample: 16bits
*/
I2S_SAMPLE_BITS_16BITS,
/*! Compatible version: V0
*@Describe:
* i2s bit width per sample: 24bits
*/
I2S_SAMPLE_BITS_24BITS,
};
/**
* @brief i2s sample frequency type
*/
enum i2s_sample_freq {
I2S_SAMPLE_FREQ_8K,
I2S_SAMPLE_FREQ_16K,
/*! Compatible version: V0
*@Describe:
* i2s sample frequency: 44.1K(WS frequency)
*/
I2S_SAMPLE_FREQ_44_1K,
/*! Compatible version: V0
*@Describe:
* i2s sample frequency: 48K(WS frequency)
*/
I2S_SAMPLE_FREQ_48K,
};
/**
* @brief i2s channel type
*/
enum i2s_channel {
/*! Compatible version: V0
*@Describe:
* i2s mono channel
*/
I2S_CHANNEL_MONO,
/*! Compatible version: V0
*@Describe:
* i2s stereo channel
*/
I2S_CHANNEL_STEREO,
};
/**
* @brief i2s data format type
*/
enum i2s_data_fmt {
/*! Compatible version: V0
*@Describe:
* I2S communication format I2S
*/
I2S_DATA_FMT_I2S,
/*! Compatible version: V0
*@Describe:
* I2S communication format MSB(right justified)
*/
I2S_DATA_FMT_MSB,
/*! Compatible version: V0
*@Describe:
* I2S communication format LSB(left justified)
*/
I2S_DATA_FMT_LSB,
/*! Compatible version: V0
*@Describe:
* I2S communication format PCM
*/
I2S_DATA_FMT_PCM,
};
/**
* @brief i2s mode type
*/
enum i2s_mode {
/*! Compatible version: V0
*@Describe:
* I2S master mode setting
*/
I2S_MODE_MASTER,
/*! Compatible version: V0
*@Describe:
* I2S slave mode setting
*/
I2S_MODE_SLAVE,
};
/**
* @brief spi ioctl cmd
*
*/
enum i2s_ioctl_cmd {
/*! Compatible version: V0
*@Describe:
* Set the polarity of WSCLK
*@The specific Settings:
* (1)left channel WSCLK level is low , right channel WSCLK level is high
* (2)left channel WSCLK level is high, right channel WSCLK level is low
*/
I2S_IOCTL_CMD_SET_WSCLK_POL,
/*! Compatible version: V0
*@Describe:
* i2s bit width per sample
*@The specific Settings:
* (1)I2S_SAMPLE_BITS_8BITS
* (2)I2S_SAMPLE_BITS_16BITS
* (3)I2S_SAMPLE_BITS_24BITS
*/
I2S_IOCTL_CMD_SET_SAMPLE_BITS,
/*! Compatible version: V0
*@Describe:
* i2s bit width per sample
*@The specific Settings:
* (1)I2S_CHANNEL_MONO
* (2)I2S_CHANNEL_STEREO
*/
I2S_IOCTL_CMD_SET_CHANNEL,
/*! Compatible version: V0
*@Describe:
* i2s communication format
*@The specific Settings:
* (1)I2S_DATA_FMT_I2S
* (2)I2S_DATA_FMT_MSB
* (3)I2S_DATA_FMT_LSB
*/
I2S_IOCTL_CMD_SET_DATA_FMT,
/*! Compatible version: V0
*@Describe:
* i2s open WSCLK & BCLK & DATA debounce
* (Only for i2s slave)
*/
I2S_IOCTL_CMD_SET_DEBOUNCE,
/*! Compatible version: V0
*@Describe:
* i2s open duplex using iis0 & iis1
*/
I2S_IOCTL_CMD_SET_DUPLEX,
};
/**
* @brief spi request interrupt flag
*
*/
enum i2s_irq_flag {
/*! Compatible version: V0
*@Describe:
* I2S interrupt signal that transmits half of the data
*/
I2S_IRQ_FLAG_HALF = BIT(0),
/*! Compatible version: V0
*@Describe:
* I2S interrupt signal that transmits all data
*/
I2S_IRQ_FLAG_FULL = BIT(1),
I2S_IRQ_FLAG_RESET = BIT(2),
};
/* User interrupt handle */
typedef void (*i2s_irq_hdl)(uint32 irq, uint32 irq_data);
/* I2S api for user */
struct i2s_device {
struct dev_obj dev;
};
struct i2s_hal_ops{
struct devobj_ops ops;
int32(*open)(struct i2s_device *i2s, enum i2s_mode mode, enum i2s_sample_freq frequency, enum i2s_sample_bits bits);
int32(*close)(struct i2s_device *i2s);
int32(*ioctl)(struct i2s_device *i2s, uint32 cmd, uint32 param);
int32(*read)(struct i2s_device *i2s, void *buf, uint32 len);
int32(*write)(struct i2s_device *i2s, const void *buf, uint32 len);
int32(*write_scatter)(struct i2s_device *i2s, const scatter_data *data, uint32 count);
int32(*request_irq)(struct i2s_device *i2s, uint32 irq_flag, i2s_irq_hdl irqhdl, uint32 irq_data);
int32(*release_irq)(struct i2s_device *i2s, uint32 irq_flag);
};
/* I2S API functions */
/**
* @brief i2s_open.
*
* @Compatible version: V0
*
* @note This function must be called before any I2S driver operations.
*
* @param i2s The address of I2S device in the RTOS.
* @param mode I2S work mode setting - see "enum i2s_mode".
* @param frequency I2S sample frequency setting - see "enum i2s_sample_freq".
* @param bits I2S sample bits setting - see "enum i2s_sample_bits".
*
* @return
* - RET_OK Success
* - RET_ERR Fail
*/
int32 i2s_open(struct i2s_device *i2s, enum i2s_mode mode, enum i2s_sample_freq frequency, enum i2s_sample_bits bits);
/**
* @brief i2s_close.
*
* @Compatible version: V0
*
* @param i2s The address of I2S device in the RTOS.
*
* @return
* - RET_OK Success
* - RET_ERR Fail
*/
int32 i2s_close(struct i2s_device *i2s);
/**
* @brief i2s_write.
*
* @Compatible version: V0
*
* @param i2s The address of I2S device in the RTOS.
* @param buf Write the start address of buf.
* @param len Write length, uint: byte.
*
* @return
* - RET_OK Success
* - RET_ERR Fail
*/
int32 i2s_write(struct i2s_device *i2s, const void *buf, uint32 len);
int32 i2s_write_scatter(struct i2s_device *i2s, const scatter_data *data, uint32 count);
/**
* @brief i2s_read.
*
* @Compatible version: V0
*
* @param i2s The address of I2S device in the RTOS.
* @param buf Read the start address of buf.
* @param len Read length, uint: byte.
*
* @return
* - RET_OK Success
* - RET_ERR Fail
*/
int32 i2s_read(struct i2s_device *i2s, void *buf, uint32 len);
/**
* @brief i2s_ioctl.
*
* @Compatible version: V0
*
* @param i2s The address of I2S device in the RTOS.
* @param cmd Control command - see"enum i2s_ioctl_cmd".
* @param param Parameters required to execute the current Control command.
*
* @return
* - RET_OK Success
* - RET_ERR Fail
*/
int32 i2s_ioctl(struct i2s_device *i2s, uint32 cmd, uint32 param);
/**
* @brief i2s_request_irq.
*
* @Compatible version: V0
*
* @param i2s The address of I2S device in the RTOS.
* @param irq_flag The type of interrupt - see"enum i2s_irq_flag".
* @param irqhdl The interrupt function.
* @param irq_data The parameters of the interrupt function
*
* @return
* - RET_OK Success
* - RET_ERR Fail
*/
int32 i2s_request_irq(struct i2s_device *i2s, uint32 irq_flag, i2s_irq_hdl irqhdl, uint32 irq_data);
/**
* @brief i2s_release_irq.
*
* @Compatible version: V0
*
* @param i2s The address of I2S device in the RTOS.
* @param irq_flag The type of interrupt - see"enum i2s_irq_flag".
*
* @return
* - RET_OK Success
* - RET_ERR Fail
*/
int32 i2s_release_irq(struct i2s_device *i2s, uint32 irq_flag);
#ifdef __cplusplus
}
#endif
#endif