8
8
#include <stdio.h>
9
9
#include <string.h>
10
10
11
+ #ifdef ESP_PLATFORM
11
12
#include "freertos/FreeRTOS.h"
12
13
#include "freertos/task.h"
13
14
#include "esp_log.h"
14
-
15
- // #define ESP_LOGI(tag, fmt, ...) printf(fmt, __VA_ARGS__)
15
+ #else
16
+ #define ESP_LOGI (tag , fmt , ...) printf(fmt, __VA_ARGS__)
17
+ #endif
16
18
17
19
#define TAG ("mruby-esp32-spi")
18
20
19
- enum {
20
- KWARGS_UNIT = 0 ,
21
- KWARGS_MODE ,
22
- KWARGS_FIRST_BIT ,
23
- KWARGS_FREQUENCY ,
24
- KWARGS_NUM ,
25
- };
26
-
27
21
typedef struct spi_t {
28
- mrb_int id ;
29
22
mrb_int frequency ;
30
23
mrb_int unit ;
31
24
mrb_int mode ;
@@ -39,42 +32,6 @@ static const struct mrb_data_type mrb_spi = {
39
32
"mrb_mruby_esp32_spi" , mrb_spi_free
40
33
};
41
34
42
- static const mrb_sym mrb_spi_setmode_kw_names [KWARGS_NUM ] = {
43
- MRB_SYM (unit ),
44
- MRB_SYM (mode ),
45
- MRB_SYM (first_bit ),
46
- MRB_SYM (frequency )
47
- };
48
-
49
- static void
50
- mrb_spi_set_keyword_values (spi_t * spi , mrb_value * kw_values ) {
51
- spi -> unit = mrb_undef_p (kw_values [KWARGS_UNIT ]) ? 0 : mrb_fixnum (kw_values [KWARGS_UNIT ]);
52
- spi -> mode = mrb_undef_p (kw_values [KWARGS_MODE ]) ? 1 : mrb_fixnum (kw_values [KWARGS_MODE ]);
53
- spi -> first_bit = mrb_undef_p (kw_values [KWARGS_FIRST_BIT ]) ? 2 : mrb_fixnum (kw_values [KWARGS_FIRST_BIT ]);
54
- spi -> frequency = mrb_undef_p (kw_values [KWARGS_FREQUENCY ]) ? 3 : mrb_fixnum (kw_values [KWARGS_FREQUENCY ]);
55
- }
56
-
57
- static void
58
- mrb_spi_get_init_args (mrb_state * mrb , spi_t * spi ) {
59
- mrb_bool given ;
60
- mrb_value kw_values [KWARGS_NUM ];
61
- const mrb_kwargs kw = { KWARGS_NUM , 0 , mrb_spi_setmode_kw_names , kw_values , NULL };
62
-
63
- mrb_get_args (mrb , "|i?:" , & spi -> id , & given , & kw );
64
-
65
- if (!given ) { spi -> id = 0 ; }
66
- mrb_spi_set_keyword_values (spi , kw_values );
67
- }
68
-
69
- static void
70
- mrb_spi_get_setmode_args (mrb_state * mrb , spi_t * spi ) {
71
- mrb_value kw_values [KWARGS_NUM ];
72
- const mrb_kwargs kw = { KWARGS_NUM , 0 , mrb_spi_setmode_kw_names , kw_values , NULL };
73
-
74
- mrb_get_args (mrb , ":" , & kw );
75
- mrb_spi_set_keyword_values (spi , kw_values );
76
- }
77
-
78
35
static void
79
36
mrb_spi_free (mrb_state * mrb , void * p ) {
80
37
spi_t * spi = (spi_t * )p ;
@@ -86,12 +43,12 @@ static mrb_value
86
43
mrb_spi_init (mrb_state * mrb , mrb_value self ) {
87
44
spi_t * spi = mrb_malloc (mrb , sizeof (spi_t ));
88
45
46
+ mrb_get_args (mrb , "iiii" , & spi -> unit , & spi -> frequency , & spi -> mode , & spi -> first_bit );
89
47
90
- mrb_spi_get_init_args (mrb , spi );
91
48
ESP_LOGI (
92
49
TAG ,
93
- "initialize(%d, unit: %d, mode: %d, first_bit: %d, frequency: %d)" ,
94
- spi -> id , spi -> unit , spi -> mode , spi -> first_bit , spi -> frequency
50
+ "initialize(unit: %d, mode: %d, first_bit: %d, frequency: %d)" ,
51
+ spi -> unit , spi -> mode , spi -> first_bit , spi -> frequency
95
52
);
96
53
97
54
mrb_data_init (self , spi , & mrb_spi );
@@ -103,7 +60,8 @@ static mrb_value
103
60
mrb_spi_setmode (mrb_state * mrb , mrb_value self ) {
104
61
spi_t * spi = (spi_t * ) DATA_PTR (self );
105
62
106
- mrb_spi_get_setmode_args (mrb , spi );
63
+ mrb_get_args (mrb , "iiii" , & spi -> unit , & spi -> frequency , & spi -> mode , & spi -> first_bit );
64
+
107
65
ESP_LOGI (
108
66
TAG ,
109
67
"setmode(unit: %d, mode: %d, first_bit: %d, frequency: %d)" ,
@@ -127,57 +85,9 @@ mrb_spi_read(mrb_state *mrb, mrb_value self) {
127
85
static mrb_value
128
86
mrb_spi_write (mrb_state * mrb , mrb_value self ) {
129
87
spi_t * spi = (spi_t * ) DATA_PTR (self );
130
- mrb_value obj ;
131
- mrb_value str ;
132
-
133
- mrb_get_args (mrb , "o" , & obj );
134
- switch (mrb_type (obj )) {
135
- case MRB_TT_INTEGER :
136
- ESP_LOGI (TAG , "write(%d)" , mrb_fixnum (obj ));
137
- break ;
138
- case MRB_TT_ARRAY :
139
- RARRAY_LEN (obj );
140
- str = mrb_ary_join (mrb , obj , mrb_str_new_cstr (mrb , ", " ));
141
- ESP_LOGI (TAG , "write([%s])" , mrb_string_cstr (mrb , str ));
142
- break ;
143
- case MRB_TT_STRING :
144
- ESP_LOGI (TAG , "write(\"%s\")" , mrb_str_to_cstr (mrb , obj ));
145
- break ;
146
- default :
147
- mrb_raise (mrb , E_TYPE_ERROR , "wrong argument type (expected Integer or String or Array<String>)" );
148
- break ;
149
- }
150
-
151
- return self ;
152
- }
88
+ mrb_value data ;
153
89
154
- static mrb_value
155
- mrb_spi_transfer (mrb_state * mrb , mrb_value self ) {
156
- spi_t * spi = (spi_t * ) DATA_PTR (self );
157
- mrb_bool given ;
158
- mrb_int additional_read_bytes = 0 ;
159
- mrb_value obj ;
160
- mrb_value str ;
161
-
162
- mrb_get_args (mrb , "o|i" , & obj , & additional_read_bytes , & given );
163
- if (!given ) { additional_read_bytes = 0 ; }
164
-
165
- switch (mrb_type (obj )) {
166
- case MRB_TT_INTEGER :
167
- ESP_LOGI (TAG , "transfer(%d, %d)" , mrb_fixnum (obj ), additional_read_bytes );
168
- break ;
169
- case MRB_TT_ARRAY :
170
- RARRAY_LEN (obj );
171
- str = mrb_ary_join (mrb , obj , mrb_str_new_cstr (mrb , ", " ));
172
- ESP_LOGI (TAG , "transfer([%s], %d)" , mrb_string_cstr (mrb , str ), additional_read_bytes );
173
- break ;
174
- case MRB_TT_STRING :
175
- ESP_LOGI (TAG , "transfer(\"%s\", %d)" , mrb_str_to_cstr (mrb , obj ), additional_read_bytes );
176
- break ;
177
- default :
178
- mrb_raise (mrb , E_TYPE_ERROR , "wrong argument type (expected Integer or String or Array<String>)" );
179
- break ;
180
- }
90
+ mrb_get_args (mrb , "S" , & data );
181
91
182
92
return self ;
183
93
}
@@ -186,11 +96,10 @@ void
186
96
mrb_mruby_esp32_spi_gem_init (mrb_state * mrb ) {
187
97
struct RClass * client_class = mrb_define_class (mrb , "SPI" , mrb -> object_class );
188
98
189
- mrb_define_method (mrb , client_class , "_initialize" , mrb_spi_init , MRB_ARGS_ANY ());
190
- mrb_define_method (mrb , client_class , "_setmode" , mrb_spi_setmode , MRB_ARGS_ANY ());
191
- mrb_define_method (mrb , client_class , "_read" , mrb_spi_read , MRB_ARGS_REQ (1 ));
192
- mrb_define_method (mrb , client_class , "_write" , mrb_spi_write , MRB_ARGS_REQ (1 ));
193
- mrb_define_method (mrb , client_class , "_transfer" , mrb_spi_transfer , MRB_ARGS_REQ (1 ) | MRB_ARGS_OPT (1 ));
99
+ mrb_define_method (mrb , client_class , "__initialize" , mrb_spi_init , MRB_ARGS_REQ (4 ));
100
+ mrb_define_method (mrb , client_class , "__setmode" , mrb_spi_setmode , MRB_ARGS_REQ (4 ));
101
+ mrb_define_method (mrb , client_class , "__read" , mrb_spi_read , MRB_ARGS_REQ (1 ));
102
+ mrb_define_method (mrb , client_class , "__write" , mrb_spi_write , MRB_ARGS_REQ (1 ));
194
103
}
195
104
196
105
void
0 commit comments