Skip to content

Commit 541cc0c

Browse files
committed
refactor(logging): export logging API
1. Rename the `Logging` interface to `Logger` 2. Explicity set the type for the logger field on RP2040 and GDBServer to the Logger interface, making it easy to override the logger with a custom implementation of the interface. 3. Export the Logger interface, ConsoleLogger implementation, and LogLevel enum
1 parent 94d6a73 commit 541cc0c

File tree

4 files changed

+28
-28
lines changed

4 files changed

+28
-28
lines changed

src/gdbserver.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
gdbChecksum,
1515
gdbMessage,
1616
} from './utils/gdb';
17-
import { ConsoleLogger, LogLevel } from './utils/logging';
17+
import { ConsoleLogger, Logger, LogLevel } from './utils/logging';
1818

1919
const STOP_REPLY_SIGINT = 'S02';
2020
const STOP_REPLY_TRAP = 'S05';
@@ -52,13 +52,13 @@ const targetXML = `<?xml version="1.0"?>
5252
</feature>
5353
</target>`;
5454

55-
const LOG_NAME = "GDBSERVER";
55+
const LOG_NAME = 'GDBServer';
5656

5757
export class GDBTCPServer {
5858
private socketServer = createServer();
5959

6060
// Console logger
61-
public logger = new ConsoleLogger(LogLevel.Warn, true);
61+
public logger: Logger = new ConsoleLogger(LogLevel.Warn, true);
6262

6363
constructor(readonly rp2040: RP2040, readonly port: number = 3333) {
6464
this.socketServer.listen(port);
@@ -204,7 +204,10 @@ export class GDBTCPServer {
204204
const length = parseInt(params[1], 16);
205205
const data = decodeHexBuf(params[2].substr(0, length * 2));
206206
for (let i = 0; i < data.length; i++) {
207-
this.logger.debug(LOG_NAME, `write ${data[i].toString(16)} to ${(address + i).toString(16)}`);
207+
this.logger.debug(
208+
LOG_NAME,
209+
`Write ${data[i].toString(16)} to ${(address + i).toString(16)}`
210+
);
208211
rp2040.writeUint8(address + i, data[i]);
209212
}
210213
return gdbMessage('OK');

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export { GDBTCPServer } from './gdbserver';
22
export { GPIOPin, GPIOPinState } from './gpio-pin';
33
export { RP2040 } from './rp2040';
4+
export { ConsoleLogger, Logger, LogLevel } from './utils/logging';

src/rp2040.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { RPSIO } from './sio';
1010
import { RPReset } from './peripherals/reset';
1111
import { RPIO } from './peripherals/io';
1212
import { RPPADS } from './peripherals/pads';
13-
import { ConsoleLogger, LogLevel } from './utils/logging';
13+
import { ConsoleLogger, Logger, LogLevel } from './utils/logging';
1414

1515
export const FLASH_START_ADDRESS = 0x10000000;
1616
export const FLASH_END_ADDRESS = 0x14000000;
@@ -166,8 +166,7 @@ export class RP2040 {
166166

167167
private stopped = false;
168168

169-
// Console logger
170-
public logger = new ConsoleLogger(LogLevel.Debug, true);
169+
public logger: Logger = new ConsoleLogger(LogLevel.Debug, true);
171170

172171
// APSR fields
173172
public N: boolean = false;

src/utils/logging.ts

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { formatTime } from './time';
22

3-
export interface Logging {
4-
debug(name: string, msg: string): void;
5-
warn(name: string, msg: string): void;
6-
error(name: string, msg: string): void;
7-
info(name: string, msg: string): void;
3+
export interface Logger {
4+
debug(componentName: string, message: string): void;
5+
warn(componentName: string, message: string): void;
6+
error(componentName: string, message: string): void;
7+
info(componentName: string, message: string): void;
88
}
99

1010
export enum LogLevel {
@@ -14,45 +14,42 @@ export enum LogLevel {
1414
Error,
1515
}
1616

17-
export class ConsoleLogger implements Logging {
18-
constructor(public currentLogLevel: LogLevel, private throwOnError: boolean) {
19-
this.currentLogLevel = currentLogLevel;
20-
this.throwOnError = throwOnError;
21-
}
17+
export class ConsoleLogger implements Logger {
18+
constructor(public currentLogLevel: LogLevel, private throwOnError = true) {}
2219

2320
private aboveLogLevel(logLevel: LogLevel): boolean {
2421
return logLevel >= this.currentLogLevel ? true : false;
2522
}
2623

27-
private formatMessage(name: string, msg: string) {
24+
private formatMessage(componentName: string, message: string) {
2825
const currentTime = formatTime(new Date());
29-
return `${currentTime} [${name}] ${msg}`;
26+
return `${currentTime} [${componentName}] ${message}`;
3027
}
3128

32-
debug(name: string, msg: string): void {
29+
debug(componetName: string, message: string): void {
3330
if (this.aboveLogLevel(LogLevel.Debug)) {
34-
console.debug(this.formatMessage(name, msg));
31+
console.debug(this.formatMessage(componetName, message));
3532
}
3633
}
3734

38-
warn(name: string, msg: string): void {
35+
warn(componetName: string, message: string): void {
3936
if (this.aboveLogLevel(LogLevel.Warn)) {
40-
console.warn(this.formatMessage(name, msg));
37+
console.warn(this.formatMessage(componetName, message));
4138
}
4239
}
4340

44-
error(name: string, msg: string): void {
41+
error(componentName: string, message: string): void {
4542
if (this.aboveLogLevel(LogLevel.Error)) {
46-
console.error(this.formatMessage(name, msg));
43+
console.error(this.formatMessage(componentName, message));
4744
if (this.throwOnError) {
48-
throw new Error(msg);
45+
throw new Error(`[${componentName}] ${message}`);
4946
}
5047
}
5148
}
5249

53-
info(name: string, msg: string): void {
50+
info(componentName: string, message: string): void {
5451
if (this.aboveLogLevel(LogLevel.Info)) {
55-
console.info(this.formatMessage(name, msg));
52+
console.info(this.formatMessage(componentName, message));
5653
}
5754
}
5855
}

0 commit comments

Comments
 (0)