Exemple #1
0
int rtdal_itfspscq_recv(r_itf_t obj, void* buffer, int len) {

	RTDAL_ASSERT_PARAM(buffer);
	RTDAL_ASSERT_PARAM(len>=0);

	int n, plen;
	void *ptr;

	if ((n = rtdal_itfspscq_pop(obj, &ptr, &plen, rtdal_time_slot())) != 1) {
		return n;
	}
	if (plen > len) {
		plen = len;
	}

	hdebug("obj=0x%x, rcv pkt=0x%x\n",obj,ptr);
	memcpy(buffer, ptr, (size_t) plen);

	if ((n = rtdal_itfspscq_release(obj)) == 1) {
		return n;
	}

	hdebug("release pkt 0x%x\n",ptr);

	return plen;
}
Exemple #2
0
int rtdal_itfspscq_pop(r_itf_t obj, void **ptr, int *len, int tstamp) {
	cast(obj,itf);
	RTDAL_ASSERT_PARAM(ptr);
	RTDAL_ASSERT_PARAM(len);

	*ptr = NULL;
	*len = 0;

	if (spscq_is_empty(itf)) {
		qdebug("[empty] read=%d, tstamp=%d\n",itf->read,itf->packets[itf->read].tstamp);
		return 0;
	}
	if (itf->packets[itf->read].tstamp > tstamp) {
		qdebug("[delay] read=%d, tstamp=%d\n",itf->read,itf->packets[itf->read].tstamp);
		return 0;
	}
	if (itf->packets[itf->read].tstamp < tstamp && itf->parent.delay) {
		rtdal_itfspscq_release(obj);
	}

	qdebug("[ok] read=%d, tstamp=%d (now=%d)\n",itf->read,itf->packets[itf->read].tstamp,tstamp);
	*ptr = itf->packets[itf->read].data;
	*len = itf->packets[itf->read].len;

	return 1;
}
Exemple #3
0
int rtdal_itfspscq_recv(r_itf_t obj, void* buffer, int len, int tstamp) {
	RTDAL_ASSERT_PARAM(buffer);
	RTDAL_ASSERT_PARAM(len>=0);

	int n, plen;
	void *ptr=NULL;

	do {
		if ((n = rtdal_itfspscq_pop(obj, &ptr, &plen, tstamp)) < 1) {
			return n;
		}
	} while (n == 2);

	if (plen > len) {
		plen = len;
	}

	memcpy(buffer, ptr, (size_t) plen);

	if ((n = rtdal_itfspscq_release(obj,NULL,0)) != 1) {
		printf("Caution packet could not be released (%d)\n",n);
	}
	return plen;
}