@jtarrio/signals 0.9.0 → 0.9.2

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 (59) hide show
  1. package/README.md +5 -5
  2. package/dist/demod/empty-demodulator.d.ts +2 -1
  3. package/dist/demod/empty-demodulator.d.ts.map +1 -1
  4. package/dist/demod/empty-demodulator.js +3 -3
  5. package/dist/demod/empty-demodulator.js.map +1 -1
  6. package/dist/demod/sample-counter.d.ts +2 -1
  7. package/dist/demod/sample-counter.d.ts.map +1 -1
  8. package/dist/demod/sample-counter.js +2 -2
  9. package/dist/demod/sample-counter.js.map +1 -1
  10. package/dist/demod/spectrum.d.ts +2 -1
  11. package/dist/demod/spectrum.d.ts.map +1 -1
  12. package/dist/demod/spectrum.js +4 -4
  13. package/dist/demod/spectrum.js.map +1 -1
  14. package/dist/dsp/filters.d.ts +1 -0
  15. package/dist/dsp/filters.d.ts.map +1 -1
  16. package/dist/dsp/filters.js +6 -3
  17. package/dist/dsp/filters.js.map +1 -1
  18. package/dist/radio/radio.d.ts +13 -14
  19. package/dist/radio/radio.d.ts.map +1 -1
  20. package/dist/radio/radio.js +70 -81
  21. package/dist/radio/radio.js.map +1 -1
  22. package/dist/radio/sample_block.d.ts +18 -0
  23. package/dist/radio/sample_block.d.ts.map +1 -0
  24. package/dist/radio/sample_block.js +15 -0
  25. package/dist/radio/sample_block.js.map +1 -0
  26. package/dist/radio/sample_receiver.d.ts +3 -2
  27. package/dist/radio/sample_receiver.d.ts.map +1 -1
  28. package/dist/radio/sample_receiver.js +2 -2
  29. package/dist/radio/sample_receiver.js.map +1 -1
  30. package/dist/radio/signal_source.d.ts +5 -18
  31. package/dist/radio/signal_source.d.ts.map +1 -1
  32. package/dist/radio/single_thread.d.ts +18 -0
  33. package/dist/radio/single_thread.d.ts.map +1 -0
  34. package/dist/radio/single_thread.js +23 -0
  35. package/dist/radio/single_thread.js.map +1 -0
  36. package/dist/radio.d.ts +1 -0
  37. package/dist/radio.d.ts.map +1 -1
  38. package/dist/radio.js +1 -0
  39. package/dist/radio.js.map +1 -1
  40. package/dist/sources/generated.d.ts +17 -0
  41. package/dist/sources/generated.d.ts.map +1 -0
  42. package/dist/sources/generated.js +26 -0
  43. package/dist/sources/generated.js.map +1 -0
  44. package/dist/sources/generators.d.ts +1 -1
  45. package/dist/sources/generators.d.ts.map +1 -1
  46. package/dist/sources/push.d.ts +2 -1
  47. package/dist/sources/push.d.ts.map +1 -1
  48. package/dist/sources/push.js.map +1 -1
  49. package/dist/sources/read_ring.d.ts +1 -1
  50. package/dist/sources/read_ring.d.ts.map +1 -1
  51. package/dist/sources/realtime.d.ts +14 -18
  52. package/dist/sources/realtime.d.ts.map +1 -1
  53. package/dist/sources/realtime.js +14 -8
  54. package/dist/sources/realtime.js.map +1 -1
  55. package/package.json +1 -1
  56. package/dist/radio/msgqueue.d.ts +0 -32
  57. package/dist/radio/msgqueue.d.ts.map +0 -1
  58. package/dist/radio/msgqueue.js +0 -62
  59. package/dist/radio/msgqueue.js.map +0 -1
@@ -12,11 +12,11 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
  /**
15
- * State machine to orchestrate the sample source, the demodulation process,
16
- * and the sample receiver, as a "radio" that can be started and stopped.
15
+ * A class to orchestrate the sample source, the demodulation process,
16
+ * and the sample receiver, as a "radio" that can be started and stopped at will.
17
17
  */
18
18
  import { RadioError, RadioErrorType } from "../errors.js";
19
- import { Channel } from "./msgqueue.js";
19
+ import { SingleThread } from "./single_thread.js";
20
20
  /** The type of 'radio' events. */
21
21
  export class RadioEvent extends CustomEvent {
22
22
  constructor(e) {
@@ -54,9 +54,8 @@ export class Radio extends EventTarget {
54
54
  this.sampleRate = 1024000;
55
55
  this.state = State.OFF;
56
56
  this.frequency = 88500000;
57
- this.channel = new Channel();
58
57
  this.parameterValues = new Map();
59
- this.runLoop();
58
+ this.singleThread = new SingleThread();
60
59
  }
61
60
  /** Current sample rate. */
62
61
  sampleRate;
@@ -64,17 +63,40 @@ export class Radio extends EventTarget {
64
63
  state;
65
64
  /** Currently tuned frequency. */
66
65
  frequency;
67
- /** Channel to send messages to the state machine. */
68
- channel;
69
66
  /** Current values of the properties. */
70
67
  parameterValues;
68
+ /** Single thread to execute async functions. */
69
+ singleThread;
70
+ /** Handler for in-flight data transfers. */
71
+ transfers;
72
+ /** Current signal source. */
73
+ source;
71
74
  /**
72
75
  * Starts playing the radio.
73
76
  *
74
77
  * @returns a promise that resolves after the command has been processed by the radio.
75
78
  */
76
79
  async start() {
77
- return this.channel.send({ type: "start" });
80
+ return this.singleThread.run(async () => {
81
+ if (this.state != State.OFF)
82
+ return;
83
+ try {
84
+ this.source = await this.sourceProvider.get();
85
+ this.sampleRate = await this.source.setSampleRate(this.sampleRate);
86
+ this.frequency = await this.source.setCenterFrequency(this.frequency);
87
+ for (let [name, value] of this.parameterValues.entries()) {
88
+ await this.source.setParameter(name, value);
89
+ }
90
+ await this.source.startReceiving();
91
+ this.transfers = new Transfers(this.source, this.sampleReceiver, this, this.sampleRate, this.options);
92
+ this.transfers.startStream();
93
+ this.state = State.PLAYING;
94
+ this.dispatchEvent(new RadioEvent({ type: "started" }));
95
+ }
96
+ catch (e) {
97
+ this.dispatchEvent(new RadioEvent({ type: "error", exception: e }));
98
+ }
99
+ });
78
100
  }
79
101
  /**
80
102
  * Stops playing the radio.
@@ -82,7 +104,19 @@ export class Radio extends EventTarget {
82
104
  * @returns a promise that resolves after the command has been processed by the radio.
83
105
  */
84
106
  async stop() {
85
- return this.channel.send({ type: "stop" });
107
+ return this.singleThread.run(async () => {
108
+ if (this.state != State.PLAYING)
109
+ return;
110
+ try {
111
+ await this.transfers.stopStream();
112
+ await this.source.close();
113
+ this.state = State.OFF;
114
+ this.dispatchEvent(new RadioEvent({ type: "stopped" }));
115
+ }
116
+ catch (e) {
117
+ this.dispatchEvent(new RadioEvent({ type: "error", exception: e }));
118
+ }
119
+ });
86
120
  }
87
121
  /** Returns whether the radio is playing (or scanning). */
88
122
  isPlaying() {
@@ -94,7 +128,19 @@ export class Radio extends EventTarget {
94
128
  * @returns a promise that resolves after the command has been processed by the radio.
95
129
  */
96
130
  async setFrequency(freq) {
97
- return this.channel.send({ type: "frequency", value: freq });
131
+ return this.singleThread.run(async () => {
132
+ if (this.state == State.OFF) {
133
+ this.frequency = freq;
134
+ }
135
+ else if (this.frequency != freq) {
136
+ try {
137
+ this.frequency = await this.source.setCenterFrequency(freq);
138
+ }
139
+ catch (e) {
140
+ this.dispatchEvent(new RadioEvent({ type: "error", exception: e }));
141
+ }
142
+ }
143
+ });
98
144
  }
99
145
  /** Returns the tuned frequency. */
100
146
  getFrequency() {
@@ -106,7 +152,7 @@ export class Radio extends EventTarget {
106
152
  * @returns a promise that resolves after the command has been processed by the radio.
107
153
  */
108
154
  async setSampleRate(sampleRate) {
109
- return (this.sampleRate = sampleRate);
155
+ this.sampleRate = sampleRate;
110
156
  }
111
157
  /** Returns the current sample rate. */
112
158
  getSampleRate() {
@@ -118,83 +164,26 @@ export class Radio extends EventTarget {
118
164
  * @returns a promise that resolves after the command has been processed by the radio.
119
165
  */
120
166
  async setParameter(parameter, value) {
121
- return this.channel.send({
122
- type: "parameter",
123
- name: parameter,
124
- value: value,
167
+ return this.singleThread.run(async () => {
168
+ if (this.state == State.OFF) {
169
+ this.parameterValues.set(parameter, value);
170
+ }
171
+ else {
172
+ try {
173
+ this.parameterValues.set(parameter, await this.source.setParameter(parameter, value));
174
+ }
175
+ catch (e) {
176
+ this.dispatchEvent(new RadioEvent({ type: "error", exception: e }));
177
+ }
178
+ }
125
179
  });
126
180
  }
127
181
  /** Returns the value of a parameter. */
128
182
  getParameter(parameter) {
129
183
  return this.parameterValues.get(parameter);
130
184
  }
131
- /**
132
- * Returns a promise that resolves when the radio has processed all commands send to it up to this point.
133
- */
134
- async ready() {
135
- return this.channel.send({ type: "ready" });
136
- }
137
185
  /** Override this function to do something when a sample block is received. */
138
186
  onReceiveSamples(block) { }
139
- /** Runs the state machine. */
140
- async runLoop() {
141
- let transfers;
142
- let source;
143
- while (true) {
144
- let { msg, ack } = await this.channel.receive();
145
- try {
146
- switch (this.state) {
147
- case State.OFF: {
148
- if (msg.type == "frequency")
149
- this.frequency = msg.value;
150
- if (msg.type == "parameter")
151
- this.parameterValues.set(msg.name, msg.value);
152
- if (msg.type != "start")
153
- continue;
154
- source = await this.sourceProvider.get();
155
- this.sampleRate = await source.setSampleRate(this.sampleRate);
156
- this.frequency = await source.setCenterFrequency(this.frequency);
157
- for (let [name, value] of this.parameterValues.entries()) {
158
- await source.setParameter(name, value);
159
- }
160
- await source.startReceiving();
161
- transfers = new Transfers(source, this.sampleReceiver, this, this.sampleRate, this.options);
162
- transfers.startStream();
163
- this.state = State.PLAYING;
164
- this.dispatchEvent(new RadioEvent({ type: "started" }));
165
- break;
166
- }
167
- case State.PLAYING: {
168
- switch (msg.type) {
169
- case "frequency":
170
- if (this.frequency != msg.value) {
171
- this.frequency = await source.setCenterFrequency(msg.value);
172
- }
173
- break;
174
- case "parameter":
175
- this.parameterValues.set(msg.name, await source.setParameter(msg.name, msg.value));
176
- break;
177
- case "stop":
178
- await transfers.stopStream();
179
- await source.close();
180
- this.state = State.OFF;
181
- this.dispatchEvent(new RadioEvent({ type: "stopped" }));
182
- break;
183
- default:
184
- // do nothing.
185
- }
186
- break;
187
- }
188
- }
189
- }
190
- catch (e) {
191
- this.dispatchEvent(new RadioEvent({ type: "error", exception: e }));
192
- }
193
- finally {
194
- ack();
195
- }
196
- }
197
- }
198
187
  addEventListener(type, callback, options) {
199
188
  super.addEventListener(type, callback, options);
200
189
  }
@@ -260,7 +249,7 @@ class Transfers {
260
249
  while (this.buffersRunning <= this.buffersWanted) {
261
250
  const b = await this.source.readSamples(this.samplesPerBuf);
262
251
  this.radio.onReceiveSamples(b);
263
- this.sampleReceiver.receiveSamples(b.I, b.Q, b.frequency, b.data);
252
+ this.sampleReceiver.receiveSamples(b);
264
253
  }
265
254
  }
266
255
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"radio.js","sourceRoot":"","sources":["../../src/radio/radio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"radio.js","sourceRoot":"","sources":["../../src/radio/radio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /** A block of samples returned by SignalSource.readSamples() */
2
+ export type SampleBlock = {
3
+ /**
4
+ * The I components of the samples.
5
+ * Each element of I matches a corresponding element of Q, and I and Q have the same lengths.
6
+ */
7
+ I: Float32Array;
8
+ /**
9
+ * The Q components of the samples.
10
+ * Each element of Q matches a corresponding element of I, and I and Q have the same lengths.
11
+ */
12
+ Q: Float32Array;
13
+ /** The center frequency the source listened on when these samples were captured. */
14
+ frequency: number;
15
+ /** Extra data provided by the source. */
16
+ data?: any;
17
+ };
18
+ //# sourceMappingURL=sample_block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample_block.d.ts","sourceRoot":"","sources":["../../src/radio/sample_block.ts"],"names":[],"mappings":"AAcA,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,CAAC,EAAE,YAAY,CAAC;IAChB;;;OAGG;IACH,CAAC,EAAE,YAAY,CAAC;IAChB,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC"}
@@ -0,0 +1,15 @@
1
+ // Copyright 2024 Jacobo Tarrio Barreiro. All rights reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ export {};
15
+ //# sourceMappingURL=sample_block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample_block.js","sourceRoot":"","sources":["../../src/radio/sample_block.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC"}
@@ -1,9 +1,10 @@
1
+ import { SampleBlock } from "./sample_block.js";
1
2
  /** Interface for classes that get samples from a Radio class. */
2
3
  export interface SampleReceiver {
3
4
  /** Sets the sample rate. */
4
5
  setSampleRate(sampleRate: number): void;
5
6
  /** Receives samples that should be demodulated. */
6
- receiveSamples(I: Float32Array, Q: Float32Array, frequency: number, data?: any): void;
7
+ receiveSamples(block: SampleBlock): void;
7
8
  }
8
9
  /** A "composite" sample receiver that executes its component receivers in sequence. */
9
10
  export declare class CompositeReceiver implements SampleReceiver {
@@ -12,6 +13,6 @@ export declare class CompositeReceiver implements SampleReceiver {
12
13
  static of(first: SampleReceiver, ...rest: SampleReceiver[]): SampleReceiver;
13
14
  private constructor();
14
15
  setSampleRate(sampleRate: number): void;
15
- receiveSamples(I: Float32Array, Q: Float32Array, frequency: number): void;
16
+ receiveSamples(block: SampleBlock): void;
16
17
  }
17
18
  //# sourceMappingURL=sample_receiver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sample_receiver.d.ts","sourceRoot":"","sources":["../../src/radio/sample_receiver.ts"],"names":[],"mappings":"AAcA,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAExC,mDAAmD;IACnD,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CACvF;AAED,uFAAuF;AACvF,qBAAa,iBAAkB,YAAW,cAAc;IAoB3B,SAAS,EAAE,cAAc,EAAE;IAnBtD,oEAAoE;IACpE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,GAAG,cAAc;IAkB3E,OAAO;IAEP,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMvC,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAK1E"}
1
+ {"version":3,"file":"sample_receiver.d.ts","sourceRoot":"","sources":["../../src/radio/sample_receiver.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAExC,mDAAmD;IACnD,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;CAC1C;AAED,uFAAuF;AACvF,qBAAa,iBAAkB,YAAW,cAAc;IAoB3B,SAAS,EAAE,cAAc,EAAE;IAnBtD,oEAAoE;IACpE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,GAAG,cAAc;IAkB3E,OAAO;IAEP,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMvC,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;CAKzC"}
@@ -43,9 +43,9 @@ export class CompositeReceiver {
43
43
  receiver.setSampleRate(sampleRate);
44
44
  }
45
45
  }
46
- receiveSamples(I, Q, frequency) {
46
+ receiveSamples(block) {
47
47
  for (let receiver of this.receivers) {
48
- receiver.receiveSamples(I, Q, frequency);
48
+ receiver.receiveSamples(block);
49
49
  }
50
50
  }
51
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sample_receiver.js","sourceRoot":"","sources":["../../src/radio/sample_receiver.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAWjC,uFAAuF;AACvF,MAAM,OAAO,iBAAiB;IAoBD;IAnB3B,oEAAoE;IACpE,MAAM,CAAC,EAAE,CAAC,KAAqB,EAAE,GAAG,IAAsB;QACxD,IAAI,IAAI,GAAqB,EAAE,CAAC;QAChC,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,YAA2B,SAA2B;QAA3B,cAAS,GAAT,SAAS,CAAkB;IAAG,CAAC;IAE1D,aAAa,CAAC,UAAkB;QAC9B,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,cAAc,CAAC,CAAe,EAAE,CAAe,EAAE,SAAiB;QAChE,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"sample_receiver.js","sourceRoot":"","sources":["../../src/radio/sample_receiver.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAajC,uFAAuF;AACvF,MAAM,OAAO,iBAAiB;IAoBD;IAnB3B,oEAAoE;IACpE,MAAM,CAAC,EAAE,CAAC,KAAqB,EAAE,GAAG,IAAsB;QACxD,IAAI,IAAI,GAAqB,EAAE,CAAC;QAChC,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,YAA2B,SAA2B;QAA3B,cAAS,GAAT,SAAS,CAAkB;IAAG,CAAC;IAE1D,aAAa,CAAC,UAAkB;QAC9B,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,cAAc,CAAC,KAAkB;QAC/B,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;CACF"}
@@ -1,20 +1,4 @@
1
- /** A block of samples returned by SignalSource.readSamples() */
2
- export type SampleBlock = {
3
- /**
4
- * The I components of the samples.
5
- * Each element of I matches a corresponding element of Q, and I and Q have the same lengths.
6
- */
7
- I: Float32Array;
8
- /**
9
- * The Q components of the samples.
10
- * Each element of Q matches a corresponding element of I, and I and Q have the same lengths.
11
- */
12
- Q: Float32Array;
13
- /** The center frequency the source listened on when these samples were captured. */
14
- frequency: number;
15
- /** Extra data. */
16
- data?: any;
17
- };
1
+ import { SampleBlock } from "./sample_block.js";
18
2
  /** Interface for a sample source. */
19
3
  export interface SignalSource<ParameterKey extends string = string> {
20
4
  /**
@@ -28,7 +12,10 @@ export interface SignalSource<ParameterKey extends string = string> {
28
12
  * Returns the actual center frequency, which may differ.
29
13
  */
30
14
  setCenterFrequency(freq: number): Promise<number>;
31
- /** Sets the value of a parameter. */
15
+ /**
16
+ * Sets the value of a parameter.
17
+ * Returns the actual value, or void if the parameter does not exist.
18
+ */
32
19
  setParameter<V>(parameter: ParameterKey, value: V): Promise<V | void>;
33
20
  /**
34
21
  * Prepares the source to start streaming samples.
@@ -1 +1 @@
1
- {"version":3,"file":"signal_source.d.ts","sourceRoot":"","sources":["../../src/radio/signal_source.ts"],"names":[],"mappings":"AAcA,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,CAAC,EAAE,YAAY,CAAC;IAChB;;;OAGG;IACH,CAAC,EAAE,YAAY,CAAC;IAChB,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,qCAAqC;AACrC,MAAM,WAAW,YAAY,CAAC,YAAY,SAAS,MAAM,GAAG,MAAM;IAChE;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,qCAAqC;IACrC,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACtE;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClD,oCAAoC;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,gEAAgE;AAChE,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9B"}
1
+ {"version":3,"file":"signal_source.d.ts","sourceRoot":"","sources":["../../src/radio/signal_source.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qCAAqC;AACrC,MAAM,WAAW,YAAY,CAAC,YAAY,SAAS,MAAM,GAAG,MAAM;IAChE;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD;;;OAGG;IACH,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACtE;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClD,oCAAoC;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,gEAAgE;AAChE,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9B"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * A class that lets you execute multiple async functions in a single 'thread'.
3
+ *
4
+ * Functions passed to the `run()` function will be executed in strict sequence.
5
+ */
6
+ export declare class SingleThread {
7
+ constructor();
8
+ private promise;
9
+ /**
10
+ * Executes the provided async function.
11
+ *
12
+ * Functions passed to `run()` are executed in strict sequence: each function only starts after the previous one ends.
13
+ *
14
+ * Make sure your function doesn't throw, because then the behavior is undefined.
15
+ */
16
+ run<T>(fn: () => Promise<T>): Promise<any>;
17
+ }
18
+ //# sourceMappingURL=single_thread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single_thread.d.ts","sourceRoot":"","sources":["../../src/radio/single_thread.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,YAAY;;IAKvB,OAAO,CAAC,OAAO,CAAe;IAE9B;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;CAIlC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * A class that lets you execute multiple async functions in a single 'thread'.
3
+ *
4
+ * Functions passed to the `run()` function will be executed in strict sequence.
5
+ */
6
+ export class SingleThread {
7
+ constructor() {
8
+ this.promise = Promise.resolve();
9
+ }
10
+ promise;
11
+ /**
12
+ * Executes the provided async function.
13
+ *
14
+ * Functions passed to `run()` are executed in strict sequence: each function only starts after the previous one ends.
15
+ *
16
+ * Make sure your function doesn't throw, because then the behavior is undefined.
17
+ */
18
+ async run(fn) {
19
+ this.promise = this.promise.then(() => fn());
20
+ return this.promise;
21
+ }
22
+ }
23
+ //# sourceMappingURL=single_thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single_thread.js","sourceRoot":"","sources":["../../src/radio/single_thread.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACvB;QACE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAEO,OAAO,CAAe;IAE9B;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,CAAI,EAAoB;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
package/dist/radio.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./radio/radio.js";
2
+ export * from "./radio/sample_block.js";
2
3
  export * from "./radio/sample_receiver.js";
3
4
  export * from "./radio/signal_source.js";
4
5
  //# sourceMappingURL=radio.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../src/radio.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../src/radio.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC"}
package/dist/radio.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./radio/radio.js";
2
+ export * from "./radio/sample_block.js";
2
3
  export * from "./radio/sample_receiver.js";
3
4
  export * from "./radio/signal_source.js";
4
5
  //# sourceMappingURL=radio.js.map
package/dist/radio.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"radio.js","sourceRoot":"","sources":["../src/radio.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"radio.js","sourceRoot":"","sources":["../src/radio.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { RealTimeSource } from "./realtime.js";
2
+ /**
3
+ * A function that generates samples.
4
+ * @param firstSample The first sample's number.
5
+ * @param sampleRate The sample rate.
6
+ * @param centerFrequency The signal's center frequency.
7
+ * @param I An array to be populated with the I component values.
8
+ * @param Q An array to be populated with the Q component values.
9
+ */
10
+ export type SampleGenerator = (firstSample: number, sampleRate: number, centerFrequency: number, I: Float32Array, Q: Float32Array) => void;
11
+ /** A SignalSource that gets samples from a SampleGenerator function in real time. */
12
+ export declare class GeneratedSource extends RealTimeSource {
13
+ private generator;
14
+ constructor(generator: SampleGenerator);
15
+ protected getSamples(firstSample: number, I: Float32Array, Q: Float32Array): void;
16
+ }
17
+ //# sourceMappingURL=generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/sources/generated.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,CAAC,EAAE,YAAY,EACf,CAAC,EAAE,YAAY,KACZ,IAAI,CAAC;AAEV,qFAAqF;AACrF,qBAAa,eAAgB,SAAQ,cAAc;IACrC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,eAAe;IAI9C,SAAS,CAAC,UAAU,CAClB,WAAW,EAAE,MAAM,EACnB,CAAC,EAAE,YAAY,EACf,CAAC,EAAE,YAAY,GACd,IAAI;CAGR"}
@@ -0,0 +1,26 @@
1
+ // Copyright 2025 Jacobo Tarrio Barreiro. All rights reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import { RealTimeSource } from "./realtime.js";
15
+ /** A SignalSource that gets samples from a SampleGenerator function in real time. */
16
+ export class GeneratedSource extends RealTimeSource {
17
+ generator;
18
+ constructor(generator) {
19
+ super();
20
+ this.generator = generator;
21
+ }
22
+ getSamples(firstSample, I, Q) {
23
+ this.generator(firstSample, this.sampleRate, this.centerFrequency, I, Q);
24
+ }
25
+ }
26
+ //# sourceMappingURL=generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/sources/generated.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAkB/C,qFAAqF;AACrF,MAAM,OAAO,eAAgB,SAAQ,cAAc;IAC7B;IAApB,YAAoB,SAA0B;QAC5C,KAAK,EAAE,CAAC;QADU,cAAS,GAAT,SAAS,CAAiB;IAE9C,CAAC;IAES,UAAU,CAClB,WAAmB,EACnB,CAAe,EACf,CAAe;QAEf,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import { SampleGenerator } from "./realtime.js";
1
+ import { SampleGenerator } from "./generated.js";
2
2
  /** Returns a generator for a tone at the given frequency with the given amplitude. */
3
3
  export declare function tone(freq: number, amplitude: number, phase?: number): SampleGenerator;
4
4
  /** Returns a generator for noise with a given maximum amplitude. */
@@ -1 +1 @@
1
- {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../src/sources/generators.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,sFAAsF;AACtF,wBAAgB,IAAI,CAClB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,eAAe,CA8BjB;AAED,oEAAoE;AACpE,wBAAgB,KAAK,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,MAAM,GACpB,eAAe,CAgBjB;AAED,yFAAyF;AACzF,wBAAgB,GAAG,CAAC,GAAG,UAAU,EAAE,eAAe,EAAE,GAAG,eAAe,CAoBrE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,eAAe,GACtB,eAAe,CAqBjB;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,GACtB,eAAe,CAcjB;AAED,2DAA2D;AAC3D,wBAAgB,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAW7D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,eAAe,CAyBjB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,eAAe,CAgCjB;AAqED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,eAAe,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,CAAC;AACnB,wBAAgB,UAAU,CACxB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,eAAe,EACtB,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,CAAC"}
1
+ {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../src/sources/generators.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,sFAAsF;AACtF,wBAAgB,IAAI,CAClB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,eAAe,CA8BjB;AAED,oEAAoE;AACpE,wBAAgB,KAAK,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,MAAM,GACpB,eAAe,CAgBjB;AAED,yFAAyF;AACzF,wBAAgB,GAAG,CAAC,GAAG,UAAU,EAAE,eAAe,EAAE,GAAG,eAAe,CAoBrE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,eAAe,GACtB,eAAe,CAqBjB;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,GACtB,eAAe,CAcjB;AAED,2DAA2D;AAC3D,wBAAgB,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAW7D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,eAAe,CAyBjB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,eAAe,CAgCjB;AAqED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,eAAe,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,CAAC;AACnB,wBAAgB,UAAU,CACxB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,eAAe,EACtB,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,CAAC"}
@@ -1,4 +1,5 @@
1
- import { SampleBlock, SignalSource } from "../radio/signal_source.js";
1
+ import { SampleBlock } from "../radio/sample_block.js";
2
+ import { SignalSource } from "../radio/signal_source.js";
2
3
  /**
3
4
  * A SignalSource that gets samples from a "push" source.
4
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/sources/push.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGtE;;;;;;;;;;;GAWG;AACH,qBAAa,UAAW,YAAW,YAAY;;IAU7C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,CAAC,CAAoB;IAC7B,OAAO,CAAC,CAAC,CAAoB;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAkB;IAEhC,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAEhE,aAAa,CAAC,UAAU,EAAE,MAAM;IAOhC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKjD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrC,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM;IAiChE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAe3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/sources/push.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;;;;;;;;;;GAWG;AACH,qBAAa,UAAW,YAAW,YAAY;;IAU7C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,CAAC,CAAoB;IAC7B,OAAO,CAAC,CAAC,CAAoB;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAkB;IAEhC,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAEhE,aAAa,CAAC,UAAU,EAAE,MAAM;IAOhC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKjD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrC,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM;IAiChE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAe3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/sources/push.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/sources/push.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { SampleBlock } from "../radio/signal_source.js";
1
+ import { SampleBlock } from "../radio/sample_block.js";
2
2
  export declare class PendingReadRing {
3
3
  constructor(length: number);
4
4
  private pending;
@@ -1 +1 @@
1
- {"version":3,"file":"read_ring.d.ts","sourceRoot":"","sources":["../../src/sources/read_ring.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAMxD,qBAAa,eAAe;gBACd,MAAM,EAAE,MAAM;IAO1B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IAErB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAczC,OAAO,CAAC,KAAK,EAAE,WAAW;IAO1B,MAAM;IAaN,cAAc,IAAI,OAAO;IAIzB,YAAY,IAAI,MAAM;CAIvB"}
1
+ {"version":3,"file":"read_ring.d.ts","sourceRoot":"","sources":["../../src/sources/read_ring.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAMvD,qBAAa,eAAe;gBACd,MAAM,EAAE,MAAM;IAO1B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IAErB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAczC,OAAO,CAAC,KAAK,EAAE,WAAW;IAO1B,MAAM;IAaN,cAAc,IAAI,OAAO;IAIzB,YAAY,IAAI,MAAM;CAIvB"}