--- /dev/null
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: galileo-i2c
+# Required-Start:
+# Should-Start:
+# Required-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Configures the Galileo shield pins for I2C usage.
+# Description: Configures the Galileo shield pins for I2C usage.
+### END INIT INFO
+
+case "$1" in
+ start|restart|force-reload)
+
+ # Pull-up on IO18
+ if [ ! -d /sys/class/gpio/gpio57 ] ; then
+ echo -n "57" > /sys/class/gpio/export
+ fi
+ echo "out" > /sys/class/gpio/gpio57/direction
+ echo "1" > /sys/class/gpio/gpio57/value
+
+ # Select I2C on IO18 and IO19
+ if [ ! -d /sys/class/gpio/gpio60 ] ; then
+ echo -n "60" > /sys/class/gpio/export
+ fi
+ echo "out" > /sys/class/gpio/gpio60/direction
+ echo "0" > /sys/class/gpio/gpio60/value
+
+ # Pull-up on IO19
+ if [ ! -d /sys/class/gpio/gpio59 ] ; then
+ echo -n "59" > /sys/class/gpio/export
+ fi
+ echo "out" > /sys/class/gpio/gpio59/direction
+ echo "1" > /sys/class/gpio/gpio59/value
+
+ chgrp i2c /dev/i2c-0
+ chmod g+rw /dev/i2c-0
+
+ ;;
+ stop)
+ # No pull-up on IO18
+ echo "in" > /sys/class/gpio/gpio57/direction
+ ecbo "57" > /sys/class/gpio/unexport
+
+ # GPIO on IO18 and IO19
+ echo "1" > /sys/class/gpio/gpio60/value
+ echo "60" > /sys/class/gpio/unexport
+
+ # No pull-up on IO19
+ echo "in" > /sys/class/gpio/gpio59/direction
+ echo "59" > /sys/class/gpio/unexport
+ ;;
+ status)
+ ;;
+ *)
+ echo -n "Usage: $0 "
+ echo "{start|stop|restart|force-reload|status}"
+ exit 1
+ ;;
+esac
+
+exit 0
You should have received a copy of the GNU General Public License
along with this program. If not, see
<http://www.gnu.org/licenses/>.
-
+
*******************************************************************************/
#include <fcntl.h>
int BNO055_i2c_init(const char *dev_name,u8 dev_addr,struct bno055_t *bno055)
{
- int fd;
-
if((fd=open(dev_name,O_RDWR))==-1) return -1;
bno055->bus_write=BNO055_i2c_write;
bno055->bus_read=BNO055_i2c_read;
bno055->delay_msec=BNO055_delay;
bno055->dev_addr=dev_addr;
-
+
return 0;
}
bno055->bus_read=NULL;
bno055->delay_msec=NULL;
bno055->dev_addr=0;
-
+
if(close(fd)) return -1;
return 0;
int i=0;
if(ioctl(fd,I2C_SLAVE,dev_addr)==-1) return BNO055_ERROR;
-
+
array[0]=reg_addr;
for (i=0;i < cnt;i++) array[i+1]=*(reg_data+i);
-
+
if(write(fd,array,cnt+1)==-1) return BNO055_ERROR;
return BNO055_SUCCESS;
s8 BNO055_i2c_read(u8 dev_addr,u8 reg_addr,u8 *reg_data,u8 cnt)
{
if(ioctl(fd,I2C_SLAVE,dev_addr)==-1) return BNO055_ERROR;
-
+
if(write(fd,®_addr,sizeof reg_addr)==-1) return BNO055_ERROR;
if(read(fd,reg_data,cnt)==-1) return BNO055_ERROR;
-
- return BNO055_SUCCESS;
+
+ return BNO055_SUCCESS;
}
u8 clk_src;
char interface;
u8 dev_addr;
-
+
if(argc < 2) usage_help(argv[0]);
while((opt=getopt(argc,argv,"i:t")) != -1)
return -errno;
}
break;
-
+
default:
usage_help(argv[0]);
}
}
-
+
if(bno055_init(&bno055) == BNO055_SUCCESS)
{
printf("Chip id=0x%02x\n",bno055.chip_id);
if(bno055_set_accel_unit(BNO055_ACCEL_UNIT_MSQ) == BNO055_SUCCESS)
printf("Acceleration unit set to m/s^2.\n");
else fprintf(stderr,"Error setting acceleration unit to m/s^2.\n");
-
+
if(bno055_set_gyro_unit(BNO055_GYRO_UNIT_RPS) == BNO055_SUCCESS)
printf("Gyroscope unit set to rad/s.\n");
else fprintf(stderr,"Error setting gyroscope unit to rad/s.\n");
-
+
if(bno055_set_euler_unit(BNO055_EULER_UNIT_RAD) == BNO055_SUCCESS)
printf("Euler angles unit set to rad.\n");
else fprintf(stderr,"Error setting Euler angles unit to rad.\n");
-
+
if(bno055_set_tilt_unit(BNO055_TILT_UNIT_RAD) == BNO055_SUCCESS)
printf("Tilt unit set to rad.\n");
else fprintf(stderr,"Error setting tilt unit to rad.\n");
-
+
if(bno055_set_temp_unit(BNO055_TEMP_UNIT_CELSIUS) == BNO055_SUCCESS)
printf("Temperature unit set to Celsius.\n");
else fprintf(stderr,"Error setting temperature unit to Celsius.\n");
-
+
if(bno055_set_data_output_format(0x01) == BNO055_SUCCESS)
printf("Data output format set to Android.\n");
else fprintf(stderr,"Error setting data output format.\n");
-
+
if(bno055_set_operation_mode(BNO055_OPERATION_MODE_AMG) == BNO055_SUCCESS)
printf("Operation mode set to AMG: raw (uncompesated) data.\n");
else fprintf(stderr,"Error setting operation mode t0 AMG.\n");
if(bno055_read_accel_xyz(&accel) == BNO055_SUCCESS)
printf("Acceleration=%G, %G, %G m/s^2\n",accel.x/BNO055_ACCEL_DIV_MSQ,accel.y/BNO055_ACCEL_DIV_MSQ,accel.z/BNO055_ACCEL_DIV_MSQ);
else fprintf(stderr,"Error reading acceleration.\n");
-
+
if(bno055_read_mag_xyz(&mag) == BNO055_SUCCESS)
printf("Magnetometer=%G, %G, %G uT\n",mag.x/BNO055_MAG_DIV_UT,mag.y/BNO055_MAG_DIV_UT,mag.z/BNO055_MAG_DIV_UT);
else fprintf(stderr,"Error reading magnetometer.\n");
if(bno055_set_operation_mode(BNO055_OPERATION_MODE_NDOF) == BNO055_SUCCESS)
printf("Opertation mode set to NDOF: fused (offset and tilt compensated data).\n");
else fprintf(stderr,"Error setting operation mode to NDOF.\n");
-
+
if(bno055_read_accel_xyz(&accel) == BNO055_SUCCESS)
printf("Acceleration=%G, %G, %G m/s^2\n",accel.x/BNO055_ACCEL_DIV_MSQ,accel.y/BNO055_ACCEL_DIV_MSQ,accel.z/BNO055_ACCEL_DIV_MSQ);
else fprintf(stderr,"Error reading acceleration.\n");
-
+
if(bno055_read_mag_xyz(&mag) == BNO055_SUCCESS)
printf("Magnetometer=%G, %G, %G uT\n",mag.x/BNO055_MAG_DIV_UT,mag.y/BNO055_MAG_DIV_UT,mag.z/BNO055_MAG_DIV_UT);
else fprintf(stderr,"Error reading magnetometer.\n");
if(bno055_read_quaternion_wxyz(&quaternion) == BNO055_SUCCESS)
printf("Quaternion=%G, %G, %G, %G\n",quaternion.w/BNO055_QUATERNION_DIV,quaternion.x/BNO055_QUATERNION_DIV,quaternion.y/BNO055_QUATERNION_DIV,quaternion.z/BNO055_QUATERNION_DIV);
else fprintf(stderr,"Error reading quaternion.\n");
-
+
if(bno055_read_linear_accel_xyz(&linear_accel) == BNO055_SUCCESS)
printf("Linear acceleration=%G, %G, %G m/s^2\n",linear_accel.x/BNO055_LINEAR_ACCEL_DIV_MSQ,linear_accel.y/BNO055_LINEAR_ACCEL_DIV_MSQ,linear_accel.z/BNO055_LINEAR_ACCEL_DIV_MSQ);
else fprintf(stderr,"Error reading linear acceleration.\n");