Initial push
This commit is contained in:
+1496
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "server",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"description": "",
|
||||
"dependencies": {
|
||||
"@serialport/parser-readline": "^13.0.0",
|
||||
"cors": "^2.8.5",
|
||||
"express": "^5.1.0",
|
||||
"serialport": "^13.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^3.1.10"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
// server/routes/serialUtils.js
|
||||
const router = require('express').Router();
|
||||
const { listSerialPorts, connectSerial, getLatestPacket } = require('../serial');
|
||||
|
||||
router.get('/serialports', async (req, res) => {
|
||||
try {
|
||||
const ports = await listSerialPorts();
|
||||
res.json(ports);
|
||||
} catch (err) {
|
||||
console.error('Error listing ports:', err);
|
||||
res.status(500).json({ error: 'Could not list serial ports' });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/latest', (req, res) => {
|
||||
const payload = getLatestPacket();
|
||||
if (!payload) {
|
||||
return res.status(204).end(); // No Content
|
||||
}
|
||||
res.json(payload);
|
||||
});
|
||||
|
||||
router.post('/connect', (req, res) => {
|
||||
const { path } = req.body;
|
||||
if (!path) {
|
||||
return res.status(400).json({ error: 'Path is required' });
|
||||
}
|
||||
|
||||
try {
|
||||
connectSerial(path);
|
||||
res.json({
|
||||
ok: true,
|
||||
connectedTo: path,
|
||||
baudRate: 115200
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('Failed to connect:', err);
|
||||
res.status(500).json({ error: 'Could not open serial port' });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
@@ -0,0 +1,39 @@
|
||||
// server/serial.js
|
||||
const { SerialPort } = require('serialport');
|
||||
const { ReadlineParser } = require('@serialport/parser-readline');
|
||||
|
||||
let portInstance = null;
|
||||
let parser = null;
|
||||
let latestPayload = null;
|
||||
let latestImage = null;
|
||||
|
||||
function connectSerial(path) {
|
||||
if (portInstance?.isOpen) portInstance.close();
|
||||
|
||||
portInstance = new SerialPort({ path: path, baudRate: 115200 });
|
||||
parser = portInstance.pipe(new ReadlineParser({ delimiter: '\n' }));
|
||||
parser.on('data', line => {
|
||||
if(line.includes("image")){
|
||||
if(latestImage != null && !latestImage.endsWith("}"))
|
||||
latestImage += line.trim().replace("\n", "");
|
||||
else
|
||||
latestImage = line.trim().replace("\n", "");
|
||||
console.log(latestImage)
|
||||
}
|
||||
else if (line.includes("text")){
|
||||
console.log(latestPayload)
|
||||
latestPayload = line.trim();
|
||||
}
|
||||
});
|
||||
portInstance.on('error', console.error);
|
||||
}
|
||||
|
||||
function listSerialPorts() {
|
||||
return SerialPort.list();
|
||||
}
|
||||
|
||||
function getLatestPacket() {
|
||||
return [latestPayload, latestImage];
|
||||
}
|
||||
|
||||
module.exports = { connectSerial, listSerialPorts, getLatestPacket };
|
||||
@@ -0,0 +1,11 @@
|
||||
const express = require('express');
|
||||
const cors = require('cors');
|
||||
const path = require('path');
|
||||
const serialRouter = require('./routes/serialUtils');
|
||||
|
||||
const app = express();
|
||||
app.use(cors());
|
||||
app.use(express.json());
|
||||
|
||||
app.use('/api/serial-utils', serialRouter);
|
||||
app.listen(6666, () => console.log('running on port 6666'));
|
||||
Reference in New Issue
Block a user