mirror of
https://github.com/scottbez1/smartknob.git
synced 2025-11-04 17:19:40 +08:00
- Firmware
- Refactor all code to use a log interface rather than `Serial` directly
- Moved platformio.ini to root, so you can load the entire repo in VS Code and still use platformio
- Reduced graphic buffer bit depth to 8 bits (short on RAM :( )
- Implemented threadsafe log interface in interface_task (using a queue for posting log message)
- Created serial protocol interface and 2 implementations - plaintext (default) and protobuf (selected by sending a NULL byte)
- Protobuf protocol is roughly the same architecture as Splitflap's:
- PacketSerial (cobs) framing with NULL delimiters
- CRC32 checksums for packets
- nanopb generated code for encoding/decoding (generated firmware code is checked in, since it should change less frequently and this reduces burden to build the project from scratch)
- Software
- Typescript example host-side code:
- smartknobjs-proto
- Autogenerated types/encoding/decoding protobuf code (using protobufjs)
- smartknobjs
- Helper library for interfacing the with smartknob via serial/protobuf. Implements basic outgoing queue (with retries and ACK checking) and message callback for responding to messages from the SmartKnob
- example
- Basic demo CLI app that uses smartknobjs to connect to the smartknob, send a haptic config, and print state changes and log messages to the console
202 lines
9.0 KiB
JSON
202 lines
9.0 KiB
JSON
{
|
|
"name": "smartknobjs-proto",
|
|
"version": "0.1.0",
|
|
"lockfileVersion": 2,
|
|
"requires": true,
|
|
"packages": {
|
|
"": {
|
|
"name": "smartknobjs-proto",
|
|
"version": "0.1.0",
|
|
"license": "Apache-2.0",
|
|
"dependencies": {
|
|
"protobufjs": "^6.11.2"
|
|
}
|
|
},
|
|
"node_modules/@protobufjs/aspromise": {
|
|
"version": "1.1.2",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
|
|
"integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
|
|
},
|
|
"node_modules/@protobufjs/base64": {
|
|
"version": "1.1.2",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
|
|
"integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
|
|
},
|
|
"node_modules/@protobufjs/codegen": {
|
|
"version": "2.0.4",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
|
|
"integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
|
|
},
|
|
"node_modules/@protobufjs/eventemitter": {
|
|
"version": "1.1.0",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
|
|
"integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
|
|
},
|
|
"node_modules/@protobufjs/fetch": {
|
|
"version": "1.1.0",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
|
|
"integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
|
|
"dependencies": {
|
|
"@protobufjs/aspromise": "^1.1.1",
|
|
"@protobufjs/inquire": "^1.1.0"
|
|
}
|
|
},
|
|
"node_modules/@protobufjs/float": {
|
|
"version": "1.0.2",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
|
|
"integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
|
|
},
|
|
"node_modules/@protobufjs/inquire": {
|
|
"version": "1.1.0",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
|
|
"integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
|
|
},
|
|
"node_modules/@protobufjs/path": {
|
|
"version": "1.1.2",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
|
|
"integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
|
|
},
|
|
"node_modules/@protobufjs/pool": {
|
|
"version": "1.1.0",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
|
|
"integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
|
|
},
|
|
"node_modules/@protobufjs/utf8": {
|
|
"version": "1.1.0",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
|
|
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
|
|
},
|
|
"node_modules/@types/long": {
|
|
"version": "4.0.2",
|
|
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
|
|
"integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
|
|
},
|
|
"node_modules/@types/node": {
|
|
"version": "18.11.0",
|
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.0.tgz",
|
|
"integrity": "sha512-IOXCvVRToe7e0ny7HpT/X9Rb2RYtElG1a+VshjwT00HxrM2dWBApHQoqsI6WiY7Q03vdf2bCrIGzVrkF/5t10w=="
|
|
},
|
|
"node_modules/long": {
|
|
"version": "4.0.0",
|
|
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
|
|
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
|
|
},
|
|
"node_modules/protobufjs": {
|
|
"version": "6.11.3",
|
|
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz",
|
|
"integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==",
|
|
"hasInstallScript": true,
|
|
"dependencies": {
|
|
"@protobufjs/aspromise": "^1.1.2",
|
|
"@protobufjs/base64": "^1.1.2",
|
|
"@protobufjs/codegen": "^2.0.4",
|
|
"@protobufjs/eventemitter": "^1.1.0",
|
|
"@protobufjs/fetch": "^1.1.0",
|
|
"@protobufjs/float": "^1.0.2",
|
|
"@protobufjs/inquire": "^1.1.0",
|
|
"@protobufjs/path": "^1.1.2",
|
|
"@protobufjs/pool": "^1.1.0",
|
|
"@protobufjs/utf8": "^1.1.0",
|
|
"@types/long": "^4.0.1",
|
|
"@types/node": ">=13.7.0",
|
|
"long": "^4.0.0"
|
|
},
|
|
"bin": {
|
|
"pbjs": "bin/pbjs",
|
|
"pbts": "bin/pbts"
|
|
}
|
|
}
|
|
},
|
|
"dependencies": {
|
|
"@protobufjs/aspromise": {
|
|
"version": "1.1.2",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
|
|
"integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
|
|
},
|
|
"@protobufjs/base64": {
|
|
"version": "1.1.2",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
|
|
"integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
|
|
},
|
|
"@protobufjs/codegen": {
|
|
"version": "2.0.4",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
|
|
"integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
|
|
},
|
|
"@protobufjs/eventemitter": {
|
|
"version": "1.1.0",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
|
|
"integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
|
|
},
|
|
"@protobufjs/fetch": {
|
|
"version": "1.1.0",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
|
|
"integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
|
|
"requires": {
|
|
"@protobufjs/aspromise": "^1.1.1",
|
|
"@protobufjs/inquire": "^1.1.0"
|
|
}
|
|
},
|
|
"@protobufjs/float": {
|
|
"version": "1.0.2",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
|
|
"integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
|
|
},
|
|
"@protobufjs/inquire": {
|
|
"version": "1.1.0",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
|
|
"integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
|
|
},
|
|
"@protobufjs/path": {
|
|
"version": "1.1.2",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
|
|
"integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
|
|
},
|
|
"@protobufjs/pool": {
|
|
"version": "1.1.0",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
|
|
"integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
|
|
},
|
|
"@protobufjs/utf8": {
|
|
"version": "1.1.0",
|
|
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
|
|
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
|
|
},
|
|
"@types/long": {
|
|
"version": "4.0.2",
|
|
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
|
|
"integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
|
|
},
|
|
"@types/node": {
|
|
"version": "18.11.0",
|
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.0.tgz",
|
|
"integrity": "sha512-IOXCvVRToe7e0ny7HpT/X9Rb2RYtElG1a+VshjwT00HxrM2dWBApHQoqsI6WiY7Q03vdf2bCrIGzVrkF/5t10w=="
|
|
},
|
|
"long": {
|
|
"version": "4.0.0",
|
|
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
|
|
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
|
|
},
|
|
"protobufjs": {
|
|
"version": "6.11.3",
|
|
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz",
|
|
"integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==",
|
|
"requires": {
|
|
"@protobufjs/aspromise": "^1.1.2",
|
|
"@protobufjs/base64": "^1.1.2",
|
|
"@protobufjs/codegen": "^2.0.4",
|
|
"@protobufjs/eventemitter": "^1.1.0",
|
|
"@protobufjs/fetch": "^1.1.0",
|
|
"@protobufjs/float": "^1.0.2",
|
|
"@protobufjs/inquire": "^1.1.0",
|
|
"@protobufjs/path": "^1.1.2",
|
|
"@protobufjs/pool": "^1.1.0",
|
|
"@protobufjs/utf8": "^1.1.0",
|
|
"@types/long": "^4.0.1",
|
|
"@types/node": ">=13.7.0",
|
|
"long": "^4.0.0"
|
|
}
|
|
}
|
|
}
|
|
}
|