main.lua 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "ccdemo"
  3. VERSION = "1.0.0"
  4. log.style(1)
  5. --[[
  6. 本demo暂时只在air780ep测试过
  7. 本demo需要外挂ES8311 codec芯片
  8. ]]
  9. -- sys库是标配
  10. sys = require("sys")
  11. if wdt then
  12. --添加硬狗防止程序卡死,在支持的设备上启用这个功能
  13. --wdt.init(9000)--初始化watchdog设置为9s
  14. --sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  15. end
  16. local up1 = zbuff.create(6400,0)
  17. local up2 = zbuff.create(6400,0)
  18. local down1 = zbuff.create(6400,0)
  19. local down2 = zbuff.create(6400,0)
  20. local cnt = 0
  21. local function record(is_dl, point)
  22. if is_dl then
  23. log.info("下行数据,位于缓存", point+1, "缓存1数据量", down1:used(), "缓存2数据量", down2:used())
  24. else
  25. log.info("上行数据,位于缓存", point+1, "缓存1数据量", up1:used(), "缓存2数据量", up2:used())
  26. end
  27. log.info("通话质量", cc.quality())
  28. -- 可以在初始化串口后,通过uart.tx来发送走对应的zbuff即可
  29. end
  30. sys.subscribe("CC_IND", function(state)
  31. if state == "READY" then
  32. sys.publish("CC_READY")
  33. elseif state == "INCOMINGCALL" then
  34. cnt = cnt + 1
  35. if cnt > 1 then
  36. cc.accept(0)
  37. end
  38. elseif state == "HANGUP_CALL_DONE" or state == "MAKE_CALL_FAILED" or state == "DISCONNECTED" then
  39. audio.pm(0,audio.STANDBY)
  40. -- audio.pm(0,audio.SHUTDOWN) --低功耗可以选择SHUTDOWN或者POWEROFF,如果codec无法断电用SHUTDOWN
  41. end
  42. end)
  43. sys.taskInit(function()
  44. cc.on("record", record)
  45. cc.record(true, up1, up2, down1, down2)
  46. local multimedia_id = 0
  47. local i2c_id = 0
  48. local i2s_id = 0
  49. local i2s_mode = 0
  50. local i2s_sample_rate = 16000
  51. local i2s_bits_per_sample = 16
  52. local i2s_channel_format = i2s.MONO_R
  53. local i2s_communication_format = i2s.MODE_LSB
  54. local i2s_channel_bits = 16
  55. local pa_pin = 25
  56. local pa_on_level = 1
  57. local pa_delay = 100
  58. local power_pin = 255
  59. local power_on_level = 1
  60. local power_delay = 3
  61. local power_time_delay = 100
  62. local voice_vol = 70
  63. local mic_vol = 65
  64. local find_es8311 = false
  65. --内置8311的模块(比如air780epa, air780epvh)打开下面的代码
  66. --gpio.setup(17,1,nil,nil,4)
  67. --自适应开发板,如果明确是I2C几就不用了
  68. i2c.setup(0, i2c.FAST)
  69. i2c.setup(1, i2c.FAST)
  70. pm.power(pm.LDO_CTL, false) --开发板上ES8311由LDO_CTL控制上下电
  71. sys.wait(10)
  72. pm.power(pm.LDO_CTL, true) --开发板上ES8311由LDO_CTL控制上下电
  73. sys.wait(10)
  74. if i2c.send(0, 0x18, 0xfd) == true then
  75. log.info("音频小板或内置ES8311", "codec on i2c0")
  76. i2c_id = 0
  77. find_es8311 = true
  78. else
  79. if i2c.send(1, 0x18, 0xfd) == true then
  80. log.info("云喇叭开发板", "codec on i2c1")
  81. find_es8311 = true
  82. power_pin = nil
  83. i2c_id = 1
  84. end
  85. end
  86. if not find_es8311 then
  87. while true do
  88. log.info("not find es8311")
  89. sys.wait(1000)
  90. end
  91. end
  92. i2s.setup(i2s_id, i2s_mode, i2s_sample_rate, i2s_bits_per_sample, i2s_channel_format, i2s_communication_format,i2s_channel_bits)
  93. audio.config(multimedia_id, pa_pin, pa_on_level, power_delay, pa_delay, power_pin, power_on_level, power_time_delay)
  94. audio.setBus(multimedia_id, audio.BUS_I2S,{chip = "es8311", i2cid = i2c_id, i2sid = i2s_id}) --通道0的硬件输出通道设置为I2S
  95. audio.vol(multimedia_id, voice_vol)
  96. audio.micVol(multimedia_id, mic_vol)
  97. cc.init(multimedia_id)
  98. audio.pm(0,audio.STANDBY)
  99. sys.waitUntil("CC_READY")
  100. sys.wait(100)
  101. --cc.dial(0,"114") --拨打电话
  102. end)
  103. -- sys.taskInit(function()
  104. -- while 1 do
  105. -- -- 打印内存状态, 调试用
  106. -- sys.wait(1000)
  107. -- log.info("lua", rtos.meminfo())
  108. -- log.info("sys", rtos.meminfo("sys"))
  109. -- end
  110. -- end)
  111. -- 用户代码已结束---------------------------------------------
  112. -- 结尾总是这一句
  113. sys.run()
  114. -- sys.run()之后后面不要加任何语句!!!!!