ccVolte.lua 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. local cnt = 0
  2. sys.subscribe("CC_IND", function(state)
  3. log.info("CC_IND", state)
  4. if state == "READY" then
  5. sys.publish("CC_READY")
  6. elseif state == "INCOMINGCALL" then
  7. cnt = cnt + 1
  8. if cnt > 1 then
  9. cc.accept(0)
  10. attributes.set("callStatus", "通话中")
  11. end
  12. elseif state == "HANGUP_CALL_DONE" or state == "MAKE_CALL_FAILED" or state == "DISCONNECTED" then
  13. attributes.set("callStatus", "已就绪")
  14. sys.publish("CC_DONE")
  15. audio.pm(0, audio.STANDBY)
  16. -- audio.pm(0,audio.SHUTDOWN) --低功耗可以选择SHUTDOWN或者POWEROFF,如果codec无法断电用SHUTDOWN
  17. end
  18. end)
  19. local ccReady = false
  20. sys.taskInit(function()
  21. local multimedia_id = 0
  22. local i2c_id = 0
  23. local i2s_id = 0
  24. local i2s_mode = 0
  25. local i2s_sample_rate = 16000
  26. local i2s_bits_per_sample = 16
  27. local i2s_channel_format = i2s.MONO_R
  28. local i2s_communication_format = i2s.MODE_LSB
  29. local i2s_channel_bits = 16
  30. local pa_pin = 23
  31. local pa_on_level = 1
  32. local pa_delay = 100
  33. local power_pin = 255
  34. local power_on_level = 1
  35. local power_delay = 3
  36. local power_time_delay = 100
  37. local voice_vol = 100
  38. local mic_vol = 80
  39. local find_es8311 = false
  40. mcu.altfun(mcu.I2C, i2c_id, 13, 2, 0)
  41. mcu.altfun(mcu.I2C, i2c_id, 14, 2, 0)
  42. i2c.setup(i2c_id, i2c.FAST)
  43. sys.wait(10)
  44. if i2c.send(i2c_id, 0x18, 0xfd) == true then
  45. find_es8311 = true
  46. end
  47. if not find_es8311 then
  48. while true do
  49. log.info("not find es8311")
  50. sys.wait(1000)
  51. end
  52. end
  53. i2s.setup(i2s_id, i2s_mode, i2s_sample_rate, i2s_bits_per_sample, i2s_channel_format, i2s_communication_format, i2s_channel_bits)
  54. audio.config(multimedia_id, pa_pin, pa_on_level, power_delay, pa_delay, power_pin, power_on_level, power_time_delay)
  55. audio.setBus(multimedia_id, audio.BUS_I2S, {
  56. chip = "es8311",
  57. i2cid = i2c_id,
  58. i2sid = i2s_id,
  59. voltage = audio.VOLTAGE_1800
  60. }) -- 通道0的硬件输出通道设置为I2S
  61. audio.vol(multimedia_id, voice_vol)
  62. audio.micVol(multimedia_id, mic_vol)
  63. cc.init(multimedia_id)
  64. audio.pm(0, audio.STANDBY)
  65. sys.publish("AUDIO_SETUP_DONE")--音频初始化完毕了
  66. sys.waitUntil("CC_READY")
  67. ccReady = true
  68. attributes.set("callStatus", "已就绪")
  69. sys.wait(100)
  70. end)
  71. sys.taskInit(function()
  72. sys.waitUntil("AUDIO_SETUP_DONE")
  73. log.info("audio", "ready")
  74. while true do
  75. local _,cmd,param = sys.waitUntil("AUDIO_CMD_RECEIVED")
  76. log.info("audio", cmd, param)
  77. if cmd == "call" then
  78. if ccReady then
  79. cc.dial(0,param) --拨打电话
  80. attributes.set("callStatus", "通话中")
  81. attributes.set("audioStatus", "通话中")
  82. sys.waitUntil("AUDIO_SETUP_DONE")
  83. else
  84. log.info("audio", "cc not ready")
  85. end
  86. elseif cmd == "music" then
  87. local result = audio.play(0, "/luadb/yuan.amr")
  88. attributes.set("audioStatus", "播放中")
  89. log.info("audio", "play music",result)
  90. sys.wait(1000)
  91. if not audio.isEnd(0) then
  92. log.info("手动关闭")
  93. audio.playStop(0)
  94. end
  95. audio.pm(0, audio.STANDBY)
  96. attributes.set("audioStatus", "空闲")
  97. end
  98. end
  99. end)
  100. audio.on(0, function(audio_id, msg)
  101. log.info("msg", audio_id, msg)
  102. end)