rpi_pico_sdk/
lib.rs

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
15// define macros
16const sio_hw: *mut sio_hw_t = SIO_BASE as *mut sio_hw_t;
17
18// NOTE: handle static inline functions
19#[inline]
20pub unsafe fn gpio_pull_up(gpio: uint) {
21    gpio_set_pulls(gpio, true, false);
22}
23
24/*
25    #[inline]
26pub fn bool gpio_is_pulled_up(gpio: uint) {
27    #[inline]
28pub unsafe fn gpio_pull_down(gpio: uint) {
29    #[inline]
30pub fn bool gpio_is_pulled_down(gpio: uint) {
31    #[inline]
32pub unsafe fn gpio_disable_pulls(gpio: uint) {
33    #[inline]
34pub fn bool gpio_get(gpio: uint) {
35    #[inline]
36pub fn uint32_t gpio_get_all() {
37    */
38#[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/*
52    #[inline]
53pub unsafe fn gpio_put_masked(mask: uint32_t, uint32_t value) {
54    #[inline]
55pub unsafe fn gpio_put_all(uint32_t value) {
56    */
57
58#[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]
80pub unsafe fn gpio_set_dir_all_bits(uint32_t values) {
81*/
82
83// NOTE: out changed from bool to u32
84#[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/*
95    #[inline]
96pub fn bool gpio_is_dir_out(gpio: uint) {
97    #[inline]
98pub fn gpio: uint_get_dir(gpio: uint) {
99    */