initial commit
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
const { canBindTcpPort } = require('./jlinkPortCheck.cjs');
|
||||
|
||||
/** Preferred ports per session (dynamic fallback if busy). */
|
||||
const JLINK_PORTS_BY_SESSION = {
|
||||
receiver: {
|
||||
gdb: 29021,
|
||||
swo: 29022,
|
||||
rtt: 19021,
|
||||
},
|
||||
transmitter: {
|
||||
gdb: 29031,
|
||||
swo: 29032,
|
||||
rtt: 19022,
|
||||
},
|
||||
};
|
||||
|
||||
const GDB_PORT_RANGE = { min: 29000, max: 29199 };
|
||||
const SWO_PORT_RANGE = { min: 29000, max: 29199 };
|
||||
const RTT_PORT_RANGE = { min: 19020, max: 19199 };
|
||||
|
||||
const portCandidates = (preferred, min, max) => {
|
||||
const ordered = [preferred];
|
||||
for (let port = min; port <= max; port++) {
|
||||
if (port !== preferred) ordered.push(port);
|
||||
}
|
||||
return ordered;
|
||||
};
|
||||
|
||||
const pickTcpPort = async (preferred, range, reserved) => {
|
||||
for (const port of portCandidates(preferred, range.min, range.max)) {
|
||||
if (reserved.has(port)) continue;
|
||||
if (await canBindTcpPort('127.0.0.1', port)) {
|
||||
reserved.add(port);
|
||||
return port;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
`사용 가능한 TCP 포트가 없습니다 (선호 ${preferred}, 범위 ${range.min}-${range.max}). JLinkGDBServerCL을 모두 종료한 뒤 다시 시도하세요.`
|
||||
);
|
||||
};
|
||||
|
||||
const allocateSessionPorts = async (sessionId, reserved = new Set()) => {
|
||||
const preferred = JLINK_PORTS_BY_SESSION[sessionId];
|
||||
if (!preferred) {
|
||||
throw new Error(`Unknown session for port allocation: ${sessionId}`);
|
||||
}
|
||||
|
||||
return {
|
||||
gdb: await pickTcpPort(preferred.gdb, GDB_PORT_RANGE, reserved),
|
||||
swo: await pickTcpPort(preferred.swo, SWO_PORT_RANGE, reserved),
|
||||
rtt: await pickTcpPort(preferred.rtt, RTT_PORT_RANGE, reserved),
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
JLINK_PORTS_BY_SESSION,
|
||||
allocateSessionPorts,
|
||||
};
|
||||
Reference in New Issue
Block a user