SC7A20.lua 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. module(...,package.seeall)
  2. local i2cid,intregaddr = 0,0x57
  3. local initstr,indcnt1,indcnt2 = "",0,0
  4. local function clrint()
  5. print("shk.clrint 1")
  6. --if pincfg.GSENSOR() == 0 then
  7. print("shk.clrint 2")
  8. i2c.write(i2cid,0x1E,0x05)
  9. local rlt = i2c.read(i2cid,intregaddr,1)
  10. i2c.write(i2cid,0x1E,0x00)
  11. print("shk.clrint rlt",rlt,string.format("%02X",string.byte(rlt)))
  12. --end
  13. end
  14. local function init2()
  15. local cmd,i = {0x20,0x37,0x21,0x11,0x22,0x40,0x23,0xC8,0x25,0x02,0x30,0x7F,0x32,0x02}
  16. for i=1,#cmd,2 do
  17. i2c.write(i2cid,cmd[i],cmd[i+1])
  18. print("shk.init2",string.format("%02X",cmd[i]),string.format("%02X",string.byte(i2c.read(i2cid,cmd[i],1))))
  19. initstr = initstr..","..(string.format("%02X",cmd[i]) or "nil")..":"..(string.format("%02X",string.byte(i2c.read(i2cid,cmd[i],1))) or "nil")
  20. end
  21. clrint()
  22. end
  23. local function checkready()
  24. local s = i2c.read(i2cid,0x1D,1)
  25. print("shk.checkready",s,(s and s~="") and string.byte(s) or "nil")
  26. if s and s~="" then
  27. if bit.band(string.byte(s),0x80)==0 then
  28. init2()
  29. return
  30. end
  31. end
  32. sys.timerStart(checkready,1000)
  33. end
  34. local function init()
  35. local i2cslaveaddr = 0x18
  36. if i2c.setup(i2cid,i2c.SLOW,i2cslaveaddr) ~= i2c.SLOW then
  37. print("shk.init fail")
  38. initstr = "fail"
  39. return
  40. end
  41. i2c.write(i2cid,0x1E,0x05)
  42. local sl_val = i2c.read(i2cid,0x57,1)
  43. sl_val = bit.bor(string.byte(sl_val),0x40)
  44. i2c.write(i2cid,0x57,sl_val)
  45. init2()
  46. --sys.timerStart(checkready,1000)
  47. end
  48. local function init3()
  49. i2c.write(i2cid,0x1D,0x80)
  50. sys.timerStart(checkready,1000)
  51. end
  52. function checkabnormal()
  53. print(nil,"shk.checkabnormal")
  54. local val = i2c.read(i2cid,0x1B,1)
  55. if not val or val=="" or string.byte(val)~=0xDA then
  56. print(nil,"shk.checkabnormal 0x1B")
  57. --i2c.close(i2cid)
  58. init3()
  59. init()
  60. return
  61. end
  62. end
  63. function getdebugstr()
  64. return initstr..";".."indcnt1:"..indcnt1..";".."indcnt2:"..indcnt2
  65. end
  66. function ind(data)
  67. print("shk.ind",data,cpu.INT_GPIO_NEGEDGE)
  68. if data == cpu.INT_GPIO_NEGEDGE then --ϽµÑØÖжÏ
  69. clrint()
  70. print("shk.ind DEV_SHK_IND")
  71. sys.publish("DEV_SHK_IND")
  72. end
  73. end
  74. init()
  75. sys.timerLoopStart(clrint,30000)
  76. --sys.timerLoopStart(checkabnormal,300000)