SDK Version 2.0.1
AnsuR Technologies ASMIRA SDK
Loading...
Searching...
No Matches
asmirasdk.h
Go to the documentation of this file.
1/****************************************************************
2* Name: asmirasdk.h
3* Purpose: ASMIRA SDK
4* Author: Fredrick Vamstad
5* Created: 2022 - April
6* Updated: 2026 - September
7* Copyright: AnsuR Technologies
8* Dependency: videocore, audiolib
9****************************************************************/
10
11#ifndef ASMIRA_SDK_H
12#define ASMIRA_SDK_H
13
20
27
34
41
48
54
61
68
74
80
82#if defined (__WIN32__) || defined(__WIN64__) || defined(_WINDOWS)
83#define ASDK_WINDOWS
84#include <windows.h>
85#ifndef ASDK_LoadLib
86#define ASDK_LoadLib(a) (asdk::hsdk)LoadLibraryA(a)
87#endif
88#ifndef ASDK_GetProc
89#define ASDK_GetProc(a1, a2) GetProcAddress((HINSTANCE__*)a1, a2)
90#endif
91#ifndef ASDK_FreeLib
92#define ASDK_FreeLib(a) FreeLibrary((HINSTANCE__*)a)
93#endif
94#define ASDK_CALL __cdecl
95#elif defined(__GNUC__)
96#define ASDK_UNIX
97#include <sys/types.h>
98#include <dlfcn.h>
99#include <string.h>
100#ifndef ASDK_LoadLib
101#define ASDK_LoadLib(a) (asdk::hsdk)dlopen(a, RTLD_NOW)
102#endif
103#ifndef ASDK_GetProc
104#define ASDK_GetProc(a1, a2) dlsym(a1, a2)
105#endif
106#ifndef ASDK_FreeLib
107#define ASDK_FreeLib(a) dlclose(a)
108#endif
109#define ASDK_CALL
110#else
111#error Compiler unsupported
112#endif
113
114#include <stdio.h>
115#include <cstdint>
116#include <chrono>
117#include <vector>
119
120#ifndef ASDK_SAFE_ALIAS
121 #define ASDK_SAFE_ALIAS
122#endif
123
124namespace asdk {
127 typedef void* hsdk;
128
132 static const uint8_t VERSION_MAJOR = 2;
136 static const uint8_t VERSION_MINOR = 0;
139 static const uint8_t VERSION_PATCH = 1;
140
143 static const uint32_t CHAT_MESSAGE_LEN = 256;
144
147 static const uint32_t AUDIO_SAMPLE_RATE = 16000;
150 static const uint32_t AUDIO_CHANNELS = 1;
153 static const uint32_t AUDIO_FRAME_SAMPLES = 320;
154
174
186
208
220
232
250
252 typedef uint32_t RoomFlagValue;
253
265
267 typedef uint32_t RoomStateValue;
268
278
289
299
312
329
349
351 typedef uint8_t UserCapabilityValue;
352
402
405
419
421 typedef uint8_t AudioFrameStateValue;
422
432
433#ifdef ASDK_SAFE_ALIAS
434 #pragma pack(4)
435#endif
436
458
459 typedef struct {
460 int32_t width;
461 int32_t height;
462 int32_t size;
463 int64_t timeStamp;
464 uint64_t utc;
465 uint8_t* data;
466 }frame_t;
467
497
498 typedef struct {
499 int32_t width;
500 int32_t height;
501 int32_t sourceWidth;
503 int32_t sourceFPS;
504 int32_t targetFPS;
508 int32_t threads;
510 int32_t priority;
512
524
525 typedef struct {
530
548
556
574
575 typedef struct {
576 uint32_t sampleCount;
577 uint32_t sampleRate;
578 uint32_t channels;
579 uint32_t timeStamp;
580 const int16_t* data;
582
629 typedef struct position_klv_values_t {
630 uint64_t unixTime{ 0ULL };
631 float indicatedAirSpeed{ 0.0f };
632 float trueAirSpeed{ 0.0f };
633 float groundSpeed{ 0.0f };
634 double latitude{ 0.0 };
635 double longitude{ 0.0 };
636 double altitude{ 0.0 };
637 float heading{ 0.0f };
638 float pitch{ 0.0f };
639 float roll{ 0.0f };
640 float sensorHorizontalFOV{ 0.0f };
641 float sensorVerticalFOV{ 0.0f };
642 float sensorAzimuth{ 0.0f };
643 float sensorElevationAngle{ 0.0f };
646
672 typedef struct position_nmea_values_t {
673 uint64_t unixTime{ 0ULL };
674 int64_t satVisibleCount{ 0ULL };
675 double dilution{ 0.0 };
676 double groundSpeed{ 0.0 };
677 double latitude{ 0.0 };
678 double longitude{ 0.0 };
679 float heading{ 0.0f };
681
697
703
719
731
743
749
750 using TimePoint = std::chrono::high_resolution_clock::time_point;
751 using TimeMS = std::chrono::milliseconds;
752
756 return std::chrono::high_resolution_clock::now();
757 }
758
761 inline long long TimeSpent(const TimePoint& timeStart) {
762 return std::chrono::duration_cast<TimeMS>(TimeNow() - timeStart).count();
763 }
764
765 using TimePointSteady = std::chrono::steady_clock::time_point;
766
770 return std::chrono::steady_clock::now();
771 }
772
776 inline long long TimeSpentSteady(const TimePointSteady& time) {
777 return std::chrono::duration_cast<TimeMS>(TimeNowSteady() - time).count();
778 }
779
790
803
804 typedef struct certificate_t {
805 int len;
806 const char* data{ nullptr };
808
809#ifdef ASDK_SAFE_ALIAS
810 #pragma pack()
811#endif
812
813 // Callback functions
816 typedef void (ASDK_CALL *ServerStateFunc)(const ServerState serverState, void* opaque);
820 typedef void (ASDK_CALL *RoomAnnounceFunc)(const char* roomName, const uint32_t roomID,
821 const asdk::RoomStateValue state,
822 const asdk::RoomFlagValue flags, void *opaque);
827 typedef void (ASDK_CALL *RoomResponseFunc)(const Request request, const RoomResponse response,
828 const void* optionalData, const uint32_t optionalDataSize, void* opaque);
832 typedef void (ASDK_CALL *RoomClientAddedFunc)(const uint32_t clientID, const char* userName, const UserCapabilityValue userCapability,
833 const DeviceCapabilityValue deviceCapability, void* opaque);
836 typedef void (ASDK_CALL *RoomClientRemovedFunc)(const uint32_t clientID, void* opaque);
839 typedef void (ASDK_CALL *AuthenticateResponseFunc)(const AuthenticationResponse authenticateResponse, void* opaque);
843 typedef void (ASDK_CALL *FrameFunc)(const frame_t* frame, void* opaque);
847 typedef void (ASDK_CALL *EncodedStreamFunc)(const StreamType type, const void *data, const uint32_t dataSize, void* opaque);
852 typedef void (ASDK_CALL *EncodedAudioFrameFunc)(const uint16_t srcID, const unsigned int timeStamp,
853 const asdk::AudioFrameStateValue state,
854 const unsigned char* audioEncoded,
855 const size_t audioEncodedSize, void* opaque);
858 typedef void (ASDK_CALL *VideoOptionsFunc)(const video_options_t* videoOptions, void* opaque);
861 typedef void (ASDK_CALL *VideoModeFunc)(const video_mode_t* videoMode, void* opaque);
864 typedef void (ASDK_CALL *PositionValuesFunc)(const position_values_t* positionValues, void* opaque);
867 typedef void (ASDK_CALL *BandwidthStatisticsFunc)(const bandwidth_statistics_simple_t *bandwidthStatistics, void* opaque);
871 typedef void (ASDK_CALL *RoomPreviewImageFunc)(const uint32_t roomID, const uint64_t utc,
872 const ImageFormat imageFormat,
873 const uint8_t *data, const uint32_t size,
874 void* opaque);
880 typedef void (ASDK_CALL *RoomFileAvailableFunc)(const uint32_t roomID, const uint64_t hash,
881 const char* fileName, const uint32_t fileSize,
882 const uint32_t originClientID, const uint64_t utc,
883 void* opaque);
886 typedef void (ASDK_CALL *RoomFileDeletedFunc)(const uint32_t roomID, const uint64_t hash,
887 void* opaque);
891 typedef void (ASDK_CALL *RoomFileDownloadedFunc)(const uint32_t roomID, const uint64_t hash,
892 const char* fileName, const uint8_t* data,
893 const uint32_t size, void* opaque);
897 typedef void (ASDK_CALL *RoomFileProgressFunc)(const uint32_t roomID, const uint64_t hash,
898 const char* fileName,
899 const RoomFileDirection direction,
900 const uint32_t transferred, const uint32_t total,
901 void* opaque);
904 typedef void (ASDK_CALL *RoomFileSentFunc)(const uint32_t roomID, const uint64_t hash,
905 const char* fileName, void* opaque);
908 typedef void (ASDK_CALL *RoomFileErrorFunc)(const uint32_t roomID, const uint64_t hash,
909 const char* fileName, const RoomFileError error,
910 void* opaque);
914 typedef void (ASDK_CALL *ChatMessageFunc)(const uint32_t clientID, const char* message,
915 const uint32_t size, void* opaque);
920 typedef void (ASDK_CALL *DecodedAudioFrameFunc)(const audio_frame_t* audioFrame, void* opaque);
921
922#ifdef ASDK_SAFE_ALIAS
923 #pragma pack(4)
924#endif
925
942
943 typedef struct sdk_t {
944 typedef void (ASDK_CALL *VersionProc)(uint8_t *versionMajor,
945 uint8_t *versionMinor,
946 uint8_t *versionPath);
949 char* errorStr;
951
957
959 if (_unload_) {
960 hsdk libraryHandle = library;
961 _unload_(this);
962
963 if (libraryHandle)
964 ASDK_FreeLib(libraryHandle);
965
966 return StatusOK;
967 }
968 return StatusErrorHandle;
969 }
970
985 // Unsecured connection is not supported for 4.0, TBD for 4.1+
986 Status Connect(const char* ip, const uint16_t port,
987 const uint32_t timeout, const bool highLatency,
988 const char *username, const char *password,
989 const UserCapabilityValue userCapability,
990 const DeviceCapabilityValue deviceCapability,
991 const char *displayName = nullptr) {
992 if (_connect_)
993 return _connect_(this, ip, port, timeout, highLatency, username,
994 password, userCapability, deviceCapability,
995 displayName);
996 return StatusErrorHandle;
997 }
998
1014
1015 Status ConnectSecured(const char* ip, const uint16_t port,
1016 const uint32_t timeout, const bool highLatency,
1017 const char *username, const char* password,
1018 const UserCapabilityValue userCapability,
1019 const DeviceCapabilityValue deviceCapability,
1020 const char *certificate,
1021 const char *displayName = nullptr) {
1022 if (_connect_secured_)
1023 return _connect_secured_(this, ip, port, timeout, highLatency, username,
1024 password, userCapability, deviceCapability,
1025 certificate, displayName);
1026 return StatusErrorHandle;
1027 }
1028
1045
1046 Status RequestCertificate(const char* address, const uint16_t port,
1047 const char* userName, const char *password,
1048 CertificateState* certificateStateOut,
1049 certificate_t* certificateOut,
1050 const int timeout = 3000) {
1051 if (_request_certificate_)
1052 return _request_certificate_(this, address, port, userName, password,
1053 certificateStateOut,
1054 certificateOut, timeout);
1055 return StatusErrorHandle;
1056 }
1057
1064
1066 if (_cached_certificate_)
1067 return _cached_certificate_(this, certificateOut);
1068
1069 return StatusErrorHandle;
1070 }
1071
1077
1079 if (_disconnect_)
1080 return _disconnect_(this);
1081 return StatusErrorHandle;
1082 }
1083
1090
1091 Status SendRequest(const Request request) {
1092 if (_send_request_)
1093 return _send_request_(this, request);
1094 return StatusErrorHandle;
1095 }
1096
1105
1106 Status SendRequestStr(const Request request, const char* str,
1107 const char *option = nullptr) {
1108 if (_send_request_string_)
1109 return _send_request_string_(this, request, str, option);
1110 return StatusErrorHandle;
1111 }
1112
1125
1126 Status SendChatMessage(const char* message) {
1127 if (_send_chat_message_)
1128 return _send_chat_message_(this, message);
1129 return StatusErrorHandle;
1130 }
1131
1146
1147 Status SendAudioFrame(const int16_t* samples, const uint32_t sampleCount,
1148 const uint32_t timeStamp = 0) {
1149 if (_send_audio_frame_)
1150 return _send_audio_frame_(this, samples, sampleCount, timeStamp);
1151 return StatusErrorHandle;
1152 }
1153
1167
1168 Status SendEncodedAudioFrame(const void* data, const uint32_t size,
1169 const uint32_t timeStamp,
1170 const AudioFrameStateValue state) {
1171 if (_send_encoded_audio_frame_)
1172 return _send_encoded_audio_frame_(this, data, size, timeStamp, state);
1173 return StatusErrorHandle;
1174 }
1175
1184
1186 if (_flush_audio_frames_)
1187 return _flush_audio_frames_(this);
1188 return StatusErrorHandle;
1189 }
1190
1201
1203 if (_set_audio_options_)
1204 return _set_audio_options_(this, audioOptions);
1205 return StatusErrorHandle;
1206 }
1207
1217
1219 if (_audio_options_)
1220 return _audio_options_(this, audioOptions);
1221 return StatusErrorHandle;
1222 }
1223
1239
1240 Status RoomFileSend(const uint32_t roomID, const char* fileName,
1241 const void* data, const uint32_t size) {
1242 if (_room_file_send_)
1243 return _room_file_send_(this, roomID, fileName, data, size);
1244 return StatusErrorHandle;
1245 }
1246
1259
1260 Status RoomFileSendFromPath(const uint32_t roomID, const char* filePath) {
1261 if (_room_file_send_from_path_)
1262 return _room_file_send_from_path_(this, roomID, filePath);
1263 return StatusErrorHandle;
1264 }
1265
1276
1277 Status RoomFileSendResumeFromPath(const uint32_t roomID, const char* filePath) {
1278 if (_room_file_send_resume_from_path_)
1279 return _room_file_send_resume_from_path_(this, roomID, filePath);
1280 return StatusErrorHandle;
1281 }
1282
1295
1296 Status RoomFileDownload(const uint32_t roomID, const uint64_t hash) {
1297 if (_room_file_download_)
1298 return _room_file_download_(this, roomID, hash);
1299 return StatusErrorHandle;
1300 }
1301
1321
1322 Status RoomFileDownloadResume(const uint32_t roomID, const uint64_t hash,
1323 const char* fileName, const uint32_t totalSize,
1324 const void* haveBytes, const uint32_t haveCount) {
1325 if (_room_file_download_resume_)
1326 return _room_file_download_resume_(this, roomID, hash, fileName, totalSize,
1327 haveBytes, haveCount);
1328 return StatusErrorHandle;
1329 }
1330
1341
1342 Status RoomFileCancel(const uint32_t roomID, const uint64_t hash) {
1343 if (_room_file_cancel_)
1344 return _room_file_cancel_(this, roomID, hash);
1345 return StatusErrorHandle;
1346 }
1347
1357
1358 Status RoomFileDelete(const uint32_t roomID, const uint64_t hash) {
1359 if (_room_file_delete_)
1360 return _room_file_delete_(this, roomID, hash);
1361 return StatusErrorHandle;
1362 }
1363
1370
1371 inline void SetServerStateCallback(ServerStateFunc func, void *opaque = nullptr) {
1372 if (_cb_server_state_)
1373 _cb_server_state_(this, func, opaque);
1374 }
1375
1382
1383 inline void SetRoomAnnounceCallback(RoomAnnounceFunc func, void* opaque = nullptr) {
1384 if (_cb_room_announce_)
1385 _cb_room_announce_(this, func, opaque);
1386 }
1387
1394
1395 inline void SetRoomResponseCallback(RoomResponseFunc func, void* opaque = nullptr) {
1396 if (_cb_room_response_)
1397 _cb_room_response_(this, func, opaque);
1398 }
1399
1406
1407 inline void SetRoomClientAddedCallback(RoomClientAddedFunc func, void* opaque = nullptr) {
1408 if (_cb_room_client_added_)
1409 _cb_room_client_added_(this, func, opaque);
1410 }
1411
1418
1419 inline void SetRoomClientRemovedCallback(RoomClientRemovedFunc func, void* opaque = nullptr) {
1420 if (_cb_room_client_removed_)
1421 _cb_room_client_removed_(this, func, opaque);
1422 }
1423
1430
1431 inline void SetAuthenticateResponseCallback(AuthenticateResponseFunc func, void* opaque = nullptr) {
1432 if (_cb_authenticate_response_)
1433 _cb_authenticate_response_(this, func, opaque);
1434 }
1435
1442
1443 inline void SetFrameCallback(FrameFunc func, void* opaque = nullptr) {
1444 if (_cb_frame_)
1445 _cb_frame_(this, func, opaque);
1446 }
1447
1454
1455 inline void SetEncodedStreamCallback(EncodedStreamFunc func, void* opaque = nullptr) {
1456 if (_cb_encoded_stream_)
1457 _cb_encoded_stream_(this, func, opaque);
1458 }
1459
1466
1467 inline void SetEncodedAudioFrameCallback(EncodedAudioFrameFunc func, void* opaque = nullptr) {
1468 if (_cb_encoded_audio_frame_)
1469 _cb_encoded_audio_frame_(this, func, opaque);
1470 }
1471
1478
1479 inline void SetVideoOptionsCallback(VideoOptionsFunc func, void* opaque = nullptr) {
1480 if (_cb_video_options_)
1481 _cb_video_options_(this, func, opaque);
1482 }
1483
1490
1491 inline void SetVideoModeCallback(VideoModeFunc func, void* opaque = nullptr) {
1492 if (_cb_video_mode_)
1493 _cb_video_mode_(this, func, opaque);
1494 }
1495
1502
1503 inline void SetPositionValuesCallback(PositionValuesFunc func, void* opaque = nullptr) {
1504 if (_cb_position_values_)
1505 _cb_position_values_(this, func, opaque);
1506 }
1507
1514
1515 inline void SetBandwidthStatisticsCallback(BandwidthStatisticsFunc func, void* opaque = nullptr) {
1516 if (_cb_bandwidth_statistics_)
1517 _cb_bandwidth_statistics_(this, func, opaque);
1518 }
1519
1526
1527 inline void SetRoomPreviewImageCallback(RoomPreviewImageFunc func, void* opaque = nullptr) {
1528 if (_cb_room_preview_image_)
1529 _cb_room_preview_image_(this, func, opaque);
1530 }
1531
1538
1539 inline void SetChatMessageCallback(ChatMessageFunc func, void* opaque = nullptr) {
1540 if (_cb_chat_message_)
1541 _cb_chat_message_(this, func, opaque);
1542 }
1543
1552
1553 inline void SetDecodedAudioFrameCallback(DecodedAudioFrameFunc func, void* opaque = nullptr) {
1554 if (_cb_decoded_audio_frame_)
1555 _cb_decoded_audio_frame_(this, func, opaque);
1556 }
1557
1566
1567 inline void SetRoomFileAvailableCallback(RoomFileAvailableFunc func, void* opaque = nullptr) {
1568 if (_cb_room_file_available_)
1569 _cb_room_file_available_(this, func, opaque);
1570 }
1571
1578
1579 inline void SetRoomFileDeletedCallback(RoomFileDeletedFunc func, void* opaque = nullptr) {
1580 if (_cb_room_file_deleted_)
1581 _cb_room_file_deleted_(this, func, opaque);
1582 }
1583
1592
1593 inline void SetRoomFileDownloadedCallback(RoomFileDownloadedFunc func, void* opaque = nullptr) {
1594 if (_cb_room_file_downloaded_)
1595 _cb_room_file_downloaded_(this, func, opaque);
1596 }
1597
1604
1605 inline void SetRoomFileProgressCallback(RoomFileProgressFunc func, void* opaque = nullptr) {
1606 if (_cb_room_file_progress_)
1607 _cb_room_file_progress_(this, func, opaque);
1608 }
1609
1616
1617 inline void SetRoomFileSentCallback(RoomFileSentFunc func, void* opaque = nullptr) {
1618 if (_cb_room_file_sent_)
1619 _cb_room_file_sent_(this, func, opaque);
1620 }
1621
1628
1629 inline void SetRoomFileErrorCallback(RoomFileErrorFunc func, void* opaque = nullptr) {
1630 if (_cb_room_file_error_)
1631 _cb_room_file_error_(this, func, opaque);
1632 }
1633
1634 // SDK Internal
1636 VersionProc version;
1637 void (ASDK_CALL *_unload_)(sdk_t* sdk);
1638 Status (ASDK_CALL *_connect_)(sdk_t* sdk, const char* ip, const uint16_t port,
1639 const uint32_t timeout, const bool highLatency,
1640 const char* username, const char* password,
1641 const UserCapabilityValue userCapability,
1642 const DeviceCapabilityValue deviceCapability,
1643 const char *displayName);
1644 Status (ASDK_CALL *_connect_secured_)(sdk_t* sdk, const char* ip, const uint16_t port,
1645 const uint32_t timeout, const bool highLatency,
1646 const char* username, const char* password,
1647 const UserCapabilityValue userCapability,
1648 const DeviceCapabilityValue deviceCapability,
1649 const char *certificate,
1650 const char* displayName);
1651 Status (ASDK_CALL *_request_certificate_)(sdk_t* sdk, const char* address, const uint16_t port,
1652 const char* userName, const char* password,
1653 CertificateState* certificateStateOut,
1654 certificate_t* certificateOut, const int timeout);
1655 Status (ASDK_CALL *_cached_certificate_)(sdk_t* sdk, certificate_t* certificateOut);
1656 Status (ASDK_CALL *_disconnect_)(sdk_t* sdk);
1657 Status (ASDK_CALL *_send_request_)(sdk_t* sdk, const Request request);
1658 Status (ASDK_CALL *_send_request_string_)(sdk_t* sdk, const Request request,
1659 const char* str, const char *option);
1660 // Delete a shared room file for the whole room, identified by (roomID, hash) from a
1661 // RoomFileAvailable callback. Privileged (Sender/Controller/Super); the server checks.
1662 Status (ASDK_CALL *_room_file_delete_)(sdk_t* sdk, const uint32_t roomID, const uint64_t hash);
1663 // Upload a file to a room: data/size is the content; the server hashes it and announces
1664 // it to the other members. Requires DeviceCapabilityFileTransfer. StatusOK if queued.
1665 Status (ASDK_CALL *_room_file_send_)(sdk_t* sdk, const uint32_t roomID, const char* fileName,
1666 const void* data, const uint32_t size);
1667 // Hash and stream a file straight off disk, the content is never fully resident.
1668 Status (ASDK_CALL *_room_file_send_from_path_)(sdk_t* sdk, const uint32_t roomID,
1669 const char* filePath);
1670 // Resume an interrupted disk upload: stream only the bytes the server does not yet hold.
1671 Status (ASDK_CALL *_room_file_send_resume_from_path_)(sdk_t* sdk, const uint32_t roomID,
1672 const char* filePath);
1673 // Request download of an available room file (roomID, hash from RoomFileAvailable). The
1674 // verified bytes arrive via the RoomFileDownloaded callback on completion.
1675 Status (ASDK_CALL *_room_file_download_)(sdk_t* sdk, const uint32_t roomID, const uint64_t hash);
1676 Status (ASDK_CALL *_room_file_download_resume_)(sdk_t* sdk, const uint32_t roomID,
1677 const uint64_t hash, const char* fileName,
1678 const uint32_t totalSize,
1679 const void* haveBytes, const uint32_t haveCount);
1680 // Cancel an in-flight download started with _room_file_download_ (roomID, hash): the
1681 // server stops streaming and any partially received bytes are discarded.
1682 Status (ASDK_CALL *_room_file_cancel_)(sdk_t* sdk, const uint32_t roomID, const uint64_t hash);
1683 // Send a chat message to the joined room. Rejected locally if no room is joined or the
1684 // message is empty/longer than CHAT_MESSAGE_LEN, by the server if chat is not permitted.
1685 Status (ASDK_CALL *_send_chat_message_)(sdk_t* sdk, const char* message);
1686 // Accumulate PCM into codec sized frames, encode and queue for transmit. Rejected
1687 // locally when the audio module is missing, dropped downstream if no room is joined.
1688 Status (ASDK_CALL *_send_audio_frame_)(sdk_t* sdk, const int16_t* samples,
1689 const uint32_t sampleCount, const uint32_t timeStamp);
1690 // Queue an already encoded Opus/Speex frame for transmit, no encoding done.
1691 Status (ASDK_CALL *_send_encoded_audio_frame_)(sdk_t* sdk, const void* data,
1692 const uint32_t size, const uint32_t timeStamp,
1693 const AudioFrameStateValue state);
1694 // Send whatever the audio transmit queue is still holding.
1695 Status (ASDK_CALL *_flush_audio_frames_)(sdk_t* sdk);
1696 // Apply encoder options, falling back to the codec the audio module offers.
1697 Status (ASDK_CALL *_set_audio_options_)(sdk_t* sdk, const audio_options_t* audioOptions);
1698 // Read back the options in effect, including the codec actually selected.
1699 Status (ASDK_CALL *_audio_options_)(sdk_t* sdk, audio_options_t* audioOptions);
1700
1701 void (ASDK_CALL *_cb_server_state_)(sdk_t* sdk, ServerStateFunc func, void* opaque);
1702 void (ASDK_CALL *_cb_room_announce_)(sdk_t* sdk, RoomAnnounceFunc func, void* opaque);
1703 void (ASDK_CALL *_cb_room_response_)(sdk_t* sdk, RoomResponseFunc func, void* opaque);
1704 void (ASDK_CALL *_cb_room_client_added_)(sdk_t* sdk, RoomClientAddedFunc func, void* opaque);
1705 void (ASDK_CALL *_cb_room_client_removed_)(sdk_t* sdk, RoomClientRemovedFunc func, void* opaque);
1706 void (ASDK_CALL *_cb_authenticate_response_)(sdk_t* sdk, AuthenticateResponseFunc func, void* opaque);
1707 void (ASDK_CALL *_cb_frame_)(sdk_t* sdk, FrameFunc func, void* opaque);
1708 void (ASDK_CALL *_cb_encoded_stream_)(sdk_t* sdk, EncodedStreamFunc func, void* opaque);
1709 void (ASDK_CALL *_cb_encoded_audio_frame_)(sdk_t* sdk, EncodedAudioFrameFunc func, void* opaque);
1710 void (ASDK_CALL *_cb_video_options_)(sdk_t* sdk, VideoOptionsFunc func, void* opaque);
1711 void (ASDK_CALL *_cb_video_mode_)(sdk_t* sdk, VideoModeFunc func, void* opaque);
1712 void (ASDK_CALL *_cb_position_values_)(sdk_t* sdk, PositionValuesFunc func, void* opaque);
1713 void (ASDK_CALL *_cb_bandwidth_statistics_)(sdk_t* sdk, BandwidthStatisticsFunc func, void* opaque);
1714 void (ASDK_CALL *_cb_room_preview_image_)(sdk_t* sdk, RoomPreviewImageFunc func, void* opaque);
1715 void (ASDK_CALL *_cb_room_file_available_)(sdk_t* sdk, RoomFileAvailableFunc func, void* opaque);
1716 void (ASDK_CALL *_cb_room_file_deleted_)(sdk_t* sdk, RoomFileDeletedFunc func, void* opaque);
1717 void (ASDK_CALL *_cb_room_file_downloaded_)(sdk_t* sdk, RoomFileDownloadedFunc func, void* opaque);
1718 void (ASDK_CALL *_cb_chat_message_)(sdk_t* sdk, ChatMessageFunc func, void* opaque);
1719 void (ASDK_CALL *_cb_decoded_audio_frame_)(sdk_t* sdk, DecodedAudioFrameFunc func, void* opaque);
1720 void (ASDK_CALL *_cb_room_file_progress_)(sdk_t* sdk, RoomFileProgressFunc func, void* opaque);
1721 void (ASDK_CALL *_cb_room_file_sent_)(sdk_t* sdk, RoomFileSentFunc func, void* opaque);
1722 void (ASDK_CALL *_cb_room_file_error_)(sdk_t* sdk, RoomFileErrorFunc func, void* opaque);
1725
1726#ifdef ASDK_SAFE_ALIAS
1727 #pragma pack()
1728#endif
1729
1745 inline sdk_t* Initialize() {
1746 typedef sdk_t* (ASDK_CALL *InitProc)(void);
1747 sdk_t* self = nullptr;
1748#ifdef ASDK_WINDOWS
1749 const char *library = "asmirasdk.dll";
1750#else
1751 const char *library = "asmirasdk.so";
1752#endif
1753 hsdk asdk = ASDK_LoadLib(library);
1754 if (asdk) {
1755 sdk_t::VersionProc funcVersion = (sdk_t::VersionProc)ASDK_GetProc(asdk, "ASDKVersion");
1756 InitProc funcInit = (InitProc)ASDK_GetProc(asdk, "ASDKInitializeLibrary");
1757 if (funcInit && funcVersion) {
1758 uint8_t versionMajor = 0;
1759 uint8_t versionMinor = 0;
1760 uint8_t versionPatch = 0;
1761 funcVersion(&versionMajor, &versionMinor, &versionPatch);
1762 if (VERSION_MAJOR == versionMajor) {
1763 if (VERSION_MINOR != versionMinor)
1764 printf("Version mismatch warning\n");
1765
1766 self = funcInit();
1767 if (self) {
1768 self->library = asdk;
1769 self->version = funcVersion;
1770 }
1771 else {
1772 puts("Error occurred while initializing ASMIRA SDK");
1774 asdk = nullptr;
1775 }
1776 }
1777 else {
1778 puts("Version error");
1780 asdk = nullptr;
1781 }
1782 }
1783 else {
1784 puts("Failed to locate initialize proc");
1786 asdk = nullptr;
1787 }
1788 }
1789 else {
1790#ifdef ASDK_WINDOWS
1791#else
1792 char* err = dlerror();
1793 if (err) {
1794 printf("Failed to open: \"%s\" Reason: \"%s\"\n", library, err);
1795 }
1796#endif
1797 }
1798 return self;
1799 }
1800}
1801
1805
1809
1810#endif
#define ASDK_CALL
Definition asmirasdk.h:94
#define ASDK_FreeLib(a)
Definition asmirasdk.h:92
#define ASDK_LoadLib(a)
Definition asmirasdk.h:86
#define ASDK_GetProc(a1, a2)
Definition asmirasdk.h:89
void(*) EncodedAudioFrameFunc(const uint16_t srcID, const unsigned int timeStamp, const asdk::AudioFrameStateValue state, const unsigned char *audioEncoded, const size_t audioEncodedSize, void *opaque)
An encoded audio frame arrived, before any decoding.
Definition asmirasdk.h:852
static const uint32_t AUDIO_FRAME_SAMPLES
Definition asmirasdk.h:153
void SetEncodedAudioFrameCallback(EncodedAudioFrameFunc func, void *opaque=nullptr)
Encoded Audio Frame callback.
Definition asmirasdk.h:1467
static const uint32_t AUDIO_CHANNELS
Definition asmirasdk.h:150
Status SendAudioFrame(const int16_t *samples, const uint32_t sampleCount, const uint32_t timeStamp=0)
Encodes and sends captured audio to the currently joined room.
Definition asmirasdk.h:1147
Status FlushAudioFrames()
Sends the audio frames still held back by the transmit queue.
Definition asmirasdk.h:1185
void SetDecodedAudioFrameCallback(DecodedAudioFrameFunc func, void *opaque=nullptr)
Decoded Audio Frame callback.
Definition asmirasdk.h:1553
uint8_t AudioFrameStateValue
Definition asmirasdk.h:421
void(*) DecodedAudioFrameFunc(const audio_frame_t *audioFrame, void *opaque)
A received audio frame was decoded to PCM.
Definition asmirasdk.h:920
Status AudioOptions(audio_options_t *audioOptions)
Gets the audio options in effect.
Definition asmirasdk.h:1218
static const uint32_t AUDIO_SAMPLE_RATE
Definition asmirasdk.h:147
Status SendEncodedAudioFrame(const void *data, const uint32_t size, const uint32_t timeStamp, const AudioFrameStateValue state)
Sends an already encoded audio frame to the currently joined room.
Definition asmirasdk.h:1168
AudioCodec
Audio codec enum, the encoder used by sdk_t::SendAudioFrame.
Definition asmirasdk.h:427
AudioFrameState
Codec and origin of an encoded audio frame, as an AudioFrameStateValue.
Definition asmirasdk.h:413
Status SetAudioOptions(const audio_options_t *audioOptions)
Sets the audio encoder options.
Definition asmirasdk.h:1202
@ AudioCodecSpeex
Definition asmirasdk.h:430
@ AudioCodecOpus
Definition asmirasdk.h:429
@ AudioCodecUndef
Definition asmirasdk.h:428
@ AudioFrameStateUndef
Definition asmirasdk.h:414
@ AudioFrameServer
Definition asmirasdk.h:417
@ AudioFrameOpus
Definition asmirasdk.h:416
@ AudioFrameSpeex
Definition asmirasdk.h:415
void SetChatMessageCallback(ChatMessageFunc func, void *opaque=nullptr)
Chat message callback.
Definition asmirasdk.h:1539
void(*) ChatMessageFunc(const uint32_t clientID, const char *message, const uint32_t size, void *opaque)
A chat message was received from the joined room.
Definition asmirasdk.h:914
static const uint32_t CHAT_MESSAGE_LEN
Definition asmirasdk.h:143
Status SendChatMessage(const char *message)
Sends a chat message to the currently joined room.
Definition asmirasdk.h:1126
Status CachedCertificate(certificate_t *certificateOut)
Get cached certificate from ASMIRA server.
Definition asmirasdk.h:1065
int DeviceCapabilityValue
Definition asmirasdk.h:404
CertificateState
Outcome of sdk_t::RequestCertificate.
Definition asmirasdk.h:784
void SetAuthenticateResponseCallback(AuthenticateResponseFunc func, void *opaque=nullptr)
Login result callback.
Definition asmirasdk.h:1431
void SetServerStateCallback(ServerStateFunc func, void *opaque=nullptr)
Server state callback.
Definition asmirasdk.h:1371
UserCapability
The role a client asks the server for on connect.
Definition asmirasdk.h:340
AuthenticationResponse
Outcome of a login attempt, reported by AuthenticateResponseFunc.
Definition asmirasdk.h:194
ServerState
State of the connection to the server, reported by ServerStateFunc.
Definition asmirasdk.h:179
Status RequestCertificate(const char *address, const uint16_t port, const char *userName, const char *password, CertificateState *certificateStateOut, certificate_t *certificateOut, const int timeout=3000)
Request certificate from ASMIRA server.
Definition asmirasdk.h:1046
Status Disconnect()
Disconnects from ASMIRA server.
Definition asmirasdk.h:1078
void(*) AuthenticateResponseFunc(const AuthenticationResponse authenticateResponse, void *opaque)
The server answered the login, see AuthenticationResponse for the bits.
Definition asmirasdk.h:839
Status ConnectSecured(const char *ip, const uint16_t port, const uint32_t timeout, const bool highLatency, const char *username, const char *password, const UserCapabilityValue userCapability, const DeviceCapabilityValue deviceCapability, const char *certificate, const char *displayName=nullptr)
Connect to ASMIRA server.
Definition asmirasdk.h:1015
Status Connect(const char *ip, const uint16_t port, const uint32_t timeout, const bool highLatency, const char *username, const char *password, const UserCapabilityValue userCapability, const DeviceCapabilityValue deviceCapability, const char *displayName=nullptr)
Connect to ASMIRA server.
Definition asmirasdk.h:986
DeviceCapability
What a client announces it can do, as a DeviceCapabilityValue.
Definition asmirasdk.h:364
uint8_t UserCapabilityValue
Definition asmirasdk.h:351
void(*) ServerStateFunc(const ServerState serverState, void *opaque)
The connection to the server changed state.
Definition asmirasdk.h:816
@ CertificateStateConnectError
Definition asmirasdk.h:788
@ CertificateStateUndef
Definition asmirasdk.h:785
@ CertificateStateReceived
Definition asmirasdk.h:787
@ CertificateStateConnected
Definition asmirasdk.h:786
@ UserCapabilitySender
Definition asmirasdk.h:342
@ UserCapabilityController
Definition asmirasdk.h:343
@ UserCapabilityUnsure
Definition asmirasdk.h:347
@ UserCapabilityGuest
Definition asmirasdk.h:345
@ UserCapabilityUndef
Definition asmirasdk.h:341
@ UserCapabilitySuper
Definition asmirasdk.h:346
@ UserCapabilityViewer
Definition asmirasdk.h:344
@ AuthenticationResponseKickedOther
Definition asmirasdk.h:202
@ AuthenticationResponseSuccess
Definition asmirasdk.h:196
@ AuthenticationResponseVersionRecUpgrade
Definition asmirasdk.h:199
@ AuthenticationResponseLoggedInOther
Definition asmirasdk.h:201
@ AuthenticationResponseUndef
Definition asmirasdk.h:195
@ AuthenticationResponseWrongLoginType
Definition asmirasdk.h:203
@ AuthenticationResponseFormatError
Definition asmirasdk.h:205
@ AuthenticationResponseVersionError
Definition asmirasdk.h:198
@ AuthenticationResponseVersionMayUpgrade
Definition asmirasdk.h:200
@ AuthenticationResponseTryAgainLater
Definition asmirasdk.h:204
@ AuthenticationResponseRequestedCapError
Definition asmirasdk.h:206
@ AuthenticationResponseError
Definition asmirasdk.h:197
@ ServerStateDisconnected
Definition asmirasdk.h:181
@ ServerStateAuthenticateError
Definition asmirasdk.h:184
@ ServerStateConnectedAndAuthenticated
Definition asmirasdk.h:183
@ ServerStateUndef
Definition asmirasdk.h:180
@ ServerStateConnected
Definition asmirasdk.h:182
@ DeviceCapabilityFull
Everything, including the parts not yet implemented.
Definition asmirasdk.h:395
@ DeviceCapabilityASIGN
Definition asmirasdk.h:383
@ DeviceCapabilityVideoH264
Definition asmirasdk.h:367
@ DeviceCapabilityAudioOpus
Definition asmirasdk.h:369
@ DeviceCapabilityUndef
Definition asmirasdk.h:365
@ DeviceCapabilityVideoROI
Definition asmirasdk.h:376
@ DeviceCapabilityVideoH265
Definition asmirasdk.h:368
@ DeviceCapabilityPhotoModeWEBP
Definition asmirasdk.h:372
@ DeviceCapabilityDisplay
Definition asmirasdk.h:378
@ DeviceCapabilityHeadless
Headless ASMIRA: video and photo mode only, no audio, chat or display.
Definition asmirasdk.h:398
@ DeviceCapabilityPhotoModeAVIF
Definition asmirasdk.h:374
@ DeviceCapabilityBasic
Common baseline: H.265 video, Speex audio, microphone, WebP photo mode, ROI, chat and a display.
Definition asmirasdk.h:386
@ DeviceCapabilityPhotoROI
Definition asmirasdk.h:375
@ DeviceCapabilityFileTransfer
Definition asmirasdk.h:379
@ DeviceCapabilityChat
Definition asmirasdk.h:377
@ DeviceCapabilityVideoAV1
Definition asmirasdk.h:366
@ DeviceCapabilityAudioSpeex
Definition asmirasdk.h:370
@ DeviceCapabilityPhotoModeHEIF
Definition asmirasdk.h:373
@ DeviceCapabilityAudioMIC
Definition asmirasdk.h:371
@ DeviceCapabilityCore
Desktop ASMIRA: DeviceCapabilityBasic plus AV1 and H.264.
Definition asmirasdk.h:392
static const uint8_t VERSION_MAJOR
Definition asmirasdk.h:132
static const uint8_t VERSION_PATCH
Definition asmirasdk.h:139
Status
Result of an SDK call.
Definition asmirasdk.h:159
void * hsdk
Definition asmirasdk.h:127
Status Unload()
Unloads SDK library.
Definition asmirasdk.h:958
static const uint8_t VERSION_MINOR
Definition asmirasdk.h:136
sdk_t * Initialize()
Loads the SDK shared library and creates an SDK handle.
Definition asmirasdk.h:1745
@ StatusErrorImageModule
Definition asmirasdk.h:166
@ StatusErrorNotPermitted
Definition asmirasdk.h:172
@ StatusErrorConnect
Definition asmirasdk.h:168
@ StatusErrorTransmit
Definition asmirasdk.h:169
@ StatusError
Definition asmirasdk.h:163
@ StatusErrorVideoModule
Definition asmirasdk.h:165
@ StatusOK
Definition asmirasdk.h:161
@ StatusDisconnected
Definition asmirasdk.h:162
@ StatusErrorAudioModule
Definition asmirasdk.h:170
@ StatusErrorInitialized
Definition asmirasdk.h:167
@ StatusUndef
Definition asmirasdk.h:160
@ StatusErrorHandle
Definition asmirasdk.h:164
@ StatusErrorFile
Definition asmirasdk.h:171
void(*) RoomFileProgressFunc(const uint32_t roomID, const uint64_t hash, const char *fileName, const RoomFileDirection direction, const uint32_t transferred, const uint32_t total, void *opaque)
Bytes moved for a transfer in either direction.
Definition asmirasdk.h:897
Status RoomFileSendResumeFromPath(const uint32_t roomID, const char *filePath)
Resumes an interrupted upload of a file from disk.
Definition asmirasdk.h:1277
void SetRoomFileAvailableCallback(RoomFileAvailableFunc func, void *opaque=nullptr)
Room File Available callback.
Definition asmirasdk.h:1567
void(*) RoomFileSentFunc(const uint32_t roomID, const uint64_t hash, const char *fileName, void *opaque)
An upload reached the server, which now announces it to the other room members.
Definition asmirasdk.h:904
void(*) RoomFileDeletedFunc(const uint32_t roomID, const uint64_t hash, void *opaque)
A room file (roomID, hash) was deleted for the whole room; drop any reference to it.
Definition asmirasdk.h:886
RoomFileError
Room file transfer failure reason.
Definition asmirasdk.h:283
Status RoomFileSendFromPath(const uint32_t roomID, const char *filePath)
Uploads a file to a room from disk.
Definition asmirasdk.h:1260
Status RoomFileSend(const uint32_t roomID, const char *fileName, const void *data, const uint32_t size)
Uploads a file to a room from memory.
Definition asmirasdk.h:1240
Status RoomFileCancel(const uint32_t roomID, const uint64_t hash)
Cancels a room file transfer in either direction.
Definition asmirasdk.h:1342
void(*) RoomFileErrorFunc(const uint32_t roomID, const uint64_t hash, const char *fileName, const RoomFileError error, void *opaque)
A transfer failed, anything already received for it has been discarded.
Definition asmirasdk.h:908
RoomFileDirection
Room file transfer direction.
Definition asmirasdk.h:273
void SetRoomFileSentCallback(RoomFileSentFunc func, void *opaque=nullptr)
Room File Sent callback.
Definition asmirasdk.h:1617
Status RoomFileDownload(const uint32_t roomID, const uint64_t hash)
Downloads a room file announced by RoomFileAvailableFunc.
Definition asmirasdk.h:1296
void SetRoomFileDeletedCallback(RoomFileDeletedFunc func, void *opaque=nullptr)
Room File Deleted callback.
Definition asmirasdk.h:1579
Status RoomFileDelete(const uint32_t roomID, const uint64_t hash)
Deletes a shared room file for the whole room.
Definition asmirasdk.h:1358
void(*) RoomFileAvailableFunc(const uint32_t roomID, const uint64_t hash, const char *fileName, const uint32_t fileSize, const uint32_t originClientID, const uint64_t utc, void *opaque)
A room file became available to download (pull model).
Definition asmirasdk.h:880
Status RoomFileDownloadResume(const uint32_t roomID, const uint64_t hash, const char *fileName, const uint32_t totalSize, const void *haveBytes, const uint32_t haveCount)
Resumes a room file download the caller already has part of.
Definition asmirasdk.h:1322
void SetRoomFileProgressCallback(RoomFileProgressFunc func, void *opaque=nullptr)
Room File Progress callback.
Definition asmirasdk.h:1605
void SetRoomFileErrorCallback(RoomFileErrorFunc func, void *opaque=nullptr)
Room File Error callback.
Definition asmirasdk.h:1629
void SetRoomFileDownloadedCallback(RoomFileDownloadedFunc func, void *opaque=nullptr)
Room File Downloaded callback.
Definition asmirasdk.h:1593
void(*) RoomFileDownloadedFunc(const uint32_t roomID, const uint64_t hash, const char *fileName, const uint8_t *data, const uint32_t size, void *opaque)
A requested room-file download finished and hash-verified: data/size hold the file bytes (valid only ...
Definition asmirasdk.h:891
@ RoomFileErrorFile
Definition asmirasdk.h:287
@ RoomFileErrorCanceled
Definition asmirasdk.h:285
@ RoomFileErrorHashMismatch
Definition asmirasdk.h:286
@ RoomFileErrorUndef
Definition asmirasdk.h:284
@ RoomFileDirectionReceive
Definition asmirasdk.h:276
@ RoomFileDirectionSend
Definition asmirasdk.h:275
@ RoomFileDirectionUndef
Definition asmirasdk.h:274
void SetPositionValuesCallback(PositionValuesFunc func, void *opaque=nullptr)
Position Values callback.
Definition asmirasdk.h:1503
PositionSource
Which member of position_values_t carries the position.
Definition asmirasdk.h:294
void(*) PositionValuesFunc(const position_values_t *positionValues, void *opaque)
The sending client reported a position, see position_values_t.
Definition asmirasdk.h:864
@ PositionSourceUndefined
Definition asmirasdk.h:295
@ PositionSourceKLV
Definition asmirasdk.h:297
@ PositionSourceNMEA
Definition asmirasdk.h:296
Request
Request sent with sdk_t::SendRequest or sdk_t::SendRequestStr.
Definition asmirasdk.h:213
void SetRoomClientRemovedCallback(RoomClientRemovedFunc func, void *opaque=nullptr)
Server room client removed callback.
Definition asmirasdk.h:1419
RoomState
State of a room, announced by RoomAnnounceFunc as a RoomStateValue.
Definition asmirasdk.h:260
uint32_t RoomStateValue
Definition asmirasdk.h:267
Status SendRequestStr(const Request request, const char *str, const char *option=nullptr)
Sends request string to ASMIRA server.
Definition asmirasdk.h:1106
RoomFlag
What a room permits, announced by RoomAnnounceFunc as a RoomFlagValue.
Definition asmirasdk.h:240
void SetRoomResponseCallback(RoomResponseFunc func, void *opaque=nullptr)
Server room response callback.
Definition asmirasdk.h:1395
Status SendRequest(const Request request)
Sends request to ASMIRA server.
Definition asmirasdk.h:1091
void(*) RoomClientAddedFunc(const uint32_t clientID, const char *userName, const UserCapabilityValue userCapability, const DeviceCapabilityValue deviceCapability, void *opaque)
A client joined the room, and once for each member already present when this client joined.
Definition asmirasdk.h:832
void(*) RoomClientRemovedFunc(const uint32_t clientID, void *opaque)
A client left the room, identified by the clientID given by RoomClientAdded.
Definition asmirasdk.h:836
uint32_t RoomFlagValue
Definition asmirasdk.h:252
void(*) RoomResponseFunc(const Request request, const RoomResponse response, const void *optionalData, const uint32_t optionalDataSize, void *opaque)
The server answered a request sent with SendRequest or SendRequestStr.
Definition asmirasdk.h:827
RoomResponse
Server answer to a Request, reported by RoomResponseFunc.
Definition asmirasdk.h:225
void SetRoomClientAddedCallback(RoomClientAddedFunc func, void *opaque=nullptr)
Server room client added callback.
Definition asmirasdk.h:1407
void SetRoomAnnounceCallback(RoomAnnounceFunc func, void *opaque=nullptr)
Server room announce callback.
Definition asmirasdk.h:1383
void(*) RoomAnnounceFunc(const char *roomName, const uint32_t roomID, const asdk::RoomStateValue state, const asdk::RoomFlagValue flags, void *opaque)
A room was announced after RequestRoomListSubscribe, or an announced room changed.
Definition asmirasdk.h:820
@ RequestRoomJoin
Definition asmirasdk.h:217
@ RequestRoomListUnsubscribe
Definition asmirasdk.h:216
@ RequestUndef
Definition asmirasdk.h:214
@ RequestRoomLeave
Definition asmirasdk.h:218
@ RequestRoomListSubscribe
Definition asmirasdk.h:215
@ RoomStateUndef
Definition asmirasdk.h:261
@ RoomStatePassword
Definition asmirasdk.h:262
@ RoomStatePreview
Definition asmirasdk.h:263
@ RoomFlagChatViewers
Definition asmirasdk.h:244
@ RoomFlagChatGuests
Definition asmirasdk.h:243
@ RoomFlagUndef
Definition asmirasdk.h:241
@ RoomFlagAudioViewers
Definition asmirasdk.h:247
@ RoomFlagAudioSenders
Definition asmirasdk.h:248
@ RoomFlagAudioGuests
Definition asmirasdk.h:246
@ RoomFlagChatSenders
Definition asmirasdk.h:245
@ RoomFlagIsPublic
Definition asmirasdk.h:242
@ RoomResponseUndef
Definition asmirasdk.h:226
@ RoomResponseError
Definition asmirasdk.h:228
@ RoomResponseErrorAlreadyJoined
Definition asmirasdk.h:229
@ RoomResponseSuccess
Definition asmirasdk.h:227
@ RoomResponseErrorUnhandled
Definition asmirasdk.h:230
void(*) BandwidthStatisticsFunc(const bandwidth_statistics_simple_t *bandwidthStatistics, void *opaque)
Periodic throughput report for the active connection.
Definition asmirasdk.h:867
void SetBandwidthStatisticsCallback(BandwidthStatisticsFunc func, void *opaque=nullptr)
Bandwidth Statistics callback.
Definition asmirasdk.h:1515
TimePointSteady TimeNowSteady()
Current steady clock reading, unaffected by clock adjustments.
Definition asmirasdk.h:769
long long TimeSpentSteady(const TimePointSteady &time)
Milliseconds elapsed since a TimeNowSteady() reading.
Definition asmirasdk.h:776
long long TimeSpent(const TimePoint &timeStart)
Milliseconds elapsed since a TimeNow() reading.
Definition asmirasdk.h:761
TimePoint TimeNow()
Current high resolution clock reading.
Definition asmirasdk.h:755
void(*) VideoModeFunc(const video_mode_t *videoMode, void *opaque)
The sending client switched photo mode, ROI or streaming on or off.
Definition asmirasdk.h:861
void SetEncodedStreamCallback(EncodedStreamFunc func, void *opaque=nullptr)
Encoded Frame or stream callback.
Definition asmirasdk.h:1455
void SetRoomPreviewImageCallback(RoomPreviewImageFunc func, void *opaque=nullptr)
Room Preview Image callback.
Definition asmirasdk.h:1527
void(*) VideoOptionsFunc(const video_options_t *videoOptions, void *opaque)
The sending client reported its encoder settings, see video_options_t.
Definition asmirasdk.h:858
void SetVideoModeCallback(VideoModeFunc func, void *opaque=nullptr)
Video Mode callback.
Definition asmirasdk.h:1491
void SetFrameCallback(FrameFunc func, void *opaque=nullptr)
Video/Photo Frame callback.
Definition asmirasdk.h:1443
void(*) RoomPreviewImageFunc(const uint32_t roomID, const uint64_t utc, const ImageFormat imageFormat, const uint8_t *data, const uint32_t size, void *opaque)
A room preview image arrived for a room announced with RoomStatePreview.
Definition asmirasdk.h:871
void(*) EncodedStreamFunc(const StreamType type, const void *data, const uint32_t dataSize, void *opaque)
An encoded frame or stream chunk arrived, before any decoding.
Definition asmirasdk.h:847
void(*) FrameFunc(const frame_t *frame, void *opaque)
A video or photo frame was decoded to RGB.
Definition asmirasdk.h:843
ImageFormat
Encoding of the image delivered by RoomPreviewImageFunc.
Definition asmirasdk.h:320
StreamType
Kind of payload delivered by EncodedStreamFunc.
Definition asmirasdk.h:304
void SetVideoOptionsCallback(VideoOptionsFunc func, void *opaque=nullptr)
Video Options callback.
Definition asmirasdk.h:1479
@ ImageFormatJPEG
Definition asmirasdk.h:322
@ ImageFormatAV1
Definition asmirasdk.h:326
@ ImageFormatH265
Definition asmirasdk.h:327
@ ImageFormatWEBP
Definition asmirasdk.h:323
@ ImageFormatUndef
Definition asmirasdk.h:321
@ ImageFormatHEIF
Definition asmirasdk.h:324
@ ImageFormatAVIF
Definition asmirasdk.h:325
@ StreamTypeAV1Frame
Definition asmirasdk.h:308
@ StreamTypeWEBP
Definition asmirasdk.h:310
@ StreamType264Frame
Definition asmirasdk.h:306
@ StreamTypeUnknown
Definition asmirasdk.h:305
@ StreamType265Frame
Definition asmirasdk.h:307
@ StreamTypeMPEGTS
Definition asmirasdk.h:309
struct asdk::sdk_t sdk_t
std::chrono::steady_clock::time_point TimePointSteady
Definition asmirasdk.h:765
struct asdk::position_klv_values_t position_klv_values_t
std::chrono::high_resolution_clock::time_point TimePoint
Definition asmirasdk.h:750
struct asdk::bandwidth_statistics_t bandwidth_statistics_t
struct asdk::position_values_t position_values_t
struct asdk::certificate_t certificate_t
struct asdk::position_nmea_values_t position_nmea_values_t
std::chrono::milliseconds TimeMS
Definition asmirasdk.h:751
Decoded room audio, delivered by DecodedAudioFrameFunc.
Definition asmirasdk.h:575
const int16_t * data
Signed 16 bit PCM samples.
Definition asmirasdk.h:580
uint32_t timeStamp
Presentation time in msec, as set by the sending client.
Definition asmirasdk.h:579
uint32_t sampleCount
PCM samples in data.
Definition asmirasdk.h:576
uint32_t sampleRate
PCM sample rate, always AUDIO_SAMPLE_RATE.
Definition asmirasdk.h:577
uint32_t channels
PCM channel count, always AUDIO_CHANNELS.
Definition asmirasdk.h:578
Audio encoder settings, see sdk_t::SetAudioOptions and sdk_t::AudioOptions.
Definition asmirasdk.h:549
int32_t bitrate
Encoder target bitrate (bit/s).
Definition asmirasdk.h:551
bool prioritizeSpeech
Tune the encoder for speech rather than general audio.
Definition asmirasdk.h:554
AudioCodec codec
Encoder used by SendAudioFrame.
Definition asmirasdk.h:550
int32_t txQueueFrames
Encoded frames accumulated into one packet, 1 - 40 where one frame is 20 msec.
Definition asmirasdk.h:553
int32_t complexity
Encoder complexity, 0 - 10 where 10 is the highest.
Definition asmirasdk.h:552
Throughput of the active connection, delivered by BandwidthStatisticsFunc.
Definition asmirasdk.h:744
float bitrateAverage
Throughput averaged over the connection in kbit/s.
Definition asmirasdk.h:746
unsigned int packetsSentReceived
Packets moved since the connection was established.
Definition asmirasdk.h:747
float bitrate
Throughput over the last reporting period in kbit/s.
Definition asmirasdk.h:745
unsigned int sizeTotal
Bytes moved during the reporting period.
Definition asmirasdk.h:725
unsigned int reportTime
Duration of the current report in milliseconds.
Definition asmirasdk.h:726
unsigned int packetsSentReceived
Packets moved during the reporting period.
Definition asmirasdk.h:724
unsigned int rtcpPacketLostSize
Bytes RTCP reported lost.
Definition asmirasdk.h:729
unsigned int rtcpPacketLostCount
Packets RTCP reported lost.
Definition asmirasdk.h:728
A server certificate, as filled in by sdk_t::RequestCertificate.
Definition asmirasdk.h:804
int len
Length of data in bytes.
Definition asmirasdk.h:805
const char * data
Certificate data.
Definition asmirasdk.h:806
A decoded video or photo frame, delivered by FrameFunc.
Definition asmirasdk.h:459
int32_t height
Frame resolution height in pixels.
Definition asmirasdk.h:461
uint8_t * data
Frame RGB data (R8G8B8), width * height * 3 bytes.
Definition asmirasdk.h:465
int64_t timeStamp
Presentation frame linear time since startup in msec.
Definition asmirasdk.h:463
uint64_t utc
Unix time in seconds at which the frame was captured.
Definition asmirasdk.h:464
int32_t width
Frame resolution width in pixels.
Definition asmirasdk.h:460
int32_t size
Size of data in bytes.
Definition asmirasdk.h:462
Platform and sensor position decoded from MISB ST 0601 KLV.
Definition asmirasdk.h:629
float sensorAzimuth
Sensor azimuth relative to the platform in degrees, 0 - 360 (ST 0601 tag 18).
Definition asmirasdk.h:642
float pitch
Platform pitch in degrees (ST 0601 tag 6).
Definition asmirasdk.h:638
float trueAirSpeed
Platform true airspeed in m/s, 0 - 255 (ST 0601 tag 57).
Definition asmirasdk.h:632
uint64_t unixTime
Unix time in seconds at which the platform sampled the position (ST 0601 tag 2, converted from micros...
Definition asmirasdk.h:630
float indicatedAirSpeed
Platform indicated airspeed in m/s, 0 - 255 (ST 0601 tag 58).
Definition asmirasdk.h:631
float sensorVerticalFOV
Sensor vertical field of view in degrees, 0 - 180 (ST 0601 tag 17).
Definition asmirasdk.h:641
float roll
Platform roll in degrees (ST 0601 tag 7).
Definition asmirasdk.h:639
float sensorHorizontalFOV
Sensor horizontal field of view in degrees, 0 - 180 (ST 0601 tag 16).
Definition asmirasdk.h:640
double longitude
Platform longitude in degrees, WGS 84 (ST 0601 tag 14).
Definition asmirasdk.h:635
double latitude
Platform latitude in degrees, WGS 84 (ST 0601 tag 13).
Definition asmirasdk.h:634
float sensorElevationAngle
Sensor elevation angle relative to the platform in degrees (ST 0601 tag 19).
Definition asmirasdk.h:643
float sensorRelativeRollAngle
Sensor roll relative to the platform in degrees, 0 - 360 (ST 0601 tag 20).
Definition asmirasdk.h:644
double altitude
Sensor true altitude in metres above mean sea level, -900 to 19000 (ST 0601 tag 15).
Definition asmirasdk.h:636
float heading
Platform heading in degrees, 0 - 360 clockwise from true north (ST 0601 tag 5).
Definition asmirasdk.h:637
float groundSpeed
Platform ground speed in m/s, 0 - 255 (ST 0601 tag 56).
Definition asmirasdk.h:633
Position decoded from an NMEA 0183 GNSS receiver.
Definition asmirasdk.h:672
double groundSpeed
Ground speed as reported by the receiver, transported as a whole number 0 - 255.
Definition asmirasdk.h:676
int64_t satVisibleCount
Number of satellites the receiver has in view.
Definition asmirasdk.h:674
double longitude
Longitude in degrees, WGS 84.
Definition asmirasdk.h:678
double latitude
Latitude in degrees, WGS 84.
Definition asmirasdk.h:677
double dilution
Dilution of precision, 0.0 - 99.9, dimensionless.
Definition asmirasdk.h:675
uint64_t unixTime
Unix time in seconds of the GNSS fix.
Definition asmirasdk.h:673
float heading
Heading in degrees, 0 - 360 clockwise from true north.
Definition asmirasdk.h:679
Position reported by the sending client, delivered by PositionValuesFunc.
Definition asmirasdk.h:698
position_klv_values_t * klvValues
May be nullptr, see positionSource.
Definition asmirasdk.h:700
PositionSource positionSource
Position value defined.
Definition asmirasdk.h:699
position_nmea_values_t * nmeaValues
May be nullptr, see positionSource.
Definition asmirasdk.h:701
SDK Core.
Definition asmirasdk.h:943
char * errorStr
Definition asmirasdk.h:949
void(*) VersionProc(uint8_t *versionMajor, uint8_t *versionMinor, uint8_t *versionPath)
Definition asmirasdk.h:944
Status status
Definition asmirasdk.h:950
What the sending client is currently doing, delivered by VideoModeFunc.
Definition asmirasdk.h:525
bool streamingEnabled
Streaming enabled.
Definition asmirasdk.h:528
bool photoMode
Photo mode enabled.
Definition asmirasdk.h:526
bool roiMode
ROI mode enabled.
Definition asmirasdk.h:527
Encoder settings in effect on the sending client, delivered by VideoOptionsFunc.
Definition asmirasdk.h:498
int32_t targetBitrate
Streaming target bitrate (kbit/s).
Definition asmirasdk.h:505
int32_t sourceFPS
Source maximum FPS.
Definition asmirasdk.h:503
int32_t sourceHeight
Source maximum resolution height.
Definition asmirasdk.h:502
int32_t photoBitrate
Streaming photo bitrate (kbit/s).
Definition asmirasdk.h:506
int32_t height
Streaming resolution height.
Definition asmirasdk.h:500
int32_t targetFPS
Streaming targeting FPS.
Definition asmirasdk.h:504
int32_t sourceWidth
Source maximum resolution width.
Definition asmirasdk.h:501
int32_t photoTargetSize
Streaming photo size (kbit).
Definition asmirasdk.h:507
int32_t threadsAvailable
Encoder threads available by system.
Definition asmirasdk.h:509
int32_t width
Streaming resolution width.
Definition asmirasdk.h:499
int32_t threads
Encoder threads.
Definition asmirasdk.h:508
int32_t priority
Encoder priority/compression level.
Definition asmirasdk.h:510