@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.
Files changed (138) hide show
  1. package/README.md +40 -18
  2. package/dist/api/api.d.ts +3881 -1739
  3. package/dist/api/api.js +10023 -5111
  4. package/dist/api/api.js.map +1 -1
  5. package/dist/api/proto.json +370 -63
  6. package/dist/api-science-device/api.d.ts +3 -0
  7. package/dist/api-science-device/api.d.ts.map +1 -0
  8. package/dist/api-science-device/api.js +3822 -0
  9. package/dist/api-science-device/api.js.map +1 -0
  10. package/dist/api-science-device/proto.json +258 -0
  11. package/dist/browser.d.ts +4 -0
  12. package/dist/browser.d.ts.map +1 -0
  13. package/dist/browser.js +22 -0
  14. package/dist/browser.js.map +1 -0
  15. package/dist/config.d.ts +5 -4
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +25 -17
  18. package/dist/config.js.map +1 -1
  19. package/dist/demo.js +42 -38
  20. package/dist/demo.js.map +1 -1
  21. package/dist/device.d.ts +20 -5
  22. package/dist/device.d.ts.map +1 -1
  23. package/dist/device.js +75 -27
  24. package/dist/device.js.map +1 -1
  25. package/dist/index.d.ts +3 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +5 -3
  28. package/dist/index.js.map +1 -1
  29. package/dist/nodejs.d.ts +8 -0
  30. package/dist/nodejs.d.ts.map +1 -0
  31. package/dist/nodejs.js +32 -0
  32. package/dist/nodejs.js.map +1 -0
  33. package/dist/nodes/broadband_source.d.ts +11 -0
  34. package/dist/nodes/broadband_source.d.ts.map +1 -0
  35. package/dist/nodes/{optical_broadband.js → broadband_source.js} +9 -9
  36. package/dist/nodes/broadband_source.js.map +1 -0
  37. package/dist/nodes/index.d.ts +3 -2
  38. package/dist/nodes/index.d.ts.map +1 -1
  39. package/dist/nodes/index.js +5 -5
  40. package/dist/nodes/index.js.map +1 -1
  41. package/dist/nodes/spike_source.d.ts +11 -0
  42. package/dist/nodes/spike_source.d.ts.map +1 -0
  43. package/dist/nodes/{electrical_broadband.js → spike_source.js} +9 -9
  44. package/dist/nodes/spike_source.js.map +1 -0
  45. package/dist/nodes/stream_in.d.ts +0 -4
  46. package/dist/nodes/stream_in.d.ts.map +1 -1
  47. package/dist/nodes/stream_in.js +1 -1
  48. package/dist/nodes/stream_in.js.map +1 -1
  49. package/dist/nodes/stream_out.d.ts +2 -2
  50. package/dist/nodes/stream_out.d.ts.map +1 -1
  51. package/dist/nodes/stream_out.js +2 -2
  52. package/dist/nodes/stream_out.js.map +1 -1
  53. package/dist/science-device-api/api.d.ts +3 -0
  54. package/dist/science-device-api/api.d.ts.map +1 -0
  55. package/dist/science-device-api/api.js +3822 -0
  56. package/dist/science-device-api/api.js.map +1 -0
  57. package/dist/types/index.d.ts +3 -0
  58. package/dist/types/index.d.ts.map +1 -0
  59. package/dist/types/index.js +19 -0
  60. package/dist/types/index.js.map +1 -0
  61. package/dist/types.d.ts +5 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +19 -0
  64. package/dist/types.js.map +1 -0
  65. package/dist/utils/client.d.ts +8 -1
  66. package/dist/utils/client.d.ts.map +1 -1
  67. package/dist/utils/client.js +30 -16
  68. package/dist/utils/client.js.map +1 -1
  69. package/dist/utils/device-management.d.ts +37 -0
  70. package/dist/utils/device-management.d.ts.map +1 -0
  71. package/dist/utils/device-management.js +126 -0
  72. package/dist/utils/device-management.js.map +1 -0
  73. package/dist/utils/discover.d.ts +3 -8
  74. package/dist/utils/discover.d.ts.map +1 -1
  75. package/dist/utils/discover.js +17 -32
  76. package/dist/utils/discover.js.map +1 -1
  77. package/dist/utils/enum.d.ts +1 -1
  78. package/dist/utils/enum.d.ts.map +1 -1
  79. package/dist/utils/enum.js.map +1 -1
  80. package/dist/utils/index.d.ts +1 -1
  81. package/dist/utils/index.d.ts.map +1 -1
  82. package/dist/utils/index.js +3 -0
  83. package/dist/utils/index.js.map +1 -1
  84. package/dist/utils/status.d.ts +28 -0
  85. package/dist/utils/status.d.ts.map +1 -0
  86. package/dist/utils/status.js +54 -0
  87. package/dist/utils/status.js.map +1 -0
  88. package/package.json +35 -9
  89. package/scripts/postinstall.sh +95 -0
  90. package/src/api/api.d.ts +3881 -1739
  91. package/src/api/api.js +10524 -5282
  92. package/src/api/proto.json +370 -63
  93. package/src/browser.ts +4 -0
  94. package/src/config.ts +31 -20
  95. package/src/demo.ts +43 -33
  96. package/src/device.ts +84 -30
  97. package/src/index.ts +4 -1
  98. package/src/nodes/broadband_source.ts +30 -0
  99. package/src/nodes/index.ts +4 -2
  100. package/src/nodes/spike_source.ts +30 -0
  101. package/src/nodes/stream_in.ts +1 -6
  102. package/src/nodes/stream_out.ts +4 -4
  103. package/src/utils/client.ts +38 -13
  104. package/src/utils/discover.ts +25 -45
  105. package/src/utils/enum.ts +1 -1
  106. package/src/utils/index.ts +1 -1
  107. package/src/utils/status.ts +57 -0
  108. package/synapse-api/.github/workflows/proto-check.yaml +33 -0
  109. package/synapse-api/COPYRIGHT +1 -0
  110. package/synapse-api/README.md +1 -1
  111. package/synapse-api/api/logging.proto +44 -0
  112. package/synapse-api/api/node.proto +22 -8
  113. package/synapse-api/api/nodes/broadband_source.proto +20 -0
  114. package/synapse-api/api/nodes/disk_writer.proto +7 -0
  115. package/synapse-api/api/nodes/electrical_stimulation.proto +4 -0
  116. package/synapse-api/api/nodes/signal_config.proto +22 -0
  117. package/synapse-api/api/nodes/signal_status.proto +18 -0
  118. package/synapse-api/api/nodes/spike_source.proto +15 -0
  119. package/synapse-api/api/nodes/stream_in.proto +5 -0
  120. package/synapse-api/api/nodes/stream_out.proto +4 -0
  121. package/synapse-api/api/query.proto +19 -0
  122. package/synapse-api/api/status.proto +6 -0
  123. package/synapse-api/api/synapse.proto +6 -2
  124. package/synapse-api/build.sh +17 -0
  125. package/dist/channel_mask.d.ts +0 -7
  126. package/dist/channel_mask.d.ts.map +0 -1
  127. package/dist/channel_mask.js +0 -14
  128. package/dist/channel_mask.js.map +0 -1
  129. package/dist/nodes/electrical_broadband.d.ts +0 -11
  130. package/dist/nodes/electrical_broadband.d.ts.map +0 -1
  131. package/dist/nodes/electrical_broadband.js.map +0 -1
  132. package/dist/nodes/optical_broadband.d.ts +0 -11
  133. package/dist/nodes/optical_broadband.d.ts.map +0 -1
  134. package/dist/nodes/optical_broadband.js.map +0 -1
  135. package/src/nodes/electrical_broadband.ts +0 -30
  136. package/src/nodes/optical_broadband.ts +0 -30
  137. package/synapse-api/api/nodes/electrical_broadband.proto +0 -15
  138. package/synapse-api/api/nodes/optical_broadband.proto +0 -11
@@ -1,82 +1,62 @@
1
1
  import dgram from "dgram";
2
2
 
3
- const kDefaultTimeout = 3000;
3
+ const BROADCAST_PORT = 6470;
4
4
 
5
- interface DiscoverArgs {
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 kDefaultDiscoverArgs: DiscoverArgs = {
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: DeviceAdvertisement[] = [];
15
+ const devices: DeviceInfo[] = [];
16
+ const socket = dgram.createSocket({ type: "udp4", reuseAddr: true });
28
17
 
29
- const socket = dgram.createSocket("udp4");
18
+ socket.bind(BROADCAST_PORT);
30
19
 
31
- socket.on("message", (msg: Buffer, rinfo: any) => {
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 < 5) {
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 host = rinfo.address;
45
- const [_, serial, capability, portstr, name] = split;
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 service = capability.split(/(\d+)/)[0];
52
- if (service !== "SYN") {
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
- socket.send(payload, 0, payload.length, args.port, args.host, () => {
68
- if (!args.timeoutMs) {
69
- return;
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: any) => {
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
@@ -1,4 +1,4 @@
1
- export const getName = (enumType: any, value: number | string): string => {
1
+ export const getName = (enumType: object, value: number | string): string => {
2
2
  for (const key in enumType) {
3
3
  if (enumType[key] === value) {
4
4
  return key;
@@ -1 +1 @@
1
- import { discover } from "./discover";
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.
@@ -1,4 +1,4 @@
1
- # Synapse API 1.0
1
+ # Synapse API 1.1
2
2
 
3
3
  The Synapse Protocol defines a standard interface for interacting with a wide range of possible neural interface devices.
4
4
 
@@ -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/electrical_broadband.proto";
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
- kElectricalBroadband = 3;
20
+ kBroadbandSource = 3;
20
21
  kElectricalStimulation = 4;
21
- kOpticalBroadband = 5;
22
- kOpticalStimulation = 6;
23
- kSpikeDetect = 7;
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
- ElectricalBroadbandConfig electrical_broadband = 5;
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,7 @@
1
+ syntax = "proto3";
2
+
3
+ package synapse;
4
+
5
+ message DiskWriterConfig {
6
+ string filename = 1;
7
+ }
@@ -11,3 +11,7 @@ message ElectricalStimulationConfig {
11
11
  uint32 sample_rate = 4;
12
12
  uint32 lsb = 5;
13
13
  }
14
+
15
+ message ElectricalStimulationStatus {
16
+ float lsb_uV = 1;
17
+ }
@@ -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
+ }
@@ -6,4 +6,9 @@ package synapse;
6
6
 
7
7
  message StreamInConfig {
8
8
  DataType data_type = 1;
9
+ repeated uint32 shape = 2;
9
10
  }
11
+
12
+ message StreamInStatus {
13
+ float throughput_mbps = 1;
14
+ }
@@ -6,3 +6,7 @@ message StreamOutConfig {
6
6
  string label = 1;
7
7
  string multicast_group = 2;
8
8
  }
9
+
10
+ message StreamOutStatus {
11
+ float throughput_mbps = 1;
12
+ }
@@ -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
- kElectricalRecord = 1;
15
+ kBroadbandSource = 1;
15
16
  kElectricalStimulation = 2;
16
17
  kOpticalStimulation = 3;
17
- kOpticalRecord = 4;
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."
@@ -1,7 +0,0 @@
1
- declare class ChannelMask {
2
- mask: number[];
3
- constructor(mask: number[]);
4
- iterChannels(): Generator<number, void, unknown>;
5
- }
6
- export default ChannelMask;
7
- //# sourceMappingURL=channel_mask.d.ts.map
@@ -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"}
@@ -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
@@ -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;