Beispiel #1
0
void hw_init(void)
{
    gpio_rs_fd = sysfs_gpio_open("out", GPIO_RS_PIN);
    if(gpio_rs_fd < 0) {
	fprintf(stderr, "Error: hw_gpio_init(GPIO_RS_PIN)\n");
	exit(1);
    }

    spi_fd = hw_spi_init();
    if(spi_fd < 0) {
	fprintf(stderr, "Error: hw_spi_init()\n");
	exit(1);
    }
}
Beispiel #2
0
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;
}