luat_i2s.h 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #ifndef LUAT_I2S_H
  2. #define LUAT_I2S_H
  3. enum {
  4. LUAT_I2S_MODE_MASTER = 0, // 主机模式
  5. LUAT_I2S_MODE_SLAVE, // 从机模式
  6. LUAT_I2S_MODE_I2S = 0, // I2S 标准
  7. LUAT_I2S_MODE_LSB, // LSB 标准
  8. LUAT_I2S_MODE_MSB, // MSB 标准
  9. LUAT_I2S_MODE_PCMS, // PCM 短帧标准
  10. LUAT_I2S_MODE_PCML, // PCM 长帧标准
  11. LUAT_I2S_CHANNEL_LEFT = 0, // 左声道
  12. LUAT_I2S_CHANNEL_RIGHT, // 右声道
  13. LUAT_I2S_CHANNEL_STEREO, // 立体声
  14. LUAT_I2S_BITS_16 = 16, // 16位数据
  15. LUAT_I2S_BITS_24 = 24, // 24位数据
  16. LUAT_I2S_BITS_32 = 32, // 32位数据
  17. LUAT_I2S_HZ_8k = 8000, // i2s 8kHz采样率
  18. LUAT_I2S_HZ_11k = 11000, // i2s 11kHz采样率
  19. LUAT_I2S_HZ_16k = 16000, // i2s 16kHz采样率
  20. LUAT_I2S_HZ_22k = 22050, // i2s 22.05kHz采样率
  21. LUAT_I2S_HZ_32k = 32000, // i2s 32kHz采样率
  22. LUAT_I2S_HZ_44k = 44100, // i2s 44.1kHz采样率
  23. LUAT_I2S_HZ_48k = 48000, // i2s 48kHz采样率
  24. LUAT_I2S_HZ_96k = 96000, // i2s 96kHz采样率
  25. LUAT_I2S_STATE_STOP = 0, // i2s停止状态
  26. LUAT_I2S_STATE_RUNING, // i2s传输状态
  27. };
  28. typedef enum {
  29. LUAT_I2S_EVENT_TX_DONE,
  30. LUAT_I2S_EVENT_TX_ERR,
  31. LUAT_I2S_EVENT_RX_DONE,
  32. LUAT_I2S_EVENT_RX_ERR,
  33. LUAT_I2S_EVENT_TRANSFER_DONE,
  34. LUAT_I2S_EVENT_TRANSFER_ERR,
  35. } luat_i2s_event_t;
  36. typedef struct luat_i2s_conf{
  37. uint8_t id; // i2s id
  38. uint8_t mode; // i2s模式
  39. uint8_t standard; // i2s数据标准
  40. uint8_t channel_format; // i2s声道格式
  41. uint8_t data_bits; // i2s有效数据位数
  42. uint8_t channel_bits; // i2s通道数据位数
  43. volatile uint8_t state; // i2s状态
  44. uint8_t is_full_duplex; // 是否全双工
  45. uint32_t sample_rate; // i2s采样率
  46. uint32_t cb_rx_len; // 接收触发回调数据长度
  47. int (*luat_i2s_event_callback)(uint8_t id ,luat_i2s_event_t event, uint8_t *rx_data, uint32_t rx_len, void *param); // i2s回调函数
  48. void *userdata; // 用户数据
  49. }luat_i2s_conf_t;
  50. // 配置
  51. int luat_i2s_setup(const luat_i2s_conf_t *conf); // 初始化i2s
  52. int luat_i2s_modify(uint8_t id,uint8_t channel_format,uint8_t data_bits,uint32_t sample_rate); // 修改i2s配置(不会进行初始化操作,动态修改配置)
  53. // 传输(异步接口)
  54. int luat_i2s_send(uint8_t id, uint8_t* buff, size_t len); // i2s发送数据
  55. int luat_i2s_recv(uint8_t id, uint8_t* buff, size_t len); // i2s接收数据
  56. int luat_i2s_transfer(uint8_t id, uint8_t* txbuff, size_t len); // i2s传输数据(全双工)
  57. int luat_i2s_transfer_loop(uint8_t id, uint8_t* buff, uint32_t one_truck_byte_len, uint32_t total_trunk_cnt, uint8_t need_callback); // i2s循环传输数据(全双工)
  58. // 控制
  59. int luat_i2s_pause(uint8_t id); // i2s传输暂停
  60. int luat_i2s_resume(uint8_t id); // i2s传输恢复
  61. int luat_i2s_close(uint8_t id); // i2s关闭
  62. // 获取配置
  63. luat_i2s_conf_t *luat_i2s_get_config(uint8_t id);
  64. int luat_i2s_txbuff_info(uint8_t id, size_t *buffsize, size_t* remain);
  65. int luat_i2s_rxbuff_info(uint8_t id, size_t *buffsize, size_t* remain);
  66. int luat_i2s_set_user_data(uint8_t id, void *user_data);
  67. #endif