@canboat/canboatjs
Version:
Native javascript version of canboat
119 lines (118 loc) • 4.27 kB
JavaScript
#!/usr/bin/env node
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../index");
const canId_1 = require("../canId");
const minimist_1 = __importDefault(require("minimist"));
const utilities_1 = require("../utilities");
const stringMsg_1 = require("../stringMsg");
const utils_1 = require("./utils");
const util_1 = __importDefault(require("util"));
const canSocket_1 = require("../canSocket");
const argv = (0, minimist_1.default)(process.argv.slice(2), {
alias: {
h: 'help'
},
string: ['format', 'manufacturer', 'src', 'pgn', 'dst', 'filter', 'id'],
boolean: [
'n',
'r',
'camel',
'camel-compat',
'show-non-matches',
'pretty',
'js',
'js-colors',
'no-enums',
'include-raw-data',
'include-byte-mapping'
]
});
(0, utils_1.printVersion)(argv);
if (argv['help']) {
console.error(`Usage: ${process.argv[0]} [options] candevice
Options:
--format <format> json, candump
-c don't check for invalid values
-n output null values
-r parse $MXPGN as little endian
--no-enums don't output enum values
--include-raw-data include raw data in output
--include-byte-mapping include byte mapping in output
--pretty pretty json
--js output in JavaScript format
--js-colors output in JavaScript format with colors
--camel output field names in camelCase
--camel-compat output field names in camelCase and regular
--show-non-matches show pgn data without any matches
--pgn <number> filter for the given pgn number
--id <camelCaseId> filter for the given pgn id
--src <number> filter for the given source address
--dst <number> filter for the given destination address
--manufacturer <str> filter for pgns from the given manufacturer
--filter <js> filter for the given JavaScript expression
-h, --help output usage information`);
process.exit(1);
}
if (argv['_'].length === 0) {
console.error('Please specify a device');
process.exit(1);
}
const canDevice = argv['_'][0];
const filter = (0, utilities_1.setupFilters)(argv);
const parser = new index_1.FromPgn({
returnNulls: argv['n'] === true,
littleEndianMXPGN: argv['r'] === true,
checkForInvalidFields: argv['c'] !== true,
useCamel: argv['camel'],
useCamelCompat: argv['camel-compat'],
returnNonMatches: argv['show-non-matches'],
includeInputData: true,
createPGNObjects: true,
resolveEnums: argv['enums'] === undefined || argv['enums'] === true,
includeRawData: argv['include-raw-data'],
includeByteMapping: argv['include-byte-mapping'],
canBus: canDevice
});
const format = argv['format'] || 'json';
parser.on('error', (pgn, error) => {
console.error(`Error parsing ${pgn.pgn} ${error}`);
console.error(error.stack);
});
parser.on('pgn', (pgn) => {
if ((0, utilities_1.filterPGN)(pgn, filter)) {
if (argv['js'] || argv['js-colors']) {
console.log(util_1.default.inspect(pgn, {
depth: null,
colors: argv['js-colors'],
breakLength: 1
}));
}
else {
console.log(JSON.stringify(pgn, null, argv['pretty'] ? 2 : 0));
}
}
});
const channel = new canSocket_1.CanChannel(canDevice);
channel.addListener('onStopped', (msg) => {
console.error(`socketcan stopped ${msg}`);
});
channel.addListener('onMessage', (msg) => {
const pgn = (0, canId_1.parseCanId)(msg.id);
if (format === 'json') {
parser.parse({ pgn, length: msg.data.length, data: msg.data });
}
else {
const sourceString = (0, stringMsg_1.encodeCandump2)({
...pgn,
data: msg.data,
bus: canDevice
})[0];
console.log(sourceString);
}
});
channel.start();
//# sourceMappingURL=candumpjs.js.map