RemoteRF 2.0.13__tar.gz → 2.0.14__tar.gz
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.
- {remoterf-2.0.13/src/remoterf.egg-info → remoterf-2.0.14}/PKG-INFO +1 -1
- {remoterf-2.0.13 → remoterf-2.0.14}/setup.py +1 -1
- remoterf-2.0.14/src/remoteRF/common/grpc/grpc.proto +237 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/remoterf_cli.py +15 -1
- {remoterf-2.0.13 → remoterf-2.0.14/src/remoterf.egg-info}/PKG-INFO +1 -1
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoterf.egg-info/SOURCES.txt +1 -37
- {remoterf-2.0.13 → remoterf-2.0.14}/tests/test_remoterf_cli.py +26 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/LICENSE +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/MANIFEST.in +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/README.md +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/setup.cfg +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/grpc/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/grpc/grpc_pb2.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/grpc/grpc_pb2_grpc.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/grpc/v2_codec.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/tos_notice.txt +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/utils/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/utils/ansi_codes.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/utils/api_token.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/utils/banner.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/utils/list_string.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/common/utils/process_arg.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/config/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/config/cert_fetcher.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/config/config.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/core/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/core/acc_login.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/core/app.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/core/banner_note.txt +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/core/dynamic_v2_transport.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/core/grpc_acc.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/core/grpc_client.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/core/v2_errors.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/_virtual.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/adalm_pluto/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/adalm_pluto/pluto_remote.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/dynamic_device.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/dynamic_v2.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/hackrf/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/hackrf/hackrf_remote.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/rtl_sdr/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/rtl_sdr/rtl_sdr_remote.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/support/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/support/ti_mmwave.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/support/uhd.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/support/uhd_dsp.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/support/uhd_v2.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/ti_mmwave/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/ti_mmwave/ti_mmwave_remote.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/usrp/__init__.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/usrp/usrp_remote.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/drivers/usrp/usrp_remote.pyi +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoteRF/version.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoterf.egg-info/dependency_links.txt +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoterf.egg-info/entry_points.txt +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoterf.egg-info/requires.txt +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/src/remoterf.egg-info/top_level.txt +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/tests/test_banner.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/tests/test_dynamic_device_codegen.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/tests/test_dynamic_v2.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/tests/test_pluto_virtual.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/tests/test_process_arg.py +0 -0
- {remoterf-2.0.13 → remoterf-2.0.14}/tests/test_ti_mmwave.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: remoterf
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.14
|
|
4
4
|
Summary: A python API to remotely access signal centric hardware. Client-side only! Courtesy of Wireless Lab @ UCLA & Prof. Ian Roberts.
|
|
5
5
|
Author: Ethan Ge
|
|
6
6
|
Author-email: ethoGalaxy@gmail.com
|
|
@@ -21,7 +21,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
|
|
|
21
21
|
|
|
22
22
|
setup(
|
|
23
23
|
name="remoterf",
|
|
24
|
-
version="2.0.
|
|
24
|
+
version="2.0.14",
|
|
25
25
|
author="Ethan Ge",
|
|
26
26
|
author_email="ethoGalaxy@gmail.com",
|
|
27
27
|
description="A python API to remotely access signal centric hardware. Client-side only! Courtesy of Wireless Lab @ UCLA & Prof. Ian Roberts.",
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
// Copyright (C) 2026 RemoteRF
|
|
2
|
+
//
|
|
3
|
+
// This program is free software: you can redistribute it and/or modify
|
|
4
|
+
// it under the terms of the GNU General Public License as published by
|
|
5
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
6
|
+
// (at your option) any later version.
|
|
7
|
+
//
|
|
8
|
+
// This program is distributed in the hope that it will be useful,
|
|
9
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
// GNU General Public License for more details.
|
|
12
|
+
//
|
|
13
|
+
// You should have received a copy of the GNU General Public License
|
|
14
|
+
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
15
|
+
|
|
16
|
+
syntax = "proto3";
|
|
17
|
+
|
|
18
|
+
option java_package = "com.example.demo";
|
|
19
|
+
option java_outer_classname = "DemoProtos";
|
|
20
|
+
|
|
21
|
+
package remote_rf;
|
|
22
|
+
|
|
23
|
+
service GenericRPC {
|
|
24
|
+
rpc Call (GenericRPCRequest) returns (GenericRPCResponse);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Dynamic protocol v2 is deliberately additive. GenericRPC remains the v1
|
|
28
|
+
// compatibility surface for existing generated clients and device schemas.
|
|
29
|
+
service DynamicControlV2 {
|
|
30
|
+
rpc Negotiate (NegotiateRequest) returns (NegotiateResponse);
|
|
31
|
+
rpc GetSchema (GetSchemaRequest) returns (GetSchemaResponse);
|
|
32
|
+
rpc OpenSession (OpenSessionRequest) returns (OpenSessionResponse);
|
|
33
|
+
rpc Invoke (InvokeRequest) returns (InvokeResponse);
|
|
34
|
+
rpc CloseHandle (CloseHandleRequest) returns (CloseResponse);
|
|
35
|
+
rpc CloseSession (CloseSessionRequest) returns (CloseResponse);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
service SampleDataV1 {
|
|
39
|
+
rpc SampleStream (stream SampleFrame) returns (stream SampleFrame);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
message GenericRPCRequest {
|
|
43
|
+
string function_name = 1;
|
|
44
|
+
map<string, Argument> args = 2;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
message GenericRPCResponse {
|
|
48
|
+
map<string, Argument> results = 1;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
message ArrayShape {
|
|
52
|
+
repeated int32 dim = 1;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
message ComplexNumber {
|
|
56
|
+
float real = 1;
|
|
57
|
+
float imag = 2;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
message ComplexNumpyArray {
|
|
61
|
+
ArrayShape shape = 1;
|
|
62
|
+
repeated ComplexNumber data = 2;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
message RealNumpyArray {
|
|
66
|
+
ArrayShape shape = 1;
|
|
67
|
+
repeated float data = 2;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
message Argument {
|
|
71
|
+
oneof value {
|
|
72
|
+
string string_value = 1;
|
|
73
|
+
int64 int64_value = 2;
|
|
74
|
+
float float_value = 3;
|
|
75
|
+
bool bool_value = 4;
|
|
76
|
+
ComplexNumpyArray complex_array = 5;
|
|
77
|
+
RealNumpyArray real_array = 6;
|
|
78
|
+
string json_value = 7;
|
|
79
|
+
bytes bytes_value = 8;
|
|
80
|
+
// Contiguous C-order numeric data; fields 5 and 6 remain decode-compatible.
|
|
81
|
+
NDArrayValue ndarray_value = 9;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
message NDArrayValue {
|
|
86
|
+
string dtype = 1;
|
|
87
|
+
repeated int64 shape = 2;
|
|
88
|
+
bytes data = 3;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
message DynamicValue {
|
|
92
|
+
oneof value {
|
|
93
|
+
bool null_value = 1;
|
|
94
|
+
bool bool_value = 2;
|
|
95
|
+
sint64 int64_value = 3;
|
|
96
|
+
double double_value = 4;
|
|
97
|
+
string string_value = 5;
|
|
98
|
+
bytes bytes_value = 6;
|
|
99
|
+
string json_value = 7;
|
|
100
|
+
NDArrayValue ndarray_value = 8;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
message NamedValue {
|
|
105
|
+
string name = 1;
|
|
106
|
+
DynamicValue value = 2;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
message Mutation {
|
|
110
|
+
string target = 1;
|
|
111
|
+
DynamicValue value = 2;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
message ErrorEnvelope {
|
|
115
|
+
string code = 1;
|
|
116
|
+
string message = 2;
|
|
117
|
+
string details_json = 3;
|
|
118
|
+
string method = 4;
|
|
119
|
+
string native_exception = 5;
|
|
120
|
+
string uhd_version = 6;
|
|
121
|
+
bool retryable = 7;
|
|
122
|
+
bool fatal_to_session = 8;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
message NegotiateRequest {
|
|
126
|
+
repeated string schema_versions = 1;
|
|
127
|
+
repeated string control_protocol_versions = 2;
|
|
128
|
+
repeated string streaming_protocol_versions = 3;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
message NegotiateResponse {
|
|
132
|
+
string schema_version = 1;
|
|
133
|
+
string control_protocol_version = 2;
|
|
134
|
+
string streaming_protocol_version = 3;
|
|
135
|
+
ErrorEnvelope error = 4;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
message GetSchemaRequest {
|
|
139
|
+
string token = 1;
|
|
140
|
+
repeated string schema_versions = 2;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
message GetSchemaResponse {
|
|
144
|
+
string schema_version = 1;
|
|
145
|
+
string schema_json = 2;
|
|
146
|
+
string schema_hash = 3;
|
|
147
|
+
ErrorEnvelope error = 4;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
message OpenSessionRequest {
|
|
151
|
+
string token = 1;
|
|
152
|
+
string requested_schema_hash = 2;
|
|
153
|
+
string control_protocol_version = 3;
|
|
154
|
+
string streaming_protocol_version = 4;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
message OpenSessionResponse {
|
|
158
|
+
string session_id = 1;
|
|
159
|
+
string device_handle = 2;
|
|
160
|
+
string schema_json = 3;
|
|
161
|
+
string schema_hash = 4;
|
|
162
|
+
string capabilities_json = 5;
|
|
163
|
+
string uhd_version = 6;
|
|
164
|
+
string uhd_abi = 7;
|
|
165
|
+
string hardware_profile = 8;
|
|
166
|
+
ErrorEnvelope error = 9;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
message InvokeRequest {
|
|
170
|
+
string session_id = 1;
|
|
171
|
+
string handle = 2;
|
|
172
|
+
string method = 3;
|
|
173
|
+
string overload_id = 4;
|
|
174
|
+
repeated NamedValue args = 5;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
message InvokeResponse {
|
|
178
|
+
DynamicValue result = 1;
|
|
179
|
+
repeated Mutation mutations = 2;
|
|
180
|
+
ErrorEnvelope error = 3;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
message CloseHandleRequest {
|
|
184
|
+
string session_id = 1;
|
|
185
|
+
string handle = 2;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
message CloseSessionRequest {
|
|
189
|
+
string session_id = 1;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
message CloseResponse {
|
|
193
|
+
bool closed = 1;
|
|
194
|
+
ErrorEnvelope error = 2;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
enum SampleDirection {
|
|
198
|
+
SAMPLE_DIRECTION_UNSPECIFIED = 0;
|
|
199
|
+
SAMPLE_DIRECTION_RX = 1;
|
|
200
|
+
SAMPLE_DIRECTION_TX = 2;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
enum SampleFrameKind {
|
|
204
|
+
SAMPLE_FRAME_UNSPECIFIED = 0;
|
|
205
|
+
SAMPLE_FRAME_OPEN = 1;
|
|
206
|
+
SAMPLE_FRAME_REQUEST = 2;
|
|
207
|
+
SAMPLE_FRAME_DATA = 3;
|
|
208
|
+
SAMPLE_FRAME_RESULT = 4;
|
|
209
|
+
SAMPLE_FRAME_CREDIT = 5;
|
|
210
|
+
SAMPLE_FRAME_CANCEL = 6;
|
|
211
|
+
SAMPLE_FRAME_CLOSE = 7;
|
|
212
|
+
SAMPLE_FRAME_ERROR = 8;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
message SampleFrame {
|
|
216
|
+
string session_id = 1;
|
|
217
|
+
string handle = 2;
|
|
218
|
+
uint64 generation = 3;
|
|
219
|
+
string operation_id = 4;
|
|
220
|
+
uint64 sequence = 5;
|
|
221
|
+
SampleDirection direction = 6;
|
|
222
|
+
SampleFrameKind kind = 7;
|
|
223
|
+
string dtype = 8;
|
|
224
|
+
repeated int64 shape = 9;
|
|
225
|
+
repeated uint32 channels = 10;
|
|
226
|
+
uint64 sample_count = 11;
|
|
227
|
+
bytes payload = 12;
|
|
228
|
+
string metadata_json = 13;
|
|
229
|
+
double device_time_secs = 14;
|
|
230
|
+
uint32 credits = 15;
|
|
231
|
+
double timeout_sec = 16;
|
|
232
|
+
bool one_packet = 17;
|
|
233
|
+
bool end_of_stream = 18;
|
|
234
|
+
bool cancelled = 19;
|
|
235
|
+
ErrorEnvelope error = 20;
|
|
236
|
+
uint64 flags = 21;
|
|
237
|
+
}
|
|
@@ -134,6 +134,7 @@ def print_help() -> None:
|
|
|
134
134
|
printf("Config:", (Sty.BOLD, Sty.MAGENTA))
|
|
135
135
|
printf(" remoterf -c | --config [options]", Sty.CYAN)
|
|
136
136
|
printf(" -a, --addr, -addr <host:port>", Sty.CYAN, " Set target server", Sty.DEFAULT)
|
|
137
|
+
printf(" --cert-port <port>", Sty.CYAN, " Cert server port (default: grpc port + 1)", Sty.DEFAULT)
|
|
137
138
|
printf(" -w, --wipe, -wipe", Sty.CYAN, " Delete all local config", Sty.DEFAULT)
|
|
138
139
|
printf(" -y, --yes, -yes", Sty.CYAN, " Skip wipe confirmation", Sty.DEFAULT)
|
|
139
140
|
print()
|
|
@@ -182,6 +183,7 @@ def main() -> int:
|
|
|
182
183
|
addr = None
|
|
183
184
|
wipe = False
|
|
184
185
|
yes = False
|
|
186
|
+
cert_port_arg = None
|
|
185
187
|
|
|
186
188
|
i = 1
|
|
187
189
|
while i < len(argv):
|
|
@@ -195,6 +197,18 @@ def main() -> int:
|
|
|
195
197
|
i += 2
|
|
196
198
|
continue
|
|
197
199
|
|
|
200
|
+
if tok in ("--cert-port", "-cert-port"):
|
|
201
|
+
if i + 1 >= len(argv):
|
|
202
|
+
print("ERROR: missing required argument after --cert-port")
|
|
203
|
+
return 2
|
|
204
|
+
try:
|
|
205
|
+
cert_port_arg = int(argv[i + 1].strip())
|
|
206
|
+
except Exception:
|
|
207
|
+
print("ERROR: --cert-port must be an integer")
|
|
208
|
+
return 2
|
|
209
|
+
i += 2
|
|
210
|
+
continue
|
|
211
|
+
|
|
198
212
|
if tok in ("--wipe", "-w", "-wipe"):
|
|
199
213
|
wipe = True
|
|
200
214
|
i += 1
|
|
@@ -235,7 +249,7 @@ def main() -> int:
|
|
|
235
249
|
return 2
|
|
236
250
|
|
|
237
251
|
# configure returns the proper exit code
|
|
238
|
-
cert_port = port + 1
|
|
252
|
+
cert_port = cert_port_arg if cert_port_arg is not None else port + 1
|
|
239
253
|
configure(host, port, cert_port)
|
|
240
254
|
return 0
|
|
241
255
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: remoterf
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.14
|
|
4
4
|
Summary: A python API to remotely access signal centric hardware. Client-side only! Courtesy of Wireless Lab @ UCLA & Prof. Ian Roberts.
|
|
5
5
|
Author: Ethan Ge
|
|
6
6
|
Author-email: ethoGalaxy@gmail.com
|
|
@@ -8,6 +8,7 @@ src/remoteRF/version.py
|
|
|
8
8
|
src/remoteRF/common/__init__.py
|
|
9
9
|
src/remoteRF/common/tos_notice.txt
|
|
10
10
|
src/remoteRF/common/grpc/__init__.py
|
|
11
|
+
src/remoteRF/common/grpc/grpc.proto
|
|
11
12
|
src/remoteRF/common/grpc/grpc_pb2.py
|
|
12
13
|
src/remoteRF/common/grpc/grpc_pb2_grpc.py
|
|
13
14
|
src/remoteRF/common/grpc/v2_codec.py
|
|
@@ -48,49 +49,12 @@ src/remoteRF/drivers/ti_mmwave/ti_mmwave_remote.py
|
|
|
48
49
|
src/remoteRF/drivers/usrp/__init__.py
|
|
49
50
|
src/remoteRF/drivers/usrp/usrp_remote.py
|
|
50
51
|
src/remoteRF/drivers/usrp/usrp_remote.pyi
|
|
51
|
-
src/remoterf/__init__.py
|
|
52
|
-
src/remoterf/remoterf_cli.py
|
|
53
|
-
src/remoterf/version.py
|
|
54
52
|
src/remoterf.egg-info/PKG-INFO
|
|
55
53
|
src/remoterf.egg-info/SOURCES.txt
|
|
56
54
|
src/remoterf.egg-info/dependency_links.txt
|
|
57
55
|
src/remoterf.egg-info/entry_points.txt
|
|
58
56
|
src/remoterf.egg-info/requires.txt
|
|
59
57
|
src/remoterf.egg-info/top_level.txt
|
|
60
|
-
src/remoterf/common/__init__.py
|
|
61
|
-
src/remoterf/common/tos_notice.txt
|
|
62
|
-
src/remoterf/common/grpc/__init__.py
|
|
63
|
-
src/remoterf/common/grpc/grpc_pb2.py
|
|
64
|
-
src/remoterf/common/grpc/grpc_pb2_grpc.py
|
|
65
|
-
src/remoterf/common/grpc/v2_codec.py
|
|
66
|
-
src/remoterf/common/utils/__init__.py
|
|
67
|
-
src/remoterf/common/utils/ansi_codes.py
|
|
68
|
-
src/remoterf/common/utils/api_token.py
|
|
69
|
-
src/remoterf/common/utils/list_string.py
|
|
70
|
-
src/remoterf/common/utils/process_arg.py
|
|
71
|
-
src/remoterf/config/__init__.py
|
|
72
|
-
src/remoterf/config/cert_fetcher.py
|
|
73
|
-
src/remoterf/config/config.py
|
|
74
|
-
src/remoterf/core/__init__.py
|
|
75
|
-
src/remoterf/core/acc_login.py
|
|
76
|
-
src/remoterf/core/app.py
|
|
77
|
-
src/remoterf/core/banner_note.txt
|
|
78
|
-
src/remoterf/core/dynamic_v2_transport.py
|
|
79
|
-
src/remoterf/core/grpc_acc.py
|
|
80
|
-
src/remoterf/core/grpc_client.py
|
|
81
|
-
src/remoterf/core/v2_errors.py
|
|
82
|
-
src/remoterf/drivers/__init__.py
|
|
83
|
-
src/remoterf/drivers/dynamic_device.py
|
|
84
|
-
src/remoterf/drivers/dynamic_v2.py
|
|
85
|
-
src/remoterf/drivers/adalm_pluto/__init__.py
|
|
86
|
-
src/remoterf/drivers/adalm_pluto/pluto_remote.py
|
|
87
|
-
src/remoterf/drivers/support/__init__.py
|
|
88
|
-
src/remoterf/drivers/support/uhd.py
|
|
89
|
-
src/remoterf/drivers/support/uhd_dsp.py
|
|
90
|
-
src/remoterf/drivers/support/uhd_v2.py
|
|
91
|
-
src/remoterf/drivers/usrp/__init__.py
|
|
92
|
-
src/remoterf/drivers/usrp/usrp_remote.py
|
|
93
|
-
src/remoterf/drivers/usrp/usrp_remote.pyi
|
|
94
58
|
tests/test_banner.py
|
|
95
59
|
tests/test_dynamic_device_codegen.py
|
|
96
60
|
tests/test_dynamic_v2.py
|
|
@@ -48,6 +48,32 @@ class RemoteRFCliTests(unittest.TestCase):
|
|
|
48
48
|
connected_server.assert_called_once_with()
|
|
49
49
|
print_unavailable.assert_called_once_with()
|
|
50
50
|
|
|
51
|
+
@mock.patch("remoteRF.config.config.configure")
|
|
52
|
+
@mock.patch.object(
|
|
53
|
+
remoterf_cli.sys, "argv", ["remoterf", "--config", "--addr", "10.0.0.1:12321"]
|
|
54
|
+
)
|
|
55
|
+
def test_config_without_cert_port_defaults_to_grpc_port_plus_one(self, configure):
|
|
56
|
+
self.assertEqual(remoterf_cli.main(), 0)
|
|
57
|
+
configure.assert_called_once_with("10.0.0.1", 12321, 12322)
|
|
58
|
+
|
|
59
|
+
@mock.patch("remoteRF.config.config.configure")
|
|
60
|
+
@mock.patch.object(
|
|
61
|
+
remoterf_cli.sys,
|
|
62
|
+
"argv",
|
|
63
|
+
["remoterf", "--config", "--addr", "10.0.0.1:12321", "--cert-port", "9999"],
|
|
64
|
+
)
|
|
65
|
+
def test_config_with_explicit_cert_port_overrides_default(self, configure):
|
|
66
|
+
self.assertEqual(remoterf_cli.main(), 0)
|
|
67
|
+
configure.assert_called_once_with("10.0.0.1", 12321, 9999)
|
|
68
|
+
|
|
69
|
+
@mock.patch("remoteRF.config.config.configure")
|
|
70
|
+
@mock.patch.object(
|
|
71
|
+
remoterf_cli.sys, "argv", ["remoterf", "-c", "-a", "10.0.0.1:12321"]
|
|
72
|
+
)
|
|
73
|
+
def test_existing_short_flag_usage_remains_compatible(self, configure):
|
|
74
|
+
self.assertEqual(remoterf_cli.main(), 0)
|
|
75
|
+
configure.assert_called_once_with("10.0.0.1", 12321, 12322)
|
|
76
|
+
|
|
51
77
|
|
|
52
78
|
if __name__ == "__main__":
|
|
53
79
|
unittest.main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|