Ejemplo n.º 1
0
/**
 * Write bytes from file into ring buffer
 *
 * @param rb the ring buffer
 * @param fd file descriptor
 * @param n max bytes to write
 * @return bytes written into the ring buffer, or -1 if error
 */
ssize_t rb_write_from_file(CwtRingBuffer* rb, int fd, size_t n)
{
	BYTE ibuf[256];
	size_t total_br = 0;
	CwtUnistdNS *ns = cwt_unistd_ns();

	if( fd < 0 ) {
		print_error(_Tr("invalid file descriptor"));
		return 0;
	}

	while( total_br < n ) {
		/* TODO fix unsigned int cast */
		ssize_t br = ns->read(fd, ibuf, (UINT)(n - total_br));

		if( br == 0 ) /* end of file */
			break;

		if( br < 0 ) {
			printf_error(_Tr("read file error: %s"), strerror(errno));
			return (ssize_t)-1;
		}

		total_br += br;

		if( !rb_push_back(rb, ibuf, br) ) {
			return (ssize_t)-1;
		}
	}

	return (ssize_t)total_br;
}
Ejemplo n.º 2
0
bool sp_read(struct ring_buf_data* p_pd)
{
    for(;;)
    {
        uint8_t val = 0;
        const ssize_t bytesRead = read(s_fd, &val, 1);
        if(bytesRead < 0)
        {
            // error
            log_err("serial read error");
            return(false);
        }

        if(0 == bytesRead)
        {
            // no data available
            break;
        }

        rb_push_back(p_pd, val);
        if(S_OK == mb_validate(p_pd))
        {
            // have a message
            return(true);
        }
    }
    return(false);
}
Ejemplo n.º 3
0
static ssize_t rb_write(CwtRingBuffer *rb, const BYTE* bytes, size_t n)
{
	CWT_ASSERT(rb);

	if( !n )
		return (ssize_t)0;

	if( !rb_push_back(rb, bytes, (size_t)n) ) {
		return (ssize_t)-1;
	}

	return (ssize_t)n;
}