export function isMixinService(serviceClass: number) { return (serviceClass & 0x2000_0000) === 0x2000_0000 } function isRegister(pkt: jdspec.PacketInfo): boolean { return ( pkt && (pkt.kind === "const" || pkt.kind === "ro" || pkt.kind === "rw") ) } export function packetsToRegisters(packets: jdspec.PacketInfo[]) { return packets.filter(pkt => !pkt.derived && isRegister(pkt)) } export function parseIntFloat( spec: jdspec.ServiceSpec, w: string, allowFloat = false ): number { if (/^-?0x[a-f\d_]+$/i.test(w) || /^-?[\d_]+$/.test(w)) { const v = parseInt(w.replace(/_/g, "")) // allow for 0x3fff_ffff syntax if (isNaN(v)) throw new Error("can't parse int: " + w) return v } if (allowFloat && /^-?\d*(\.\d*)?(e(-?)\d+)?$/.test(w)) { const v = parseFloat(w) if (isNaN(v)) throw new Error("can't parse float: " + w) return v } const ww = w.split(/\./) if (ww.length != 2) { throw new Error(`expecting int or enum member here`) } const en = spec.enums[ww[0]] if (!en) { throw new Error(`${ww[0]} is not an enum type`) } // eslint-disable-next-line no-prototype-builtins if (!en.members.hasOwnProperty(ww[1])) throw new Error(`${ww[1]} is not a member of ${ww[0]}`) return en.members[ww[1]] || 0 }