45 lines
1.3 KiB
C
45 lines
1.3 KiB
C
#include <mruby.h>
|
|
#include <stdbool.h>
|
|
|
|
/* Private */
|
|
#include "gpio.h"
|
|
|
|
typedef struct {
|
|
uint32_t pin;
|
|
mrbgems_machine_gpio_mode_t mode;
|
|
bool value;
|
|
} mrb_gpio_t;
|
|
|
|
static mrb_value mrb_gpio_initialize(mrb_state *mrb, mrb_value self) {
|
|
mrb_gpio_t *pin = mrb_malloc(mrb, sizeof(mrb_gpio_t));
|
|
|
|
mrb_value init_cfg = mrb_get_arg1(mrb);
|
|
mrb_ensure_hash_type(mrb, init_cfg);
|
|
|
|
/* TODO: Allocate mrb_gpio_t and store configuration */
|
|
|
|
/* TODO: Initialize GPIO */
|
|
mrb_machine_impl_gpio_init(0, MRBGEMS_MACHINE_GPIO_MODE_INPUT);
|
|
return self;
|
|
}
|
|
|
|
void mrb_machine_gpio_gem_init(mrb_state *mrb) {
|
|
/**
|
|
* Example:
|
|
* pin_led = Machine::GPIO.new({pin: 10, mode: Machine::GPIO::OUTPUT_OD})
|
|
* pin_btn = Machine::GPIO.new({pin: 2}) # Default mode is Machine::GPIO::INPUT
|
|
* pin_led.on # Set to logical high
|
|
* pin_led.off # Set to logical low
|
|
* pin_led.toggle # Toggle.
|
|
*/
|
|
|
|
|
|
struct RClass *module_machine = mrb_define_module(mrb, "Machine");
|
|
struct RClass *class_gpio = mrb_define_class_under(mrb, module_machine, "GPIO", mrb->object_class);
|
|
|
|
mrb_define_method(mrb, class_gpio, "initialize", mrb_gpio_initialize, MRB_ARGS_ARG(1, 0));
|
|
}
|
|
|
|
void mrb_machine_gpio_gem_final(mrb_state *mrb) {
|
|
/* Unused */
|
|
} |