コード例 #1
0
ファイル: libglcd_sample_rpi.c プロジェクト: fs495/rpi
void hw_fini(void)
{
    if(gpio_rs_fd >= 0)
	sysfs_gpio_close(gpio_rs_fd, GPIO_RS_PIN);
    if(spi_fd >= 0)
	close(spi_fd);

    gpio_rs_fd = spi_fd = -1;
}
コード例 #2
0
ファイル: mux_spi.c プロジェクト: vogelchr/rpi_gyro
struct mux_spi *
mux_spi_open(){
	struct mux_spi *p;
	char buf[64];
	int i;

	p = calloc(1,sizeof(struct mux_spi));

	for(i=0;i<NUM_SPI;i++)
		p->spi_fd[i]=-1;

	for(i=0;i<NUM_GPIO;i++){
		p->gpio[i] = sysfs_gpio_open(gpio_num[i]);
		if(!p->gpio[i])
			goto err;
		/* initialize multiplexer bits to 0 */
		if(sysfs_gpio_direction(p->gpio[i],1) ||
		   sysfs_gpio_value(p->gpio[i],0)
		)
			goto err;
	}

	for(i=0;i<NUM_SPI;i++){
		sprintf(buf,"/dev/spidev0.%d",i);
		p->spi_fd[i] = open(buf,O_RDWR);
		if(p->spi_fd[i] == -1){
			perror(buf);
			goto err;
		}

		if(ioctl(p->spi_fd[i],SPI_IOC_RD_BITS_PER_WORD,&p->spibpw[i])){
			perror("ioctl(SPI_IOC_RD_BITS_PER_WORD)");
			goto err;
		}

		if(ioctl(p->spi_fd[i],SPI_IOC_RD_MODE,&p->spimode[i])){
			perror("ioctl(SPI_IOC_RD_MODE)");
			goto err;
		}

		if(ioctl(p->spi_fd[i],SPI_IOC_RD_LSB_FIRST,&p->spilsb[i])){
			perror("ioctl(SPI_IOC_RD_LSB_FIRST)");
			goto err;
		}
		
		fprintf(stderr,"Opened %s as fd %d (0x%02x, %d, %d).\n",
			buf,p->spi_fd[i],
			p->spimode[i],p->spibpw[i],p->spilsb[i]);
	}

	return p;

err:
	for(i=0;i<NUM_SPI;i++){
		if(p->spi_fd[i] != -1)
			close(p->spi_fd[i]);
	}
	for(i=0;i<NUM_GPIO;i++){
		if(p->gpio[i])
			sysfs_gpio_close(p->gpio[i]);
	}
	return NULL;
}