UNPKG

node-libgpiod

Version:

Native nodejs bindings for [libgpiod][libgpiod]

242 lines (218 loc) 7.17 kB
const chai = require('chai'); const {Bulk, Chip, Line} = require('..'); chai.should(); const {expect} = chai; describe('libgpiod Bulk operations', () => { it('should create a bulk with all lines from chip 0', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0); bulk.should.be.an.instanceof(Bulk); expect(bulk._handler).to.be.ok; done(); }); it('should create a bulk with line numbers from chip 0', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 21, 22]); bulk.should.be.an.instanceof(Bulk); expect(bulk._handler).to.be.ok; done(); }); it('should create a bulk with line names from chip 0', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, ['GPIO17', 'GPIO18', 'GPIO19']); bulk.should.be.an.instanceof(Bulk); expect(bulk._handler).to.be.ok; done(); }); it('should get line values from the bulk', done => { const Chip0 = new Chip('gpiochip0'); const bulk = new Bulk(Chip0, [16, 21, 22]); bulk.requestInputMode(); const result = bulk.values; expect(result).to.be.an('array'); expect(result.length).to.be.eq(3); bulk.release(); done(); }); it('should set line values from the bulk', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 21, 22]); bulk.requestOutputMode(); bulk.setValues([1, 0, 1]); bulk.release(); done(); }); it('should NOT set line values from the bulk due to wrong number of values', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 21, 22]); bulk.requestOutputMode(0); expect(() => { bulk.setValues([1, 0]); }).to.throw(Error, 'Array length does not match the number of lines in the bulk'); bulk.release(); done(); }); it('should request rising edge events from the bulk', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 21, 22]); bulk.requestRisingEdgeEvents('hog1'); const result = bulk.values; expect(result).to.be.an('array'); expect(result.length).to.be.eq(3); bulk.release(); done(); }); it('should request falling edge events from the bulk', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 21, 22]); bulk.requestFallingEdgeEvents(); const result = bulk.values; expect(result).to.be.an('array'); expect(result.length).to.be.eq(3); bulk.release(); done(); }); it('should request both edges events from the bulk', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 21, 22]); bulk.requestBothEdgesEvents(); const result = bulk.values; expect(result).to.be.an('array'); expect(result.length).to.be.eq(3); bulk.release(); done(); }); it('should set bulk direction to input', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, ['GPIO16', 'GPIO21', 'GPIO22']); bulk.requestOutputMode(['c1', 'c2', 'c3']); bulk.setValues([1, 1, 1]); bulk.setDirectionInput(); const result = bulk.values; expect(result).to.be.an('array'); expect(result.length).to.be.eq(3); expect(result).to.deep.equal([1, 1, 1]); bulk.release(); done(); }); it('should set bulk to output mode', done => { const Chip0 = new Chip('gpiochip0'); const bulk = new Bulk(Chip0, ['GPIO16', 'GPIO21', 'GPIO22']); bulk.requestInputMode(); const result = bulk.values; bulk.setDirectionOutput(); bulk.setValues([1, 1, 1]); bulk.setDirectionInput(); const result2 = bulk.values; expect(result).to.be.an('array'); expect(result.length).to.be.eq(3); expect(result).to.deep.equal([0, 0, 0]); expect(result2).to.be.an('array'); expect(result2.length).to.be.eq(3); expect(result2).to.deep.equal([1, 1, 1]); bulk.release(); done(); }); it('should request bulk with config options', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 21, 22]); bulk.request({ consumer: 'test', requestType: Line.RequestType.Direction.INPUT, flags: Line.RequestFlags.BIAS_DISABLE, }); const result = bulk.values; expect(result).to.be.an('array'); expect(result.length).to.be.eq(3); expect(result).to.deep.equal([0, 0, 0]); bulk.release(); bulk.request({ consumer: 'test', requestType: Line.RequestType.Direction.INPUT, flags: Line.RequestFlags.BIAS_DISABLE | Line.RequestFlags.ACTIVE_LOW, }); const result2 = bulk.values; expect(result2).to.be.an('array'); expect(result2.length).to.be.eq(3); expect(result2).to.deep.equal([1, 1, 1]); bulk.release(); done(); }); it('should update bulk config', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 21, 22]); bulk.requestInputMode('c1'); const result = bulk.values; expect(result).to.be.an('array'); expect(result.length).to.be.eq(3); expect(result).to.deep.equal([0, 0, 0]); bulk.updateConfig(Line.RequestType.Direction.AS_IS, Line.RequestFlags.ACTIVE_LOW); const result2 = bulk.values; expect(result2).to.be.an('array'); expect(result2.length).to.be.eq(3); expect(result2).to.deep.equal([1, 1, 1]); bulk.release(); done(); }); it('should update bulk flags', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 21, 22]); bulk.requestInputMode('c1'); const result = bulk.values; expect(result).to.be.an('array'); expect(result.length).to.be.eq(3); expect(result).to.deep.equal([0, 0, 0]); bulk.updateFlags(Line.RequestFlags.ACTIVE_LOW); const result2 = bulk.values; expect(result2).to.be.an('array'); expect(result2.length).to.be.eq(3); expect(result2).to.deep.equal([1, 1, 1]); bulk.release(); done(); }); it('should request bulk for input passing flags', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 20, 21]); bulk.requestInputFlags('c1', Line.RequestFlags.BIAS_DISABLE); const result = bulk.values; expect(result).to.be.an('array'); expect(result.length).to.be.eq(3); expect(result).to.deep.equal([0, 0, 0]); bulk.release(); done(); }); it('should request bulk for output passing flags', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 20, 21]); bulk.requestOutputFlags('c1', Line.RequestFlags.BIAS_DISABLE, [1, 1, 1]); bulk.setValues([1, 0, 1]); bulk.setDirectionInput(); const result = bulk.values; expect(result).to.be.an('array'); expect(result.length).to.be.eq(3); expect(result).to.deep.equal([1, 0, 1]); bulk.release(); done(); }); it('should request bulk for rising edge events passing flags', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 20, 21]); bulk.requestRisingEdgeEventsFlags('c1', Line.RequestFlags.BIAS_DISABLE); bulk.release(); done(); }); it('should request bulk for falling edge events passing flags', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 20, 21]); bulk.requestFallingEdgeEventsFlags('c1', Line.RequestFlags.BIAS_DISABLE); bulk.release(); done(); }); it('should request bulk for both edges events passing flags', done => { const Chip0 = new Chip(0); const bulk = new Bulk(Chip0, [16, 20, 21]); bulk.requestBothEdgesEventsFlags('c1', Line.RequestFlags.BIAS_DISABLE); bulk.release(); done(); }); });