https://github.com/xdissent/node-linux-cec
Linux CEC bindings for Node.js
https://github.com/xdissent/node-linux-cec
cec hdmi nodejs
Last synced: about 1 month ago
JSON representation
Linux CEC bindings for Node.js
- Host: GitHub
- URL: https://github.com/xdissent/node-linux-cec
- Owner: xdissent
- License: mit
- Created: 2018-08-03T18:39:33.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2022-12-09T09:23:40.000Z (almost 3 years ago)
- Last Synced: 2025-07-22T15:37:32.144Z (3 months ago)
- Topics: cec, hdmi, nodejs
- Language: C++
- Homepage:
- Size: 1.31 MB
- Stars: 3
- Watchers: 3
- Forks: 1
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# node-linux-cec
> Linux CEC bindings for Node.js
This package includes native bindings for the [Linux Consumer Electronics Control API](https://www.kernel.org/doc/html/latest/media/uapi/cec/cec-api.html). All constants and functions from [`linux/cec.h`](https://github.com/torvalds/linux/blob/master/include/uapi/linux/cec.h) and [`linux/cec-funcs.h`](https://github.com/torvalds/linux/blob/master/include/uapi/linux/cec-funcs.h) are included, as well as a `Device` class for managing CEC adapters.
## Requirements
- Node >= 10.7 (requires napi bigint support)
## API
The api is the same as found in the linux CEC headers, with the following changes:
- All functions, variables, arguments and properties are in camel case.
- All types/structs are in pascal case.
- The `CEC_` prefix has been removed from all constants.
- The `cec_` prefix has been removed from all functions.
- The `cec_msg_init` implementation doesn't accept an existing message as its first argument.
- All `cec_msg_*` functions return a new message object and do not alter the existing message.
- All `cec_ops_*` functions with one output value return that value directly.
- All `cec_ops_*` functions with more than one output value return an object with the output values as properties.
- All number values that are inherently boolean flags are cast as boolean values.## Usage
```js
import * as cec from 'node-linux-cec'const main = async () => {
const device = new cec.Device('/dev/cec0')device.on('event', event => {
// handle CEC event
})device.on('message', async msg => {
// handle CEC message
if (cec.msgIsBroadcast(msg)) return
msg = cec.msgReplyFeatureAbort(msg, cec.OP_ABORT_UNRECOGNIZED_OP)
// Transmit reply
await device.transmit(msg)
})// Open the device
await device.open()// Change device mode
await device.setMode(cec.MODE_INITIATOR | cec.MODE_FOLLOWER)// ...
// Reset mode and close device
await device.setMode(cec.MODE_INITIATOR)
await device.close()
}
```## Development
Ensure `clang-format` and linux headers are installed. Run `yarn gen ` (`/usr/include/linux` on most systems) to update the generated bindings. Then build the module with `yarn build`.