/** * \file * * * \brief Function library for Accessing FT245RL USB interface. * * This module handles USB communication with FT245RL chip. * This chip is a parallel USB interface with data flow control. * A kfile-like interface is supplied. * * \author Francesco Sacchi */ #include "hw/hw_ft245rl.h" #include "ft245rl.h" #include #include #include #include #include #include MOD_DEFINE(ft245rl); /** * Read \a size bytes in buffer \a buf, from fid \a _fd. */ static size_t ft245rl_read(struct KFile *_fd, void *_buf, size_t size) { Ft245rl *fd = FT245RL_CAST(_fd); (void)fd; //unused uint8_t *buf = (uint8_t *)_buf; size_t total_read = 0; while (size--) { while(!FT245RL_DATA_RDY()) /* busy waiy */; *buf++ = FT245RL_GETDATA(); total_read++; } return total_read; } /** * Write \a size bytes from buffer \a buf, of fid \a _fd. */ static size_t ft245rl_write(struct KFile *_fd, const void *_buf, size_t size) { Ft245rl *fd = FT245RL_CAST(_fd); (void)fd; //unused const uint8_t *buf = (const uint8_t *)_buf; size_t total_write = 0; while (size--) { while(!FT245RL_TX_ALLOWED()) /* busy waiy */; FT245RL_SETDATA(*buf++); total_write++; } return total_write; } /** * Ft245rl init function. */ void ft245rl_init(Ft245rl *fd) { memset(fd, 0, sizeof(*fd)); DB(fd->fd._type = KFT_FT245RL); // Setup data ft245rl communication functions. fd->fd.read = ft245rl_read; fd->fd.write = ft245rl_write; FT245RL_INIT(); while (FT245RL_DATA_RDY()) FT245RL_GETDATA(); MOD_INIT(ft245rl); }