@blueid/access-proto 0.13.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/BlueCore.proto +841 -0
- package/BlueLock.proto +35 -0
- package/BlueSDK.proto +56 -0
- package/BlueSystem.proto +278 -0
- package/es/BlueCore_pb.d.ts +2937 -0
- package/es/BlueCore_pb.js +975 -0
- package/es/BlueLock_pb.d.ts +118 -0
- package/es/BlueLock_pb.js +46 -0
- package/es/BlueSDK_pb.d.ts +197 -0
- package/es/BlueSDK_pb.js +73 -0
- package/es/BlueSystem_pb.d.ts +913 -0
- package/es/BlueSystem_pb.js +272 -0
- package/nanopb/BlueCore.pb.c +188 -0
- package/nanopb/BlueCore.pb.h +1715 -0
- package/nanopb/BlueLock.pb.c +16 -0
- package/nanopb/BlueLock.pb.h +104 -0
- package/nanopb/BlueSDK.pb.c +22 -0
- package/nanopb/BlueSDK.pb.h +159 -0
- package/nanopb/BlueSystem.pb.c +64 -0
- package/nanopb/BlueSystem.pb.h +631 -0
- package/package.json +18 -0
- package/swift/BlueCore.pb.swift +6840 -0
- package/swift/BlueLock.pb.swift +276 -0
- package/swift/BlueSDK.pb.swift +624 -0
- package/swift/BlueSystem.pb.swift +2489 -0
package/BlueCore.proto
ADDED
|
@@ -0,0 +1,841 @@
|
|
|
1
|
+
syntax = "proto2";
|
|
2
|
+
|
|
3
|
+
import "nanopb.proto";
|
|
4
|
+
|
|
5
|
+
///////////////////////////////////////////////////////////////////////
|
|
6
|
+
// Shared demo keys
|
|
7
|
+
///////////////////////////////////////////////////////////////////////
|
|
8
|
+
|
|
9
|
+
message BlueSharedDemoData {
|
|
10
|
+
required string deviceId = 1
|
|
11
|
+
[ (nanopb).max_length = 8, default = "wa0y1YwS" ];
|
|
12
|
+
required bytes terminalPrivateKey = 2 [
|
|
13
|
+
(nanopb).max_size = 160,
|
|
14
|
+
default = "\x30\x81\x87\x02\x01\x00\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02"
|
|
15
|
+
"\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x04\x6d\x30\x6b\x02"
|
|
16
|
+
"\x01\x01\x04\x20\xa5\xab\x6d\x14\x11\x30\x47\xa7\xad\x6c\x10\xe4"
|
|
17
|
+
"\x4d\xe6\x3c\x05\xb9\x6b\x84\xb5\x1f\xe3\x14\xd6\x87\x5c\x46\x9e"
|
|
18
|
+
"\xb9\xcd\x69\x2b\xa1\x44\x03\x42\x00\x04\x3a\x66\x86\x75\xc9\x29"
|
|
19
|
+
"\x29\x07\xc3\x63\x18\x97\x4d\xd9\x44\x1c\x71\xf9\xe4\x45\xe8\x74"
|
|
20
|
+
"\x1a\x3f\xaf\x6b\xc5\x8c\x9c\x69\x13\xbe\x44\x14\x0b\x60\x45\x4f"
|
|
21
|
+
"\x76\x2f\xc2\xf1\x98\x41\x98\xec\x6e\x39\x1b\x53\x36\x8b\x90\x73"
|
|
22
|
+
"\xea\x1d\xe7\x20\xcf\xa1\xbe\x2d\xd4\xf1"
|
|
23
|
+
];
|
|
24
|
+
required bytes terminalPublicKey = 3 [
|
|
25
|
+
(nanopb).max_size = 100,
|
|
26
|
+
default = "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a"
|
|
27
|
+
"\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x3a\x66\x86\x75\xc9"
|
|
28
|
+
"\x29\x29\x07\xc3\x63\x18\x97\x4d\xd9\x44\x1c\x71\xf9\xe4\x45\xe8"
|
|
29
|
+
"\x74\x1a\x3f\xaf\x6b\xc5\x8c\x9c\x69\x13\xbe\x44\x14\x0b\x60\x45"
|
|
30
|
+
"\x4f\x76\x2f\xc2\xf1\x98\x41\x98\xec\x6e\x39\x1b\x53\x36\x8b\x90"
|
|
31
|
+
"\x73\xea\x1d\xe7\x20\xcf\xa1\xbe\x2d\xd4\xf1"
|
|
32
|
+
];
|
|
33
|
+
// --
|
|
34
|
+
required bytes signaturePrivateKey = 4 [
|
|
35
|
+
(nanopb).max_size = 160,
|
|
36
|
+
default = "\x30\x81\x87\x02\x01\x00\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02"
|
|
37
|
+
"\x01\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x04\x6d\x30\x6b\x02"
|
|
38
|
+
"\x01\x01\x04\x20\xef\x36\x55\xc9\x4d\x80\x1e\xf4\x92\x56\x75\x0e"
|
|
39
|
+
"\x70\xe1\x51\x0e\xcc\xe8\xb4\x6c\x54\x5e\x55\x1d\xde\xbb\xfc\x6f"
|
|
40
|
+
"\x22\xa8\x49\x50\xa1\x44\x03\x42\x00\x04\x5a\x0d\x6e\x67\x45\xcc"
|
|
41
|
+
"\xd5\xc1\x8c\xeb\xd8\xaf\xf6\xea\x86\xd8\xc3\xaf\x43\x3f\xb7\xa2"
|
|
42
|
+
"\xd2\x5f\x21\x34\x42\xd4\xcd\x96\x83\xb4\xe6\x7d\x2d\xdc\x25\xeb"
|
|
43
|
+
"\x53\xf9\x12\x76\x1e\x40\xe6\xc9\x99\x83\xdd\x90\x90\xfe\xf0\xb4"
|
|
44
|
+
"\x25\x99\xcd\x16\xae\x39\x2f\xcf\x96\x43"
|
|
45
|
+
];
|
|
46
|
+
required bytes signaturePublicKey = 5 [
|
|
47
|
+
(nanopb).max_size = 100,
|
|
48
|
+
default = "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a"
|
|
49
|
+
"\x86\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x5a\x0d\x6e\x67\x45"
|
|
50
|
+
"\xcc\xd5\xc1\x8c\xeb\xd8\xaf\xf6\xea\x86\xd8\xc3\xaf\x43\x3f\xb7"
|
|
51
|
+
"\xa2\xd2\x5f\x21\x34\x42\xd4\xcd\x96\x83\xb4\xe6\x7d\x2d\xdc\x25"
|
|
52
|
+
"\xeb\x53\xf9\x12\x76\x1e\x40\xe6\xc9\x99\x83\xdd\x90\x90\xfe\xf0"
|
|
53
|
+
"\xb4\x25\x99\xcd\x16\xae\x39\x2f\xcf\x96\x43"
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
///////////////////////////////////////////////////////////////////////
|
|
58
|
+
// Base types
|
|
59
|
+
///////////////////////////////////////////////////////////////////////
|
|
60
|
+
|
|
61
|
+
enum BlueReturnCode {
|
|
62
|
+
//
|
|
63
|
+
// Success results
|
|
64
|
+
//
|
|
65
|
+
Ok = 0;
|
|
66
|
+
Pending = 1;
|
|
67
|
+
|
|
68
|
+
//
|
|
69
|
+
// General errors
|
|
70
|
+
//
|
|
71
|
+
Error = -1;
|
|
72
|
+
InvalidArguments = -3;
|
|
73
|
+
InvalidState = -4;
|
|
74
|
+
NotSupported = -5;
|
|
75
|
+
EOF = -6;
|
|
76
|
+
Overflow = -7;
|
|
77
|
+
StorageFull = -8;
|
|
78
|
+
InvalidCrc = -9;
|
|
79
|
+
InvalidMemoryAddress = -10;
|
|
80
|
+
VersionMissmatch = -11;
|
|
81
|
+
InvalidSignature = -12;
|
|
82
|
+
InvalidValidity = -13;
|
|
83
|
+
CryptLibraryFailed = -14;
|
|
84
|
+
NotFound = -16;
|
|
85
|
+
AlreadyExists = -17;
|
|
86
|
+
Timeout = -18;
|
|
87
|
+
Disconnected = -19;
|
|
88
|
+
PointerConversionFailed = -20;
|
|
89
|
+
Unavailable = -21;
|
|
90
|
+
|
|
91
|
+
Test = -29;
|
|
92
|
+
|
|
93
|
+
//
|
|
94
|
+
// Misc specific errors
|
|
95
|
+
//
|
|
96
|
+
|
|
97
|
+
EncodeDataWriteFailed = -30;
|
|
98
|
+
EncodeDataWriteNothingWritten = -31;
|
|
99
|
+
DecodeDataReadFailed = -32;
|
|
100
|
+
BleInvalidCompanyIdentifier = -33;
|
|
101
|
+
InvalidSystemConfig = -34;
|
|
102
|
+
InvalidProvisioning = -35;
|
|
103
|
+
InvalidTransponder = -104;
|
|
104
|
+
BleServiceNotFound = -105;
|
|
105
|
+
BleCharacteristicNotFound = -106;
|
|
106
|
+
BleFailSetCharacteristicNotify = -107;
|
|
107
|
+
|
|
108
|
+
//
|
|
109
|
+
// Nfc Transponder errors
|
|
110
|
+
//
|
|
111
|
+
|
|
112
|
+
NfcTransponderNoResult = -100;
|
|
113
|
+
NfcTransponderCommandError = -101;
|
|
114
|
+
NfcTransponderStorageFull = -102;
|
|
115
|
+
NfcTransponderAuthenticateFailed = -103;
|
|
116
|
+
|
|
117
|
+
//
|
|
118
|
+
// SP Errors
|
|
119
|
+
//
|
|
120
|
+
SPInvalidSalt = -150;
|
|
121
|
+
SPFailedHashing = -151;
|
|
122
|
+
SPFailedSigning = -152;
|
|
123
|
+
SPFailedGetOwnSalt = -153;
|
|
124
|
+
SPFailedSetPeerSalt = -154;
|
|
125
|
+
SPFailedEncrypt = -155;
|
|
126
|
+
SPFailedDecrypt = -156;
|
|
127
|
+
SPFailedGetCurrentTime = -157;
|
|
128
|
+
SPFailedSignature = -158;
|
|
129
|
+
SPErrorStatusCode = -170;
|
|
130
|
+
|
|
131
|
+
//
|
|
132
|
+
// Oss errors
|
|
133
|
+
//
|
|
134
|
+
|
|
135
|
+
OssInvalidCredentialId = -200;
|
|
136
|
+
|
|
137
|
+
OssMaFailedMcpLib = -201;
|
|
138
|
+
|
|
139
|
+
OssSoIncompatibleMajorVersion = -230;
|
|
140
|
+
OssSoInvalidCredentialType = -231;
|
|
141
|
+
OssSoInvalidTimestamp = -233;
|
|
142
|
+
OssSoInvalidTimeperiod = -234;
|
|
143
|
+
OssSoInvalidSiteId = -235;
|
|
144
|
+
OssSoInvalidDoorAccessBy = -236;
|
|
145
|
+
OssSoInvalidDoorDTScheduleNumber = -237;
|
|
146
|
+
OssSoTimePeriodsCountMissmatch = -238;
|
|
147
|
+
OssSoInvalidDTScheduleNumber = -239;
|
|
148
|
+
OssSoEventIdNotSupportedForWrite = -242;
|
|
149
|
+
OssSoExtensionFileSizeTooLarge = -243;
|
|
150
|
+
OssSoExtensionFileSizeInvalid = -244;
|
|
151
|
+
OssSoExtensionTooManyFeatures = -245;
|
|
152
|
+
OssSoExtensionValueTooLarge = -246;
|
|
153
|
+
OssSoInvalidExtensionLength = -247;
|
|
154
|
+
OssSoInvalidExtensionTag = -248;
|
|
155
|
+
OssSoMaxEventEntriesExceeded = -249;
|
|
156
|
+
OssSoMaxBlacklistEntriesExceeded = -250;
|
|
157
|
+
|
|
158
|
+
OssSidIncompatibleMajorVersion = -280;
|
|
159
|
+
OssSidInvalidCredentialType = -281;
|
|
160
|
+
|
|
161
|
+
//
|
|
162
|
+
// Mifare Desfire errors
|
|
163
|
+
//
|
|
164
|
+
MifareDesfireWrongKeyType = -300;
|
|
165
|
+
MifareDesfireWrongKey = -301;
|
|
166
|
+
MifareDesfireCmacNotReceived = -302;
|
|
167
|
+
MifareDesfireCmacNotVerified = -303;
|
|
168
|
+
MifareDesfireNoneOrInvalidAid = -304;
|
|
169
|
+
|
|
170
|
+
//
|
|
171
|
+
// Everything after here equals OssMaIoReturnCode codes; to gather the
|
|
172
|
+
// original OssMaIoReturnCode code simply do OssMAReturnCodeStart - returnCode
|
|
173
|
+
//
|
|
174
|
+
|
|
175
|
+
OssMAReturnCodeStart = -1000;
|
|
176
|
+
OssMAReturnCodeEnd = -1100;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
message BlueVersionInfo {
|
|
180
|
+
required uint32 buildTime = 1;
|
|
181
|
+
required uint32 version = 2;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
message BlueLocalTimestamp {
|
|
185
|
+
required uint32 year = 1;
|
|
186
|
+
required uint32 month = 2;
|
|
187
|
+
required uint32 date = 3;
|
|
188
|
+
required uint32 hours = 4;
|
|
189
|
+
required uint32 minutes = 5;
|
|
190
|
+
required uint32 seconds = 6 [ default = 0 ];
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
message BlueLocalTimeperiod {
|
|
194
|
+
required uint32 hoursFrom = 1;
|
|
195
|
+
required uint32 minutesFrom = 2;
|
|
196
|
+
required uint32 hoursTo = 3;
|
|
197
|
+
required uint32 minutesTo = 4;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
enum BlueTimeUnit {
|
|
201
|
+
Seconds = 1;
|
|
202
|
+
Minutes = 2;
|
|
203
|
+
Hours = 3;
|
|
204
|
+
Days = 4;
|
|
205
|
+
Months = 5;
|
|
206
|
+
Years = 6;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Those may never be changed
|
|
210
|
+
enum BlueWeekday {
|
|
211
|
+
Monday = 0;
|
|
212
|
+
Tuesday = 1;
|
|
213
|
+
Wednesday = 2;
|
|
214
|
+
Thursday = 3;
|
|
215
|
+
Friday = 4;
|
|
216
|
+
Saturday = 5;
|
|
217
|
+
Sunday = 6;
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
message BlueLocalTimeSchedule {
|
|
221
|
+
// Day of year is always 1-366, to spawn whole year make 1->366
|
|
222
|
+
required uint32 dayOfYearStart = 1;
|
|
223
|
+
required uint32 dayOfYearEnd = 2;
|
|
224
|
+
// See BlueWeekday -> byte 0 = Monday, etc.
|
|
225
|
+
required bytes weekdays = 3
|
|
226
|
+
[ (nanopb).max_size = 7, (nanopb).fixed_length = true ];
|
|
227
|
+
required BlueLocalTimeperiod timePeriod = 4;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
message BlueCredentialId {
|
|
231
|
+
required string id = 1 [ (nanopb).max_length = 10 ];
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
message BlueBlacklistEntry {
|
|
235
|
+
required BlueCredentialId credentialId = 1;
|
|
236
|
+
required BlueLocalTimestamp expiresAt = 2;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
enum BlueAccessType {
|
|
240
|
+
/* Access with default unlock time */
|
|
241
|
+
DefaultTime = 1;
|
|
242
|
+
/* Access with extended unlock time */
|
|
243
|
+
ExtendedTime = 2;
|
|
244
|
+
/* Access with custom unlock time */
|
|
245
|
+
CustomTime = 3;
|
|
246
|
+
/* Access with toggle function */
|
|
247
|
+
Toggle = 4;
|
|
248
|
+
/* Access and close the lock */
|
|
249
|
+
Close = 5;
|
|
250
|
+
/* No access */
|
|
251
|
+
NoAccess = 6;
|
|
252
|
+
/* No access due validity */
|
|
253
|
+
NoAccessValidity = 7;
|
|
254
|
+
/* No access due blacklisted */
|
|
255
|
+
NoAccessBlacklisted = 8;
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
enum BlueTransponderType {
|
|
259
|
+
UnknownTransponder = 0;
|
|
260
|
+
MobileTransponder = 1;
|
|
261
|
+
MifareDesfire = 2;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
enum BlueHardwareType {
|
|
265
|
+
UnknownHardware = 0;
|
|
266
|
+
TestHardware = 1;
|
|
267
|
+
Gateway = 2;
|
|
268
|
+
CylinderLock = 3;
|
|
269
|
+
WallReader = 4;
|
|
270
|
+
Kiosk = 5;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
enum BlueBatteryLevel {
|
|
274
|
+
UnknownBattery = 0;
|
|
275
|
+
OnPower = 1;
|
|
276
|
+
GoodPower = 10;
|
|
277
|
+
LowPower = 11;
|
|
278
|
+
CriticalPower = 12;
|
|
279
|
+
AlmostEmpty = 13;
|
|
280
|
+
// 0% (100) - 100% (200)
|
|
281
|
+
FullyDischarged = 100;
|
|
282
|
+
FullyCharged = 200;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
message BlueBleManufacturerInfo {
|
|
286
|
+
required BlueHardwareType hardwareType = 1;
|
|
287
|
+
required BlueBatteryLevel batteryLevel = 2;
|
|
288
|
+
required uint32 applicationVersion = 3;
|
|
289
|
+
required uint32 localMidnightTimeEpoch = 4;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
message BlueBleAdvertisementInfo {
|
|
293
|
+
// Unique device id becomes the local name
|
|
294
|
+
required string deviceId = 1 [ (nanopb).max_length = 8 ];
|
|
295
|
+
// The advertised tx power level at 1 meter in decibel (-XX - +XX)
|
|
296
|
+
required int32 txPower1Meter = 2;
|
|
297
|
+
// If set generates iBeacon format otherwise generates regular ble adv data
|
|
298
|
+
required bool isIBeacon = 3;
|
|
299
|
+
// The manufacturer information
|
|
300
|
+
required BlueBleManufacturerInfo mfInfo = 4;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
///////////////////////////////////////////////////////////////////////
|
|
304
|
+
// Event
|
|
305
|
+
///////////////////////////////////////////////////////////////////////
|
|
306
|
+
|
|
307
|
+
enum BlueEventId {
|
|
308
|
+
// Oss So events --
|
|
309
|
+
|
|
310
|
+
/** eventInfo = 0 */
|
|
311
|
+
BatteryLow = 0x01;
|
|
312
|
+
/** eventInfo = 0 */
|
|
313
|
+
BatteryReplaced = 0x02;
|
|
314
|
+
/** eventInfo = 0 */
|
|
315
|
+
LockJammed = 0x03;
|
|
316
|
+
/** eventInfo = BlueEventInfoSystem */
|
|
317
|
+
SystemEvent = 0x04;
|
|
318
|
+
/** eventInfo = 0 */
|
|
319
|
+
InternalError = 0x05;
|
|
320
|
+
/** eventInfo = 0 */
|
|
321
|
+
FailedToUnlock = 0x06;
|
|
322
|
+
/** eventInfo = 0 */
|
|
323
|
+
TamperingDetected = 0x07;
|
|
324
|
+
/** eventInfo = 0 */
|
|
325
|
+
BlacklistedCredentialDetected = 0x08;
|
|
326
|
+
/** eventInfo = 0 */
|
|
327
|
+
BlacklistFull = 0x09;
|
|
328
|
+
/** eventInfo = BlueEventInfoAccess */
|
|
329
|
+
AccessGranted = 0x0A;
|
|
330
|
+
/** eventInfo = BlueEventInfoAccess */
|
|
331
|
+
AccessDenied = 0x0B;
|
|
332
|
+
/** eventInfo = 0 */
|
|
333
|
+
CRCError = 0x0C;
|
|
334
|
+
|
|
335
|
+
MaxOssSoEventId = 0x0D;
|
|
336
|
+
|
|
337
|
+
// -- Oss So events
|
|
338
|
+
|
|
339
|
+
/** eventInfo = BlueReturnCode */
|
|
340
|
+
TerminalCommand = 0xE;
|
|
341
|
+
/** eventInfo = BlueReturnCode */
|
|
342
|
+
TerminalOss = 0xF;
|
|
343
|
+
|
|
344
|
+
/* Reserved 0x0C - 0xFF */
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
enum BlueEventInfoSystem {
|
|
348
|
+
// Oss So events --
|
|
349
|
+
|
|
350
|
+
SystemRestart = 0x01;
|
|
351
|
+
SystemConfigured = 0x2;
|
|
352
|
+
|
|
353
|
+
// -- Oss So events
|
|
354
|
+
|
|
355
|
+
/* Reserved 0x03 - 0x7F */
|
|
356
|
+
|
|
357
|
+
/* Proprietary 0x80 - 0xFF */
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
enum BlueEventInfoAccess {
|
|
361
|
+
// Oss So events --
|
|
362
|
+
|
|
363
|
+
Granted = 0x01;
|
|
364
|
+
GrantedDefaultTime = 0x02;
|
|
365
|
+
GrantedExtendedTime = 0x03;
|
|
366
|
+
GrantedToggleUnlock = 0x04;
|
|
367
|
+
GrantedToggleLock = 0x05;
|
|
368
|
+
|
|
369
|
+
// -- Oss So events
|
|
370
|
+
|
|
371
|
+
/* Reserved 0x06 - 0x7F */
|
|
372
|
+
|
|
373
|
+
// Oss So events --
|
|
374
|
+
|
|
375
|
+
Denied = 0x80;
|
|
376
|
+
|
|
377
|
+
/* Reserved 0x81 */
|
|
378
|
+
|
|
379
|
+
DeniedBlacklisted = 0x82;
|
|
380
|
+
DeniedValidity = 0x83;
|
|
381
|
+
DeniedDTSchedule = 0x84;
|
|
382
|
+
|
|
383
|
+
// -- Oss So events
|
|
384
|
+
|
|
385
|
+
/* Reserved 0x85 - 0xFF */
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
message BlueEvent {
|
|
389
|
+
required uint32 sequenceId = 1;
|
|
390
|
+
|
|
391
|
+
required BlueLocalTimestamp eventTime = 2;
|
|
392
|
+
|
|
393
|
+
required BlueEventId eventId = 4;
|
|
394
|
+
|
|
395
|
+
required int32 eventInfo = 5;
|
|
396
|
+
|
|
397
|
+
// Set if identity related
|
|
398
|
+
optional string identity = 6 [ (nanopb).max_length = 10 ];
|
|
399
|
+
|
|
400
|
+
// Set if eventId =
|
|
401
|
+
optional string command = 7 [ (nanopb).max_length = 8 ];
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
///////////////////////////////////////////////////////////////////////
|
|
405
|
+
// Secure Protocol
|
|
406
|
+
///////////////////////////////////////////////////////////////////////
|
|
407
|
+
|
|
408
|
+
message BlueSPHandshake {
|
|
409
|
+
required bytes transponderSalt = 1
|
|
410
|
+
[ (nanopb).max_size = 16, (nanopb).fixed_length = true ];
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
message BlueSPHandshakeReply {
|
|
414
|
+
required bytes terminalSalt = 1
|
|
415
|
+
[ (nanopb).max_size = 16, (nanopb).fixed_length = true ];
|
|
416
|
+
required bytes terminalSignature = 2 [ (nanopb).max_size = 74 ];
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
message BlueSPDataCommand {
|
|
420
|
+
required BlueCredentialId credentialId = 1;
|
|
421
|
+
required BlueLocalTimestamp validityStart = 2;
|
|
422
|
+
required BlueLocalTimestamp validityEnd = 3;
|
|
423
|
+
required string command = 4 [ (nanopb).max_length = 8 ];
|
|
424
|
+
required bytes data = 5
|
|
425
|
+
[ (nanopb).max_size = 1792 ]; // we'll add 256b for add. data
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
message BlueSPData {
|
|
429
|
+
required bytes signature = 1 [ (nanopb).max_size = 74 ];
|
|
430
|
+
|
|
431
|
+
oneof payload {
|
|
432
|
+
BlueSPDataCommand command = 2;
|
|
433
|
+
BlueOssSoMobile ossSo = 3;
|
|
434
|
+
BlueOssSidMobile ossSid = 4;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
message BlueSPResult {
|
|
439
|
+
required bytes data = 1
|
|
440
|
+
[ (nanopb).max_size = 1792 ]; // we'll add 256b for add. data
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
///////////////////////////////////////////////////////////////////////
|
|
444
|
+
// Oss shared types
|
|
445
|
+
///////////////////////////////////////////////////////////////////////
|
|
446
|
+
|
|
447
|
+
enum BlueOssCredentialTypeSource {
|
|
448
|
+
Oss = 0;
|
|
449
|
+
Proprietary = 1;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
message BlueOssAccessResult {
|
|
453
|
+
// If access is granted or not
|
|
454
|
+
required bool accessGranted = 1;
|
|
455
|
+
// The final access type
|
|
456
|
+
required BlueAccessType accessType = 2;
|
|
457
|
+
// If access type is a toggle then this specifies the time it should lock
|
|
458
|
+
// again
|
|
459
|
+
required BlueLocalTimestamp scheduleEndTime = 3;
|
|
460
|
+
// If access denied this marks if it was denied due a schedule missmatch
|
|
461
|
+
required bool scheduleMissmatch = 4;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
///////////////////////////////////////////////////////////////////////
|
|
465
|
+
// Oss Sid Standard
|
|
466
|
+
///////////////////////////////////////////////////////////////////////
|
|
467
|
+
|
|
468
|
+
message BlueOssSidVersion {
|
|
469
|
+
optional uint32 versionMajor = 1 [ default = 1 ];
|
|
470
|
+
optional uint32 versionMinor = 2 [ default = 0 ];
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
message BlueOssSidCredentialTypeOss { optional bool notUsed = 1; }
|
|
474
|
+
|
|
475
|
+
message BlueOssSidCredentialTypeProprietary {
|
|
476
|
+
required bytes mfgCode = 1
|
|
477
|
+
[ (nanopb).max_size = 7, (nanopb).fixed_length = true ];
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
message BlueOssSidCredentialType {
|
|
481
|
+
required BlueOssCredentialTypeSource typeSource = 1;
|
|
482
|
+
optional BlueOssSidCredentialTypeOss oss = 2;
|
|
483
|
+
optional BlueOssSidCredentialTypeProprietary proprietary = 3;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
message BlueOssSidFileInfo {
|
|
487
|
+
required uint32 versionMajor = 1;
|
|
488
|
+
required uint32 versionMinor = 2;
|
|
489
|
+
required BlueOssSidCredentialType credentialType = 3;
|
|
490
|
+
required BlueCredentialId credentialId = 4;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
//
|
|
494
|
+
// Full Oss Sid configuration
|
|
495
|
+
//
|
|
496
|
+
|
|
497
|
+
message BlueOssSidConfiguration { required BlueOssSidFileInfo info = 1; }
|
|
498
|
+
|
|
499
|
+
//
|
|
500
|
+
// Oss Sid storage profile
|
|
501
|
+
//
|
|
502
|
+
|
|
503
|
+
message BlueOssSidStorageProfile {
|
|
504
|
+
required uint32 dataLength = 1;
|
|
505
|
+
required uint32 fileSize = 2;
|
|
506
|
+
required uint32 infoDataLength = 3;
|
|
507
|
+
required uint32 infoFileSize = 4;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
//
|
|
511
|
+
// Oss Sid Provisioning
|
|
512
|
+
//
|
|
513
|
+
|
|
514
|
+
message BlueOssSidProvisioningConfiguration { optional bool notUsed = 1; }
|
|
515
|
+
|
|
516
|
+
message BlueOssSidProvisioningData {
|
|
517
|
+
// If not set, uses default from storage
|
|
518
|
+
optional BlueOssSidProvisioningConfiguration configuration = 1;
|
|
519
|
+
required BlueOssSidCredentialType credentialType = 2;
|
|
520
|
+
required BlueCredentialId credentialId = 3;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
//
|
|
524
|
+
// Oss Sid mobile
|
|
525
|
+
//
|
|
526
|
+
|
|
527
|
+
message BlueOssSidMobile {
|
|
528
|
+
required bytes infoFile = 1 [ (nanopb).max_size = 32 ];
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
message BlueOssSidMobileProvisioningConfiguration {
|
|
532
|
+
optional bool notUsed = 1 [ default = false ];
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
//
|
|
536
|
+
// Oss Sid Mifare
|
|
537
|
+
//
|
|
538
|
+
|
|
539
|
+
// Default configuration from spec
|
|
540
|
+
message BlueOssSidMifareDesfireProvisioningConfiguration {
|
|
541
|
+
optional bool notUsed = 1 [ default = false ];
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
// Demo keys from spec
|
|
545
|
+
message BlueOssSidMifareDesfireConfiguration {
|
|
546
|
+
// The PICC master key, default is oss sid demo key
|
|
547
|
+
required bytes piccMasterKey = 1 [
|
|
548
|
+
(nanopb).max_size = 16,
|
|
549
|
+
default = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\xAA"
|
|
550
|
+
];
|
|
551
|
+
// The oss application master key, default is oss sid demo key
|
|
552
|
+
required bytes appMasterKey = 2 [
|
|
553
|
+
(nanopb).max_size = 16,
|
|
554
|
+
default = "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF"
|
|
555
|
+
];
|
|
556
|
+
// The oss project read key, default is oss sid demo key
|
|
557
|
+
required bytes projectKey = 3 [
|
|
558
|
+
(nanopb).max_size = 16,
|
|
559
|
+
default = "\xFF\xEE\xDD\xCC\xBB\xAA\x99\x88\x77\x66\x55\x44\x33\x22\x11\x00"
|
|
560
|
+
];
|
|
561
|
+
// The oss application id, default is the oss sid default aid
|
|
562
|
+
required uint32 aid = 4 [ default = 16076801 ];
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
//
|
|
566
|
+
// Oss Sid Settings
|
|
567
|
+
//
|
|
568
|
+
|
|
569
|
+
message BlueOssSidSettings {
|
|
570
|
+
optional BlueOssSidMifareDesfireConfiguration mifareDesfireConfig = 1;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
///////////////////////////////////////////////////////////////////////
|
|
574
|
+
// Oss So Standard
|
|
575
|
+
///////////////////////////////////////////////////////////////////////
|
|
576
|
+
|
|
577
|
+
message BlueOssSoVersion {
|
|
578
|
+
optional uint32 versionMajor = 1 [ default = 1 ];
|
|
579
|
+
optional uint32 versionMinor = 2 [ default = 1 ];
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
//
|
|
583
|
+
// Oss So Data Types
|
|
584
|
+
//
|
|
585
|
+
|
|
586
|
+
enum BlueOssSoCredentialTypeOssCredential {
|
|
587
|
+
Standard = 0;
|
|
588
|
+
InterventionMedia = 1;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
message BlueOssSoCredentialTypeOss {
|
|
592
|
+
required BlueOssSoCredentialTypeOssCredential credential = 1;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
message BlueOssSoCredentialTypeProprietary {
|
|
596
|
+
required bytes mfgCode = 1
|
|
597
|
+
[ (nanopb).max_size = 7, (nanopb).fixed_length = true ];
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
message BlueOssSoCredentialType {
|
|
601
|
+
required BlueOssCredentialTypeSource typeSource = 1;
|
|
602
|
+
optional BlueOssSoCredentialTypeOss oss = 2;
|
|
603
|
+
optional BlueOssSoCredentialTypeProprietary proprietary = 3;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
message BlueOssSoDTScheduleDay {
|
|
607
|
+
// 0 = Monday -> 6 = Sunday (Matches BlueWeekday)
|
|
608
|
+
repeated bool weekdays = 1
|
|
609
|
+
[ (nanopb).max_count = 7, (nanopb).fixed_count = true ];
|
|
610
|
+
|
|
611
|
+
repeated BlueLocalTimeperiod timePeriods = 8 [ (nanopb).max_count = 4 ];
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
message BlueOssSoDTSchedule {
|
|
615
|
+
repeated BlueOssSoDTScheduleDay days = 1 [ (nanopb).max_count = 4 ];
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
enum BlueOssSoDoorInfoAccessBy {
|
|
619
|
+
DoorGroupId = 0;
|
|
620
|
+
DoorId = 1;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
message BlueOssSoDoorInfo {
|
|
624
|
+
required uint32 id = 1;
|
|
625
|
+
required BlueOssSoDoorInfoAccessBy accessBy = 2;
|
|
626
|
+
required uint32 dtScheduleNumber = 3;
|
|
627
|
+
required BlueAccessType accessType = 4;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
message BlueOssSoEvent {
|
|
631
|
+
required BlueLocalTimestamp eventTime = 1;
|
|
632
|
+
required uint32 doorId = 2;
|
|
633
|
+
required BlueEventId eventId = 3;
|
|
634
|
+
|
|
635
|
+
// If eventId = AccessGranted or AccessDenied -> BlueEventInfoAccess
|
|
636
|
+
// If eventId = SystemEvent -> BlueEventInfoSystem
|
|
637
|
+
// Otherwise unused
|
|
638
|
+
required uint32 eventInfo = 4;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
message BlueOssSoExtFeature {
|
|
642
|
+
required uint32 tag = 1;
|
|
643
|
+
required bytes value = 2 [ (nanopb).max_size = 64 ];
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
message BlueOssSoExtFeature_ValidityStart {
|
|
647
|
+
required bool isValid = 1;
|
|
648
|
+
required BlueLocalTimestamp validityStartTime = 2;
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
//
|
|
652
|
+
// Oss So File types
|
|
653
|
+
//
|
|
654
|
+
|
|
655
|
+
enum BlueOssSoFileId {
|
|
656
|
+
Info = 0;
|
|
657
|
+
Data = 1;
|
|
658
|
+
Event = 2;
|
|
659
|
+
Blacklist = 3;
|
|
660
|
+
CustomerExtensions = 4;
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
message BlueOssSoFileInfo {
|
|
664
|
+
required uint32 versionMajor = 1;
|
|
665
|
+
required uint32 versionMinor = 2;
|
|
666
|
+
required BlueOssSoCredentialType credentialType = 3;
|
|
667
|
+
required BlueCredentialId credentialId = 4;
|
|
668
|
+
required uint32 maxEventEntries = 5;
|
|
669
|
+
required uint32 maxBlacklistEntries = 6;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
message BlueOssSoFileData {
|
|
673
|
+
required BlueLocalTimestamp validity = 1;
|
|
674
|
+
required uint32 siteId = 2;
|
|
675
|
+
required uint32 numberOfDayIdsPerDTSchedule = 3;
|
|
676
|
+
required uint32 numberOfTimePeriodsPerDayId = 4;
|
|
677
|
+
required bool hasExtensions = 5;
|
|
678
|
+
repeated BlueOssSoDoorInfo doorInfoEntries = 6 [ (nanopb).max_count = 255 ];
|
|
679
|
+
repeated BlueOssSoDTSchedule dtSchedules = 7 [ (nanopb).max_count = 15 ];
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
message BlueOssSoFileEvent {
|
|
683
|
+
// TODO : max_count must always equal MaxOssSoEventId - 1
|
|
684
|
+
required bytes supportedEventIds = 1
|
|
685
|
+
[ (nanopb).max_size = 12, (nanopb).fixed_length = true ];
|
|
686
|
+
repeated BlueOssSoEvent events = 2 [ (nanopb).max_count = 255 ];
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
message BlueOssSoFileBlacklist {
|
|
690
|
+
repeated BlueBlacklistEntry entries = 1 [ (nanopb).max_count = 255 ];
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
message BlueOssSoFileCustomerExtensions {
|
|
694
|
+
repeated BlueOssSoExtFeature extFeatures = 1 [ (nanopb).max_count = 8 ];
|
|
695
|
+
|
|
696
|
+
//
|
|
697
|
+
// -- Known features --
|
|
698
|
+
//
|
|
699
|
+
optional BlueOssSoExtFeature_ValidityStart validityStart = 2;
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
//
|
|
703
|
+
// Full Oss So configuration
|
|
704
|
+
//
|
|
705
|
+
|
|
706
|
+
message BlueOssSoConfiguration {
|
|
707
|
+
optional BlueOssSoFileInfo info = 1;
|
|
708
|
+
optional BlueOssSoFileData data = 2;
|
|
709
|
+
optional BlueOssSoFileEvent event = 3;
|
|
710
|
+
optional BlueOssSoFileBlacklist blacklist = 4;
|
|
711
|
+
optional BlueOssSoFileCustomerExtensions customerExtensions = 5;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
//
|
|
715
|
+
// Oss So storage profile
|
|
716
|
+
//
|
|
717
|
+
|
|
718
|
+
message BlueOssSoStorageProfile {
|
|
719
|
+
required uint32 dataLength = 1;
|
|
720
|
+
required uint32 fileSize = 2;
|
|
721
|
+
required uint32 infoDataLength = 3;
|
|
722
|
+
required uint32 infoFileSize = 4;
|
|
723
|
+
required uint32 dataDataLength = 5;
|
|
724
|
+
required uint32 dataFileSize = 6;
|
|
725
|
+
required uint32 eventDataLength = 7;
|
|
726
|
+
required uint32 eventFileSize = 8;
|
|
727
|
+
required uint32 blacklistDataLength = 9;
|
|
728
|
+
required uint32 blacklistFileSize = 10;
|
|
729
|
+
required uint32 customerExtensionsDataLength = 11;
|
|
730
|
+
required uint32 customerExtensionsFileSize = 12;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
//
|
|
734
|
+
// Oss So Provisioning
|
|
735
|
+
//
|
|
736
|
+
|
|
737
|
+
message BlueOssSoProvisioningConfiguration {
|
|
738
|
+
required uint32 numberOfDoors = 1;
|
|
739
|
+
required uint32 numberOfDTSchedules = 2;
|
|
740
|
+
required uint32 numberOfDayIdsPerDTSchedule = 3;
|
|
741
|
+
required uint32 numberOfTimePeriodsPerDayId = 4;
|
|
742
|
+
required uint32 numberOfEvents = 5;
|
|
743
|
+
// TODO : max_count must always equal MaxOssSoEventId - 1
|
|
744
|
+
required bytes supportedEventIds = 6
|
|
745
|
+
[ (nanopb).max_size = 12, (nanopb).fixed_length = true ];
|
|
746
|
+
required uint32 numberOfBlacklistEntries = 7;
|
|
747
|
+
required uint32 customerExtensionsSize = 8;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
message BlueOssSoProvisioningData {
|
|
751
|
+
// If not set, uses default from storage
|
|
752
|
+
optional BlueOssSoProvisioningConfiguration configuration = 1;
|
|
753
|
+
required BlueOssSoCredentialType credentialType = 2;
|
|
754
|
+
required BlueCredentialId credentialId = 3;
|
|
755
|
+
required uint32 siteId = 4;
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
//
|
|
759
|
+
// Oss So Mobile
|
|
760
|
+
//
|
|
761
|
+
|
|
762
|
+
message BlueOssSoMobile {
|
|
763
|
+
required bytes infoFile = 1 [ (nanopb).max_size = 32 ];
|
|
764
|
+
required bytes dataFile = 2 [ (nanopb).max_size = 291 ]; // 1 door
|
|
765
|
+
required bytes blacklistFile = 3 [ (nanopb).max_size = 257 ]; // 16 items max
|
|
766
|
+
required bytes customerExtensionsFile = 4 [ (nanopb).max_size = 32 ];
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
message BlueOssSoMobileProvisioningConfiguration {
|
|
770
|
+
required uint32 numberOfDoors = 1 [ default = 1 ];
|
|
771
|
+
required uint32 numberOfDTSchedules = 2 [ default = 1 ];
|
|
772
|
+
required uint32 numberOfDayIdsPerDTSchedule = 3 [ default = 4 ];
|
|
773
|
+
required uint32 numberOfTimePeriodsPerDayId = 4 [ default = 4 ];
|
|
774
|
+
required uint32 numberOfEvents = 5 [ default = 0 ];
|
|
775
|
+
// TODO : max_count must always equal MaxOssSoEventId - 1
|
|
776
|
+
required bytes supportedEventIds = 6
|
|
777
|
+
[ (nanopb).max_size = 12, (nanopb).fixed_length = true ];
|
|
778
|
+
required uint32 numberOfBlacklistEntries = 7 [ default = 16 ];
|
|
779
|
+
required uint32 customerExtensionsSize = 8 [ default = 32 ];
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
//
|
|
783
|
+
// Oss So Mifare
|
|
784
|
+
//
|
|
785
|
+
|
|
786
|
+
// Default configuration from spec plus customer extensions spacing
|
|
787
|
+
message BlueOssSoMifareDesfireProvisioningConfiguration {
|
|
788
|
+
required uint32 numberOfDoors = 1 [ default = 70 ];
|
|
789
|
+
required uint32 numberOfDTSchedules = 2 [ default = 1 ];
|
|
790
|
+
required uint32 numberOfDayIdsPerDTSchedule = 3 [ default = 4 ];
|
|
791
|
+
required uint32 numberOfTimePeriodsPerDayId = 4 [ default = 2 ];
|
|
792
|
+
required uint32 numberOfEvents = 5 [ default = 16 ];
|
|
793
|
+
// TODO : max_count must always equal MaxOssSoEventId - 1
|
|
794
|
+
required bytes supportedEventIds = 6 [
|
|
795
|
+
(nanopb).max_size = 12,
|
|
796
|
+
(nanopb).fixed_length = true,
|
|
797
|
+
default = "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"
|
|
798
|
+
];
|
|
799
|
+
required uint32 numberOfBlacklistEntries = 7 [ default = 3 ];
|
|
800
|
+
required uint32 customerExtensionsSize = 8 [ default = 16 ];
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
// Demo keys from spec
|
|
804
|
+
message BlueOssSoMifareDesfireConfiguration {
|
|
805
|
+
// The PICC master key, default is oss so demo key
|
|
806
|
+
required bytes piccMasterKey = 1 [
|
|
807
|
+
(nanopb).max_size = 16,
|
|
808
|
+
default = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\xAA"
|
|
809
|
+
];
|
|
810
|
+
// The oss application master key, default is oss so demo key
|
|
811
|
+
required bytes appMasterKey = 2 [
|
|
812
|
+
(nanopb).max_size = 16,
|
|
813
|
+
default = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
|
|
814
|
+
];
|
|
815
|
+
// The oss project read/write key, default is oss so demo key
|
|
816
|
+
required bytes projectKey = 3 [
|
|
817
|
+
(nanopb).max_size = 16,
|
|
818
|
+
default = "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
|
|
819
|
+
];
|
|
820
|
+
// The oss application id, default is the oss so default aid
|
|
821
|
+
required uint32 aid = 4 [ default = 16076800 ];
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
//
|
|
825
|
+
// Oss So Settings
|
|
826
|
+
//
|
|
827
|
+
|
|
828
|
+
message BlueOssSoSettings {
|
|
829
|
+
optional BlueOssSoMifareDesfireConfiguration mifareDesfireConfig = 1;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
///////////////////////////////////////////////////////////////////////
|
|
833
|
+
// Test types
|
|
834
|
+
///////////////////////////////////////////////////////////////////////
|
|
835
|
+
|
|
836
|
+
message _BlueTestEncodeDecode {
|
|
837
|
+
required string vendor = 1 [ (nanopb).max_length = 32 ];
|
|
838
|
+
required string hardware_name = 2 [ (nanopb).max_length = 32 ];
|
|
839
|
+
required int32 hardware_version = 3;
|
|
840
|
+
required int32 application_version = 4;
|
|
841
|
+
}
|