#include #if HAL_LINUX_GPIO_PB2_ENABLED #include "GPIO.h" #include #include #include #include #include #include #include #include #include #define LOW 0 #define HIGH 1 using namespace Linux; GPIO_PB2::GPIO_PB2() {} void GPIO_PB2::init() { int mem_fd; /* open /dev/mem */ if ((mem_fd = open("/dev/mem", O_RDWR|O_SYNC|O_CLOEXEC)) < 0) { printf("can't open /dev/mem \n"); exit (-1); } off_t offsets[LINUX_GPIO_NUM_BANKS] = { GPIO1_BASE, GPIO0_BASE, GPIO0_BASE, GPIO1_BASE, GPIO0_BASE, GPIO0_BASE}; uint32_t gpio_dir[LINUX_GPIO_NUM_BANKS] = {GPIO_DIR01, GPIO_DIR01, GPIO_DIR23, GPIO_DIR23, GPIO_DIR45, GPIO_DIR45}; uint32_t gpio_set[LINUX_GPIO_NUM_BANKS] = {GPIO_SET_DATA01, GPIO_SET_DATA01, GPIO_SET_DATA23, GPIO_SET_DATA23, GPIO_SET_DATA45, GPIO_SET_DATA45}; uint32_t gpio_out[LINUX_GPIO_NUM_BANKS] = {GPIO_OUT_DATA01, GPIO_OUT_DATA01, GPIO_OUT_DATA23, GPIO_OUT_DATA23, GPIO_OUT_DATA45, GPIO_OUT_DATA45}; uint32_t gpio_clr[LINUX_GPIO_NUM_BANKS] = {GPIO_CLR_DATA01, GPIO_CLR_DATA01, GPIO_CLR_DATA23, GPIO_CLR_DATA23, GPIO_CLR_DATA45, GPIO_CLR_DATA45}; uint32_t gpio_in[LINUX_GPIO_NUM_BANKS] = {GPIO_IN_DATA01, GPIO_IN_DATA01, GPIO_IN_DATA23, GPIO_IN_DATA23, GPIO_IN_DATA45, GPIO_IN_DATA45}; for (uint8_t i=0; i= LINUX_GPIO_NUM_BANKS) { return; } if (output == HAL_GPIO_INPUT) { *gpio_bank[bank].gpio_direction |= (1U<= LINUX_GPIO_NUM_BANKS) { return 0; } return *gpio_bank[bank].gpio_in & (1U<= LINUX_GPIO_NUM_BANKS) { return; } if (value == LOW) { *gpio_bank[bank].gpio_clear |= 1U<