Пример #1
0
/**
 * \brief Create a SPI socket.
 * \param client SPI chip client.
 * \param flags I/O flags.
 */
PUBLIC int spidev_socket(struct spi_client *client, uint16_t flags)
{
	int rc;
	FILE *stream = malloc(sizeof(*stream));
	
	if(!stream) {
		return -1;
	}
	
	rc = iob_add(stream);
	if(rc < 0) {
		free(stream);
		return -1;
	}
	
	client->stream = stream;
	stream->flags = flags;
	stream->data = client;
	stream->write = &spidev_write;
	stream->read = &spidev_read;
	stream->close = &spidev_close;
	stream->flush = &spidev_flush;
	
	return rc;
}
Пример #2
0
/**
 * \brief Request an I2C I/O file.
 * \param client I2C driver client.
 * \param flags File flags.
 * \return The file descriptor associated with this client.
 */
PUBLIC int i2cdev_socket(struct i2c_client *client, uint16_t flags)
{
	FILE *socket;
	i2c_features_t features;
	struct i2c_shared_info *shinfo = i2c_shinfo(client);
	int rc = -1;
	
	if(client == NULL) {
		goto out;
	}
	
	if(BermudaEventWait(event(&(shinfo->mutex)), I2C_MASTER_TMO) != 0) {
		goto out;
	}
	
	socket = BermudaHeapAlloc(sizeof(*socket));
	if(!socket) {
		rc = -1;
		BermudaEventSignal(event(&(shinfo->mutex)));
		goto out;
	}
	
	rc = iob_add(socket);
	if(rc < 0) {
		BermudaHeapFree(socket);
		BermudaEventSignal(event(&(shinfo->mutex)));
		goto out;
	}
	
	features = i2c_client_features(client);
	features |= I2C_CLIENT_HAS_LOCK_FLAG;
	i2c_client_set_features(client, features);
	shinfo->socket = socket;
	
	socket->data = client;
	socket->name = "I2C";
	socket->write = &i2cdev_write;
	socket->read = &i2cdev_read;
	socket->flush = &i2cdev_flush;
	socket->close = &i2cdev_close;
	socket->flags = flags;
	
	out:
	return rc;
}
Пример #3
0
/**
 * \brief Setup the USART file streams used by functions such as printf.
 * \see BermudaUsartWriteByte
 * \see BermudaUsartReadByte
 * 
 * Stdout will be redirected to BermudaUsartWriteByte. Stdin is redirected to
 * the function BermudaUsartReadByte.
 */
PUBLIC void BermudaUsartSetupStreams()
{
	stdout = &usart0_io;
	stdin  = &usart0_io;
	iob_add(&usart0_io);
}