Now compiles

This commit is contained in:
Tony Kuker 2022-10-29 22:14:11 -05:00
parent 0c964578df
commit 535634d848
12 changed files with 538 additions and 202 deletions

View File

@ -30,8 +30,14 @@
//
//---------------------------------------------------------------------------
#include <string.h>
#include <sys/epoll.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include "hal/gpiobus_allwinner.h"
#include "hal/gpiobus.h"
#include "hal/pi_defs/bpi-gpio.h"
#include "log.h"
extern int wiringPiMode;
@ -40,44 +46,113 @@ extern int wiringPiMode;
#pragma GCC diagnostic ignored "-Wunused-variable"
#pragma GCC diagnostic ignored "-Wunused-parameter"
// #pragma GCC diagnostic ignored "-Wformat-truncation"
#define GPIO_BANK(pin) ((pin) >> 5)
#define GPIO_NUM(pin) ((pin) & 0x1F)
#define GPIO_CFG_INDEX(pin) (((pin) & 0x1F) >> 3)
#define GPIO_CFG_OFFSET(pin) ((((pin) & 0x1F) & 0x7) << 2)
#define GPIO_PUL_INDEX(pin) (((pin) & 0x1F )>> 4)
#define GPIO_PUL_OFFSET(pin) (((pin) & 0x0F) << 1)
#define SUNXI_R_GPIO_BASE 0x01F02000
#define SUNXI_R_GPIO_REG_OFFSET 0xC00
#define SUNXI_GPIO_BASE 0x01C20000
#define SUNXI_GPIO_REG_OFFSET 0x800
#define SUNXI_CFG_OFFSET 0x00
#define SUNXI_DATA_OFFSET 0x10
#define SUNXI_PUD_OFFSET 0x1C
#define SUNXI_BANK_SIZE 0x24
#define MAP_SIZE (4096*2)
#define MAP_MASK (MAP_SIZE - 1)
// TODO: Delete these. They're just to make things compile for now
int pinToGpio_BPI_M1P [64] = {0};
int pinToGpio_BPI_M2 [64] = {0};
int pinToGpio_BPI_M2M [64] = {0};
int pinToGpio_BPI_M2M_1P1 [64] = {0};
int pinToGpio_BPI_M2P [64] = {0};
int pinToGpio_BPI_M2U [64] = {0};
int pinToGpio_BPI_M3 [64] = {0};
int pinToGpio_BPI_M64 [64] = {0};
int pinTobcm_BPI_M1P [64] = {0};
int pinTobcm_BPI_M2 [64] = {0};
int pinTobcm_BPI_M2M [64] = {0};
int pinTobcm_BPI_M2M_1P1 [64] = {0};
int pinTobcm_BPI_M2P [64] = {0};
int pinTobcm_BPI_M2U [64] = {0};
int pinTobcm_BPI_M3 [64] = {0};
int pinTobcm_BPI_M64 [64] = {0};
// #define BCM2708_PERI_BASE_DEFAULT 0x20000000
// #define BCM2709_PERI_BASE_DEFAULT 0x3f000000
// #define GPIO_BASE_OFFSET 0x200000
#define FSEL_OFFSET 0 // 0x0000
#define SET_OFFSET 7 // 0x001c / 4
#define CLR_OFFSET 10 // 0x0028 / 4
#define PINLEVEL_OFFSET 13 // 0x0034 / 4
#define EVENT_DETECT_OFFSET 16 // 0x0040 / 4
#define RISING_ED_OFFSET 19 // 0x004c / 4
#define FALLING_ED_OFFSET 22 // 0x0058 / 4
#define HIGH_DETECT_OFFSET 25 // 0x0064 / 4
#define LOW_DETECT_OFFSET 28 // 0x0070 / 4
#define PULLUPDN_OFFSET 37 // 0x0094 / 4
#define PULLUPDNCLK_OFFSET 38 // 0x0098 / 4
#define PAGE_SIZE (4*1024)
#define BLOCK_SIZE (4*1024)
// BpiBoardsType bpiboard[];
GPIOBUS_Allwinner::BpiBoardsType GPIOBUS_Allwinner::bpiboard [] =
{
{ "bpi-0", -1, 0, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-1", -1, 1, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-2", -1, 2, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-3", -1, 3, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-4", -1, 4, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-5", -1, 5, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-6", -1, 6, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-7", -1, 7, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-8", -1, 8, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-9", -1, 9, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-10", -1, 10, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-11", -1, 11, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-12", -1, 12, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-13", -1, 13, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-14", -1, 14, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-15", -1, 15, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-new", -1, 16, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-x86", -1, 17, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-rpi", -1, 18, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-rpi2", -1, 19, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-rpi3", -1, 20, 1, 2, 5, 0, NULL, NULL, NULL },
{ "bpi-m1", 10001, 21, 1, 2, 5, 0, pinToGpio_BPI_M1P, physToGpio_BPI_M1P, pinTobcm_BPI_M1P },
{ "bpi-m1p", 10001, 22, 1, 2, 5, 0, pinToGpio_BPI_M1P, physToGpio_BPI_M1P, pinTobcm_BPI_M1P },
{ "bpi-r1", 10001, 23, 1, 2, 5, 0, pinToGpio_BPI_M1P, physToGpio_BPI_M1P, pinTobcm_BPI_M1P },
{ "bpi-m2", 10101, 24, 1, 2, 5, 0, pinToGpio_BPI_M2, physToGpio_BPI_M2, pinTobcm_BPI_M2 },
{ "bpi-m3", 10201, 25, 1, 3, 5, 0, pinToGpio_BPI_M3, physToGpio_BPI_M3, pinTobcm_BPI_M3 },
{ "bpi-m2p", 10301, 26, 1, 2, 5, 0, pinToGpio_BPI_M2P, physToGpio_BPI_M2P, pinTobcm_BPI_M2P },
{ "bpi-m64", 10401, 27, 1, 3, 5, 0, pinToGpio_BPI_M64, physToGpio_BPI_M64, pinTobcm_BPI_M64 },
{ "bpi-m2u", 10501, 28, 1, 3, 5, 0, pinToGpio_BPI_M2U, physToGpio_BPI_M2U, pinTobcm_BPI_M2U },
{ "bpi-m2m", 10601, 29, 1, 1, 5, 0, pinToGpio_BPI_M2M, physToGpio_BPI_M2M, pinTobcm_BPI_M2M },
{ "bpi-m2p_H2+", 10701, 30, 1, 2, 5, 0, pinToGpio_BPI_M2P, physToGpio_BPI_M2P, pinTobcm_BPI_M2P },
{ "bpi-m2p_H5", 10801, 31, 1, 2, 5, 0, pinToGpio_BPI_M2P, physToGpio_BPI_M2P, pinTobcm_BPI_M2P },
{ "bpi-m2u_V40", 10901, 32, 1, 3, 5, 0, pinToGpio_BPI_M2U, physToGpio_BPI_M2U, pinTobcm_BPI_M2U },
{ "bpi-m2z", 11001, 33, 1, 1, 5, 0, pinToGpio_BPI_M2P, physToGpio_BPI_M2P, pinTobcm_BPI_M2P },
// { "bpi-r2", 11101, 34, 1, 3, 5, 0, pinToGpio_BPI_R2, physToGpio_BPI_R2, pinTobcm_BPI_R2 },
{ NULL, 0, 0, 1, 2, 5, 0, NULL, NULL, NULL },
} ;
bool GPIOBUS_Allwinner::Init(mode_e mode, board_type::rascsi_board_type_e rascsi_type)
{
GPIOBUS::Init(mode, rascsi_type);
int mem_fd;
uint8_t *gpio_mem;
uint8_t *r_gpio_mem;
uint32_t peri_base;
uint32_t gpio_base;
unsigned char buf[4];
FILE *fp;
char buffer[1024];
char hardware[1024];
int found = 0;
printf("enter to sunxi_setup\n");
// mmap the GPIO memory registers
if ((mem_fd = open("/dev/mem", O_RDWR|O_SYNC) ) < 0)
return SETUP_DEVMEM_FAIL;
if ((gpio_mem = malloc(BLOCK_SIZE + (PAGE_SIZE-1))) == NULL)
return SETUP_MALLOC_FAIL;
if ((uint32_t)gpio_mem % PAGE_SIZE)
gpio_mem += PAGE_SIZE - ((uint32_t)gpio_mem % PAGE_SIZE);
gpio_map = (uint32_t *)mmap( (caddr_t)gpio_mem, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED, mem_fd, SUNXI_GPIO_BASE);
pio_map = gpio_map + (SUNXI_GPIO_REG_OFFSET>>2);
//printf("gpio_mem[%x] gpio_map[%x] pio_map[%x]\n", gpio_mem, gpio_map, pio_map);
//R_PIO GPIO LMN
r_gpio_map = (uint32_t *)mmap( (caddr_t)0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, SUNXI_R_GPIO_BASE);
r_pio_map = r_gpio_map + (SUNXI_R_GPIO_REG_OFFSET>>2);
//printf("r_gpio_map[%x] r_pio_map[%x]\n", r_gpio_map, r_pio_map);
if ((uint32_t)gpio_map < 0)
return SETUP_MMAP_FAIL;
return SETUP_OK;
sunxi_setup();
@ -487,67 +562,58 @@ uint32_t GPIOBUS_Allwinner::Acquire()
int mtk_setup(void)
{
int gpio_mmap_fd = 0;
if ((gpio_mmap_fd = open("/dev/mem", O_RDWR|O_SYNC)) < 0) {
fprintf(stderr, "unable to open mmap file");
return -1;
}
gpio_mmap_reg = (uint8_t*)mmap(NULL, 8 * 1024, PROT_READ | PROT_WRITE,
MAP_FILE | MAP_SHARED, gpio_mmap_fd, 0x10005000);
if (gpio_mmap_reg == MAP_FAILED) {
perror("foo");
fprintf(stderr, "failed to mmap");
gpio_mmap_reg = NULL;
close(gpio_mmap_fd);
return -1;
}
printf("gpio_mmap_fd=%d, gpio_map=%x", gpio_mmap_fd, gpio_mmap_reg);
return SETUP_OK;
}
uint32_t GPIOBUS_Allwinner::sunxi_readl(volatile uint32_t *addr)
{
#ifndef __arm__
(void)addr;
return 0;
#else
printf("sunxi_readl\n");
uint32_t val = 0;
uint32_t mmap_base = (uint32_t)addr & (~MAP_MASK);
uint32_t mmap_seek = ((uint32_t)addr - mmap_base) >> 2;
val = *(gpio_map + mmap_seek);
return val;
#endif
}
void GPIOBUS_Allwinner::sunxi_writel(volatile uint32_t *addr, uint32_t val)
{
#ifndef __arm__
(void)addr;
(void)val;
return;
#else
printf("sunxi_writel\n");
uint32_t mmap_base = (uint32_t)addr & (~MAP_MASK);
uint32_t mmap_seek =( (uint32_t)addr - mmap_base) >> 2;
*(gpio_map + mmap_seek) = val;
#endif
}
int GPIOBUS_Allwinner::sunxi_setup(void)
{
#ifndef __arm__
return SETUP_MMAP_FAIL;
#else
int mem_fd;
uint8_t *gpio_mem;
uint8_t *r_gpio_mem;
uint32_t peri_base;
uint32_t gpio_base;
unsigned char buf[4];
FILE *fp;
char buffer[1024];
char hardware[1024];
int found = 0;
// uint8_t *r_gpio_mem;
// uint32_t peri_base;
// uint32_t gpio_base;
// unsigned char buf[4];
// FILE *fp;
// char buffer[1024];
// char hardware[1024];
// int found = 0;
printf("enter to sunxi_setup\n");
// mmap the GPIO memory registers
if ((mem_fd = open("/dev/mem", O_RDWR|O_SYNC) ) < 0)
return SETUP_DEVMEM_FAIL;
if ((gpio_mem = malloc(BLOCK_SIZE + (PAGE_SIZE-1))) == NULL)
if ((gpio_mem = (uint8_t*)malloc(BLOCK_SIZE + (PAGE_SIZE-1))) == NULL)
return SETUP_MALLOC_FAIL;
if ((uint32_t)gpio_mem % PAGE_SIZE)
@ -561,14 +627,20 @@ int GPIOBUS_Allwinner::sunxi_setup(void)
r_pio_map = r_gpio_map + (SUNXI_R_GPIO_REG_OFFSET>>2);
//printf("r_gpio_map[%x] r_pio_map[%x]\n", r_gpio_map, r_pio_map);
if ((uint32_t)gpio_map < 0)
if ((int32_t)gpio_map < 0)
return SETUP_MMAP_FAIL;
return SETUP_OK;
#endif
}
void GPIOBUS_Allwinner::sunxi_set_pullupdn(int gpio, int pud)
{
#ifndef __arm__
(void)gpio;
(void)pud;
return;
#else
uint32_t regval = 0;
int bank = GPIO_BANK(gpio); //gpio >> 5
int index = GPIO_PUL_INDEX(gpio); // (gpio & 0x1f) >> 4
@ -586,10 +658,17 @@ void GPIOBUS_Allwinner::sunxi_set_pullupdn(int gpio, int pud)
regval &= ~(3 << offset);
regval |= pud << offset;
*(&pio->PULL[0] + index) = regval;
#endif
}
void GPIOBUS_Allwinner::sunxi_setup_gpio(int gpio, int direction, int pud)
{
#ifndef __arm__
(void)gpio;
(void)direction;
(void)pud;
return;
#else
uint32_t regval = 0;
int bank = GPIO_BANK(gpio); //gpio >> 5
int index = GPIO_CFG_INDEX(gpio); // (gpio & 0x1F) >> 3
@ -614,6 +693,7 @@ void GPIOBUS_Allwinner::sunxi_setup_gpio(int gpio, int direction, int pud)
} else {
printf("line:%dgpio number error\n",__LINE__);
}
#endif
}
// Contribution by Eric Ptak <trouch@trouch.com>
@ -681,7 +761,7 @@ int GPIOBUS_Allwinner::bpi_piGpioLayout (void)
FILE *bpiFd ;
char buffer[1024];
char hardware[1024];
struct BPIBoards *board;
struct BPIBoards *board = nullptr;
static int gpioLayout = -1 ;
if (gpioLayout != -1) // No point checking twice
@ -692,16 +772,19 @@ int GPIOBUS_Allwinner::bpi_piGpioLayout (void)
return -1;
}
while(!feof(bpiFd)) {
fgets(buffer, sizeof(buffer), bpiFd);
// TODO: check the output of fgets()
char *ret = fgets(buffer, sizeof(buffer), bpiFd);
(void)ret;
sscanf(buffer, "BOARD=%s", hardware);
//printf("BPI: buffer[%s] hardware[%s]\n",buffer, hardware);
// Search for board:
LOGDEBUG("BPI: buffer[%s] hardware[%s]\n",buffer, hardware);
//Search for board:
for (board = bpiboard ; board->name != NULL ; ++board) {
//printf("BPI: name[%s] hardware[%s]\n",board->name, hardware);
LOGDEBUG("BPI: name[%s] hardware[%s]\n",board->name, hardware);
if (strcmp (board->name, hardware) == 0) {
//gpioLayout = board->gpioLayout;
gpioLayout = board->model; // BPI: use model to replace gpioLayout
//printf("BPI: name[%s] gpioLayout(%d)\n",board->name, gpioLayout);
LOGDEBUG("BPI: name[%s] gpioLayout(%d)\n",board->name, gpioLayout);
if(gpioLayout >= 21) {
bpi_found = 1;
break;
@ -713,50 +796,85 @@ int GPIOBUS_Allwinner::bpi_piGpioLayout (void)
}
}
fclose(bpiFd);
//printf("BPI: name[%s] gpioLayout(%d)\n",board->name, gpioLayout);
LOGDEBUG("BPI: name[%s] gpioLayout(%d)\n",board->name, gpioLayout);
return gpioLayout ;
}
int GPIOBUS_Allwinner::bpi_get_rpi_info(rpi_info *info)
{
struct BPIBoards *board=bpiboard;
static int gpioLayout = -1 ;
char ram[64];
char manufacturer[64];
char processor[64];
char type[64];
// int GPIOBUS_Allwinner::bpi_get_rpi_info(rpi_info *info)
// {
// struct BPIBoards *board=bpiboard;
// static int gpioLayout = -1 ;
// char ram[64];
// char manufacturer[64];
// char processor[64];
// char type[64];
gpioLayout = bpi_piGpioLayout () ;
printf("BPI: gpioLayout(%d)\n", gpioLayout);
if(bpi_found == 1) {
board = &bpiboard[gpioLayout];
printf("BPI: name[%s] gpioLayout(%d)\n",board->name, gpioLayout);
sprintf(ram, "%dMB", piMemorySize [board->mem]);
sprintf(type, "%s", piModelNames [board->model]);
//add by jackzeng
//jude mtk platform
if(strcmp(board->name, "bpi-r2") == 0){
bpi_found_mtk = 1;
printf("found mtk board\n");
}
sprintf(manufacturer, "%s", piMakerNames [board->maker]);
info->p1_revision = 3;
info->type = type;
info->ram = ram;
info->manufacturer = manufacturer;
if(bpi_found_mtk == 1){
info->processor = "MTK";
}else{
info->processor = "Allwinner";
}
// gpioLayout = bpi_piGpioLayout () ;
// printf("BPI: gpioLayout(%d)\n", gpioLayout);
// if(bpi_found == 1) {
// board = &bpiboard[gpioLayout];
// printf("BPI: name[%s] gpioLayout(%d)\n",board->name, gpioLayout);
// sprintf(ram, "%dMB", piMemorySize [board->mem]);
// sprintf(type, "%s", piModelNames [board->model]);
// //add by jackzeng
// //jude mtk platform
// if(strcmp(board->name, "bpi-r2") == 0){
// bpi_found_mtk = 1;
// printf("found mtk board\n");
// }
// sprintf(manufacturer, "%s", piMakerNames [board->maker]);
// info->p1_revision = 3;
// info->type = type;
// info->ram = ram;
// info->manufacturer = manufacturer;
// if(bpi_found_mtk == 1){
// info->processor = "MTK";
// }else{
// info->processor = "Allwinner";
// }
strcpy(info->revision, "4001");
// pin_to_gpio = board->physToGpio ;
pinToGpio_BP = board->pinToGpio ;
physToGpio_BP = board->physToGpio ;
pinTobcm_BP = board->pinTobcm ;
//printf("BPI: name[%s] bType(%d) model(%d)\n",board->name, bType, board->model);
return 0;
}
return -1;
// strcpy(info->revision, "4001");
// // pin_to_gpio = board->physToGpio ;
// pinToGpio_BP = board->pinToGpio ;
// physToGpio_BP = board->physToGpio ;
// pinTobcm_BP = board->pinTobcm ;
// //printf("BPI: name[%s] bType(%d) model(%d)\n",board->name, bType, board->model);
// return 0;
// }
// return -1;
// }
void GPIOBUS_Allwinner::set_pullupdn(int gpio, int pud)
{
int clk_offset = PULLUPDNCLK_OFFSET + (gpio/32);
int shift = (gpio%32);
#ifdef BPI
if( bpi_found == 1 ) {
gpio = *(pinTobcm_BP + gpio);
return sunxi_set_pullupdn(gpio, pud);
}
#endif
if (pud == PUD_DOWN)
*(gpio_map+PULLUPDN_OFFSET) = (*(gpio_map+PULLUPDN_OFFSET) & ~3) | PUD_DOWN;
else if (pud == PUD_UP)
*(gpio_map+PULLUPDN_OFFSET) = (*(gpio_map+PULLUPDN_OFFSET) & ~3) | PUD_UP;
else // pud == PUD_OFF
*(gpio_map+PULLUPDN_OFFSET) &= ~3;
short_wait();
*(gpio_map+clk_offset) = 1 << shift;
short_wait();
*(gpio_map+PULLUPDN_OFFSET) &= ~3;
*(gpio_map+clk_offset) = 0;
}
void GPIOBUS_Allwinner::short_wait(void)
{
int i;
for (i=0; i<150; i++) { // wait 150 cycles
asm volatile("nop");
}
}

View File

@ -91,94 +91,12 @@ class GPIOBUS_Allwinner : public GPIOBUS
volatile uint32_t *pads = nullptr; // PADS register
static volatile uint32_t *gpio_map;
volatile uint32_t *gpio_map;
int bpi_piGpioLayout (void)
{
FILE *bpiFd ;
char buffer[1024];
char hardware[1024];
struct BPIBoards *board;
static int gpioLayout = -1 ;
if (gpioLayout != -1) // No point checking twice
return gpioLayout ;
bpi_found = 0; // -1: not init, 0: init but not found, 1: found
if ((bpiFd = fopen("/var/lib/bananapi/board.sh", "r")) == NULL) {
return -1;
}
while(!feof(bpiFd)) {
fgets(buffer, sizeof(buffer), bpiFd);
sscanf(buffer, "BOARD=%s", hardware);
//printf("BPI: buffer[%s] hardware[%s]\n",buffer, hardware);
// Search for board:
for (board = bpiboard ; board->name != NULL ; ++board) {
//printf("BPI: name[%s] hardware[%s]\n",board->name, hardware);
if (strcmp (board->name, hardware) == 0) {
//gpioLayout = board->gpioLayout;
gpioLayout = board->model; // BPI: use model to replace gpioLayout
//printf("BPI: name[%s] gpioLayout(%d)\n",board->name, gpioLayout);
if(gpioLayout >= 21) {
bpi_found = 1;
break;
}
}
}
if(bpi_found == 1) {
break;
}
}
fclose(bpiFd);
//printf("BPI: name[%s] gpioLayout(%d)\n",board->name, gpioLayout);
return gpioLayout ;
}
int bpi_get_rpi_info(rpi_info *info)
{
struct BPIBoards *board=bpiboard;
static int gpioLayout = -1 ;
char ram[64];
char manufacturer[64];
char processor[64];
char type[64];
gpioLayout = bpi_piGpioLayout () ;
printf("BPI: gpioLayout(%d)\n", gpioLayout);
if(bpi_found == 1) {
board = &bpiboard[gpioLayout];
printf("BPI: name[%s] gpioLayout(%d)\n",board->name, gpioLayout);
sprintf(ram, "%dMB", piMemorySize [board->mem]);
sprintf(type, "%s", piModelNames [board->model]);
//add by jackzeng
//jude mtk platform
if(strcmp(board->name, "bpi-r2") == 0){
bpi_found_mtk = 1;
printf("found mtk board\n");
}
sprintf(manufacturer, "%s", piMakerNames [board->maker]);
info->p1_revision = 3;
info->type = type;
info->ram = ram;
info->manufacturer = manufacturer;
if(bpi_found_mtk == 1){
info->processor = "MTK";
}else{
info->processor = "Allwinner";
}
strcpy(info->revision, "4001");
// pin_to_gpio = board->physToGpio ;
pinToGpio_BP = board->pinToGpio ;
physToGpio_BP = board->physToGpio ;
pinTobcm_BP = board->pinTobcm ;
//printf("BPI: name[%s] bType(%d) model(%d)\n",board->name, bType, board->model);
return 0;
}
return -1;
}
int bpi_piGpioLayout (void);
// int bpi_get_rpi_info(rpi_info *info);
@ -238,9 +156,74 @@ void sunxi_writel(volatile uint32_t *addr, uint32_t val);
void sunxi_output_gpio(int gpio, int value);
int sunxi_input_gpio(int gpio);
int bpi_found = -1;
struct BPIBoards
{
const char *name;
int gpioLayout;
int model;
int rev;
int mem;
int maker;
int warranty;
int *pinToGpio;
int *physToGpio;
int *pinTobcm;
} ;
typedef BPIBoards BpiBoardsType;
static BpiBoardsType bpiboard[];
typedef struct sunxi_gpio {
unsigned int CFG[4];
unsigned int DAT;
unsigned int DRV[2];
unsigned int PULL[2];
} sunxi_gpio_t;
/* gpio interrupt control */
typedef struct sunxi_gpio_int {
unsigned int CFG[3];
unsigned int CTL;
unsigned int STA;
unsigned int DEB;
} sunxi_gpio_int_t;
typedef struct sunxi_gpio_reg {
struct sunxi_gpio gpio_bank[9];
unsigned char res[0xbc];
struct sunxi_gpio_int gpio_int;
} sunxi_gpio_reg_t;
volatile uint32_t *pio_map;
volatile uint32_t *r_pio_map;
volatile uint32_t *r_gpio_map;
uint8_t* gpio_mmap_reg;
void set_pullupdn(int gpio, int pud);
// These definitions are from c_gpio.c and should be removed at some point!!
const int SETUP_OK = 0;
const int SETUP_DEVMEM_FAIL = 1;
const int SETUP_MALLOC_FAIL = 2;
const int SETUP_MMAP_FAIL = 3;
const int SETUP_CPUINFO_FAIL = 4;
const int SETUP_NOT_RPI_FAIL = 5;
const int INPUT = 1; // is really 0 for control register!;
const int OUTPUT = 0; // is really 1 for control register!;
const int ALT0 = 4;
const int HIGH = 1;
const int LOW = 0;
const int PUD_OFF = 0;
const int PUD_DOWN = 1;
const int PUD_UP = 2;
void short_wait(void);
};

View File

@ -377,3 +377,13 @@ extern const Banana_Pi_Gpio_Mapping banana_pi_m2p_map;
extern const Banana_Pi_Gpio_Mapping banana_pi_m2u_map;
extern const Banana_Pi_Gpio_Mapping banana_pi_m3_map;
extern const Banana_Pi_Gpio_Mapping banana_pi_m64_map;
extern int physToGpio_BPI_M1P [64];
extern int physToGpio_BPI_M2 [64];
extern int physToGpio_BPI_M2M [64];
extern int physToGpio_BPI_M2M_1P1 [64];
extern int physToGpio_BPI_M2P [64];
extern int physToGpio_BPI_M2U [64];
extern int physToGpio_BPI_M3 [64];
extern int physToGpio_BPI_M64 [64];

View File

@ -106,4 +106,32 @@ const Banana_Pi_Gpio_Mapping banana_pi_m1_m1p_r1_map{
.I2C_OFFSET = 2,
.SPI_OFFSET = 2,
.PWM_OFFSET = 2,
};
};
//map phys_num(index) to bp gpio_num(element)
int physToGpio_BPI_M1P [64] =
{
-1, //0
-1, -1, //1, 2
BPI_M1P_03, -1, //3, 4
BPI_M1P_05, -1, //5, 6
BPI_M1P_07, BPI_M1P_08, //7, 8
-1, BPI_M1P_10, //9, 10
BPI_M1P_11, BPI_M1P_12, //11, 12
BPI_M1P_13, -1, //13, 14
BPI_M1P_15, BPI_M1P_16, //15, 16
-1, BPI_M1P_18, //17, 18
BPI_M1P_19, -1, //19, 20
BPI_M1P_21, BPI_M1P_22, //21, 22
BPI_M1P_23, BPI_M1P_24, //23, 24
-1, BPI_M1P_26, //25, 26
BPI_M1P_27, BPI_M1P_28, //27, 28
BPI_M1P_29, -1, //29, 30
BPI_M1P_31, BPI_M1P_32, //31, 32
BPI_M1P_33, -1, //33, 34
BPI_M1P_35, BPI_M1P_36, //35, 36
BPI_M1P_37, BPI_M1P_38, //37, 38
-1, BPI_M1P_40, //39, 40
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //41-> 55
-1, -1, -1, -1, -1, -1, -1, -1 // 56-> 63
} ;

View File

@ -107,3 +107,31 @@ const Banana_Pi_Gpio_Mapping banana_pi_m2_map{
.SPI_OFFSET = 2,
.PWM_OFFSET = 4,
};
//map phys_num(index) to bp gpio_num(element)
int physToGpio_BPI_M2 [64] =
{
-1, //0
-1, -1, //1, 2
BPI_M2_03, -1, //3, 4
BPI_M2_05, -1, //5, 6
BPI_M2_07, BPI_M2_08, //7, 8
-1, BPI_M2_10, //9, 10
BPI_M2_11, BPI_M2_12, //11, 12
BPI_M2_13, -1, //13, 14
BPI_M2_15, BPI_M2_16, //15, 16
-1, BPI_M2_18, //17, 18
BPI_M2_19, -1, //19, 20
BPI_M2_21, BPI_M2_22, //21, 22
BPI_M2_23, BPI_M2_24, //23, 24
-1, BPI_M2_26, //25, 26
BPI_M2_27, BPI_M2_28, //27, 28
BPI_M2_29, -1, //29, 30
BPI_M2_31, BPI_M2_32, //31, 32
BPI_M2_33, -1, //33, 34
BPI_M2_35, BPI_M2_36, //35, 36
BPI_M2_37, BPI_M2_38, //37, 38
-1, BPI_M2_40, //39, 40
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //41-> 55
-1, -1, -1, -1, -1, -1, -1, -1 // 56-> 63
} ;

View File

@ -111,3 +111,31 @@ const Banana_Pi_Gpio_Mapping banana_pi_m2m_map{
.SPI_OFFSET = 3,
.PWM_OFFSET = 2,
};
//map phys_num(index) to bp gpio_num(element)
int physToGpio_BPI_M2M [64] =
{
-1, //0
-1, -1, //1, 2
BPI_M2M_03, -1, //3, 4
BPI_M2M_05, -1, //5, 6
BPI_M2M_07, BPI_M2M_08, //7, 8
-1, BPI_M2M_10, //9, 10
BPI_M2M_11, BPI_M2M_12, //11, 12
BPI_M2M_13, -1, //13, 14
BPI_M2M_15, BPI_M2M_16, //15, 16
-1, BPI_M2M_18, //17, 18
BPI_M2M_19, -1, //19, 20
BPI_M2M_21, BPI_M2M_22, //21, 22
BPI_M2M_23, BPI_M2M_24, //23, 24
-1, BPI_M2M_26, //25, 26
BPI_M2M_27, BPI_M2M_28, //27, 28
BPI_M2M_29, -1, //29, 30
BPI_M2M_31, BPI_M2M_32, //31, 32
BPI_M2M_33, -1, //33, 34
BPI_M2M_35, BPI_M2M_36, //35, 36
BPI_M2M_37, BPI_M2M_38, //37, 38
-1, BPI_M2M_40, //39, 40
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //41-> 55
-1, -1, -1, -1, -1, -1, -1, -1 // 56-> 63
} ;

View File

@ -110,3 +110,31 @@ const Banana_Pi_Gpio_Mapping banana_pi_m2m_1p1_map{
.SPI_OFFSET = 3,
.PWM_OFFSET = 2,
};
//map phys_num(index) to bp gpio_num(element)
int physToGpio_BPI_M2M_1P1 [64] =
{
-1, //0
-1, -1, //1, 2
BPI_M2M_03, -1, //3, 4
BPI_M2M_05, -1, //5, 6
BPI_M2M_07, BPI_M2M_08, //7, 8
-1, BPI_M2M_10, //9, 10
BPI_M2M_11, BPI_M2M_12, //11, 12
BPI_M2M_13, -1, //13, 14
BPI_M2M_15, BPI_M2M_16, //15, 16
-1, BPI_M2M_18, //17, 18
BPI_M2M_19, -1, //19, 20
BPI_M2M_21, BPI_M2M_22, //21, 22
BPI_M2M_23, BPI_M2M_24, //23, 24
-1, BPI_M2M_26, //25, 26
BPI_M2M_27, BPI_M2M_28, //27, 28
BPI_M2M_29, -1, //29, 30
BPI_M2M_31, BPI_M2M_32, //31, 32
BPI_M2M_33, -1, //33, 34
BPI_M2M_35, BPI_M2M_36, //35, 36
BPI_M2M_37, BPI_M2M_38, //37, 38
-1, BPI_M2M_40, //39, 40
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //41-> 55
-1, -1, -1, -1, -1, -1, -1, -1 // 56-> 63
} ;

View File

@ -107,3 +107,31 @@ const Banana_Pi_Gpio_Mapping banana_pi_m2p_map{
.SPI_OFFSET = 3,
.PWM_OFFSET = 3,
};
//map phys_num(index) to bp gpio_num(element)
int physToGpio_BPI_M2P [64] =
{
-1, //0
-1, -1, //1, 2
BPI_M2P_03, -1, //3, 4
BPI_M2P_05, -1, //5, 6
BPI_M2P_07, BPI_M2P_08, //7, 8
-1, BPI_M2P_10, //9, 10
BPI_M2P_11, BPI_M2P_12, //11, 12
BPI_M2P_13, -1, //13, 14
BPI_M2P_15, BPI_M2P_16, //15, 16
-1, BPI_M2P_18, //17, 18
BPI_M2P_19, -1, //19, 20
BPI_M2P_21, BPI_M2P_22, //21, 22
BPI_M2P_23, BPI_M2P_24, //23, 24
-1, BPI_M2P_26, //25, 26
BPI_M2P_27, BPI_M2P_28, //27, 28
BPI_M2P_29, -1, //29, 30
BPI_M2P_31, BPI_M2P_32, //31, 32
BPI_M2P_33, -1, //33, 34
BPI_M2P_35, BPI_M2P_36, //35, 36
BPI_M2P_37, BPI_M2P_38, //37, 38
-1, BPI_M2P_40, //39, 40
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //41-> 55
-1, -1, -1, -1, -1, -1, -1, -1 // 56-> 63
} ;

View File

@ -107,3 +107,31 @@ const Banana_Pi_Gpio_Mapping banana_pi_m2u_map{
.SPI_OFFSET = 3,
.PWM_OFFSET = 3,
};
//map phys_num(index) to bp gpio_num(element)
int physToGpio_BPI_M2U [64] =
{
-1, //0
-1, -1, //1, 2
BPI_M2U_03, -1, //3, 4
BPI_M2U_05, -1, //5, 6
BPI_M2U_07, BPI_M2U_08, //7, 8
-1, BPI_M2U_10, //9, 10
BPI_M2U_11, BPI_M2U_12, //11, 12
BPI_M2U_13, -1, //13, 14
BPI_M2U_15, BPI_M2U_16, //15, 16
-1, BPI_M2U_18, //17, 18
BPI_M2U_19, -1, //19, 20
BPI_M2U_21, BPI_M2U_22, //21, 22
BPI_M2U_23, BPI_M2U_24, //23, 24
-1, BPI_M2U_26, //25, 26
BPI_M2U_27, BPI_M2U_28, //27, 28
BPI_M2U_29, -1, //29, 30
BPI_M2U_31, BPI_M2U_32, //31, 32
BPI_M2U_33, -1, //33, 34
BPI_M2U_35, BPI_M2U_36, //35, 36
BPI_M2U_37, BPI_M2U_38, //37, 38
-1, BPI_M2U_40, //39, 40
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //41-> 55
-1, -1, -1, -1, -1, -1, -1, -1 // 56-> 63
} ;

View File

@ -107,3 +107,31 @@ const Banana_Pi_Gpio_Mapping banana_pi_m3_map{
.SPI_OFFSET = 3,
.PWM_OFFSET = 2,
};
//map phys_num(index) to bp gpio_num(element)
int physToGpio_BPI_M3 [64] =
{
-1, //0
-1, -1, //1, 2
BPI_M3_03, -1, //3, 4
BPI_M3_05, -1, //5, 6
BPI_M3_07, BPI_M3_08, //7, 8
-1, BPI_M3_10, //9, 10
BPI_M3_11, BPI_M3_12, //11, 12
BPI_M3_13, -1, //13, 14
BPI_M3_15, BPI_M3_16, //15, 16
-1, BPI_M3_18, //17, 18
BPI_M3_19, -1, //19, 20
BPI_M3_21, BPI_M3_22, //21, 22
BPI_M3_23, BPI_M3_24, //23, 24
-1, BPI_M3_26, //25, 26
BPI_M3_27, BPI_M3_28, //27, 28
BPI_M3_29, -1, //29, 30
BPI_M3_31, BPI_M3_32, //31, 32
BPI_M3_33, -1, //33, 34
BPI_M3_35, BPI_M3_36, //35, 36
BPI_M3_37, BPI_M3_38, //37, 38
-1, BPI_M3_40, //39, 40
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //41-> 55
-1, -1, -1, -1, -1, -1, -1, -1 // 56-> 63
} ;

View File

@ -108,3 +108,31 @@ const Banana_Pi_Gpio_Mapping banana_pi_m64_map{
.SPI_OFFSET = 4,
.PWM_OFFSET = -1,
};
//map phys_num(index) to bp gpio_num(element)
int physToGpio_BPI_M64 [64] =
{
-1, //0
-1, -1, //1, 2
BPI_M64_03, -1, //3, 4
BPI_M64_05, -1, //5, 6
BPI_M64_07, BPI_M64_08, //7, 8
-1, BPI_M64_10, //9, 10
BPI_M64_11, BPI_M64_12, //11, 12
BPI_M64_13, -1, //13, 14
BPI_M64_15, BPI_M64_16, //15, 16
-1, BPI_M64_18, //17, 18
BPI_M64_19, -1, //19, 20
BPI_M64_21, BPI_M64_22, //21, 22
BPI_M64_23, BPI_M64_24, //23, 24
-1, BPI_M64_26, //25, 26
BPI_M64_27, BPI_M64_28, //27, 28
BPI_M64_29, -1, //29, 30
BPI_M64_31, BPI_M64_32, //31, 32
BPI_M64_33, -1, //33, 34
BPI_M64_35, BPI_M64_36, //35, 36
BPI_M64_37, BPI_M64_38, //37, 38
-1, BPI_M64_40, //39, 40
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //41-> 55
-1, -1, -1, -1, -1, -1, -1, -1 // 56-> 63
} ;

View File

@ -15,7 +15,8 @@
#include "spdlog/spdlog.h"
#include "spdlog/sinks/sink.h"
static const int LOGBUF_SIZE = 512;
// TODO: Change this back to 512!!
static const int LOGBUF_SIZE = 1024*3;
#define SPDLOGWRAPPER(loglevel, ...) \
{ \