Пример #1
0
static int vti_get(CableHandle *h, uint8_t *data, uint32_t len)
{
	unsigned int i;
	tiTIME clk;

	if(!hMap) return 0;
	if(vRecvBuf)
	{
		/* Wait that the buffer has been filled */
		for(i = 0; i < len; i++)
		{
			TO_START(clk);
			do
			{
				if (TO_ELAPSED(clk, h->timeout))
					return ERR_READ_TIMEOUT;
			}
			while (vRecvBuf->start == vRecvBuf->end);

			/* And retrieve the data from the circular buffer */
			data[i] = vRecvBuf->buf[vRecvBuf->start];
			vRecvBuf->start = (vRecvBuf->start + 1) & (BUFSIZE-1);
		}
	}
	else
	{
		ticables_critical("vti_get(): receive buffer busted !\n");
	}

	return 0;
}
Пример #2
0
static int vti_put(CableHandle *h, uint8_t *data, uint32_t len)
{
	unsigned int i;
	tiTIME clk;

	if(!hMap) return 0;
	if(vSendBuf)
	{
		for(i = 0; i < len; i++)
		{
			TO_START(clk);
			do
			{
				if (TO_ELAPSED(clk, h->timeout))
					return ERR_WRITE_TIMEOUT;
			}
			while (((vSendBuf->end + 1) & (BUFSIZE-1)) == vSendBuf->start);

			vSendBuf->buf[vSendBuf->end] = data[i];
			vSendBuf->end = (vSendBuf->end + 1) & (BUFSIZE-1);
		}
	}
	else
	{
		ticables_critical("vti_put(): send buffer busted !\n");
	}

	return 0;
}
Пример #3
0
static int vti_put(CableHandle *h, uint8_t *data, uint32_t len)
{
    int p = h->address;
    uint32_t i;
    tiTIME clk;
    
    for(i = 0; i < len; i++)
    {
	TO_START(clk);
	do 
	{
	    if (TO_ELAPSED(clk, h->timeout))
		return ERR_WRITE_TIMEOUT;
	}
	while (((send_buf[p]->end + 1) & 255) == send_buf[p]->start);
	
	send_buf[p]->buf[send_buf[p]->end] = data[i];
	send_buf[p]->end = (send_buf[p]->end + 1) & 255;
    }
    
    return 0;
}
Пример #4
0
static int vti_get(CableHandle *h, uint8_t *data, uint32_t len)
{
    int p = h->address;
    uint32_t i;
    tiTIME clk;
    
    for(i = 0; i < len; i++)
    {
	TO_START(clk);
	do 
	{
	    if (TO_ELAPSED(clk, h->timeout))
		return ERR_READ_TIMEOUT;
	}
	while (recv_buf[p]->start == recv_buf[p]->end);
	
	
	data[i] = recv_buf[p]->buf[recv_buf[p]->start];
	recv_buf[p]->start = (recv_buf[p]->start + 1) & 255;
    }
    
    return 0;
}