main.lua 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "ccdemo"
  3. VERSION = "1.0.0"
  4. log.style(1)
  5. -- sys库是标配
  6. sys = require("sys")
  7. if wdt then
  8. --添加硬狗防止程序卡死,在支持的设备上启用这个功能
  9. --wdt.init(9000)--初始化watchdog设置为9s
  10. --sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  11. end
  12. local up1 = zbuff.create(6400,0) --上行数据保存区1
  13. local up2 = zbuff.create(6400,0) --上行数据保存区2
  14. local down1 = zbuff.create(6400,0) --下行数据保存区1
  15. local down2 = zbuff.create(6400,0) --下行数据保存区2
  16. local cnt = 0
  17. gpio.setup(24, 1, gpio.PULLUP) -- i2c工作的电压域
  18. gpio.setup(164, 1, gpio.PULLUP) -- es8311电源使能脚
  19. gpio.setup(162, 1, gpio.PULLUP) -- 喇叭pa功放脚
  20. pins.setup(80, "I2C0_SCL") --复用pin80为i2c0_scl
  21. pins.setup(81, "I2C0_SDA") --复用pin81为i2c0_sda
  22. local multimedia_id = 0 -- 音频通道 0
  23. local i2c_id = 0 -- i2c_id 0
  24. local i2s_id = 0 -- i2s_id 0
  25. local i2s_mode = 0 -- i2s模式 0 主机 1 从机
  26. local i2s_sample_rate = 16000 -- 采样率
  27. local i2s_bits_per_sample = 16 -- 数据位数
  28. local i2s_channel_format = i2s.MONO_R -- 声道, 0 左声道, 1 右声道, 2 立体声
  29. local i2s_communication_format = i2s.MODE_LSB -- 格式, 可选MODE_I2S, MODE_LSB, MODE_MSB
  30. local i2s_channel_bits = 16 -- 声道的BCLK数量
  31. local pa_pin = 162 -- 喇叭pa功放脚
  32. local pa_on_level = 1 -- PA打开电平 1 高电平 0 低电平
  33. local pa_delay = 100 -- 在DAC启动后,延迟多长时间打开PA,单位1ms
  34. local power_pin = 164 -- es8311电源使能脚
  35. local power_on_level = 1 -- 电源控制IO的电平,默认拉高
  36. local power_delay = 3 -- 在DAC启动前插入的冗余时间,单位100ms
  37. local power_time_delay = 100 -- 音频播放完毕时,PA与DAC关闭的时间间隔,单位1ms
  38. local voice_vol = 70 -- 喇叭音量
  39. local mic_vol = 65 -- 麦克风音量
  40. local function record(is_dl, point)
  41. if is_dl then
  42. log.info("下行数据,位于缓存", point+1, "缓存1数据量", down1:used(), "缓存2数据量", down2:used())
  43. else
  44. log.info("上行数据,位于缓存", point+1, "缓存1数据量", up1:used(), "缓存2数据量", up2:used())
  45. end
  46. log.info("通话质量", cc.quality())
  47. -- 可以在初始化串口后,通过uart.tx来发送走对应的zbuff即可
  48. end
  49. sys.subscribe("CC_IND", function(state)
  50. if state == "READY" then
  51. sys.publish("CC_READY")
  52. elseif state == "INCOMINGCALL" then
  53. cnt = cnt + 1
  54. if cnt > 3 then
  55. cc.accept(0) --自动接听
  56. end
  57. elseif state == "HANGUP_CALL_DONE" or state == "MAKE_CALL_FAILED" or state == "DISCONNECTED" then
  58. audio.pm(0,audio.STANDBY)
  59. -- audio.pm(0,audio.SHUTDOWN) --低功耗可以选择SHUTDOWN或者POWEROFF,如果codec无法断电用SHUTDOWN
  60. end
  61. end)
  62. function cc_setup()
  63. cc.record(true, up1, up2, down1, down2)
  64. pm.power(pm.LDO_CTL, false) --开发板上ES8311由LDO_CTL控制上下电
  65. sys.wait(100)
  66. pm.power(pm.LDO_CTL, true) --开发板上ES8311由LDO_CTL控制上下电
  67. i2c.setup(i2c_id,i2c.FAST) --设置i2c
  68. i2s.setup(i2s_id, i2s_mode, i2s_sample_rate, i2s_bits_per_sample, i2s_channel_format, i2s_communication_format,i2s_channel_bits)
  69. audio.config(multimedia_id, pa_pin, pa_on_level, power_delay, pa_delay, power_pin, power_on_level, power_time_delay)
  70. audio.setBus(multimedia_id, audio.BUS_I2S,{chip = "es8311", i2cid = i2c_id, i2sid = i2s_id}) --通道0的硬件输出通道设置为I2S
  71. audio.vol(multimedia_id, voice_vol)
  72. audio.micVol(multimedia_id, mic_vol)
  73. cc.init(multimedia_id) --初始化电话功能
  74. sys.waitUntil("CC_READY")
  75. sys.wait(10000)
  76. cc.dial(0,"158xxxxxxxx") --拨打电话
  77. end
  78. cc.on("record", record)--注册cc事件回调
  79. sys.taskInit(cc_setup) --初始化cc
  80. -- sys.taskInit(function()
  81. -- while 1 do
  82. -- -- 打印内存状态, 调试用
  83. -- sys.wait(1000)
  84. -- log.info("lua", rtos.meminfo())
  85. -- log.info("sys", rtos.meminfo("sys"))
  86. -- end
  87. -- end)
  88. -- 用户代码已结束---------------------------------------------
  89. -- 结尾总是这一句
  90. sys.run()
  91. -- sys.run()之后后面不要加任何语句!!!!!