Skip to content
This repository has been archived by the owner on May 1, 2020. It is now read-only.

Commit

Permalink
Merge pull request #3 from clebert/refactor-variable-names
Browse files Browse the repository at this point in the history
Refactor variable names
  • Loading branch information
clebert committed Jan 24, 2020
2 parents 2f85834 + 5237f48 commit 1d78885
Show file tree
Hide file tree
Showing 9 changed files with 95 additions and 70 deletions.
15 changes: 9 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,10 @@ npm install lego-wireless-protocol --save
```ts
import {parseIncomingMessage} from 'lego-wireless-protocol';

const incomingMessage = parseIncomingMessage(
Uint8Array.from([9, 0, 4, 16, 2, 39, 0, 0, 1]).buffer
);
const incomingMessageData = Uint8Array.from([9, 0, 4, 16, 2, 39, 0, 0, 1])
.buffer;

const incomingMessage = parseIncomingMessage(incomingMessageData);

assert.deepEqual(incomingMessage, {
messageType: 'HubAttachedIo',
Expand All @@ -62,19 +63,21 @@ assert.deepEqual(incomingMessage, {
```ts
import {serializeOutgoingMessage} from 'lego-wireless-protocol';

const data = serializeOutgoingMessage({
const outgoingMessageData = serializeOutgoingMessage({
messageType: 'PortInformationRequest',
portId: 0,
portInformationRequestType: 'ModeInfo'
});

assert.deepEqual([...new Uint8Array(data)], [5, 0, 33, 0, 1]);
assert.deepEqual([...new Uint8Array(outgoingMessageData)], [5, 0, 33, 0, 1]);
```

## API Reference

```ts
function parseIncomingMessage(data: ArrayBuffer): IncomingMessage;
function parseIncomingMessage(
incomingMessageData: ArrayBuffer
): IncomingMessage;
```

```ts
Expand Down
11 changes: 6 additions & 5 deletions example.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
const assert = require('assert');
const {parseIncomingMessage, serializeOutgoingMessage} = require('./lib');

const incomingMessage = parseIncomingMessage(
Uint8Array.from([9, 0, 4, 16, 2, 39, 0, 0, 1]).buffer
);
const incomingMessageData = Uint8Array.from([9, 0, 4, 16, 2, 39, 0, 0, 1])
.buffer;

const incomingMessage = parseIncomingMessage(incomingMessageData);

assert.deepEqual(incomingMessage, {
messageType: 'HubAttachedIo',
Expand All @@ -14,10 +15,10 @@ assert.deepEqual(incomingMessage, {
portB: {portType: 'External', portId: 1}
});

const data = serializeOutgoingMessage({
const outgoingMessageData = serializeOutgoingMessage({
messageType: 'PortInformationRequest',
portId: 0,
portInformationRequestType: 'ModeInfo'
});

assert.deepEqual([...new Uint8Array(data)], [5, 0, 33, 0, 1]);
assert.deepEqual([...new Uint8Array(outgoingMessageData)], [5, 0, 33, 0, 1]);
11 changes: 7 additions & 4 deletions src/parse-incoming-message.test.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import {IncomingMessage, parseIncomingMessage} from './parse-incoming-message';

function assert(data: number[], incomingMessage: IncomingMessage): void {
expect(parseIncomingMessage(Uint8Array.from(data).buffer)).toEqual(
incomingMessage
);
function assert(
incomingMessageData: number[],
incomingMessage: IncomingMessage
): void {
expect(
parseIncomingMessage(Uint8Array.from(incomingMessageData).buffer)
).toEqual(incomingMessage);
}

describe('parseIncomingMessage()', () => {
Expand Down
28 changes: 16 additions & 12 deletions src/parse-incoming-message/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,30 @@ import {IncomingMessage} from './types';

export * from './types';

export function parseIncomingMessage(data: ArrayBuffer): IncomingMessage {
const dataView = new DataView(data);
const messageTypeOffset = dataView.getUint8(0) > 127 ? 3 : 2;
const messageTypeId = dataView.getUint8(messageTypeOffset);
const slicedData = data.slice(messageTypeOffset + 1);
const slicedDataView = new DataView(slicedData);
export function parseIncomingMessage(
incomingMessageData: ArrayBuffer
): IncomingMessage {
const incomingMessageDataView = new DataView(incomingMessageData);
const messageTypeOffset = incomingMessageDataView.getUint8(0) > 127 ? 3 : 2;
const messageTypeId = incomingMessageDataView.getUint8(messageTypeOffset);

const dataView = new DataView(
incomingMessageData.slice(messageTypeOffset + 1)
);

switch (messageTypeId) {
case 0x04:
return parseHubAttachedIo(slicedDataView);
return parseHubAttachedIo(dataView);
case 0x05:
return parseError(slicedDataView);
return parseError(dataView);
case 0x43:
return parsePortInformation(slicedDataView);
return parsePortInformation(dataView);
case 0x44:
return parsePortModeInformation(slicedDataView);
return parsePortModeInformation(dataView);
case 0x45:
return parsePortValue(slicedDataView);
return parsePortValue(dataView);
case 0x47:
return parsePortInputFormat(slicedDataView);
return parsePortInputFormat(dataView);
}

return {messageType: 'Unknown'};
Expand Down
7 changes: 5 additions & 2 deletions src/serialize-outgoing-message.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@ import {
serializeOutgoingMessage
} from './serialize-outgoing-message';

function assert(data: number[], outgoingMessage: OutgoingMessage): void {
function assert(
outgoingMessageData: number[],
outgoingMessage: OutgoingMessage
): void {
expect([
...new Uint8Array(serializeOutgoingMessage(outgoingMessage))
]).toEqual(data);
]).toEqual(outgoingMessageData);
}

describe('serializeOutgoingMessage()', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,18 @@ export function serializePortInformationRequest(
outgoingMessage: PortInformationRequestOutgoingMessage
): ArrayBuffer {
const {portId, portInformationRequestType} = outgoingMessage;
const data = new ArrayBuffer(5);
const dataView = new DataView(data);
const outgoingMessageData = new ArrayBuffer(5);
const outgoingMessageDataView = new DataView(outgoingMessageData);

dataView.setUint8(0, data.byteLength);
dataView.setUint8(1, 0);
dataView.setUint8(2, 0x21);
dataView.setUint8(3, portId);
dataView.setUint8(4, portInformationRequestType === 'PortValue' ? 0 : 1);
outgoingMessageDataView.setUint8(0, outgoingMessageData.byteLength);
outgoingMessageDataView.setUint8(1, 0);
outgoingMessageDataView.setUint8(2, 0x21);
outgoingMessageDataView.setUint8(3, portId);

return data;
outgoingMessageDataView.setUint8(
4,
portInformationRequestType === 'PortValue' ? 0 : 1
);

return outgoingMessageData;
}
20 changes: 10 additions & 10 deletions src/serialize-outgoing-message/serialize-port-input-format-setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@ export function serializePortInputFormatSetup(
outgoingMessage: PortInputFormatSetupOutgoingMessage
): ArrayBuffer {
const {portId, modeId, deltaInterval, notificationsEnabled} = outgoingMessage;
const data = new ArrayBuffer(10);
const dataView = new DataView(data);
const outgoingMessageData = new ArrayBuffer(10);
const outgoingMessageDataView = new DataView(outgoingMessageData);

dataView.setUint8(0, data.byteLength);
dataView.setUint8(1, 0);
dataView.setUint8(2, 0x41);
dataView.setUint8(3, portId);
dataView.setUint8(4, modeId);
dataView.setUint32(5, deltaInterval, true);
dataView.setUint8(9, notificationsEnabled ? 1 : 0);
outgoingMessageDataView.setUint8(0, outgoingMessageData.byteLength);
outgoingMessageDataView.setUint8(1, 0);
outgoingMessageDataView.setUint8(2, 0x41);
outgoingMessageDataView.setUint8(3, portId);
outgoingMessageDataView.setUint8(4, modeId);
outgoingMessageDataView.setUint32(5, deltaInterval, true);
outgoingMessageDataView.setUint8(9, notificationsEnabled ? 1 : 0);

return data;
return outgoingMessageData;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,34 @@ export function serializePortModeInformationRequest(
outgoingMessage: PortModeInformationRequestOutgoingMessage
): ArrayBuffer {
const {portId, modeId, portModeInformationRequestType} = outgoingMessage;
const data = new ArrayBuffer(6);
const dataView = new DataView(data);
const outgoingMessageData = new ArrayBuffer(6);
const outgoingMessageDataView = new DataView(outgoingMessageData);

dataView.setUint8(0, data.byteLength);
dataView.setUint8(1, 0);
dataView.setUint8(2, 0x22);
dataView.setUint8(3, portId);
dataView.setUint8(4, modeId);
outgoingMessageDataView.setUint8(0, outgoingMessageData.byteLength);
outgoingMessageDataView.setUint8(1, 0);
outgoingMessageDataView.setUint8(2, 0x22);
outgoingMessageDataView.setUint8(3, portId);
outgoingMessageDataView.setUint8(4, modeId);

switch (portModeInformationRequestType) {
case 'Name':
dataView.setUint8(5, 0x00);
outgoingMessageDataView.setUint8(5, 0x00);
break;
case 'Raw':
dataView.setUint8(5, 0x01);
outgoingMessageDataView.setUint8(5, 0x01);
break;
case 'Pct':
dataView.setUint8(5, 0x02);
outgoingMessageDataView.setUint8(5, 0x02);
break;
case 'Si':
dataView.setUint8(5, 0x03);
outgoingMessageDataView.setUint8(5, 0x03);
break;
case 'Symbol':
dataView.setUint8(5, 0x04);
outgoingMessageDataView.setUint8(5, 0x04);
break;
case 'ValueFormat':
dataView.setUint8(5, 0x80);
outgoingMessageDataView.setUint8(5, 0x80);
}

return data;
return outgoingMessageData;
}
25 changes: 16 additions & 9 deletions src/serialize-outgoing-message/serialize-port-output-command.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,23 @@ export function serializePortOutputCommand(
outgoingMessage: PortOutputCommandOutgoingMessage
): ArrayBuffer {
const {portId, portOutputSubCommandData} = outgoingMessage;
const data = new ArrayBuffer(5 + portOutputSubCommandData.byteLength);
const dataView = new DataView(data);

dataView.setUint8(0, data.byteLength);
dataView.setUint8(1, 0);
dataView.setUint8(2, 0x81);
dataView.setUint8(3, portId);
dataView.setUint8(4, 0x10); // Execute immediately + No action
const outgoingMessageData = new ArrayBuffer(
5 + portOutputSubCommandData.byteLength
);

new Uint8Array(data).set(new Uint8Array(portOutputSubCommandData), 5);
const outgoingMessageDataView = new DataView(outgoingMessageData);

return data;
outgoingMessageDataView.setUint8(0, outgoingMessageData.byteLength);
outgoingMessageDataView.setUint8(1, 0);
outgoingMessageDataView.setUint8(2, 0x81);
outgoingMessageDataView.setUint8(3, portId);
outgoingMessageDataView.setUint8(4, 0x10); // Execute immediately + No action

new Uint8Array(outgoingMessageData).set(
new Uint8Array(portOutputSubCommandData),
5
);

return outgoingMessageData;
}

0 comments on commit 1d78885

Please sign in to comment.