@science-corporation/synapse 0.9.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -18
- package/dist/api/api.d.ts +3881 -1739
- package/dist/api/api.js +10023 -5111
- package/dist/api/api.js.map +1 -1
- package/dist/api/proto.json +370 -63
- package/dist/api-science-device/api.d.ts +3 -0
- package/dist/api-science-device/api.d.ts.map +1 -0
- package/dist/api-science-device/api.js +3822 -0
- package/dist/api-science-device/api.js.map +1 -0
- package/dist/api-science-device/proto.json +258 -0
- package/dist/browser.d.ts +4 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +22 -0
- package/dist/browser.js.map +1 -0
- package/dist/config.d.ts +5 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +25 -17
- package/dist/config.js.map +1 -1
- package/dist/demo.js +42 -38
- package/dist/demo.js.map +1 -1
- package/dist/device.d.ts +20 -5
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +75 -27
- package/dist/device.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/nodejs.d.ts +8 -0
- package/dist/nodejs.d.ts.map +1 -0
- package/dist/nodejs.js +32 -0
- package/dist/nodejs.js.map +1 -0
- package/dist/nodes/broadband_source.d.ts +11 -0
- package/dist/nodes/broadband_source.d.ts.map +1 -0
- package/dist/nodes/{optical_broadband.js → broadband_source.js} +9 -9
- package/dist/nodes/broadband_source.js.map +1 -0
- package/dist/nodes/index.d.ts +3 -2
- package/dist/nodes/index.d.ts.map +1 -1
- package/dist/nodes/index.js +5 -5
- package/dist/nodes/index.js.map +1 -1
- package/dist/nodes/spike_source.d.ts +11 -0
- package/dist/nodes/spike_source.d.ts.map +1 -0
- package/dist/nodes/{electrical_broadband.js → spike_source.js} +9 -9
- package/dist/nodes/spike_source.js.map +1 -0
- package/dist/nodes/stream_in.d.ts +0 -4
- package/dist/nodes/stream_in.d.ts.map +1 -1
- package/dist/nodes/stream_in.js +1 -1
- package/dist/nodes/stream_in.js.map +1 -1
- package/dist/nodes/stream_out.d.ts +2 -2
- package/dist/nodes/stream_out.d.ts.map +1 -1
- package/dist/nodes/stream_out.js +2 -2
- package/dist/nodes/stream_out.js.map +1 -1
- package/dist/science-device-api/api.d.ts +3 -0
- package/dist/science-device-api/api.d.ts.map +1 -0
- package/dist/science-device-api/api.js +3822 -0
- package/dist/science-device-api/api.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +19 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/client.d.ts +8 -1
- package/dist/utils/client.d.ts.map +1 -1
- package/dist/utils/client.js +30 -16
- package/dist/utils/client.js.map +1 -1
- package/dist/utils/device-management.d.ts +37 -0
- package/dist/utils/device-management.d.ts.map +1 -0
- package/dist/utils/device-management.js +126 -0
- package/dist/utils/device-management.js.map +1 -0
- package/dist/utils/discover.d.ts +3 -8
- package/dist/utils/discover.d.ts.map +1 -1
- package/dist/utils/discover.js +17 -32
- package/dist/utils/discover.js.map +1 -1
- package/dist/utils/enum.d.ts +1 -1
- package/dist/utils/enum.d.ts.map +1 -1
- package/dist/utils/enum.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/status.d.ts +28 -0
- package/dist/utils/status.d.ts.map +1 -0
- package/dist/utils/status.js +54 -0
- package/dist/utils/status.js.map +1 -0
- package/package.json +35 -9
- package/scripts/postinstall.sh +95 -0
- package/src/api/api.d.ts +3881 -1739
- package/src/api/api.js +10524 -5282
- package/src/api/proto.json +370 -63
- package/src/browser.ts +4 -0
- package/src/config.ts +31 -20
- package/src/demo.ts +43 -33
- package/src/device.ts +84 -30
- package/src/index.ts +4 -1
- package/src/nodes/broadband_source.ts +30 -0
- package/src/nodes/index.ts +4 -2
- package/src/nodes/spike_source.ts +30 -0
- package/src/nodes/stream_in.ts +1 -6
- package/src/nodes/stream_out.ts +4 -4
- package/src/utils/client.ts +38 -13
- package/src/utils/discover.ts +25 -45
- package/src/utils/enum.ts +1 -1
- package/src/utils/index.ts +1 -1
- package/src/utils/status.ts +57 -0
- package/synapse-api/.github/workflows/proto-check.yaml +33 -0
- package/synapse-api/COPYRIGHT +1 -0
- package/synapse-api/README.md +1 -1
- package/synapse-api/api/logging.proto +44 -0
- package/synapse-api/api/node.proto +22 -8
- package/synapse-api/api/nodes/broadband_source.proto +20 -0
- package/synapse-api/api/nodes/disk_writer.proto +7 -0
- package/synapse-api/api/nodes/electrical_stimulation.proto +4 -0
- package/synapse-api/api/nodes/signal_config.proto +22 -0
- package/synapse-api/api/nodes/signal_status.proto +18 -0
- package/synapse-api/api/nodes/spike_source.proto +15 -0
- package/synapse-api/api/nodes/stream_in.proto +5 -0
- package/synapse-api/api/nodes/stream_out.proto +4 -0
- package/synapse-api/api/query.proto +19 -0
- package/synapse-api/api/status.proto +6 -0
- package/synapse-api/api/synapse.proto +6 -2
- package/synapse-api/build.sh +17 -0
- package/dist/channel_mask.d.ts +0 -7
- package/dist/channel_mask.d.ts.map +0 -1
- package/dist/channel_mask.js +0 -14
- package/dist/channel_mask.js.map +0 -1
- package/dist/nodes/electrical_broadband.d.ts +0 -11
- package/dist/nodes/electrical_broadband.d.ts.map +0 -1
- package/dist/nodes/electrical_broadband.js.map +0 -1
- package/dist/nodes/optical_broadband.d.ts +0 -11
- package/dist/nodes/optical_broadband.d.ts.map +0 -1
- package/dist/nodes/optical_broadband.js.map +0 -1
- package/src/nodes/electrical_broadband.ts +0 -30
- package/src/nodes/optical_broadband.ts +0 -30
- package/synapse-api/api/nodes/electrical_broadband.proto +0 -15
- package/synapse-api/api/nodes/optical_broadband.proto +0 -11
package/src/utils/discover.ts
CHANGED
|
@@ -1,82 +1,62 @@
|
|
|
1
1
|
import dgram from "dgram";
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const BROADCAST_PORT = 6470;
|
|
4
4
|
|
|
5
|
-
interface
|
|
5
|
+
interface DeviceInfo {
|
|
6
6
|
host: string;
|
|
7
7
|
port: number;
|
|
8
|
-
timeoutMs?: number;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
class DeviceAdvertisement {
|
|
12
|
-
host: string;
|
|
13
|
-
port: number;
|
|
14
|
-
serial: string;
|
|
15
8
|
capability: string;
|
|
16
9
|
name: string;
|
|
10
|
+
serial: string;
|
|
17
11
|
}
|
|
18
12
|
|
|
19
|
-
const
|
|
20
|
-
host: "224.0.0.245",
|
|
21
|
-
port: 6470,
|
|
22
|
-
timeoutMs: kDefaultTimeout,
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export const discover = (args = kDefaultDiscoverArgs): Promise<DeviceAdvertisement[]> => {
|
|
13
|
+
export const discover = (timeoutMs = 1000): Promise<DeviceInfo[]> => {
|
|
26
14
|
return new Promise((resolve, reject) => {
|
|
27
|
-
const devices:
|
|
15
|
+
const devices: DeviceInfo[] = [];
|
|
16
|
+
const socket = dgram.createSocket({ type: "udp4", reuseAddr: true });
|
|
28
17
|
|
|
29
|
-
|
|
18
|
+
socket.bind(BROADCAST_PORT);
|
|
30
19
|
|
|
31
|
-
socket.on("message", (msg: Buffer, rinfo:
|
|
32
|
-
const server = `${rinfo.address}:${rinfo.port}`;
|
|
20
|
+
socket.on("message", (msg: Buffer, rinfo: dgram.RemoteInfo) => {
|
|
33
21
|
const message = msg.toString("ascii");
|
|
34
22
|
const split = message.split(" ");
|
|
35
23
|
|
|
36
|
-
if (split.length
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (split[0] !== "ID") {
|
|
24
|
+
if (split[0] !== "ID" || split.length !== 5) {
|
|
41
25
|
return;
|
|
42
26
|
}
|
|
43
27
|
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
const port = parseInt(portstr);
|
|
28
|
+
const [, serial, capability, portStr, name] = split;
|
|
29
|
+
const port = parseInt(portStr);
|
|
47
30
|
if (isNaN(port)) {
|
|
48
31
|
return;
|
|
49
32
|
}
|
|
50
33
|
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
devices.push({
|
|
57
|
-
host,
|
|
34
|
+
const deviceInfo: DeviceInfo = {
|
|
35
|
+
host: rinfo.address,
|
|
58
36
|
port,
|
|
59
|
-
serial,
|
|
60
37
|
capability,
|
|
61
38
|
name,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const payload = Buffer.from(`DISCOVER`, "ascii");
|
|
39
|
+
serial,
|
|
40
|
+
};
|
|
66
41
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
42
|
+
if (
|
|
43
|
+
!devices.find((d) => d.host === deviceInfo.host && d.port === deviceInfo.port && d.serial === deviceInfo.serial)
|
|
44
|
+
) {
|
|
45
|
+
devices.push(deviceInfo);
|
|
70
46
|
}
|
|
71
|
-
setTimeout(() => socket.close(), kDefaultTimeout);
|
|
72
47
|
});
|
|
73
48
|
|
|
74
|
-
socket.on("error", (err:
|
|
49
|
+
socket.on("error", (err: Error) => {
|
|
50
|
+
socket.close();
|
|
75
51
|
reject(err);
|
|
76
52
|
});
|
|
77
53
|
|
|
78
54
|
socket.on("close", () => {
|
|
79
55
|
resolve(devices);
|
|
80
56
|
});
|
|
57
|
+
|
|
58
|
+
setTimeout(() => {
|
|
59
|
+
socket.close();
|
|
60
|
+
}, timeoutMs);
|
|
81
61
|
});
|
|
82
62
|
};
|
package/src/utils/enum.ts
CHANGED
package/src/utils/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export { discover } from "./discover";
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Status as StatusCode } from "@grpc/grpc-js/build/src/constants";
|
|
2
|
+
import { synapse } from "../api/api";
|
|
3
|
+
|
|
4
|
+
export interface IStatus {
|
|
5
|
+
code: StatusCode;
|
|
6
|
+
message: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
class Status implements IStatus {
|
|
10
|
+
constructor(public code: StatusCode = StatusCode.OK, public message: string = "") {}
|
|
11
|
+
|
|
12
|
+
ok() {
|
|
13
|
+
return this.code === StatusCode.OK;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
toJSON() {
|
|
17
|
+
return {
|
|
18
|
+
code: this.code,
|
|
19
|
+
message: this.message,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
static fromJSON(json: { code: StatusCode; message: string }) {
|
|
24
|
+
return new Status(json.code, json.message);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static fromProto(proto: any) {
|
|
28
|
+
return new Status(proto.code, proto.message);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const fromDeviceStatusCode = (status: synapse.StatusCode) => {
|
|
33
|
+
switch (status) {
|
|
34
|
+
case synapse.StatusCode.kOk:
|
|
35
|
+
return StatusCode.OK;
|
|
36
|
+
case synapse.StatusCode.kInvalidConfiguration:
|
|
37
|
+
return StatusCode.INVALID_ARGUMENT;
|
|
38
|
+
case synapse.StatusCode.kFailedPrecondition:
|
|
39
|
+
return StatusCode.FAILED_PRECONDITION;
|
|
40
|
+
case synapse.StatusCode.kUnimplemented:
|
|
41
|
+
return StatusCode.UNIMPLEMENTED;
|
|
42
|
+
case synapse.StatusCode.kInternalError:
|
|
43
|
+
return StatusCode.INTERNAL;
|
|
44
|
+
case synapse.StatusCode.kPermissionDenied:
|
|
45
|
+
return StatusCode.PERMISSION_DENIED;
|
|
46
|
+
case synapse.StatusCode.kUndefinedError:
|
|
47
|
+
case synapse.StatusCode.kQueryFailed:
|
|
48
|
+
default:
|
|
49
|
+
return StatusCode.UNKNOWN;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const fromDeviceStatus = ({ code, message }: { code: synapse.StatusCode; message?: string }) => {
|
|
54
|
+
return new Status(fromDeviceStatusCode(code), message);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export { Status, StatusCode };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: Proto Compilation Check
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
paths:
|
|
6
|
+
- '**.proto'
|
|
7
|
+
pull_request:
|
|
8
|
+
paths:
|
|
9
|
+
- '**.proto'
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
check-proto:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Install Protobuf Compiler
|
|
19
|
+
run: |
|
|
20
|
+
sudo apt-get update
|
|
21
|
+
sudo apt-get install -y protobuf-compiler
|
|
22
|
+
|
|
23
|
+
- name: Check protoc version
|
|
24
|
+
run: protoc --version
|
|
25
|
+
|
|
26
|
+
- name: Create temp directory for compilation
|
|
27
|
+
run: mkdir -p /tmp/proto_compiled
|
|
28
|
+
|
|
29
|
+
- name: Compile Proto files
|
|
30
|
+
run: |
|
|
31
|
+
PROTO_FILES=$(find api -name '*.proto')
|
|
32
|
+
echo "Compiling $PROTO_FILES"
|
|
33
|
+
protoc --proto_path=. $PROTO_FILES --cpp_out=/tmp/proto_compiled --fatal_warnings
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Copyright 2024 Science Corporation. All rights reserved.
|
package/synapse-api/README.md
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package synapse;
|
|
4
|
+
|
|
5
|
+
enum LogLevel {
|
|
6
|
+
LOG_LEVEL_UNKNOWN = 0;
|
|
7
|
+
LOG_LEVEL_DEBUG = 1;
|
|
8
|
+
LOG_LEVEL_INFO = 2;
|
|
9
|
+
LOG_LEVEL_WARNING = 3;
|
|
10
|
+
LOG_LEVEL_ERROR = 4;
|
|
11
|
+
LOG_LEVEL_CRITICAL = 5;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
message LogEntry {
|
|
15
|
+
uint64 timestamp_ns = 1;
|
|
16
|
+
LogLevel level = 2;
|
|
17
|
+
|
|
18
|
+
// Which entity is the source of the log (e.g. filename or module name)
|
|
19
|
+
string source = 3;
|
|
20
|
+
string message = 4;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
message LogQueryRequest {
|
|
24
|
+
// Optional start time, inclusive
|
|
25
|
+
uint64 start_time_ns = 1;
|
|
26
|
+
|
|
27
|
+
// Optional end time, exclusive
|
|
28
|
+
uint64 end_time_ns = 2;
|
|
29
|
+
|
|
30
|
+
// Optional time since current time, in milliseconds
|
|
31
|
+
// Will ignore the start and end time
|
|
32
|
+
uint64 since_ms = 3;
|
|
33
|
+
|
|
34
|
+
// Optional minimum level, defaults to INFO
|
|
35
|
+
LogLevel min_level = 4;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
message LogQueryResponse {
|
|
39
|
+
repeated LogEntry entries = 1;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
message TailLogsRequest {
|
|
43
|
+
LogLevel min_level = 1;
|
|
44
|
+
}
|
|
@@ -3,25 +3,27 @@ syntax = "proto3";
|
|
|
3
3
|
package synapse;
|
|
4
4
|
|
|
5
5
|
import "api/datatype.proto";
|
|
6
|
-
import "api/nodes/
|
|
6
|
+
import "api/nodes/broadband_source.proto";
|
|
7
7
|
import "api/nodes/electrical_stimulation.proto";
|
|
8
|
-
import "api/nodes/optical_broadband.proto";
|
|
9
8
|
import "api/nodes/optical_stimulation.proto";
|
|
10
9
|
import "api/nodes/spike_detect.proto";
|
|
11
10
|
import "api/nodes/spectral_filter.proto";
|
|
12
11
|
import "api/nodes/stream_out.proto";
|
|
13
12
|
import "api/nodes/stream_in.proto";
|
|
13
|
+
import "api/nodes/disk_writer.proto";
|
|
14
|
+
import "api/nodes/spike_source.proto";
|
|
14
15
|
|
|
15
16
|
enum NodeType {
|
|
16
17
|
kNodeTypeUnknown = 0;
|
|
17
18
|
kStreamIn = 1;
|
|
18
19
|
kStreamOut = 2;
|
|
19
|
-
|
|
20
|
+
kBroadbandSource = 3;
|
|
20
21
|
kElectricalStimulation = 4;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
kOpticalStimulation = 5;
|
|
23
|
+
kSpikeDetect = 6;
|
|
24
|
+
kSpikeSource = 7;
|
|
24
25
|
kSpectralFilter = 8;
|
|
26
|
+
kDiskWriter = 9;
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
message NodeConfig {
|
|
@@ -30,12 +32,24 @@ message NodeConfig {
|
|
|
30
32
|
oneof config {
|
|
31
33
|
StreamOutConfig stream_out = 3;
|
|
32
34
|
StreamInConfig stream_in = 4;
|
|
33
|
-
|
|
35
|
+
BroadbandSourceConfig broadband_source = 5;
|
|
34
36
|
ElectricalStimulationConfig electrical_stimulation = 6;
|
|
35
|
-
OpticalBroadbandConfig optical_broadband = 7;
|
|
36
37
|
OpticalStimulationConfig optical_stimulation = 8;
|
|
37
38
|
SpikeDetectConfig spike_detect = 9;
|
|
38
39
|
SpectralFilterConfig spectral_filter = 10;
|
|
40
|
+
DiskWriterConfig disk_writer = 11;
|
|
41
|
+
SpikeSourceConfig spike_source = 12;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
message NodeStatus {
|
|
46
|
+
NodeType type = 1;
|
|
47
|
+
uint32 id = 2;
|
|
48
|
+
oneof status {
|
|
49
|
+
StreamOutStatus stream_out = 3;
|
|
50
|
+
BroadbandSourceStatus broadband_source = 4;
|
|
51
|
+
StreamInStatus stream_in = 5;
|
|
52
|
+
ElectricalStimulationStatus electrical_stimulation = 6;
|
|
39
53
|
}
|
|
40
54
|
}
|
|
41
55
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
import "api/nodes/signal_config.proto";
|
|
4
|
+
import "api/nodes/signal_status.proto";
|
|
5
|
+
|
|
6
|
+
package synapse;
|
|
7
|
+
|
|
8
|
+
message BroadbandSourceConfig {
|
|
9
|
+
uint32 peripheral_id = 1;
|
|
10
|
+
uint32 bit_width = 2;
|
|
11
|
+
uint32 sample_rate_hz = 3;
|
|
12
|
+
float gain = 4;
|
|
13
|
+
|
|
14
|
+
// Implementation specific configurations
|
|
15
|
+
SignalConfig signal = 5;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
message BroadbandSourceStatus {
|
|
19
|
+
SignalStatus status = 1;
|
|
20
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
import "api/channel.proto";
|
|
4
|
+
|
|
5
|
+
package synapse;
|
|
6
|
+
|
|
7
|
+
message ElectrodeConfig {
|
|
8
|
+
repeated Channel channels = 1;
|
|
9
|
+
float low_cutoff_hz = 2;
|
|
10
|
+
float high_cutoff_hz = 3;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
message PixelConfig {
|
|
14
|
+
repeated uint32 pixel_mask = 1;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
message SignalConfig {
|
|
18
|
+
oneof signal_type {
|
|
19
|
+
ElectrodeConfig electrode = 1;
|
|
20
|
+
PixelConfig pixel = 2;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package synapse;
|
|
4
|
+
|
|
5
|
+
message ElectrodeStatus {
|
|
6
|
+
float lsb_uV = 1;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
message PixelStatus {
|
|
10
|
+
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
message SignalStatus {
|
|
14
|
+
oneof signal_type {
|
|
15
|
+
ElectrodeStatus electrode = 1;
|
|
16
|
+
PixelStatus pixel = 2;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
import "api/nodes/signal_config.proto";
|
|
4
|
+
|
|
5
|
+
package synapse;
|
|
6
|
+
|
|
7
|
+
message SpikeSourceConfig {
|
|
8
|
+
uint32 peripheral_id = 1;
|
|
9
|
+
uint32 sample_rate_hz = 2;
|
|
10
|
+
float spike_window_ms = 3;
|
|
11
|
+
float gain = 4;
|
|
12
|
+
float threshold_uV = 5;
|
|
13
|
+
|
|
14
|
+
ElectrodeConfig electrodes = 6;
|
|
15
|
+
}
|
|
@@ -14,6 +14,10 @@ message ImpedanceQuery {
|
|
|
14
14
|
repeated uint32 electrode_ids = 1;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
message SelfTestQuery {
|
|
18
|
+
uint32 peripheral_id = 1;
|
|
19
|
+
}
|
|
20
|
+
|
|
17
21
|
message ImpedanceMeasurement {
|
|
18
22
|
uint32 electrode_id = 1;
|
|
19
23
|
float magnitude = 2;
|
|
@@ -24,16 +28,30 @@ message ImpedanceResponse {
|
|
|
24
28
|
repeated ImpedanceMeasurement measurements = 1;
|
|
25
29
|
}
|
|
26
30
|
|
|
31
|
+
message SelfTestItem {
|
|
32
|
+
string test_name = 1;
|
|
33
|
+
bool passed = 2;
|
|
34
|
+
repeated uint32 test_data = 3;
|
|
35
|
+
string test_report = 4;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
message SelfTestResponse {
|
|
39
|
+
bool all_passed = 1;
|
|
40
|
+
repeated SelfTestItem tests = 2;
|
|
41
|
+
}
|
|
42
|
+
|
|
27
43
|
message QueryRequest {
|
|
28
44
|
enum QueryType {
|
|
29
45
|
kNone = 0;
|
|
30
46
|
kImpedance = 1;
|
|
31
47
|
kSample = 2;
|
|
48
|
+
kSelfTest = 3;
|
|
32
49
|
}
|
|
33
50
|
QueryType query_type = 1;
|
|
34
51
|
oneof query {
|
|
35
52
|
ImpedanceQuery impedance_query = 2;
|
|
36
53
|
SampleQuery sample_query = 3;
|
|
54
|
+
SelfTestQuery self_test_query = 4;
|
|
37
55
|
}
|
|
38
56
|
}
|
|
39
57
|
|
|
@@ -42,5 +60,6 @@ message QueryResponse {
|
|
|
42
60
|
repeated uint32 data = 2;
|
|
43
61
|
oneof response {
|
|
44
62
|
ImpedanceResponse impedance_response = 3;
|
|
63
|
+
SelfTestResponse self_test_response = 4;
|
|
45
64
|
}
|
|
46
65
|
}
|
|
@@ -12,6 +12,7 @@ enum StatusCode {
|
|
|
12
12
|
kUnimplemented = 4;
|
|
13
13
|
kInternalError = 5;
|
|
14
14
|
kPermissionDenied = 6;
|
|
15
|
+
kQueryFailed = 7;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
enum DeviceState {
|
|
@@ -32,6 +33,10 @@ message DevicePower {
|
|
|
32
33
|
bool is_charging = 2;
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
message SignalChainStatus {
|
|
37
|
+
repeated NodeStatus nodes = 1;
|
|
38
|
+
}
|
|
39
|
+
|
|
35
40
|
message Status {
|
|
36
41
|
string message = 1;
|
|
37
42
|
StatusCode code = 2;
|
|
@@ -39,4 +44,5 @@ message Status {
|
|
|
39
44
|
repeated NodeSocket sockets = 4;
|
|
40
45
|
DevicePower power = 5;
|
|
41
46
|
DeviceStorage storage = 6;
|
|
47
|
+
SignalChainStatus signal_chain = 7;
|
|
42
48
|
}
|
|
@@ -7,19 +7,21 @@ import "api/node.proto";
|
|
|
7
7
|
import "api/query.proto";
|
|
8
8
|
import "api/status.proto";
|
|
9
9
|
import "api/files.proto";
|
|
10
|
+
import "api/logging.proto";
|
|
10
11
|
|
|
11
12
|
message Peripheral {
|
|
12
13
|
enum Type {
|
|
13
14
|
kUnknown = 0;
|
|
14
|
-
|
|
15
|
+
kBroadbandSource = 1;
|
|
15
16
|
kElectricalStimulation = 2;
|
|
16
17
|
kOpticalStimulation = 3;
|
|
17
|
-
|
|
18
|
+
kSpikeSource = 4;
|
|
18
19
|
}
|
|
19
20
|
string name = 1;
|
|
20
21
|
string vendor = 2;
|
|
21
22
|
uint32 peripheral_id = 3;
|
|
22
23
|
Type type = 4;
|
|
24
|
+
string address = 5;
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
message DeviceInfo {
|
|
@@ -48,4 +50,6 @@ service SynapseDevice {
|
|
|
48
50
|
rpc WriteFile(WriteFileRequest) returns (WriteFileResponse) {}
|
|
49
51
|
rpc ReadFile(ReadFileRequest) returns (stream ReadFileResponse) {}
|
|
50
52
|
rpc DeleteFile(DeleteFileRequest) returns (DeleteFileResponse) {}
|
|
53
|
+
rpc GetLogs(LogQueryRequest) returns (LogQueryResponse) {}
|
|
54
|
+
rpc TailLogs(TailLogsRequest) returns (stream LogEntry) {}
|
|
51
55
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
# Check if protoc is installed
|
|
4
|
+
if ! command -v protoc &> /dev/null
|
|
5
|
+
then
|
|
6
|
+
echo "protoc could not be found. Please install it to proceed."
|
|
7
|
+
exit 1
|
|
8
|
+
fi
|
|
9
|
+
|
|
10
|
+
mkdir -p /tmp/proto_compiled
|
|
11
|
+
|
|
12
|
+
PROTO_FILES=$(find . -name "*.proto")
|
|
13
|
+
echo "Compiling proto files: $PROTO_FILES"
|
|
14
|
+
|
|
15
|
+
protoc --proto_path=. $PROTO_FILES --cpp_out=/tmp/proto_compiled --fatal_warnings
|
|
16
|
+
|
|
17
|
+
echo "Protobuf compilation completed."
|
package/dist/channel_mask.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"channel_mask.d.ts","sourceRoot":"","sources":["../src/channel_mask.ts"],"names":[],"mappings":"AAAA,cAAM,WAAW;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;gBAEH,IAAI,EAAE,MAAM,EAAE;IAIzB,YAAY;CAKd;AAED,eAAe,WAAW,CAAC"}
|
package/dist/channel_mask.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class ChannelMask {
|
|
4
|
-
constructor(mask) {
|
|
5
|
-
this.mask = mask;
|
|
6
|
-
}
|
|
7
|
-
*iterChannels() {
|
|
8
|
-
for (let i = 0; i < this.mask.length; i++) {
|
|
9
|
-
yield this.mask[i];
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.default = ChannelMask;
|
|
14
|
-
//# sourceMappingURL=channel_mask.js.map
|
package/dist/channel_mask.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"channel_mask.js","sourceRoot":"","sources":["../src/channel_mask.ts"],"names":[],"mappings":";;AAAA,MAAM,WAAW;IAGf,YAAY,IAAc;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,CAAC,YAAY;QACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAED,kBAAe,WAAW,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { synapse } from "../api/api";
|
|
2
|
-
import Node from "../node";
|
|
3
|
-
declare class ElectricalBroadband extends Node {
|
|
4
|
-
type: synapse.NodeType;
|
|
5
|
-
config: synapse.IElectricalBroadbandConfig;
|
|
6
|
-
constructor(config?: synapse.IElectricalBroadbandConfig);
|
|
7
|
-
toProto(): synapse.NodeConfig;
|
|
8
|
-
static fromProto(proto: synapse.NodeConfig): ElectricalBroadband;
|
|
9
|
-
}
|
|
10
|
-
export default ElectricalBroadband;
|
|
11
|
-
//# sourceMappingURL=electrical_broadband.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"electrical_broadband.d.ts","sourceRoot":"","sources":["../../src/nodes/electrical_broadband.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,cAAM,mBAAoB,SAAQ,IAAI;IACpC,IAAI,mBAAyC;IAC7C,MAAM,EAAE,OAAO,CAAC,0BAA0B,CAAC;gBAE/B,MAAM,GAAE,OAAO,CAAC,0BAA+B;IAM3D,OAAO,IAAI,OAAO,CAAC,UAAU;IAM7B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,GAAG,mBAAmB;CAQjE;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"electrical_broadband.js","sourceRoot":"","sources":["../../src/nodes/electrical_broadband.ts"],"names":[],"mappings":";;;;;AAAA,oCAAqC;AACrC,mDAA2B;AAE3B,MAAM,mBAAoB,SAAQ,cAAI;IAIpC,YAAY,SAA6C,EAAE;QACzD,KAAK,EAAE,CAAC;QAJV,SAAI,GAAG,aAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAM3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,mBAAmB,EAAE,IAAI,CAAC,MAAM;SACjC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAyB;QACxC,MAAM,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,IAAI,mBAAmB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC5D,CAAC;CACF;AAED,kBAAe,mBAAmB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { synapse } from "../api/api";
|
|
2
|
-
import Node from "../node";
|
|
3
|
-
declare class OpticalBroadband extends Node {
|
|
4
|
-
type: synapse.NodeType;
|
|
5
|
-
config: synapse.IOpticalBroadbandConfig;
|
|
6
|
-
constructor(config?: synapse.IOpticalBroadbandConfig);
|
|
7
|
-
toProto(): synapse.NodeConfig;
|
|
8
|
-
static fromProto(proto: synapse.INodeConfig): OpticalBroadband;
|
|
9
|
-
}
|
|
10
|
-
export default OpticalBroadband;
|
|
11
|
-
//# sourceMappingURL=optical_broadband.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"optical_broadband.d.ts","sourceRoot":"","sources":["../../src/nodes/optical_broadband.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,cAAM,gBAAiB,SAAQ,IAAI;IACjC,IAAI,mBAAsC;IAC1C,MAAM,EAAE,OAAO,CAAC,uBAAuB,CAAC;gBAE5B,MAAM,GAAE,OAAO,CAAC,uBAA4B;IAMxD,OAAO,IAAI,OAAO,CAAC,UAAU;IAM7B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,GAAG,gBAAgB;CAQ/D;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"optical_broadband.js","sourceRoot":"","sources":["../../src/nodes/optical_broadband.ts"],"names":[],"mappings":";;;;;AAAA,oCAAqC;AACrC,mDAA2B;AAE3B,MAAM,gBAAiB,SAAQ,cAAI;IAIjC,YAAY,SAA0C,EAAE;QACtD,KAAK,EAAE,CAAC;QAJV,SAAI,GAAG,aAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAMxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,gBAAgB,EAAE,IAAI,CAAC,MAAM;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAA0B;QACzC,MAAM,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC;CACF;AAED,kBAAe,gBAAgB,CAAC"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { synapse } from "../api/api";
|
|
2
|
-
import Node from "../node";
|
|
3
|
-
|
|
4
|
-
class ElectricalBroadband extends Node {
|
|
5
|
-
type = synapse.NodeType.kElectricalBroadband;
|
|
6
|
-
config: synapse.IElectricalBroadbandConfig;
|
|
7
|
-
|
|
8
|
-
constructor(config: synapse.IElectricalBroadbandConfig = {}) {
|
|
9
|
-
super();
|
|
10
|
-
|
|
11
|
-
this.config = config;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
toProto(): synapse.NodeConfig {
|
|
15
|
-
return super.toProto({
|
|
16
|
-
electricalBroadband: this.config,
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
static fromProto(proto: synapse.NodeConfig): ElectricalBroadband {
|
|
21
|
-
const { electricalBroadband } = proto;
|
|
22
|
-
if (!electricalBroadband) {
|
|
23
|
-
throw new Error("Invalid config, missing electricalBroadband");
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return new ElectricalBroadband(proto.electricalBroadband);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export default ElectricalBroadband;
|