1#![no_std]
2#![allow(
3 non_camel_case_types,
4 non_upper_case_globals,
5 non_snake_case,
6 dead_code
7)]
8
9pub mod ctypes;
10use ctypes::*;
11
12mod gen;
13pub use gen::*;
14
15const sio_hw: *mut sio_hw_t = SIO_BASE as *mut sio_hw_t;
17
18#[inline]
20pub unsafe fn gpio_pull_up(gpio: uint) {
21 gpio_set_pulls(gpio, true, false);
22}
23
24#[inline]
39pub unsafe fn gpio_set_mask(mask: uint32_t) {
40 (*sio_hw).gpio_set = mask;
41}
42#[inline]
43pub unsafe fn gpio_clr_mask(mask: uint32_t) {
44 (*sio_hw).gpio_clr = mask;
45}
46
47#[inline]
48pub unsafe fn gpio_xor_mask(mask: uint32_t) {
49 (*sio_hw).gpio_togl = mask;
50}
51#[inline]
59pub unsafe fn gpio_put(gpio: uint, value: bool) {
60 let mask = 1 << gpio;
61 if value {
62 gpio_set_mask(mask);
63 } else {
64 gpio_clr_mask(mask);
65 }
66}
67#[inline]
68pub unsafe fn gpio_set_dir_out_masked(mask: uint32_t) {
69 (*sio_hw).gpio_oe_set = mask;
70}
71#[inline]
72pub unsafe fn gpio_set_dir_in_masked(mask: uint32_t) {
73 (*sio_hw).gpio_oe_clr = mask;
74}
75#[inline]
76pub unsafe fn gpio_set_dir_masked(mask: uint32_t, value: uint32_t) {
77 (*sio_hw).gpio_oe_togl = ((*sio_hw).gpio_oe ^ value) & mask;
78}
79#[inline]
85pub unsafe fn gpio_set_dir(gpio: uint, out: u32) {
86 let mask = 1 << gpio;
87 if out != 0 {
88 gpio_set_dir_out_masked(mask);
89 } else {
90 gpio_set_dir_in_masked(mask);
91 }
92}
93
94