bonekit 0.0.2-arm-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,132 @@
1
+ /*
2
+
3
+ beaglebone_global_const.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 "beaglebone_global_const.h"
30
+
31
+ #include "ruby.h"
32
+ #include "beaglebone.h"
33
+
34
+ void BoneKit_Beaglebone_global_const_init()
35
+ {
36
+ rb_define_global_const("USR0", INT2NUM(USR0));
37
+ rb_define_global_const("USR1", INT2NUM(USR1));
38
+ rb_define_global_const("USR2", INT2NUM(USR2));
39
+ rb_define_global_const("USR3", INT2NUM(USR3));
40
+ rb_define_global_const("P8_1", INT2NUM(P8_1));
41
+ rb_define_global_const("P8_2", INT2NUM(P8_2));
42
+ rb_define_global_const("P8_3", INT2NUM(P8_3));
43
+ rb_define_global_const("P8_4", INT2NUM(P8_4));
44
+ rb_define_global_const("P8_5", INT2NUM(P8_5));
45
+ rb_define_global_const("P8_6", INT2NUM(P8_6));
46
+ rb_define_global_const("P8_7", INT2NUM(P8_7));
47
+ rb_define_global_const("P8_8", INT2NUM(P8_8));
48
+ rb_define_global_const("P8_9", INT2NUM(P8_9));
49
+ rb_define_global_const("P8_10", INT2NUM(P8_10));
50
+ rb_define_global_const("P8_11", INT2NUM(P8_11));
51
+ rb_define_global_const("P8_12", INT2NUM(P8_12));
52
+ rb_define_global_const("P8_13", INT2NUM(P8_13));
53
+ rb_define_global_const("P8_14", INT2NUM(P8_14));
54
+ rb_define_global_const("P8_15", INT2NUM(P8_15));
55
+ rb_define_global_const("P8_16", INT2NUM(P8_16));
56
+ rb_define_global_const("P8_17", INT2NUM(P8_17));
57
+ rb_define_global_const("P8_18", INT2NUM(P8_18));
58
+ rb_define_global_const("P8_19", INT2NUM(P8_19));
59
+ rb_define_global_const("P8_20", INT2NUM(P8_20));
60
+ rb_define_global_const("P8_21", INT2NUM(P8_21));
61
+ rb_define_global_const("P8_22", INT2NUM(P8_22));
62
+ rb_define_global_const("P8_23", INT2NUM(P8_23));
63
+ rb_define_global_const("P8_24", INT2NUM(P8_24));
64
+ rb_define_global_const("P8_25", INT2NUM(P8_25));
65
+ rb_define_global_const("P8_26", INT2NUM(P8_26));
66
+ rb_define_global_const("P8_27", INT2NUM(P8_27));
67
+ rb_define_global_const("P8_28", INT2NUM(P8_28));
68
+ rb_define_global_const("P8_29", INT2NUM(P8_29));
69
+ rb_define_global_const("P8_30", INT2NUM(P8_30));
70
+ rb_define_global_const("P8_31", INT2NUM(P8_31));
71
+ rb_define_global_const("P8_32", INT2NUM(P8_32));
72
+ rb_define_global_const("P8_33", INT2NUM(P8_33));
73
+ rb_define_global_const("P8_34", INT2NUM(P8_34));
74
+ rb_define_global_const("P8_35", INT2NUM(P8_35));
75
+ rb_define_global_const("P8_36", INT2NUM(P8_36));
76
+ rb_define_global_const("P8_37", INT2NUM(P8_37));
77
+ rb_define_global_const("P8_38", INT2NUM(P8_38));
78
+ rb_define_global_const("P8_39", INT2NUM(P8_39));
79
+ rb_define_global_const("P8_40", INT2NUM(P8_40));
80
+ rb_define_global_const("P8_41", INT2NUM(P8_41));
81
+ rb_define_global_const("P8_42", INT2NUM(P8_42));
82
+ rb_define_global_const("P8_43", INT2NUM(P8_43));
83
+ rb_define_global_const("P8_44", INT2NUM(P8_44));
84
+ rb_define_global_const("P8_45", INT2NUM(P8_45));
85
+ rb_define_global_const("P8_46", INT2NUM(P8_46));
86
+ rb_define_global_const("P9_1", INT2NUM(P9_1));
87
+ rb_define_global_const("P9_2", INT2NUM(P9_2));
88
+ rb_define_global_const("P9_3", INT2NUM(P9_3));
89
+ rb_define_global_const("P9_4", INT2NUM(P9_4));
90
+ rb_define_global_const("P9_5", INT2NUM(P9_5));
91
+ rb_define_global_const("P9_6", INT2NUM(P9_6));
92
+ rb_define_global_const("P9_7", INT2NUM(P9_7));
93
+ rb_define_global_const("P9_8", INT2NUM(P9_8));
94
+ rb_define_global_const("P9_9", INT2NUM(P9_9));
95
+ rb_define_global_const("P9_10", INT2NUM(P9_10));
96
+ rb_define_global_const("P9_11", INT2NUM(P9_11));
97
+ rb_define_global_const("P9_12", INT2NUM(P9_12));
98
+ rb_define_global_const("P9_13", INT2NUM(P9_13));
99
+ rb_define_global_const("P9_14", INT2NUM(P9_14));
100
+ rb_define_global_const("P9_15", INT2NUM(P9_15));
101
+ rb_define_global_const("P9_16", INT2NUM(P9_16));
102
+ rb_define_global_const("P9_17", INT2NUM(P9_17));
103
+ rb_define_global_const("P9_18", INT2NUM(P9_18));
104
+ rb_define_global_const("P9_19", INT2NUM(P9_19));
105
+ rb_define_global_const("P9_20", INT2NUM(P9_20));
106
+ rb_define_global_const("P9_21", INT2NUM(P9_21));
107
+ rb_define_global_const("P9_22", INT2NUM(P9_22));
108
+ rb_define_global_const("P9_23", INT2NUM(P9_23));
109
+ rb_define_global_const("P9_24", INT2NUM(P9_24));
110
+ rb_define_global_const("P9_25", INT2NUM(P9_25));
111
+ rb_define_global_const("P9_26", INT2NUM(P9_26));
112
+ rb_define_global_const("P9_27", INT2NUM(P9_27));
113
+ rb_define_global_const("P9_28", INT2NUM(P9_28));
114
+ rb_define_global_const("P9_29", INT2NUM(P9_29));
115
+ rb_define_global_const("P9_30", INT2NUM(P9_30));
116
+ rb_define_global_const("P9_31", INT2NUM(P9_31));
117
+ rb_define_global_const("P9_32", INT2NUM(P9_32));
118
+ rb_define_global_const("P9_33", INT2NUM(P9_33));
119
+ rb_define_global_const("P9_34", INT2NUM(P9_34));
120
+ rb_define_global_const("P9_35", INT2NUM(P9_35));
121
+ rb_define_global_const("P9_36", INT2NUM(P9_36));
122
+ rb_define_global_const("P9_37", INT2NUM(P9_37));
123
+ rb_define_global_const("P9_38", INT2NUM(P9_38));
124
+ rb_define_global_const("P9_39", INT2NUM(P9_39));
125
+ rb_define_global_const("P9_40", INT2NUM(P9_40));
126
+ rb_define_global_const("P9_41", INT2NUM(P9_41));
127
+ rb_define_global_const("P9_42", INT2NUM(P9_42));
128
+ rb_define_global_const("P9_43", INT2NUM(P9_43));
129
+ rb_define_global_const("P9_44", INT2NUM(P9_44));
130
+ rb_define_global_const("P9_45", INT2NUM(P9_45));
131
+ rb_define_global_const("P9_46", INT2NUM(P9_46));
132
+ }
@@ -0,0 +1,33 @@
1
+ /*
2
+
3
+ beaglebone_global_const.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_BEAGLEBONE_GLOBAL_CONST_H__
29
+ #define BONEKIT_BEAGLEBONE_GLOBAL_CONST_H__
30
+
31
+ void BoneKit_Beaglebone_global_const_init();
32
+
33
+ #endif
@@ -0,0 +1,32 @@
1
+ #
2
+ # extconf.rb
3
+ # BoneKit
4
+ #
5
+ # Copyright (c) 2012 Luis Laugga.
6
+ # Some rights reserved, all wrongs deserved.
7
+ #
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of
9
+ # this software and associated documentation files (the "Software"), to deal in
10
+ # the Software without restriction, including without limitation the rights to
11
+ # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
12
+ # the Software, and to permit persons to whom the Software is furnished to do so,
13
+ # subject to the following conditions:
14
+ #
15
+ # The above copyright notice and this permission notice shall be included in all
16
+ # copies or substantial portions of the Software.
17
+ #
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
20
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
21
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
22
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
+ #
25
+
26
+ require 'mkmf'
27
+
28
+ create_makefile('bonekit/bonekit')
29
+
30
+ require 'rake/extensiontask'
31
+
32
+ Rake::ExtensionTask.new('bonekit')
@@ -0,0 +1,147 @@
1
+ /*
2
+
3
+ gpio.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 "gpio.h"
29
+
30
+ #include <stdio.h>
31
+ #include <stdlib.h>
32
+ #include <fcntl.h>
33
+ #include <unistd.h>
34
+ #include <string.h>
35
+
36
+ int gpio_read(unsigned int gpio, const char * filename, char * value, unsigned int length)
37
+ {
38
+ int fd, len;
39
+ char filepath[GPIO_LEN];
40
+ snprintf(filepath, sizeof(filepath), "%s/gpio%d/%s", GPIO_DIR, gpio, filename);
41
+
42
+ if((fd = open(filepath, O_RDONLY | O_NONBLOCK)) < 0)
43
+ return -1;
44
+
45
+ lseek(fd, 0, SEEK_SET);
46
+ read(fd, value, length);
47
+ close(fd);
48
+
49
+ return 0;
50
+ }
51
+
52
+ int gpio_write(unsigned int gpio, const char * filename, char * value)
53
+ {
54
+ int fd;
55
+ char filepath[GPIO_LEN];
56
+ snprintf(filepath, sizeof(filepath), "%s/gpio%d/%s", GPIO_DIR, gpio, filename);
57
+
58
+ if((fd = open(filepath, O_WRONLY)) < 0)
59
+ return -1;
60
+
61
+ write(fd, value, strlen(value));
62
+ close(fd);
63
+
64
+ return 0;
65
+ }
66
+
67
+ int gpio_export(unsigned int gpio)
68
+ {
69
+ int fd, len;
70
+ char str_gpio[10];
71
+
72
+ if((fd = open("/sys/class/gpio/export", O_WRONLY)) < 0)
73
+ return -1;
74
+
75
+ len = snprintf(str_gpio, sizeof(str_gpio), "%d", gpio);
76
+ write(fd, str_gpio, len);
77
+ close(fd);
78
+ }
79
+
80
+ int gpio_unexport(unsigned int gpio)
81
+ {
82
+ int fd, len;
83
+ char str_gpio[10];
84
+
85
+ if((fd = open("/sys/class/gpio/unexport", O_WRONLY)) < 0)
86
+ return -1;
87
+
88
+ len = snprintf(str_gpio, sizeof(str_gpio), "%d", gpio);
89
+ write(fd, str_gpio, len);
90
+ close(fd);
91
+ }
92
+
93
+ int gpio_set_direction(unsigned int gpio, unsigned int direction)
94
+ {
95
+ if(direction == OUTPUT)
96
+ {
97
+ if(gpio_write(gpio, "direction", "out") < 0)
98
+ return -1;
99
+ }
100
+ else
101
+ {
102
+ if(gpio_write(gpio, "direction", "in") < 0)
103
+ return -1;
104
+ }
105
+
106
+ return 0;
107
+ }
108
+
109
+ int gpio_get_direction(unsigned int gpio, unsigned int * direction)
110
+ {
111
+ const unsigned int length = 3;
112
+ char buffer[length];
113
+
114
+ if(gpio_read(gpio, "direction", buffer, length) < 0)
115
+ return -1;
116
+
117
+ if(strcmp(buffer, "out") == 0)
118
+ *direction = OUTPUT;
119
+ else
120
+ *direction = INPUT;
121
+
122
+ return 0;
123
+ }
124
+
125
+ int gpio_set_value(unsigned int gpio, unsigned int value)
126
+ {
127
+ char buffer[GPIO_LEN];
128
+ sprintf(buffer, "%d", value); // convert value to string, decimal base
129
+
130
+ if(gpio_write(gpio, "value", buffer) < 0)
131
+ return -1;
132
+
133
+ return 0;
134
+ }
135
+
136
+ int gpio_get_value(unsigned int gpio, unsigned int * value)
137
+ {
138
+ const unsigned int length = 2;
139
+ char buffer[length];
140
+
141
+ if(gpio_read(gpio, "value", buffer, length) < 0)
142
+ return -1;
143
+
144
+ *value = atoi(buffer);
145
+
146
+ return 0;
147
+ }
@@ -0,0 +1,60 @@
1
+ /*
2
+
3
+ gpio.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_GPIO_H__
29
+ #define BONEKIT_GPIO_H__
30
+
31
+ #ifdef __cplusplus
32
+ extern "C" {
33
+ #endif
34
+
35
+ #define INPUT 0
36
+ #define OUTPUT 1
37
+
38
+ #define HIGH 1
39
+ #define LOW 0
40
+
41
+ #define GPIO_DIR "/sys/class/gpio"
42
+ #define GPIO_LEN 64
43
+
44
+ int gpio_read(unsigned int, const char * , char *, unsigned int);
45
+ int gpio_write(unsigned int, const char *, char *);
46
+
47
+ int gpio_export(unsigned int);
48
+ int gpio_unexport(unsigned int);
49
+
50
+ int gpio_set_direction(unsigned int, unsigned int);
51
+ int gpio_get_direction(unsigned int, unsigned int*);
52
+
53
+ int gpio_set_value(unsigned int, unsigned int);
54
+ int gpio_get_value(unsigned int, unsigned int*);
55
+
56
+ #ifdef __cplusplus
57
+ }
58
+ #endif
59
+
60
+ #endif
@@ -0,0 +1,107 @@
1
+ /*
2
+
3
+ hmc5883l.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 "hmc5883l.h"
29
+
30
+ #define M_PI 3.14159265358979323846
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
+ }
40
+
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
+ }
52
+
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
+ }
68
+
69
+ hmc5883l_t * hmc5883l_create()
70
+ {
71
+ hmc5883l_t * obj;
72
+ obj = malloc(sizeof(struct hmc5883l_s));
73
+ if(obj)
74
+ {
75
+ obj->_scale = 1;
76
+
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);
85
+ }
86
+
87
+ return obj;
88
+ }
89
+
90
+ void hmc5883l_destroy(hmc5883l_t * obj)
91
+ {
92
+ free(obj);
93
+ }
94
+
95
+ float hmc5883l_heading(hmc5883l_t * obj)
96
+ {
97
+ unsigned char buf[16];
98
+ readFromDevice(obj->_fd, buf, 6);
99
+
100
+ short x = (buf[0] << 8) | buf[1];
101
+ short y = (buf[4] << 8) | buf[5];
102
+ short z = (buf[2] << 8) | buf[3];
103
+
104
+ float angle = atan2(y, x) * 180 / M_PI;
105
+
106
+ return angle;
107
+ }
@@ -0,0 +1,92 @@
1
+ /*
2
+
3
+ hmc5883l.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_HMC5883L_H__
29
+ #define BONEKIT_HMC5883L_H__
30
+
31
+ #ifdef __cplusplus
32
+ extern "C" {
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
60
+
61
+ typedef struct
62
+ {
63
+ float XAxis;
64
+ float YAxis;
65
+ float ZAxis;
66
+ } hmc5883l_scaled_t;
67
+
68
+ typedef struct
69
+ {
70
+ int XAxis;
71
+ int YAxis;
72
+ int ZAxis;
73
+ } hmc5883l_raw_t;
74
+
75
+ struct hmc5883l_s
76
+ {
77
+ float _scale;
78
+ float _fd;
79
+ float _buffer[32];
80
+ };
81
+
82
+ typedef struct hmc5883l_s hmc5883l_t;
83
+
84
+ hmc5883l_t * hmc5883l_create();
85
+ void hmc5883l_destroy(hmc5883l_t *);
86
+ float hmc5883l_heading(hmc5883l_t *);
87
+
88
+ #ifdef __cplusplus
89
+ }
90
+ #endif
91
+
92
+ #endif
@@ -0,0 +1,66 @@
1
+ /*
2
+
3
+ hmc5883l_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
+ #include "hmc5883l_class.h"
29
+
30
+ #include "ruby.h"
31
+ #include "hmc5883l.h"
32
+
33
+ VALUE cBoneKit_HMC5883L;
34
+
35
+ static void HMC5883L_free(void * ptr)
36
+ {
37
+ if(ptr == NULL)
38
+ return;
39
+
40
+ hmc5883l_destroy(ptr);
41
+ }
42
+
43
+ static VALUE HMC5883L_new(VALUE class)
44
+ {
45
+ hmc5883l_t * ptr = hmc5883l_create();
46
+ VALUE wrap_struct = Data_Wrap_Struct(class, 0, HMC5883L_free, ptr);
47
+ return wrap_struct;
48
+ }
49
+
50
+ static VALUE HMC5883L_heading(VALUE self)
51
+ {
52
+ double value = 0.0f;
53
+ hmc5883l_t * ptr;
54
+ Data_Get_Struct(self, hmc5883l_t, ptr);
55
+ value = hmc5883l_heading(ptr);
56
+ return rb_float_new(value);
57
+ }
58
+
59
+ void BoneKit_HMC5883L_class_init()
60
+ {
61
+ cBoneKit_HMC5883L = rb_define_class("HMC5883L", rb_cObject);
62
+
63
+ rb_define_singleton_method(cBoneKit_HMC5883L, "new", HMC5883L_new, 0);
64
+
65
+ rb_define_method(cBoneKit_HMC5883L, "heading", HMC5883L_heading, 0);
66
+ }