Skip to content

Commit 725ba6a

Browse files
author
NoahAndrews
committed
Remove side effects by moving functions to a class
The native addon doesn't get loaded until the class is instantiated.
1 parent 1aeaa26 commit 725ba6a

File tree

1 file changed

+70
-25
lines changed

1 file changed

+70
-25
lines changed

lib/binding.ts

Lines changed: 70 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {promisify} from "util";
22
import * as path from "path";
3-
const addon = require('node-gyp-build')(path.join(__dirname, '..'));
43

54
export interface CanMessage {
65
data: number[];
@@ -34,27 +33,73 @@ export enum ThreadPriority {
3433
PriorityError
3534
}
3635

37-
export const getDevices: () => Promise<CanDeviceInfo[]> = promisify(addon.getDevices);
38-
export const registerDeviceToHAL:
39-
(descriptor:string, messageId:Number, messageMask:number) => number = addon.registerDeviceToHAL;
40-
export const unregisterDeviceFromHAL: (descriptor:string) => Promise<number> = promisify(addon.unregisterDeviceFromHAL);
41-
export const receiveMessage: (descriptor:string, messageId:number, messageMask:number) => CanMessage = addon.receiveMessage;
42-
export const openStreamSession: (descriptor:string, messageId:number, messageMask:number, maxSize:number) =>
43-
number = addon.openStreamSession;
44-
export const readStreamSession: (descriptor:string, sessionHandle:number, messagesToRead:number) =>
45-
CanMessage[] = addon.readStreamSession;
46-
export const closeStreamSession: (descriptor:string, sessionHandle:number) => number = addon.closeStreamSession;
47-
export const getCANDetailStatus: (descriptor:string) => CanDeviceStatus = addon.getCANDetailStatus;
48-
export const sendCANMessage: (descriptor:string, messageId: number, messageData: number[], repeatPeriod: number) => number = addon.sendCANMessage;
49-
export const sendHALMessage: (messageId: number, messageData: number[], repeatPeriod: number) => number = addon.sendHALMessage;
50-
export const intializeNotifier: () => void = addon.intializeNotifier;
51-
export const waitForNotifierAlarm: (time:number) => Promise<number> = promisify(addon.waitForNotifierAlarm);
52-
export const stopNotifier: () => void = addon.stopNotifier;
53-
export const writeDfuToBin: (dfuFileName:string, binFileName:string) => Promise<number> = promisify(addon.writeDfuToBin);
54-
export const openHALStreamSession: (messageId: number, messageMask:number, numMessages:number) => number = addon.openHALStreamSession;
55-
export const readHALStreamSession: (streamHandle:number, numMessages:number) => CanMessage[] = addon.readHALStreamSession;
56-
export const closeHALStreamSession: (streamHandle:number) => void = addon.closeHALStreamSession;
57-
export const setThreadPriority: (descriptor: string, priority: ThreadPriority) => void = addon.setThreadPriority;
58-
export const setSparkMaxHeartbeatData: (descriptor: string, heartbeatData: number[]) => void = addon.setSparkMaxHeartbeatData;
59-
export const startRevCommonHeartbeat: (descriptor: string) => void = addon.startRevCommonHeartbeat;
60-
export const ackHeartbeats: () => void = addon.ackHeartbeats;
36+
export class CanBridge {
37+
getDevices: () => Promise<CanDeviceInfo[]>;
38+
registerDeviceToHAL: (descriptor:string, messageId:Number, messageMask:number) => number;
39+
unregisterDeviceFromHAL: (descriptor:string) => Promise<number>;
40+
receiveMessage: (descriptor:string, messageId:number, messageMask:number) => CanMessage;
41+
openStreamSession: (descriptor:string, messageId:number, messageMask:number, maxSize:number) => number;
42+
readStreamSession: (descriptor:string, sessionHandle:number, messagesToRead:number) => CanMessage[];
43+
closeStreamSession: (descriptor:string, sessionHandle:number) => number;
44+
getCANDetailStatus: (descriptor:string) => CanDeviceStatus;
45+
sendCANMessage: (descriptor:string, messageId: number, messageData: number[], repeatPeriod: number) => number;
46+
sendHALMessage: (messageId: number, messageData: number[], repeatPeriod: number) => number;
47+
intializeNotifier: () => void;
48+
waitForNotifierAlarm: (time:number) => Promise<number>;
49+
stopNotifier: () => void;
50+
writeDfuToBin: (dfuFileName:string, binFileName:string) => Promise<number>;
51+
openHALStreamSession: (messageId: number, messageMask:number, numMessages:number) => number;
52+
readHALStreamSession: (streamHandle:number, numMessages:number) => CanMessage[];
53+
closeHALStreamSession: (streamHandle:number) => void;
54+
setThreadPriority: (descriptor: string, priority: ThreadPriority) => void;
55+
setSparkMaxHeartbeatData: (descriptor: string, heartbeatData: number[]) => void;
56+
startRevCommonHeartbeat: (descriptor: string) => void;
57+
ackHeartbeats: () => void;
58+
59+
constructor() {
60+
const addon = require('node-gyp-build')(path.join(__dirname, '..'));
61+
this.getDevices = promisify(addon.getDevices);
62+
this.registerDeviceToHAL = addon.registerDeviceToHAL;
63+
this.unregisterDeviceFromHAL = promisify(addon.unregisterDeviceFromHAL);
64+
this.receiveMessage = addon.receiveMessage;
65+
this.openStreamSession = addon.openStreamSession;
66+
this.readStreamSession = addon.readStreamSession;
67+
this.closeStreamSession = addon.closeStreamSession;
68+
this.getCANDetailStatus = addon.getCANDetailStatus;
69+
this.sendCANMessage = addon.sendCANMessage;
70+
this.sendHALMessage = addon.sendHALMessage;
71+
this.intializeNotifier = addon.intializeNotifier;
72+
this.waitForNotifierAlarm = promisify(addon.waitForNotifierAlarm);
73+
this.stopNotifier = addon.stopNotifier;
74+
this.writeDfuToBin = promisify(addon.writeDfuToBin);
75+
this.openHALStreamSession = addon.openHALStreamSession;
76+
this.readHALStreamSession = addon.readHALStreamSession;
77+
this.closeHALStreamSession = addon.closeHALStreamSession;
78+
this.setThreadPriority = addon.setThreadPriority;
79+
this.setSparkMaxHeartbeatData = addon.setSparkMaxHeartbeatData;
80+
this.startRevCommonHeartbeat = addon.startRevCommonHeartbeat;
81+
this.ackHeartbeats = addon.ackHeartbeats;
82+
}
83+
}
84+
85+
86+
87+
88+
89+
90+
91+
92+
93+
94+
95+
96+
97+
98+
99+
100+
101+
102+
103+
104+
105+

0 commit comments

Comments
 (0)