19#ifdef JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED
20 #include <juce_core/juce_core.h>
22 #include <JuceHeader.h>
42 bool ok = parameterData.size() == 1;
46 ret = (bool)(parameterData[0] ==
static_cast<std::uint8_t
>(1));
59 return ByteVector{ boolValue ?
static_cast<std::uint8_t
>(1) :
static_cast<std::uint8_t
>(0) };
67 bool ok = (parameterData.size() >=
sizeof(std::int32_t));
70 ret = (((parameterData[0] <<
uint8_24) & 0xff000000) +
71 ((parameterData[1] <<
uint8_16) & 0x00ff0000) +
72 ((parameterData[2] <<
uint8_8) & 0x0000ff00) + parameterData[3]);
88 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 24));
89 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 16));
90 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 8));
91 ret.push_back(
static_cast<std::uint8_t
>(intValue));
99 bool ok = (parameterData.size() >=
sizeof(std::uint8_t));
102 ret = parameterData[0];
116 ret.push_back(value);
124 std::uint16_t ret(0);
125 bool ok = (parameterData.size() >=
sizeof(std::uint16_t));
128 for (
size_t i = 0; i <
sizeof(std::uint16_t); i++)
130 ret = ((ret << static_cast<std::uint16_t>(8)) & 0xff00) + parameterData[i];
145 ret.push_back(
static_cast<std::uint8_t
>(value >> 8));
146 ret.push_back(
static_cast<std::uint8_t
>(value));
153 std::uint32_t ret(0);
155 bool ok = (parameterData.size() >=
sizeof(std::uint32_t));
158 ret = (((parameterData[0] <<
uint8_24) & 0xff000000) +
159 ((parameterData[1] <<
uint8_16) & 0x00ff0000) +
160 ((parameterData[2] <<
uint8_8) & 0x0000ff00) + parameterData[3]);
176 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 24));
177 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 16));
178 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 8));
179 ret.push_back(
static_cast<std::uint8_t
>(intValue));
186 std::uint64_t ret(0);
188 bool ok = (parameterData.size() >=
sizeof(std::uint64_t));
192 memcpy(&tmp, parameterData.data(),
sizeof(juce::uint64));
193 ret = juce::ByteOrder::swapIfLittleEndian<juce::uint64>(tmp);
208 static_cast<std::uint8_t
>(intValue >> 56),
209 static_cast<std::uint8_t
>(intValue >> 48),
210 static_cast<std::uint8_t
>(intValue >> 40),
211 static_cast<std::uint8_t
>(intValue >> 32),
212 static_cast<std::uint8_t
>(intValue >> 24),
213 static_cast<std::uint8_t
>(intValue >> 16),
214 static_cast<std::uint8_t
>(intValue >> 8),
215 static_cast<std::uint8_t
>(intValue),
223 bool ok = parameterData.size() >= 2;
225 ret = std::string(parameterData.begin() + 2, parameterData.end());
239 const char* pStringData =
string.c_str();
240 std::size_t stringLength =
string.length();
242 ret.reserve(stringLength +
static_cast<std::size_t
>(2));
243 ret.push_back(
static_cast<std::uint8_t
>(stringLength >>
static_cast<std::size_t
>(8)));
244 ret.push_back(
static_cast<std::uint8_t
>(stringLength));
245 for (
int i = 0; i < stringLength; i++)
247 ret.push_back(
static_cast<std::uint8_t
>(pStringData[i]));
257 bool ok = (parameterData.size() >=
sizeof(std::float_t));
258 ok = ok && (
sizeof(int) ==
sizeof(std::float_t));
261 int intValue = (((parameterData[0] <<
uint8_24) & 0xff000000) +
262 ((parameterData[1] <<
uint8_16) & 0x00ff0000) +
263 ((parameterData[2] <<
uint8_8) & 0x0000ff00) + parameterData[3]);
264 ret = *(std::float_t*)&intValue;
280 jassert(
sizeof(std::uint32_t) ==
sizeof(std::float_t));
281 std::uint32_t intValue = *(std::uint32_t*)&floatValue;
283 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 24));
284 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 16));
285 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 8));
286 ret.push_back(
static_cast<std::uint8_t
>(intValue));
293 std::double_t ret(0);
295 bool ok = (parameterData.size() >=
sizeof(std::double_t));
296 ok = ok && (
sizeof(std::uint64_t) ==
sizeof(std::double_t));
299 std::uint64_t intValue = (((
static_cast<std::uint64_t
>(parameterData[0]) <<
uint8_56) & 0xff00000000000000ULL) +
300 ((
static_cast<std::uint64_t
>(parameterData[1]) <<
uint8_48) & 0x00ff000000000000ULL) +
301 ((
static_cast<std::uint64_t
>(parameterData[2]) <<
uint8_40) & 0x0000ff0000000000ULL) +
302 ((
static_cast<std::uint64_t
>(parameterData[3]) <<
uint8_32) & 0x000000ff00000000ULL) +
303 ((
static_cast<std::uint64_t
>(parameterData[4]) <<
uint8_24) & 0x00000000ff000000ULL) +
304 ((
static_cast<std::uint64_t
>(parameterData[5]) <<
uint8_16) & 0x0000000000ff0000ULL) +
305 ((
static_cast<std::uint64_t
>(parameterData[6]) <<
uint8_8) & 0x000000000000ff00ULL) +
307 ret = *(std::double_t*)&intValue;
320 jassert(
sizeof(std::uint64_t) ==
sizeof(std::double_t));
321 std::uint64_t intValue = *(std::uint64_t*)&doubleValue;
325 static_cast<std::uint8_t
>(intValue >> 56),
326 static_cast<std::uint8_t
>(intValue >> 48),
327 static_cast<std::uint8_t
>(intValue >> 40),
328 static_cast<std::uint8_t
>(intValue >> 32),
329 static_cast<std::uint8_t
>(intValue >> 24),
330 static_cast<std::uint8_t
>(intValue >> 16),
331 static_cast<std::uint8_t
>(intValue >> 8),
332 static_cast<std::uint8_t
>(intValue),
338 jassert(
sizeof(std::uint32_t) ==
sizeof(std::float_t));
339 std::uint32_t xInt = *(std::uint32_t*)&x;
340 std::uint32_t yInt = *(std::uint32_t*)&y;
341 std::uint32_t zInt = *(std::uint32_t*)&z;
345 static_cast<std::uint8_t
>(xInt >> 24),
346 static_cast<std::uint8_t
>(xInt >> 16),
347 static_cast<std::uint8_t
>(xInt >> 8),
348 static_cast<std::uint8_t
>(xInt),
349 static_cast<std::uint8_t
>(yInt >> 24),
350 static_cast<std::uint8_t
>(yInt >> 16),
351 static_cast<std::uint8_t
>(yInt >> 8),
352 static_cast<std::uint8_t
>(yInt),
353 static_cast<std::uint8_t
>(zInt >> 24),
354 static_cast<std::uint8_t
>(zInt >> 16),
355 static_cast<std::uint8_t
>(zInt >> 8),
356 static_cast<std::uint8_t
>(zInt),
372 jassert(
sizeof(std::uint32_t) ==
sizeof(std::float_t));
374 std::uint32_t intValue = *(std::uint32_t*)&hor;
375 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 24));
376 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 16));
377 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 8));
378 ret.push_back(
static_cast<std::uint8_t
>(intValue));
380 intValue = *(std::uint32_t*)|
381 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 24));
382 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 16));
383 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 8));
384 ret.push_back(
static_cast<std::uint8_t
>(intValue));
386 intValue = *(std::uint32_t*)&rot;
387 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 24));
388 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 16));
389 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 8));
390 ret.push_back(
static_cast<std::uint8_t
>(intValue));
392 intValue = *(std::uint32_t*)&x;
393 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 24));
394 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 16));
395 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 8));
396 ret.push_back(
static_cast<std::uint8_t
>(intValue));
398 intValue = *(std::uint32_t*)&y;
399 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 24));
400 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 16));
401 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 8));
402 ret.push_back(
static_cast<std::uint8_t
>(intValue));
404 intValue = *(std::uint32_t*)&z;
405 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 24));
406 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 16));
407 ret.push_back(
static_cast<std::uint8_t
>(intValue >> 8));
408 ret.push_back(
static_cast<std::uint8_t
>(intValue));
416 ret.reserve(add ? 25 : 16);
418 ret.push_back(
static_cast<std::uint8_t
>(ono >> 24));
419 ret.push_back(
static_cast<std::uint8_t
>(ono >> 16));
420 ret.push_back(
static_cast<std::uint8_t
>(ono >> 8));
421 ret.push_back(
static_cast<std::uint8_t
>(ono));
422 ret.push_back(
static_cast<std::uint8_t
>(0x00));
423 ret.push_back(
static_cast<std::uint8_t
>(0x01));
424 ret.push_back(
static_cast<std::uint8_t
>(0x00));
425 ret.push_back(
static_cast<std::uint8_t
>(0x01));
427 ret.push_back(
static_cast<std::uint8_t
>(ono >> 24));
428 ret.push_back(
static_cast<std::uint8_t
>(ono >> 16));
429 ret.push_back(
static_cast<std::uint8_t
>(ono >> 8));
430 ret.push_back(
static_cast<std::uint8_t
>(ono));
431 ret.push_back(
static_cast<std::uint8_t
>(0x00));
432 ret.push_back(
static_cast<std::uint8_t
>(0x03));
433 ret.push_back(
static_cast<std::uint8_t
>(0x00));
434 ret.push_back(
static_cast<std::uint8_t
>(0x01));
439 ret.push_back(
static_cast<std::uint8_t
>(0x00));
440 ret.push_back(
static_cast<std::uint8_t
>(0x00));
441 ret.push_back(
static_cast<std::uint8_t
>(0x01));
443 ret.push_back(
static_cast<std::uint8_t
>(0x00));
444 ret.push_back(
static_cast<std::uint8_t
>(0x04));
445 ret.push_back(
static_cast<std::uint8_t
>(0x00));
446 ret.push_back(
static_cast<std::uint8_t
>(0x00));
447 ret.push_back(
static_cast<std::uint8_t
>(0x00));
448 ret.push_back(
static_cast<std::uint8_t
>(0x00));
460 result = std::string(
"OK");
463 result = std::string(
"ProtocolVersionError");
466 result = std::string(
"DeviceError");
469 result = std::string(
"Locked");
472 result = std::string(
"BadFormat");
475 result = std::string(
"BadONo");
478 result = std::string(
"ParameterError");
481 result = std::string(
"ParameterOutOfRange");
484 result = std::string(
"NotImplemented");
487 result = std::string(
"InvalidRequest");
490 result = std::string(
"ProcessingFailed");
493 result = std::string(
"BadMethod");
496 result = std::string(
"PartiallySucceeded");
499 result = std::string(
"Timeout");
502 result = std::string(
"BufferOverflow");
505 result = std::string(
"PermissionDenied");
508 result = std::to_string(status);
522 result = std::string(
"Boolean");
525 result = std::string(
"Int8");
528 result = std::string(
"Int16");
531 result = std::string(
"Int32");
534 result = std::string(
"Int64");
537 result = std::string(
"UInt8");
540 result = std::string(
"UInt16");
543 result = std::string(
"UInt32");
546 result = std::string(
"UInt64");
549 result = std::string(
"Float32");
552 result = std::string(
"Float64");
555 result = std::string(
"String");
558 result = std::string(
"BitString");
561 result = std::string(
"Blob");
564 result = std::string(
"BlobFixedLength");
567 result = std::string(
"Position (d&b)");
570 result = std::string(
"Custom");
586 result = std::string(
"InvalidSessionID");
589 result = std::string(
"LocalSessionID");
592 result = std::to_string(handle);
601 return (((
static_cast<std::uint8_t
>(buffer[0]) <<
uint8_24) & 0xff000000) +
602 ((
static_cast<std::uint8_t
>(buffer[1]) <<
uint8_16) & 0x00ff0000) +
603 ((
static_cast<std::uint8_t
>(buffer[2]) <<
uint8_8) & 0x0000ff00) +
604 static_cast<std::uint8_t
>(buffer[3]));
609 return (((buffer[0] <<
uint8_24) & 0xff000000) +
610 ((buffer[1] <<
uint8_16) & 0x00ff0000) +
611 ((buffer[2] <<
uint8_8) & 0x0000ff00) +
617 return (((
static_cast<std::uint8_t
>(buffer[0]) <<
uint8_8) & 0xff00) +
618 static_cast<std::uint8_t
>(buffer[1]));
623 return (((buffer[0] <<
uint8_8) & 0xff00) +
627std::uint32_t
GetONo(std::uint32_t type, std::uint32_t record, std::uint32_t channel, std::uint32_t boxAndObjectNumber)
629 return (std::uint32_t((type) & 0xF) << 28)
630 | (std::uint32_t((record) & 0xFF) << 20)
631 | (std::uint32_t((channel) & 0x1F) << 15)
632 | (std::uint32_t(boxAndObjectNumber) & 0x7FFF);
635std::uint32_t
GetONoTy2(std::uint32_t type, std::uint32_t record, std::uint32_t channel, std::uint32_t boxNumber, std::uint32_t objectNumber)
637 return (std::uint32_t((type) & 0xF) << 28)
638 | (std::uint32_t((record) & 0xFF) << 20)
639 | (std::uint32_t((channel) & 0xFF) << 12)
640 | (std::uint32_t((boxNumber) & 0x1F) << 7)
641 | (std::uint32_t((objectNumber) & 0x7F));
Minimal AES70 / OCP.1 TCP client/server library built on JUCE.
std::int32_t DataToInt32(const ByteVector ¶meterData, bool *pOk)
ByteVector DataFromOnoForSubscription(std::uint32_t ono, bool add)
std::string HandleToString(std::uint32_t handle)
ByteVector DataFromAimingAndPosition(std::float_t hor, std::float_t vert, std::float_t rot, std::float_t x, std::float_t y, std::float_t z)
std::uint32_t GetONo(std::uint32_t type, std::uint32_t record, std::uint32_t channel, std::uint32_t boxAndObjectNumber)
std::string DataToString(const ByteVector ¶meterData, bool *pOk)
std::vector< std::uint8_t > ByteVector
Binary buffer type used throughout NanoOcp for all serialized OCP.1 data.
std::float_t DataToFloat(const ByteVector ¶meterData, bool *pOk)
@ OCP1DATATYPE_BOOLEAN
Single byte: 0 = false, non-zero = true.
@ OCP1DATATYPE_CUSTOM
User-defined / vendor-specific type.
@ OCP1DATATYPE_FLOAT64
IEEE 754 double-precision float, big-endian (8 bytes).
@ OCP1DATATYPE_DB_POSITION
d&b-specific 3D position blob (3 × float32); used by deprecated position agent.
@ OCP1DATATYPE_INT16
Signed 16-bit integer, big-endian.
@ OCP1DATATYPE_STRING
OCA string: 2-byte big-endian length prefix followed by UTF-8 bytes.
@ OCP1DATATYPE_UINT16
Unsigned 16-bit integer, big-endian.
@ OCP1DATATYPE_INT8
Signed 8-bit integer.
@ OCP1DATATYPE_UINT64
Unsigned 64-bit integer, big-endian.
@ OCP1DATATYPE_UINT32
Unsigned 32-bit integer, big-endian.
@ OCP1DATATYPE_FLOAT32
IEEE 754 single-precision float, big-endian (4 bytes).
@ OCP1DATATYPE_BLOB
Variable-length binary blob; layout is property-specific.
@ OCP1DATATYPE_BLOB_FIXED_LEN
Fixed-length binary blob; size determined by the property definition.
@ OCP1DATATYPE_UINT8
Unsigned 8-bit integer.
@ OCP1DATATYPE_INT64
Signed 64-bit integer, big-endian.
@ OCP1DATATYPE_BIT_STRING
Packed bit string.
@ OCP1DATATYPE_INT32
Signed 32-bit integer, big-endian.
ByteVector DataFromUint64(std::uint64_t intValue)
ByteVector DataFromUint32(std::uint32_t intValue)
static constexpr std::uint8_t uint8_24(24)
ByteVector DataFromFloat(std::float_t floatValue)
static constexpr std::uint8_t uint8_48(48)
ByteVector DataFromBool(bool boolValue)
Convenience helper method to convert a bool into a byte vector.
std::uint8_t DataToUint8(const ByteVector ¶meterData, bool *pOk)
std::uint32_t DataToUint32(const ByteVector ¶meterData, bool *pOk)
ByteVector DataFromUint16(std::uint16_t value)
std::uint16_t DataToUint16(const ByteVector ¶meterData, bool *pOk)
ByteVector DataFromString(const std::string &string)
ByteVector DataFromPositionAndRotation(std::float_t x, std::float_t y, std::float_t z, std::float_t hor, std::float_t vert, std::float_t rot)
static constexpr std::uint8_t uint8_16(16)
ByteVector DataFromDouble(std::double_t doubleValue)
ByteVector DataFromUint8(std::uint8_t value)
static constexpr std::uint8_t uint8_8(8)
std::string DataTypeToString(int dataType)
std::uint32_t ReadUint32(const char *buffer)
ByteVector DataFromInt32(std::int32_t intValue)
std::uint16_t ReadUint16(const char *buffer)
std::double_t DataToDouble(const ByteVector ¶meterData, bool *pOk)
static constexpr std::uint8_t uint8_56(56)
std::uint32_t GetONoTy2(std::uint32_t type, std::uint32_t record, std::uint32_t channel, std::uint32_t boxNumber, std::uint32_t objectNumber)
static constexpr std::uint8_t uint8_40(40)
std::string StatusToString(std::uint8_t status)
ByteVector DataFromPosition(std::float_t x, std::float_t y, std::float_t z)
std::uint64_t DataToUint64(const ByteVector ¶meterData, bool *pOk)
bool DataToBool(const ByteVector ¶meterData, bool *pOk)
Convenience helper method to convert a byte vector into a bool.
static constexpr std::uint8_t uint8_32(32)