Files

104 lines
3.9 KiB
JavaScript

'use strict';
const assert = require('assert');
const i2c = require('../');
const DS1621_ADDR = 0x48;
const CMD_ACCESS_CONFIG = 0xac;
const CMD_ACCESS_TL = 0xa2;
const i2c1 = i2c.openSync(1);
// Wait while non volatile memory busy
const waitForWrite = _ => {
while (i2c1.readByteSync(DS1621_ADDR, CMD_ACCESS_CONFIG) & 0x10) {
}
};
// Test writeByteSync & readByteSync
// Enter one shot mode and verify that one shot mode has been entered
const readWriteByte = _ => {
const self = i2c1.writeByteSync(DS1621_ADDR, CMD_ACCESS_CONFIG, 0x01);
assert.strictEqual(self, i2c1, 'expected writeByteSync to return this');
waitForWrite();
const config = i2c1.readByteSync(DS1621_ADDR, CMD_ACCESS_CONFIG);
assert(typeof config === 'number' && config <= 0xff, 'expeted readByteSync to read a byte');
assert.strictEqual(config & 0x1, 1, 'one shot mode not eneterd');
};
// Test sendByteSync & receiveByteSync
// Read config using different techniques and verify that 1st and 2nd read
// are identical
const sendReceiveByte = _ => {
const expectedConfig = i2c1.readByteSync(DS1621_ADDR, CMD_ACCESS_CONFIG);
assert(typeof expectedConfig === 'number' && expectedConfig <= 0xff, 'expeted readByteSync to read a byte');
const self = i2c1.sendByteSync(DS1621_ADDR, CMD_ACCESS_CONFIG);
assert.strictEqual(self, i2c1, 'expected sendByteSync to return this');
const config = i2c1.receiveByteSync(DS1621_ADDR);
assert(typeof config === 'number' && config <= 0xff, 'expeted receiveByteSync to receive a byte');
assert.strictEqual(config, expectedConfig, '1st and 2nd config read differ');
};
// Test writeWordSync & readWordSync
// Change value of tl and verify that tl has been changed
const readWriteWord = _ => {
const oldtl = i2c1.readWordSync(DS1621_ADDR, CMD_ACCESS_TL);
assert(typeof oldtl === 'number' && oldtl <= 0xffff, 'expeted readWordSync to read a word');
const tl = (oldtl === 24 ? 23 : 24);
const self = i2c1.writeWordSync(DS1621_ADDR, CMD_ACCESS_TL, tl);
assert.strictEqual(self, i2c1, 'expected writeWordSync to return this');
waitForWrite();
const newtl = i2c1.readWordSync(DS1621_ADDR, CMD_ACCESS_TL);
assert(typeof newtl === 'number' && newtl <= 0xffff, 'expeted readWordSync to read a word');
assert.strictEqual(tl, newtl, 'expected to read word written');
};
// Test writeI2cBlockSync & readI2cBlockSync
// Change value of tl to 22 and verify that tl has been changed
const readWriteI2cBlock = _ => {
const tlbuf = Buffer.alloc(10);
tlbuf.writeUInt16LE(22, 0);
const self = i2c1.writeI2cBlockSync(DS1621_ADDR, CMD_ACCESS_TL, 2, tlbuf);
assert.strictEqual(self, i2c1, 'expected writeI2cBlockSync to return this');
waitForWrite();
const newtl = Buffer.alloc(10);
const bytesRead = i2c1.readI2cBlockSync(DS1621_ADDR, CMD_ACCESS_TL, 2, newtl);
assert.strictEqual(bytesRead, 2, 'expected readI2cBlockSync to read 2 bytes');
assert.strictEqual(newtl.readUInt16LE(0), 22, 'expected readI2cBlockSync to read value 22');
};
// Test i2cWriteSync & i2cReadSync
// Change value of tl to 25 and verify that tl has been changed
const i2cPlainReadWrite = _ => {
const cmdSetTL = Buffer.from([CMD_ACCESS_TL, 25, 0]);
let bytesWritten = i2c1.i2cWriteSync(DS1621_ADDR, cmdSetTL.length, cmdSetTL);
assert.strictEqual(bytesWritten, 3, 'expected i2cWriteSync to write 3 bytes');
waitForWrite();
const cmdGetTL = Buffer.from([CMD_ACCESS_TL]);
bytesWritten = i2c1.i2cWriteSync(DS1621_ADDR, cmdGetTL.length, cmdGetTL);
assert.strictEqual(bytesWritten, 1, 'expected i2cWriteSync to write 1 byte');
const tl = Buffer.alloc(2);
const bytesRead = i2c1.i2cReadSync(DS1621_ADDR, 2, tl);
assert.strictEqual(bytesRead, 2, 'expected i2cReadSync to read 2 bytes');
assert.strictEqual(tl.readUInt16LE(0), 25, 'expected i2cReadSync to read value 25');
};
readWriteByte();
sendReceiveByte();
readWriteWord();
readWriteI2cBlock();
i2cPlainReadWrite();
i2c1.closeSync();
console.log('ok - sync');