1 // Copyright (C) 2018-2020 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
9 #include "XLinkPrivateFields.h"
10 #include "XLinkPrivateDefines.h"
11 #include "XLinkErrorUtils.h"
13 #ifdef MVLOG_UNIT_NAME
14 #undef MVLOG_UNIT_NAME
15 #define MVLOG_UNIT_NAME xLink
20 xLinkDesc_t* getLinkById(linkId_t id)
23 for (i = 0; i < MAX_LINKS; i++)
24 if (availableXLinks[i].id == id)
25 return &availableXLinks[i];
29 xLinkDesc_t* getLink(void* fd)
32 for (i = 0; i < MAX_LINKS; i++)
33 if (availableXLinks[i].deviceHandle.xLinkFD == fd)
34 return &availableXLinks[i];
38 streamId_t getStreamIdByName(xLinkDesc_t* link, const char* name)
40 streamDesc_t* stream = getStreamByName(link, name);
43 streamId_t id = stream->id;
44 releaseStream(stream);
48 return INVALID_STREAM_ID;
51 streamDesc_t* getStreamById(void* fd, streamId_t id)
53 xLinkDesc_t* link = getLink(fd);
54 XLINK_RET_ERR_IF(link == NULL, NULL);
56 for (stream = 0; stream < XLINK_MAX_STREAMS; stream++) {
57 if (link->availableStreams[stream].id == id) {
58 XLink_sem_wait(&link->availableStreams[stream].sem);
60 return &link->availableStreams[stream];
66 streamDesc_t* getStreamByName(xLinkDesc_t* link, const char* name)
68 XLINK_RET_ERR_IF(link == NULL, NULL);
70 for (stream = 0; stream < XLINK_MAX_STREAMS; stream++) {
71 if (link->availableStreams[stream].id != INVALID_STREAM_ID &&
72 strcmp(link->availableStreams[stream].name, name) == 0) {
73 XLink_sem_wait(&link->availableStreams[stream].sem);
75 return &link->availableStreams[stream];
81 void releaseStream(streamDesc_t* stream)
83 if (stream && stream->id != INVALID_STREAM_ID) {
84 XLink_sem_post(&stream->sem);
87 mvLog(MVLOG_DEBUG,"trying to release a semaphore for a released stream\n");
91 xLinkState_t getXLinkState(xLinkDesc_t* link)
93 XLINK_RET_ERR_IF(link == NULL, XLINK_NOT_INIT);
94 mvLog(MVLOG_DEBUG,"%s() link %p link->peerState %d\n", __func__,link, link->peerState);
95 return link->peerState;