From: Walter Fetter Lages Date: Fri, 2 Aug 2019 04:29:30 +0000 (-0300) Subject: Merge branch 'write_repeat' X-Git-Tag: f1~1 X-Git-Url: http://git.ece.ufrgs.br/?a=commitdiff_plain;h=5332ba1cdbd7f7585656ad472935724a137aff3d;p=bno055.git Merge branch 'write_repeat' --- 5332ba1cdbd7f7585656ad472935724a137aff3d diff --cc lib/bno055_tty.c index f122b61,6edbb76..3c00633 --- a/lib/bno055_tty.c +++ b/lib/bno055_tty.c @@@ -100,22 -101,23 +101,26 @@@ s8 BNO055_tty_write(u8 dev_addr,u8 reg_ int n=0; int c=0; - tcflush(dev_addr,TCIOFLUSH); - array[0]=BNO055_UART_START; - array[1]=BNO055_UART_WRITE_CMD; - array[2]=reg_addr; - array[3]=cnt; - for (i=0;i < cnt;i++) array[i+4]=*(reg_data+i); - - for(n=0;n < cnt+4;n+=c) + do { - if((c=write(dev_addr,array+n,1))==-1) return BNO055_ERROR; - usleep(100); - } + tcflush(dev_addr,TCIOFLUSH); + array[0]=BNO055_UART_START; + array[1]=BNO055_UART_WRITE_CMD; + array[2]=reg_addr; + array[3]=cnt; + for (i=0;i < cnt;i++) array[i+4]=*(reg_data+i); + + for(n=0;n < cnt+4;n+=c) - if((c=write(dev_addr,array+n,cnt+4-n))==-1) return BNO055_ERROR; ++ { ++ if((c=write(dev_addr,array+n,1))==-1) return BNO055_ERROR; ++ usleep(100); /* Necessary to avoid overrun? */ ++ } - for(n=0;n < 2; n+=c) - if((c=read(dev_addr,array+n,2-n)) <= 0) return BNO055_ERROR; + for(n=0;n < 2; n+=c) + if((c=read(dev_addr,array+n,2-n)) <= 0) return BNO055_ERROR; + } while(array[0] == BNO055_UART_ACK && array[1] == BNO055_UART_OVERRUN); + if(array[0] != BNO055_UART_ACK || array[1] != BNO055_UART_SUCCESS) return BNO055_ERROR; return BNO055_SUCCESS; @@@ -128,20 -130,20 +133,23 @@@ s8 BNO055_tty_read(u8 dev_addr,u8 reg_a int length=0; int c=0; - tcflush(dev_addr,TCIOFLUSH); - array[0]=BNO055_UART_START; - array[1]=BNO055_UART_READ_CMD; - array[2]=reg_addr; - array[3]=cnt; - - for(n=0;n < 4;n+=c) + do { - if((c=write(dev_addr,array+n,1))==-1) return BNO055_ERROR; - usleep(100); - } - - for(n=0;n < 2; n+=c) - if((c=read(dev_addr,array+n,2-n)) <= 0) return BNO055_ERROR; + tcflush(dev_addr,TCIOFLUSH); + array[0]=BNO055_UART_START; + array[1]=BNO055_UART_READ_CMD; + array[2]=reg_addr; + array[3]=cnt; + + for(n=0;n < 4;n+=c) - if((c=write(dev_addr,array+n,4-n))==-1) return BNO055_ERROR; ++ { ++ if((c=write(dev_addr,array+n,1))==-1) return BNO055_ERROR; ++ usleep(100); /* Necessary to avoid overrun? */ ++ } + + for(n=0;n < 2; n+=c) + if((c=read(dev_addr,array+n,2-n)) <= 0) return BNO055_ERROR; + } while(array[0] == BNO055_UART_ACK && array[1] == BNO055_UART_OVERRUN); switch(array[0]) {