phone/src/pins/errors.ts
2025-11-18 14:33:25 -08:00

54 lines
1.4 KiB
TypeScript

export class GPIOError extends Error {
code: string
constructor(message: string, code: string) {
super(message)
this.name = "GPIOError"
this.code = code
}
}
export class PermissionError extends GPIOError {
constructor(path: string) {
super(
`Permission denied accessing ${path}. Try:\n` +
` 1. Add your user to the 'gpio' group: sudo usermod -aG gpio $USER\n` +
` 2. Log out and back in\n` +
` 3. Or run with sudo (not recommended for production)`,
"PERMISSION_DENIED"
)
this.name = "PermissionError"
}
}
export class PinInUseError extends GPIOError {
constructor(pin: number) {
super(
`Pin ${pin} is already in use by another process or request. ` +
`Only one process can control a GPIO pin at a time.`,
"PIN_IN_USE"
)
this.name = "PinInUseError"
}
}
export class ChipNotFoundError extends GPIOError {
constructor(path: string) {
super(
`GPIO chip not found at ${path}. Check that:\n` +
` 1. The path exists (ls ${path})\n` +
` 2. GPIO hardware is enabled in your system configuration\n` +
` 3. You're running on compatible hardware (Raspberry Pi, etc.)`,
"CHIP_NOT_FOUND"
)
this.name = "ChipNotFoundError"
}
}
export class InvalidConfigError extends GPIOError {
constructor(message: string) {
super(message, "INVALID_CONFIG")
this.name = "InvalidConfigError"
}
}