bonekit 0.0.3-arm-linux → 0.0.4-arm-linux

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Yzk3YTEyNmYyYTgwYTA5MWYxNmY4NTAwYjZiNDk3M2RiYWJkYjEyOA==
4
+ NjI5NDRkNjgwMzIyYWI2NTQ3ZjVmMDE5YzIzZmVhZjM4NWVhZjcyNA==
5
5
  data.tar.gz: !binary |-
6
- ZjZlMjE0YzllNzMyOWZlNjAzM2ZjZTYxMDUwNzI2YjkwYmU5NjJhNA==
6
+ YWNjMWNiMmE3N2Y4MGZlNjAzNGVjMTdmMTNiMDZlZmY2MjlkNGUwMg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZWU0YWRjMTlkYjQ4YzRjOGE3ZjljZGQ0MGEzYjlmNjhmMmRiYTgwY2RlYzc1
10
- ZDgxODZmM2I4ZTg2ZWE2NGYyZmQzZDkyY2UxM2YwNDRiMDA3MWUwMzQyYWU1
11
- MTZiMTFmOGIwMWE0MWViN2I0OTliOTFjODVhZWNmM2NlYjdjNTU=
9
+ NjgyOTkxNjFmZTc2Yjg2YjIyZjg2ZTE0ZDUwODFhOGFhYzczYWQ4YTM5Njgy
10
+ MWQzZmRlMzUzZTRjYTI5MWI2YTExNTVmYjE2ZGU0Yzk2ODg5Njk4Y2M5ODI2
11
+ NTQ2NjAwZjBkODk1OWY4ZDBjNzdjYTc2YzYwNDU5ZWUxNTNhN2Q=
12
12
  data.tar.gz: !binary |-
13
- ZWQyYzIyN2ZhZGI3YTZmM2IxNDcyOWQxYTk0ZWVlY2ZkN2Q1MGMyOWY1MTZh
14
- NmU4MzZhZWI4NGIyMjc5NjM5OWI1MjA2OTgxZDJmMDk2ZjcyNjRiNmVlODBk
15
- MGU5ZTE2YmQyMzNkYTlmMWYwMjEyY2VkZDA5NGFiZWE0ZGViZTg=
13
+ OGI1NGU4YWU0ZDYyNTBiNDZmODk4YmQyNTRmNjQ4OTMyNTJlOWQ1ZmRmZDYw
14
+ ZGMwMDY3NGJjMTEyZWQ0OTk2MTA4OTFjZjRjOWQ4ODc0N2RhMzlkMmE5NDJl
15
+ NGY1MmFjYmQyYjgyMDdkZTMxMjViYjVlNjRlMjM4ODZmZjRmZTg=
data/README.md CHANGED
@@ -23,7 +23,7 @@ or build and install:
23
23
  ```
24
24
  bundle
25
25
  rake
26
- gem install --local pkg/bonekit-0.0.3
26
+ gem install --local pkg/bonekit-0.0.4.gem
27
27
  ```
28
28
 
29
29
  ## Example
@@ -65,6 +65,13 @@ analog_value = pin.analog_value # Read analog value (0.0 to 1.0)
65
65
  pin = Pin.new P9_42 # Pulse-Width Modulation pin
66
66
  pin.analog_value = 0.3 # Write analog value (0.0 to 1.0)
67
67
  ```
68
+ __I2C__
69
+
70
+ ```ruby
71
+ device = I2c.new address
72
+ device.read(1) # read 1 byte
73
+ device.write([0x03,0x00]) # write 2 bytes
74
+ ```
68
75
 
69
76
  __Devices (ICs)__
70
77
 
@@ -78,7 +85,7 @@ heading = compass.heading # degrees
78
85
  * Digital Input/Output (implemented)
79
86
  * Analog Input (implemented)
80
87
  * Analog Output (implemented)
81
- * I2C (planned)
88
+ * I2C (implemented)
82
89
  * SPI (planned)
83
90
  * Interrupts (planned)
84
91
  * Serial Communication (planned)
@@ -0,0 +1,31 @@
1
+ # Photo resistor - Simple test of the functionality of the photo resistor
2
+ #
3
+ # Connect the photoresistor one leg to pin P9-39 and other leg to pin P9-32 (VDD_ADC)
4
+ # Connect a resistor (around 10k is a good value, higher values gives higher readings)
5
+ # from pin P9-39 to pin P9-34 (GND_ADC).
6
+ #
7
+ # Circuit:
8
+ #
9
+ # Photo Resistor 10K
10
+ # +1.8 (P9-32) o---/\/\/----.----/\/\/---o GND_ADC (P9-34)
11
+ # |
12
+ # AIN0 (P9-39) o------------+
13
+ #
14
+
15
+ require 'bonekit'
16
+
17
+ photo_resistor = Pin.new P9_39 # AIN0
18
+
19
+ light_readings = [0.0]
20
+ light_threshold = 0.05 # Log all changes above threshold
21
+
22
+ loop do
23
+ light_reading = photo_resistor.analog_value
24
+
25
+ if (light_reading - light_readings.last).abs > light_threshold
26
+ light_readings << light_reading
27
+ puts "Light is at #{(light_reading*100.0).round}%"
28
+ end
29
+
30
+ sleep(0.1)
31
+ end
@@ -0,0 +1,18 @@
1
+ # Potentiometer
2
+ #
3
+ # This example shows how to control the brightness of an LED using a potentiometer.
4
+ #
5
+ # The circuit:
6
+ # * LED with 180 ohm resistor attached from pin P9_42 to DGND.
7
+ # * Potentiometer attached to pin P9_39, VDD_ADC and GNDA_ADC.
8
+ #
9
+
10
+ require 'bonekit'
11
+
12
+ led = Pin.new P9_42 # LED connected to a pin that supports PWM
13
+ pot = Pin.new P9_39 # Potentiometer connected to an ADC pin
14
+
15
+ loop do
16
+ led.analog_value = pot.analog_value
17
+ sleep(0.01) # 100Hz refresh rate
18
+ end
@@ -0,0 +1,17 @@
1
+ # Compass - Simple test of the functionality of the HMC5883L 3-Axis Digital Compass IC
2
+ #
3
+ # Connections:
4
+ # VCC to pin P9-4 (VDD_3V3)
5
+ # GND to pin P9-2 (DGND)
6
+ # SCL to P9_19 (I2C2_SCL)
7
+ # SDA to P9_20 (I2C2_SDA)
8
+ #
9
+
10
+ require 'bonekit'
11
+
12
+ compass = HMC5883L.new
13
+
14
+ loop do
15
+ puts "Heading: #{compass.heading} degrees"
16
+ sleep(0.1)
17
+ end
@@ -0,0 +1,32 @@
1
+ # Device - Simple test of using HMC5883L I2C interface
2
+ #
3
+ # Connections:
4
+ # VCC to pin P9-4 (VDD_3V3)
5
+ # GND to pin P9-2 (DGND)
6
+ # SCL to P9_19 (I2C2_SCL)
7
+ # SDA to P9_20 (I2C2_SDA)
8
+ #
9
+
10
+ require 'bonekit'
11
+
12
+ DeviceAddress = 0x1e
13
+
14
+ ModeRegister = 0x02
15
+ ReadRegister = 0x03
16
+ ModeContinuous = 0x00
17
+
18
+ device = I2c.new DeviceAddress
19
+
20
+ device.write([ModeRegister, ModeContinuous])
21
+
22
+ loop do
23
+ device.write([ReadRegister])
24
+ raw = device.read(6)
25
+ x = (raw[0] << 8 | raw[1])
26
+ z = (raw[2] << 8 | raw[3])
27
+ y = (raw[4] << 8 | raw[5])
28
+ axis = [x,y,z]
29
+ puts "axis #{axis}"
30
+
31
+ sleep(1)
32
+ end
@@ -27,44 +27,24 @@
27
27
 
28
28
  #include "hmc5883l.h"
29
29
 
30
- #define M_PI 3.14159265358979323846
30
+ #define HMC5883L_Address 0x1e
31
31
 
32
- void selectDevice(int fd, int addr, char * name)
33
- {
34
- if (ioctl(fd, I2C_SLAVE, addr) < 0)
35
- {
36
- fprintf(stderr, "%s not present\n", name);
37
- exit(1);
38
- }
39
- }
32
+ #define HMC5883L_Register_ConfigurationA 0x00
33
+ #define HMC5883L_Register_ConfigurationB 0x01
34
+ #define HMC5883L_Register_Mode 0x02
35
+ #define HMC5883L_Register_DataBegin 0x03
40
36
 
41
- void writeToDevice(int fd, int reg, int val)
42
- {
43
- char buf[2];
44
- buf[0]=reg;
45
- buf[1]=val;
46
-
47
- if (write(fd, buf, 2) != 2)
48
- {
49
- fprintf(stderr, "Can't write to device\n");
50
- }
51
- }
37
+ #define HMC5883L_Mode_Measurement_Continuous 0x00
38
+ #define HMC5883L_Mode_Measurement_SingleShot 0x01
39
+ #define HMC5883L_Mode_Measurement_Idle 0x03
52
40
 
53
- void readFromDevice(int fd, uint8_t * buf, int len)
54
- {
55
- int readRegister = 0x03;
56
- if((write(fd, &readRegister, 1)) != 1)
57
- {
58
- //error
59
- }
60
- else
61
- {
62
- if(read(fd, buf, len) != len)
63
- {
64
- //error
65
- }
66
- }
67
- }
41
+ #define ErrorCode_1 "Scalenotvalid"//Entered scale was not valid, valid gauss values are: 0.88, 1.3, 1.9, 2.5, 4.0, 4.7, 5.6, 8.1"
42
+ #define ErrorCode_1_Num 1
43
+
44
+ #include <math.h>
45
+
46
+ #define M_180_div_PI 57.2957795131
47
+ #define M_2PI 6.28318530718
68
48
 
69
49
  hmc5883l_t * hmc5883l_create()
70
50
  {
@@ -72,16 +52,15 @@ hmc5883l_t * hmc5883l_create()
72
52
  obj = malloc(sizeof(struct hmc5883l_s));
73
53
  if(obj)
74
54
  {
75
- obj->_scale = 1;
55
+ //obj->_scale = 1;
56
+
57
+ // Initialize
58
+ obj->_i2c = i2c_alloc();
59
+ i2c_init(obj->_i2c, HMC5883L_Address);
76
60
 
77
- if ((obj->_fd = open("/dev/i2c-1", O_RDWR)) < 0)
78
- {
79
- // Open port for reading and writing
80
- //printf("HMC5883L::Failed to open i2c bus\n");
81
- }
82
-
83
- selectDevice(obj->_fd, HMC5883L_Address, HMC5883L_Name);
84
- writeToDevice(obj->_fd, ModeRegister, Measurement_Continuous);
61
+ // Setup mode
62
+ uint8_t setup[2] = {HMC5883L_Register_Mode, HMC5883L_Mode_Measurement_Continuous};
63
+ i2c_write(obj->_i2c, setup, 2);
85
64
  }
86
65
 
87
66
  return obj;
@@ -89,19 +68,31 @@ hmc5883l_t * hmc5883l_create()
89
68
 
90
69
  void hmc5883l_destroy(hmc5883l_t * obj)
91
70
  {
92
- free(obj);
71
+ if(obj)
72
+ {
73
+ i2c_destroy(obj->_i2c);
74
+ free(obj);
75
+ }
93
76
  }
94
77
 
95
78
  float hmc5883l_heading(hmc5883l_t * obj)
96
79
  {
97
- unsigned char buf[16];
98
- readFromDevice(obj->_fd, buf, 6);
80
+ uint8_t write_data[1] = {HMC5883L_Register_DataBegin};
81
+ uint8_t read_data[6];
82
+
83
+ i2c_write(obj->_i2c, write_data, 1); // check if success before read
84
+ i2c_read(obj->_i2c, read_data, 6); // check if success before calculate heading
85
+
86
+ short x = (read_data[0] << 8) | read_data[1];
87
+ short y = (read_data[4] << 8) | read_data[5];
88
+ short z = (read_data[2] << 8) | read_data[3];
99
89
 
100
- short x = (buf[0] << 8) | buf[1];
101
- short y = (buf[4] << 8) | buf[5];
102
- short z = (buf[2] << 8) | buf[3];
90
+ float angle_radians = atan2(y,x);
103
91
 
104
- float angle = atan2(y, x) * 180 / M_PI;
92
+ if(angle_radians < 0.0)
93
+ angle_radians += M_2PI;
94
+
95
+ float angle_degrees = angle_radians * M_180_div_PI;
105
96
 
106
- return angle;
97
+ return angle_degrees;
107
98
  }
@@ -31,32 +31,8 @@
31
31
  #ifdef __cplusplus
32
32
  extern "C" {
33
33
  #endif
34
-
35
- #include <stdio.h>
36
- #include <stdlib.h>
37
- #include <stdint.h>
38
- #include <fcntl.h>
39
- #include <unistd.h>
40
- #include <string.h>
41
- #include <sys/ioctl.h>
42
- #include <sys/types.h>
43
- #include <sys/stat.h>
44
- #include <linux/i2c-dev.h>
45
- #include <math.h>
46
-
47
- #define HMC5883L_Address 0x1E
48
- #define HMC5883L_Name "HMC5883L"
49
- #define ConfigurationRegisterA 0x00
50
- #define ConfigurationRegisterB 0x01
51
- #define ModeRegister 0x02
52
- #define DataRegisterBegin 0x03
53
-
54
- #define Measurement_Continuous 0x00
55
- #define Measurement_SingleShot 0x01
56
- #define Measurement_Idle 0x03
57
-
58
- #define ErrorCode_1 "Scalenotvalid"//Entered scale was not valid, valid gauss values are: 0.88, 1.3, 1.9, 2.5, 4.0, 4.7, 5.6, 8.1"
59
- #define ErrorCode_1_Num 1
34
+
35
+ #include "i2c.h"
60
36
 
61
37
  typedef struct
62
38
  {
@@ -74,9 +50,11 @@ typedef struct
74
50
 
75
51
  struct hmc5883l_s
76
52
  {
77
- float _scale;
53
+ //float _scale;
78
54
  float _fd;
79
55
  float _buffer[32];
56
+
57
+ i2c_t * _i2c;
80
58
  };
81
59
 
82
60
  typedef struct hmc5883l_s hmc5883l_t;
data/ext/bonekit/i2c.c ADDED
@@ -0,0 +1,79 @@
1
+ /*
2
+
3
+ i2c.c
4
+ BoneKit
5
+
6
+ Copyright (cc) 2012 Luis Laugga.
7
+ Some rights reserved, all wrongs deserved.
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
10
+ this software and associated documentation files (the "Software"), to deal in
11
+ the Software without restriction, including without limitation the rights to
12
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
13
+ the Software, and to permit persons to whom the Software is furnished to do so,
14
+ subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
21
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
22
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
23
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+
26
+ */
27
+
28
+ #include "i2c.h"
29
+
30
+ i2c_t * i2c_alloc()
31
+ {
32
+ i2c_t * obj;
33
+ obj = calloc(1, sizeof(struct i2c_s));
34
+ return obj;
35
+ }
36
+
37
+ int i2c_init(i2c_t * obj, int addr)
38
+ {
39
+ if(obj)
40
+ {
41
+ // open the i2c bus
42
+ if ((obj->_fd = open("/dev/i2c-1", O_RDWR)) < 0)
43
+ {
44
+ printf("Failed to open /dev/i2c-1 bus.");
45
+ exit(1); // ERROR HANDLING check errno to see what went wrong
46
+ }
47
+
48
+ if (ioctl(obj->_fd, I2C_SLAVE, addr) < 0)
49
+ {
50
+ printf("Failed to acquire bus access to i2c slave.\n");
51
+ exit(1); // ERROR HANDLING check errno to see what went wrong
52
+ }
53
+
54
+ obj->_addr = addr;
55
+ }
56
+
57
+ return 0;
58
+ }
59
+
60
+ void i2c_destroy(i2c_t * obj)
61
+ {
62
+ if(obj)
63
+ {
64
+ if(obj->_fd)
65
+ close(obj->_fd);
66
+
67
+ free(obj);
68
+ }
69
+ }
70
+
71
+ int i2c_read(i2c_t * obj, uint8_t * buffer, int length)
72
+ {
73
+ return read(obj->_fd, buffer, length);
74
+ }
75
+
76
+ int i2c_write(i2c_t * obj, uint8_t * buffer, int length)
77
+ {
78
+ return write(obj->_fd, buffer, length);
79
+ }
data/ext/bonekit/i2c.h ADDED
@@ -0,0 +1,65 @@
1
+ /*
2
+
3
+ i2c.h
4
+ BoneKit
5
+
6
+ Copyright (cc) 2012 Luis Laugga.
7
+ Some rights reserved, all wrongs deserved.
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
10
+ this software and associated documentation files (the "Software"), to deal in
11
+ the Software without restriction, including without limitation the rights to
12
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
13
+ the Software, and to permit persons to whom the Software is furnished to do so,
14
+ subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
21
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
22
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
23
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+
26
+ */
27
+
28
+ #ifndef BONEKIT_I2C_H__
29
+ #define BONEKIT_I2C_H__
30
+
31
+ #ifdef __cplusplus
32
+ extern "C" {
33
+ #endif
34
+
35
+ #include <errno.h>
36
+ #include <string.h>
37
+ #include <stdio.h>
38
+ #include <stdlib.h>
39
+ #include <stdint.h>
40
+ #include <unistd.h>
41
+ #include <linux/i2c-dev.h>
42
+ #include <sys/ioctl.h>
43
+ #include <sys/types.h>
44
+ #include <sys/stat.h>
45
+ #include <fcntl.h>
46
+
47
+ struct i2c_s
48
+ {
49
+ int _fd;
50
+ int _addr;
51
+ };
52
+
53
+ typedef struct i2c_s i2c_t;
54
+
55
+ i2c_t * i2c_alloc();
56
+ int i2c_init(i2c_t *, int);
57
+ void i2c_destroy(i2c_t *);
58
+ int i2c_read(i2c_t *, uint8_t *, int);
59
+ int i2c_write(i2c_t *, uint8_t *, int);
60
+
61
+ #ifdef __cplusplus
62
+ }
63
+ #endif
64
+
65
+ #endif
@@ -0,0 +1,133 @@
1
+ /*
2
+
3
+ i2c_class.c
4
+ BoneKit
5
+
6
+ Copyright (cc) 2012 Luis Laugga.
7
+ Some rights reserved, all wrongs deserved.
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
10
+ this software and associated documentation files (the "Software"), to deal in
11
+ the Software without restriction, including without limitation the rights to
12
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
13
+ the Software, and to permit persons to whom the Software is furnished to do so,
14
+ subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
21
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
22
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
23
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+
26
+
27
+ */
28
+
29
+ #include "i2c_class.h"
30
+
31
+ #include "ruby.h"
32
+
33
+ #include "beaglebone.h"
34
+ #include "i2c.h"
35
+
36
+ VALUE cBoneKit_I2c;
37
+
38
+ static void I2c_free(i2c_t * ptr)
39
+ {
40
+ if(ptr == NULL)
41
+ return;
42
+
43
+ i2c_destroy(ptr);
44
+ }
45
+
46
+ static VALUE I2c_alloc(VALUE class)
47
+ {
48
+ i2c_t * ptr = i2c_alloc();
49
+
50
+ VALUE self = Data_Wrap_Struct(class, 0, I2c_free, ptr);
51
+ return self;
52
+ }
53
+
54
+ /*
55
+ * call-seq:
56
+ * initialize(address) -> I2c
57
+ *
58
+ * Returns a new I2c object associated with a given address
59
+ * @param [Integer] address the i2c slave address
60
+ */
61
+ static VALUE I2c_initialize(int argc, VALUE* argv, VALUE self)
62
+ {
63
+ if (argc > 1 || argc == 0) // there should only 1 argument
64
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);
65
+
66
+ i2c_t * ptr;
67
+ Data_Get_Struct(self, i2c_t, ptr);
68
+
69
+ int address = NUM2INT(argv[0]);
70
+
71
+ if(i2c_init(ptr, address) < 0) // check i2c bus and device address
72
+ rb_raise(rb_eArgError, "I2c bus error");
73
+
74
+ return self;
75
+ }
76
+
77
+ /*
78
+ * call-seq:
79
+ * read(n) -> Array
80
+ *
81
+ * Reads n bytes from the device.
82
+ */
83
+ static VALUE I2c_read(VALUE self, VALUE nBytes)
84
+ {
85
+ i2c_t * ptr;
86
+ Data_Get_Struct(self, i2c_t, ptr);
87
+
88
+ int n = NUM2INT(nBytes);
89
+ uint8_t * buffer = (uint8_t *)calloc(n, sizeof(uint8_t));
90
+ i2c_read(ptr, buffer, n);
91
+
92
+ VALUE bytes = rb_ary_new2(n);
93
+
94
+ int i;
95
+ for(i=0;i<n;++i)
96
+ rb_ary_push(bytes, INT2FIX(buffer[i]));
97
+
98
+ return bytes;
99
+ }
100
+
101
+ /*
102
+ * call-seq:
103
+ * write(Array) -> n
104
+ *
105
+ * Write the bytes in Array to the device.
106
+ */
107
+ static VALUE I2c_write(VALUE self, VALUE bytes)
108
+ {
109
+ i2c_t * ptr;
110
+ Data_Get_Struct(self, i2c_t, ptr);
111
+
112
+ int n = RARRAY_LEN(bytes);
113
+ uint8_t * buffer = (uint8_t *)calloc(n, sizeof(uint8_t));
114
+
115
+ int i;
116
+ for(i=0;i<n;++i)
117
+ buffer[i] = NUM2INT(rb_ary_entry(bytes, i));
118
+
119
+ VALUE nBytes = INT2FIX(i2c_write(ptr, buffer, n));
120
+
121
+ return nBytes;
122
+ }
123
+
124
+ void BoneKit_I2c_class_init()
125
+ {
126
+ cBoneKit_I2c = rb_define_class("I2c", rb_cObject);
127
+
128
+ rb_define_alloc_func(cBoneKit_I2c, I2c_alloc);
129
+
130
+ rb_define_method(cBoneKit_I2c, "initialize", I2c_initialize, -1);
131
+ rb_define_method(cBoneKit_I2c, "read", I2c_read, 1);
132
+ rb_define_method(cBoneKit_I2c, "write", I2c_write, 1);
133
+ }
@@ -0,0 +1,33 @@
1
+ /*
2
+
3
+ i2c_class.h
4
+ BoneKit
5
+
6
+ Copyright (cc) 2012 Luis Laugga.
7
+ Some rights reserved, all wrongs deserved.
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
10
+ this software and associated documentation files (the "Software"), to deal in
11
+ the Software without restriction, including without limitation the rights to
12
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
13
+ the Software, and to permit persons to whom the Software is furnished to do so,
14
+ subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
21
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
22
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
23
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+
26
+ */
27
+
28
+ #ifndef BONEKIT_I2C_CLASS_H__
29
+ #define BONEKIT_I2C_CLASS_H__
30
+
31
+ void BoneKit_I2c_class_init();
32
+
33
+ #endif
data/ext/bonekit/rbinit.c CHANGED
@@ -36,6 +36,7 @@ void Init_bonekit(void)
36
36
 
37
37
  // IO
38
38
  BoneKit_Pin_class_init();
39
+ BoneKit_I2c_class_init();
39
40
 
40
41
  // ICs
41
42
  BoneKit_HMC5883L_class_init();
Binary file
@@ -1,3 +1,3 @@
1
1
  module BoneKit
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe HMC5883L do
4
+
5
+ describe "heading" do
6
+
7
+ let :compass do
8
+ HMC5883L.new
9
+ end
10
+
11
+ context "when default" do
12
+ it "returns float in degrees" do
13
+ compass.heading.class.should eq(Float)
14
+ end
15
+ end
16
+ end
17
+ end
data/spec/i2c_spec.rb ADDED
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe I2c do
4
+
5
+ describe "read" do
6
+
7
+ let :i2c do
8
+ I2c.new 0x1e
9
+ end
10
+
11
+ context "when default" do
12
+ it "returns read bytes array" do
13
+ pin.read(1).should be > 0
14
+ end
15
+ end
16
+ end
17
+
18
+ describe "write" do
19
+
20
+ let :i2c do
21
+ I2c.new 0x1e
22
+ end
23
+
24
+ context "when default" do
25
+ it "returns number of write bytes" do
26
+ pin.write([0x00]).should eq(1)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ class I2cTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def teardown
9
+ end
10
+
11
+ def test_initialization
12
+ assert_not_nil(I2c.new 0x1e)
13
+ assert_nil(I2c.new 0x00)
14
+ end
15
+
16
+ def test_read
17
+ i2c = I2c.new 0x1e
18
+
19
+ assert_not_nil(i2c)
20
+ assert_not_nil(i2c.read(1))
21
+ end
22
+
23
+ def test_write
24
+ i2c = I2c.new 0x1e
25
+
26
+ assert_not_nil(i2c)
27
+ assert_equal(1, i2c.write([0x00]))
28
+ end
29
+
30
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bonekit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: arm-linux
6
6
  authors:
7
7
  - Luis Laugga
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-27 00:00:00.000000000 Z
11
+ date: 2013-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -96,9 +96,13 @@ files:
96
96
  - bonekit.gemspec
97
97
  - examples/analog/analog_read.rb
98
98
  - examples/analog/fading.rb
99
+ - examples/analog/photo_resistor.rb
100
+ - examples/analog/potentiometer.rb
99
101
  - examples/basics/blink.rb
100
102
  - examples/basics/digital_read.rb
101
103
  - examples/basics/switch.rb
104
+ - examples/devices/compass.rb
105
+ - examples/devices/i2c_device.rb
102
106
  - ext/bonekit/adc.c
103
107
  - ext/bonekit/adc.h
104
108
  - ext/bonekit/beaglebone.c
@@ -112,6 +116,10 @@ files:
112
116
  - ext/bonekit/hmc5883l.h
113
117
  - ext/bonekit/hmc5883l_class.c
114
118
  - ext/bonekit/hmc5883l_class.h
119
+ - ext/bonekit/i2c.c
120
+ - ext/bonekit/i2c.h
121
+ - ext/bonekit/i2c_class.c
122
+ - ext/bonekit/i2c_class.h
115
123
  - ext/bonekit/pin.c
116
124
  - ext/bonekit/pin.h
117
125
  - ext/bonekit/pin_class.c
@@ -121,11 +129,14 @@ files:
121
129
  - ext/bonekit/rbinit.c
122
130
  - lib/bonekit.rb
123
131
  - lib/bonekit/version.rb
132
+ - spec/compass_spec.rb
133
+ - spec/i2c_spec.rb
124
134
  - spec/pin_spec.rb
125
135
  - spec/spec_helper.rb
126
136
  - test/bonekit-c/beaglebone_test.c
127
137
  - test/bonekit-c/pin_test.c
128
138
  - test/test_helper.rb
139
+ - test/unit/i2c_test.rb
129
140
  - test/unit/pin_adc_test.rb
130
141
  - test/unit/pin_gpio_test.rb
131
142
  - test/unit/pin_pwm_test.rb
@@ -155,11 +166,14 @@ signing_key:
155
166
  specification_version: 4
156
167
  summary: Physical interaction toolkit for the beaglebone.
157
168
  test_files:
169
+ - spec/compass_spec.rb
170
+ - spec/i2c_spec.rb
158
171
  - spec/pin_spec.rb
159
172
  - spec/spec_helper.rb
160
173
  - test/bonekit-c/beaglebone_test.c
161
174
  - test/bonekit-c/pin_test.c
162
175
  - test/test_helper.rb
176
+ - test/unit/i2c_test.rb
163
177
  - test/unit/pin_adc_test.rb
164
178
  - test/unit/pin_gpio_test.rb
165
179
  - test/unit/pin_pwm_test.rb