Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | 1x 1x 1x 1x | import * as utils from 'sportident/lib/utils'; import {ShellCommandContext} from '../Shell'; import {BaseCommand, ArgType} from './BaseCommand'; import {getDirectOrRemoteStation} from './getDirectOrRemoteStation'; export class SendCommand extends BaseCommand { getArgTypes(): ArgType[] { return [ { name: 'target', choices: ['direct', 'remote'], }, { name: 'command', regex: /^[0-9a-fA-F]{2}$/, }, { name: 'parameters', regex: /^[0-9a-fA-F]+$/, }, { name: 'number of responses', regex: /^[0-9]+$/, }, ]; } printUsage(context: ShellCommandContext): void { super.printUsage(context); context.putString('e.g. send direct F9 01 0\n'); context.putString('e.g. send remote F9 01 1\n'); } run(context: ShellCommandContext): Promise<void> { const device = context.env.device; Iif (!device) { return Promise.reject(new Error('No device.')); } const station = getDirectOrRemoteStation(context.args[1], device); Iif (station === undefined) { context.putString('No such station\n'); return Promise.resolve(); } const commandStr = context.args[2].replace(/\s/g, ''); Iif (commandStr.length !== 2) { context.putString(`Command must be one byte, is: ${commandStr}\n`); return Promise.resolve(); } const command = parseInt(commandStr, 16); const parametersStr = context.args[3].replace(/\s/g, ''); Iif (parametersStr.length % 2 !== 0) { context.putString(`Parameters must be bytes, is: ${parametersStr}\n`); return Promise.resolve(); } const parameters = []; for (let i = 0; i < parametersStr.length; i += 2) { parameters.push(parseInt(parametersStr.slice(i, i + 2), 16)); } const numResp = context.args.length > 4 ? parseInt(context.args[4], 10) : 0; return station.sendMessage({ command: command, parameters: parameters, }, numResp) .then((allResponses: number[][]) => { allResponses.forEach((response: number[], index: number) => { context.putString(`Answer[${index}]:\n`); const lines = utils.prettyHex(response, 16).split('\n'); lines.forEach((line: string) => { context.putString(` ${line}\n`); }); }); }); } } |