Espruino/libs/js/LIS2DH12.min.js
2023-06-13 09:22:21 +01:00

5 lines
2.1 KiB
JavaScript

function g(b,a,d){this.r=b;this.w=a;this.options=d||{};this.callback=this.options.callback;if(this.r(e.WHO_AM_I,1)[0]!=e.I_AM_MASK)throw"LIS2DH12 WHO_AM_I check failed";this.g_scale=e.SCALE2G;this.mode="powerdown";this.interval=void 0}var e={WHO_AM_I:15,CTRL_REG1:32,CTRL_REG2:33,CTRL_REG3:34,CTRL_REG4:35,STATUS_REG:39,OUT_X_L:40,I_AM_MASK:51,ODR_MASK_1HZ:16,ODR_MASK_10HZ:32,ODR_MASK_25HZ:48,ODR_MASK_50HZ:64,ODR_MASK_100HZ:80,ODR_MASK_200HZ:96,ODR_MASK_400HZ:112,ODR_MASK_1620HZ:128,
ODR_MASK_HIGH_RES:144,LPEN_MASK:8,XYZ_EN_MASK:7,HR_MASK:8,SCALE2G:0,SCALE4G:1,SCALE8G:2,SCALE16G:3};g.prototype.setPowerMode=function(b){var a=e.XYZ_EN_MASK,d=this.g_scale<<4,c=0;switch(b){case "normal":a|=e.ODR_MASK_100HZ;this.g_mgpb=4<<this.g_scale;c=10;break;case "low":a|=e.ODR_MASK_1HZ;this.g_mgpb=4<<this.g_scale;c=1E3;break;case "fast":a|=e.ODR_MASK_1620HZ|e.LPEN_MASK;this.g_mgpb=16<<this.g_scale;c=1;break;case "highres":a|=e.ODR_MASK_HIGH_RES;d|=e.HR_MASK;this.g_mgpb=1<<this.g_scale;c=1;break;
case "powerdown":c=a=0;break;default:throw"Unknown power mode "+JSON.stringify(b);}this.w(e.CTRL_REG1,a);this.w(e.CTRL_REG4,d);this.mode=b;this.interval&&clearInterval(this.interval);this.interval=void 0;c&&this.callback&&(this.interval=setInterval(function(f){f.callback(f.getXYZ())},c,this))};g.prototype.getXYZ=function(){var b=new DataView((new Uint8Array(this.r(e.STATUS_REG,7))).buffer),a=1/(16<<this.g_scale)*1E3/1024;return{x:b.getInt16(1,!0)*a,y:b.getInt16(3,!0)*a,z:b.getInt16(5,!0)*a,new:0!=
(b.getUint8(0)&8)}};g.prototype.readXYZ=function(b){var a="powerdown"==this.mode,d=this.callback;this.callback=function(c){a&&this.setPowerMode("powerdown");this.callback=d;b(c)};a&&this.setPowerMode("normal")};exports.connectSPI=function(b,a,d){if("function"==typeof d)throw Error("Use require(LIS2DH12).connectSPI(..., {callback:function() { ... }} instead");return new g(function(c,f){return b.send([c|192,new Uint8Array(f)],a).slice(1)},function(c,f){return b.write(c,f,a)},d)};exports.connectI2C=
function(b,a){var d=a&&a.addr||25;return new g(function(c,f){b.writeTo(d,c|128);return b.readFrom(d,f)},function(c,f){b.writeTo(d,c,f)},a)}