Compare commits

...

3 Commits

Author SHA1 Message Date
Mihai Stefanescu
ecf04cb151 Joule: Add gpiod mapping for Joule
Signed-off-by: Mihai Stefanescu <mihai.t.gh.stefanescu@gmail.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2017-08-27 19:18:15 +02:00
Brendan Le Foll
e7133989e5 gpio.h: Add stripped kernel header
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2017-08-27 19:18:15 +02:00
Mihai Stefanescu
c5f61d4a8d gpio: Add gpio chardev interface
Signed-off-by: Mihai Stefanescu <mihai.t.gh.stefanescu@gmail.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2017-08-27 19:18:15 +02:00
7 changed files with 1670 additions and 238 deletions

View File

@@ -61,7 +61,10 @@ typedef enum {
MRAA_GPIO_STRONG = 0, /**< Default. Strong high and low */ MRAA_GPIO_STRONG = 0, /**< Default. Strong high and low */
MRAA_GPIO_PULLUP = 1, /**< Resistive High */ MRAA_GPIO_PULLUP = 1, /**< Resistive High */
MRAA_GPIO_PULLDOWN = 2, /**< Resistive Low */ MRAA_GPIO_PULLDOWN = 2, /**< Resistive Low */
MRAA_GPIO_HIZ = 3 /**< High Z State */ MRAA_GPIO_HIZ = 3, /**< High Z State */
MRAA_GPIOD_ACTIVE_LOW = 4,
MRAA_GPIOD_OPEN_DRAIN = 5,
MRAA_GPIOD_OPEN_SOURCE = 6,
} mraa_gpio_mode_t; } mraa_gpio_mode_t;
/** /**
@@ -109,6 +112,8 @@ typedef enum {
*/ */
mraa_gpio_context mraa_gpio_init(int pin); mraa_gpio_context mraa_gpio_init(int pin);
mraa_gpio_context mraa_gpio_init_multiple(int pins[], int num_pins);
/** /**
* Initialise gpio context without any mapping to a pin * Initialise gpio context without any mapping to a pin
* *
@@ -126,6 +131,8 @@ mraa_gpio_context mraa_gpio_init_raw(int gpiopin);
*/ */
mraa_result_t mraa_gpio_edge_mode(mraa_gpio_context dev, mraa_gpio_edge_t mode); mraa_result_t mraa_gpio_edge_mode(mraa_gpio_context dev, mraa_gpio_edge_t mode);
mraa_result_t mraa_gpio_edge_mode_multiple(mraa_gpio_context dev, mraa_gpio_edge_t mode);
/** /**
* Set an interrupt on pin * Set an interrupt on pin
* *
@@ -138,6 +145,8 @@ mraa_result_t mraa_gpio_edge_mode(mraa_gpio_context dev, mraa_gpio_edge_t mode);
*/ */
mraa_result_t mraa_gpio_isr(mraa_gpio_context dev, mraa_gpio_edge_t edge, void (*fptr)(void*), void* args); mraa_result_t mraa_gpio_isr(mraa_gpio_context dev, mraa_gpio_edge_t edge, void (*fptr)(void*), void* args);
mraa_result_t mraa_gpio_isr_multiple(mraa_gpio_context dev, mraa_gpio_edge_t edge, void (*fptr)(void*), void* args);
/** /**
* Stop the current interrupt watcher on this Gpio, and set the Gpio edge mode * Stop the current interrupt watcher on this Gpio, and set the Gpio edge mode
* to MRAA_GPIO_EDGE_NONE * to MRAA_GPIO_EDGE_NONE
@@ -165,6 +174,8 @@ mraa_result_t mraa_gpio_mode(mraa_gpio_context dev, mraa_gpio_mode_t mode);
*/ */
mraa_result_t mraa_gpio_dir(mraa_gpio_context dev, mraa_gpio_dir_t dir); mraa_result_t mraa_gpio_dir(mraa_gpio_context dev, mraa_gpio_dir_t dir);
mraa_result_t mraa_gpio_dir_multiple(mraa_gpio_context dev, mraa_gpio_dir_t dir);
/** /**
* Read Gpio direction * Read Gpio direction
* *
@@ -183,6 +194,8 @@ mraa_result_t mraa_gpio_read_dir(mraa_gpio_context dev, mraa_gpio_dir_t *dir);
*/ */
mraa_result_t mraa_gpio_close(mraa_gpio_context dev); mraa_result_t mraa_gpio_close(mraa_gpio_context dev);
mraa_result_t mraa_gpio_close_multiple(mraa_gpio_context dev);
/** /**
* Read the Gpio value. This can be 0 or 1. A resonse of -1 means that there * Read the Gpio value. This can be 0 or 1. A resonse of -1 means that there
* was a fatal error. * was a fatal error.
@@ -192,6 +205,11 @@ mraa_result_t mraa_gpio_close(mraa_gpio_context dev);
*/ */
int mraa_gpio_read(mraa_gpio_context dev); int mraa_gpio_read(mraa_gpio_context dev);
/* Values array is provided by user. Must be the same size as the array passed in init.
* It will be overwritten with the read results.
*/
mraa_result_t mraa_gpio_read_multiple(mraa_gpio_context dev, int output_values[]);
/** /**
* Write to the Gpio Value. * Write to the Gpio Value.
* *
@@ -201,6 +219,8 @@ int mraa_gpio_read(mraa_gpio_context dev);
*/ */
mraa_result_t mraa_gpio_write(mraa_gpio_context dev, int value); mraa_result_t mraa_gpio_write(mraa_gpio_context dev, int value);
mraa_result_t mraa_gpio_write_multiple(mraa_gpio_context dev, int input_values[]);
/** /**
* Change ownership of the context. * Change ownership of the context.
* *

81
include/linux/gpio.h Normal file
View File

@@ -0,0 +1,81 @@
/*
* This header was manually generated from a Linux kernel header linux/gpio.h,
* to make information necessary for compilation to be available. It contains
* only constants, structures, and macros generated from the original header,
* and thus, contains no copyrightable information.
*/
#ifndef _GPIO_H_
#define _GPIO_H_
#include <linux/ioctl.h>
#include <linux/types.h>
struct gpiochip_info {
char name[32];
char label[32];
__u32 lines;
};
#define GPIOLINE_FLAG_KERNEL (1UL << 0)
#define GPIOLINE_FLAG_IS_OUT (1UL << 1)
#define GPIOLINE_FLAG_ACTIVE_LOW (1UL << 2)
#define GPIOLINE_FLAG_OPEN_DRAIN (1UL << 3)
#define GPIOLINE_FLAG_OPEN_SOURCE (1UL << 4)
struct gpioline_info {
__u32 line_offset;
__u32 flags;
char name[32];
char consumer[32];
};
#define GPIOHANDLES_MAX 64
#define GPIOHANDLE_REQUEST_INPUT (1UL << 0)
#define GPIOHANDLE_REQUEST_OUTPUT (1UL << 1)
#define GPIOHANDLE_REQUEST_ACTIVE_LOW (1UL << 2)
#define GPIOHANDLE_REQUEST_OPEN_DRAIN (1UL << 3)
#define GPIOHANDLE_REQUEST_OPEN_SOURCE (1UL << 4)
struct gpiohandle_request {
__u32 lineoffsets[GPIOHANDLES_MAX];
__u32 flags;
__u8 default_values[GPIOHANDLES_MAX];
char consumer_label[32];
__u32 lines;
int fd;
};
struct gpiohandle_data {
__u8 values[GPIOHANDLES_MAX];
};
#define GPIOHANDLE_GET_LINE_VALUES_IOCTL _IOWR(0xB4, 0x08, struct gpiohandle_data)
#define GPIOHANDLE_SET_LINE_VALUES_IOCTL _IOWR(0xB4, 0x09, struct gpiohandle_data)
#define GPIOEVENT_REQUEST_RISING_EDGE (1UL << 0)
#define GPIOEVENT_REQUEST_FALLING_EDGE (1UL << 1)
#define GPIOEVENT_REQUEST_BOTH_EDGES ((1UL << 0) | (1UL << 1))
struct gpioevent_request {
__u32 lineoffset;
__u32 handleflags;
__u32 eventflags;
char consumer_label[32];
int fd;
};
#define GPIOEVENT_EVENT_RISING_EDGE 0x01
#define GPIOEVENT_EVENT_FALLING_EDGE 0x02
struct gpioevent_data {
__u64 timestamp;
__u32 id;
};
#define GPIO_GET_CHIPINFO_IOCTL _IOR(0xB4, 0x01, struct gpiochip_info)
#define GPIO_GET_LINEINFO_IOCTL _IOWR(0xB4, 0x02, struct gpioline_info)
#define GPIO_GET_LINEHANDLE_IOCTL _IOWR(0xB4, 0x03, struct gpiohandle_request)
#define GPIO_GET_LINEEVENT_IOCTL _IOWR(0xB4, 0x04, struct gpioevent_request)
#endif /* _GPIO_H_ */

View File

@@ -106,6 +106,26 @@ struct _firmata {
}; };
#endif #endif
struct _gpio_group {
int is_required;
int dev_fd;
int gpiod_handle;
unsigned int gpio_chip;
/* We can have multiple lines in a gpio group. */
unsigned int num_gpio_lines;
unsigned int *gpio_lines;
/* R/W stuff.*/
unsigned char *rw_values;
/* Reverse mapping to original pin number indexes. */
unsigned int *gpio_group_to_pins_table;
unsigned int flags;
/* Event specific fields. */
int *event_handles;
};
/** /**
* A structure representing a gpio pin. * A structure representing a gpio pin.
*/ */
@@ -134,8 +154,30 @@ struct _gpio {
#ifdef PERIPHERALMAN #ifdef PERIPHERALMAN
AGpio *bgpio; AGpio *bgpio;
#endif #endif
/* TODO: The below members should be integrated in gpio_group struct. */
int dev_fd;
int gpiod_handle;
unsigned int gpio_chip;
unsigned int gpio_line;
/* Multiple gpio support. These members are treated separately for now until multiple gpio support is accepted. */
unsigned int num_chips;
struct _gpio_group *gpio_group;
/* Pin index passed by the user to gpio_group structures. */
int *pin_to_gpio_table;
unsigned int num_pins;
struct _gpio *next;
}; };
/* Macro for looping over gpio chips. */
#define for_each_gpio_group(group, dev) \
for (int k = 0; \
k < dev->num_chips && (group = &dev->gpio_group[k]); \
++k) \
if (dev->gpio_group[k].is_required)
/** /**
* A structure representing a I2C bus * A structure representing a I2C bus
*/ */
@@ -301,6 +343,10 @@ typedef struct {
mraa_mux_t mux[6]; /** Array holding information about mux */ mraa_mux_t mux[6]; /** Array holding information about mux */
unsigned int output_enable; /** Output Enable GPIO, for level shifting */ unsigned int output_enable; /** Output Enable GPIO, for level shifting */
mraa_pin_cap_complex_t complex_cap; mraa_pin_cap_complex_t complex_cap;
/* GPIOD_INTERFACE */
unsigned int gpio_chip;
unsigned int gpio_line;
/*@}*/ /*@}*/
} mraa_pin_t; } mraa_pin_t;
@@ -431,6 +477,7 @@ typedef struct _board_t {
mraa_pininfo_t* pins; /**< Pointer to pin array */ mraa_pininfo_t* pins; /**< Pointer to pin array */
mraa_adv_func_t* adv_func; /**< Pointer to advanced function disptach table */ mraa_adv_func_t* adv_func; /**< Pointer to advanced function disptach table */
struct _board_t* sub_platform; /**< Pointer to sub platform */ struct _board_t* sub_platform; /**< Pointer to sub platform */
mraa_boolean_t chardev_capable; /**< Decide what interface is being used: old sysfs or new char device*/
/*@}*/ /*@}*/
} mraa_board_t; } mraa_board_t;

View File

@@ -32,7 +32,8 @@ extern "C" {
// +1 as pins are "1 indexed" // +1 as pins are "1 indexed"
// we have 20 useless pins then the 4 LEDS and the 2 LEDs on the module. // we have 20 useless pins then the 4 LEDS and the 2 LEDs on the module.
#define MRAA_INTEL_JOULE_EXPANSION_PINCOUNT (40*2 + 23 +1 +2) // There is another pin for the built-in button.
#define MRAA_INTEL_JOULE_EXPANSION_PINCOUNT (40 * 2 + 23 + 1 + 2 + 1)
mraa_board_t* mraa_board_t*
mraa_joule_expansion_board(); mraa_joule_expansion_board();

File diff suppressed because it is too large Load Diff

View File

@@ -45,7 +45,7 @@
#include <unistd.h> #include <unistd.h>
#include <ctype.h> #include <ctype.h>
#include <limits.h> #include <limits.h>
#include <sys/utsname.h>
#if defined(IMRAA) #if defined(IMRAA)
#include <json-c/json.h> #include <json-c/json.h>
@@ -97,6 +97,57 @@ mraa_set_log_level(int level)
return MRAA_ERROR_INVALID_PARAMETER; return MRAA_ERROR_INVALID_PARAMETER;
} }
mraa_boolean_t mraa_is_kernel_chardev_interface_compatible()
{
struct utsname buf;
int status;
status = uname(&buf);
if (status) {
syslog(LOG_ERR, "uname() error");
return 0;
}
int major, minor;
char *token;
token = strtok(buf.release, ".");
if (token == NULL) {
syslog(LOG_ERR, "Could not find kernel version major number");
return 0;
}
status = mraa_atoi(token, &major);
if (status) {
syslog(LOG_ERR, "mraa_atoi() error");
return 0;
}
token = strtok(NULL, ".");
if (token == NULL) {
syslog(LOG_ERR, "Could not find kernel version minor number");
return 0;
}
status = mraa_atoi(token, &minor);
if (status) {
syslog(LOG_ERR, "mraa_atoi() error");
return 0;
}
if (major < 4 || minor < 8) {
syslog(LOG_ERR, "Kernel version %i.%i not supported for chardev interface. Need version 4.8 or newer!", major, minor);
return 0;
}
return 1;
}
/* TODO: Add all relevant checks here and return the overall result. */
mraa_boolean_t mraa_is_platform_chardev_interface_capable()
{
return mraa_is_kernel_chardev_interface_compatible();
}
/** /**
* Whilst the actual mraa init function is now called imraa_init, it's only * Whilst the actual mraa init function is now called imraa_init, it's only
* callable externally if IMRAA is enabled * callable externally if IMRAA is enabled
@@ -214,6 +265,11 @@ imraa_init()
return MRAA_ERROR_NO_RESOURCES; return MRAA_ERROR_NO_RESOURCES;
} }
plat->chardev_capable = mraa_is_platform_chardev_interface_capable();
if (plat->chardev_capable) {
syslog(LOG_NOTICE, "libmraa: support for chardev interface is activated");
}
syslog(LOG_NOTICE, "libmraa initialised for platform '%s' of type %d", mraa_get_platform_name(), mraa_get_platform_type()); syslog(LOG_NOTICE, "libmraa initialised for platform '%s' of type %d", mraa_get_platform_name(), mraa_get_platform_type());
return MRAA_SUCCESS; return MRAA_SUCCESS;
} }

View File

@@ -160,12 +160,16 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 451; b->pins[pos].gpio.pinmap = 451;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 22;
pos++; pos++;
strncpy(b->pins[pos].name, "SPP1RX", 8); strncpy(b->pins[pos].name, "SPP1RX", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 421; b->pins[pos].gpio.pinmap = 421;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 64;
pos++; pos++;
strncpy(b->pins[pos].name, "PMICRST", 8); strncpy(b->pins[pos].name, "PMICRST", 8);
@@ -179,18 +183,24 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 422; b->pins[pos].gpio.pinmap = 422;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 65;
pos++; pos++;
strncpy(b->pins[pos].name, "19.2mhz", 8); strncpy(b->pins[pos].name, "19.2mhz", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 356; b->pins[pos].gpio.pinmap = 356;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 41;
pos++; pos++;
strncpy(b->pins[pos].name, "SPP1FS0", 8); strncpy(b->pins[pos].name, "SPP1FS0", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 417; b->pins[pos].gpio.pinmap = 417;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 60;
pos++; pos++;
strncpy(b->pins[pos].name, "UART0TX", 8); strncpy(b->pins[pos].name, "UART0TX", 8);
@@ -200,12 +210,16 @@ mraa_joule_expansion_board()
b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.pinmap = 0;
b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.parent_id = 0;
b->pins[pos].uart.mux_total = 0; b->pins[pos].uart.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 39;
pos++; pos++;
strncpy(b->pins[pos].name, "SPP1FS2", 8); strncpy(b->pins[pos].name, "SPP1FS2", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 419; b->pins[pos].gpio.pinmap = 419;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 62;
pos++; pos++;
strncpy(b->pins[pos].name, "PWRGD", 8); strncpy(b->pins[pos].name, "PWRGD", 8);
@@ -220,6 +234,8 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 416; b->pins[pos].gpio.pinmap = 416;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 59;
pos++; pos++;
strncpy(b->pins[pos].name, "I2C0SDA", 8); strncpy(b->pins[pos].name, "I2C0SDA", 8);
@@ -234,6 +250,8 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 381; b->pins[pos].gpio.pinmap = 381;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 24;
pos++; pos++;
strncpy(b->pins[pos].name, "I2C0SCL", 8); strncpy(b->pins[pos].name, "I2C0SCL", 8);
@@ -248,6 +266,10 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 382; b->pins[pos].gpio.pinmap = 382;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 24;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 25;
pos++; pos++;
strncpy(b->pins[pos].name, "II0SDA", 8); strncpy(b->pins[pos].name, "II0SDA", 8);
@@ -262,6 +284,8 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 380; b->pins[pos].gpio.pinmap = 380;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 23;
pos++; pos++;
strncpy(b->pins[pos].name, "IIC0SCL", 8); strncpy(b->pins[pos].name, "IIC0SCL", 8);
@@ -276,6 +300,8 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 379; b->pins[pos].gpio.pinmap = 379;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 22;
pos++; pos++;
strncpy(b->pins[pos].name, "IIC1SDA", 8); strncpy(b->pins[pos].name, "IIC1SDA", 8);
@@ -291,6 +317,8 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 378; b->pins[pos].gpio.pinmap = 378;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 21;
pos++; pos++;
strncpy(b->pins[pos].name, "IIC1SCL", 8); strncpy(b->pins[pos].name, "IIC1SCL", 8);
@@ -308,12 +336,16 @@ mraa_joule_expansion_board()
b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.pinmap = 0;
b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.parent_id = 0;
b->pins[pos].uart.mux_total = 0; b->pins[pos].uart.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 43;
pos++; pos++;
strncpy(b->pins[pos].name, "ISH_IO6", 8); strncpy(b->pins[pos].name, "ISH_IO6", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 343; b->pins[pos].gpio.pinmap = 343;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 28;
pos++; pos++;
strncpy(b->pins[pos].name, "UART1RX", 8); strncpy(b->pins[pos].name, "UART1RX", 8);
@@ -323,12 +355,16 @@ mraa_joule_expansion_board()
b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.pinmap = 0;
b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.parent_id = 0;
b->pins[pos].uart.mux_total = 0; b->pins[pos].uart.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 42;
pos++; pos++;
strncpy(b->pins[pos].name, "ISH_IO5", 8); strncpy(b->pins[pos].name, "ISH_IO5", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 342; b->pins[pos].gpio.pinmap = 342;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 27;
pos++; pos++;
strncpy(b->pins[pos].name, "PWM0", 8); strncpy(b->pins[pos].name, "PWM0", 8);
@@ -338,12 +374,16 @@ mraa_joule_expansion_board()
b->pins[pos].pwm.pinmap = 0; b->pins[pos].pwm.pinmap = 0;
b->pins[pos].pwm.parent_id = 0; b->pins[pos].pwm.parent_id = 0;
b->pins[pos].pwm.mux_total = 0; b->pins[pos].pwm.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 34;
pos++; pos++;
strncpy(b->pins[pos].name, "ISH_IO4", 8); strncpy(b->pins[pos].name, "ISH_IO4", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 341; b->pins[pos].gpio.pinmap = 341;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 26;
pos++; pos++;
strncpy(b->pins[pos].name, "PWM1", 8); strncpy(b->pins[pos].name, "PWM1", 8);
@@ -353,6 +393,8 @@ mraa_joule_expansion_board()
b->pins[pos].pwm.pinmap = 1; b->pins[pos].pwm.pinmap = 1;
b->pins[pos].pwm.parent_id = 0; b->pins[pos].pwm.parent_id = 0;
b->pins[pos].pwm.mux_total = 0; b->pins[pos].pwm.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 35;
pos++; pos++;
strncpy(b->pins[pos].name, "ISH_IO3", 8); strncpy(b->pins[pos].name, "ISH_IO3", 8);
@@ -360,6 +402,8 @@ mraa_joule_expansion_board()
// High level will be V1P8 - VBE on MBT3904D // High level will be V1P8 - VBE on MBT3904D
b->pins[pos].gpio.pinmap = 340; b->pins[pos].gpio.pinmap = 340;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 25;
pos++; pos++;
// pin 30 // pin 30
@@ -370,6 +414,8 @@ mraa_joule_expansion_board()
b->pins[pos].pwm.pinmap = 2; b->pins[pos].pwm.pinmap = 2;
b->pins[pos].pwm.parent_id = 0; b->pins[pos].pwm.parent_id = 0;
b->pins[pos].pwm.mux_total = 0; b->pins[pos].pwm.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 36;
pos++; pos++;
strncpy(b->pins[pos].name, "ISH_IO2", 8); strncpy(b->pins[pos].name, "ISH_IO2", 8);
@@ -377,6 +423,8 @@ mraa_joule_expansion_board()
// High level will be V1P8 - VBE on MBT3904D // High level will be V1P8 - VBE on MBT3904D
b->pins[pos].gpio.pinmap = 339; b->pins[pos].gpio.pinmap = 339;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 24;
pos++; pos++;
strncpy(b->pins[pos].name, "PWM3", 8); strncpy(b->pins[pos].name, "PWM3", 8);
@@ -386,6 +434,8 @@ mraa_joule_expansion_board()
b->pins[pos].pwm.pinmap = 3; b->pins[pos].pwm.pinmap = 3;
b->pins[pos].pwm.parent_id = 0; b->pins[pos].pwm.parent_id = 0;
b->pins[pos].pwm.mux_total = 0; b->pins[pos].pwm.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 37;
pos++; pos++;
strncpy(b->pins[pos].name, "ISH_IO1", 8); strncpy(b->pins[pos].name, "ISH_IO1", 8);
@@ -393,6 +443,8 @@ mraa_joule_expansion_board()
// High level will be V1P8 - VBE on MBT3904D // High level will be V1P8 - VBE on MBT3904D
b->pins[pos].gpio.pinmap = 338; b->pins[pos].gpio.pinmap = 338;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 23;
pos++; pos++;
strncpy(b->pins[pos].name, "1.8V", 8); strncpy(b->pins[pos].name, "1.8V", 8);
@@ -404,6 +456,8 @@ mraa_joule_expansion_board()
// High level will be V1P8 - VBE on MBT3904D // High level will be V1P8 - VBE on MBT3904D
b->pins[pos].gpio.pinmap = 337; b->pins[pos].gpio.pinmap = 337;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 22;
pos++; pos++;
strncpy(b->pins[pos].name, "GND", 8); strncpy(b->pins[pos].name, "GND", 8);
@@ -473,6 +527,8 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 456; b->pins[pos].gpio.pinmap = 456;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 27;
pos++; pos++;
strncpy(b->pins[pos].name, "1.8V", 8); strncpy(b->pins[pos].name, "1.8V", 8);
@@ -483,6 +539,8 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 270; b->pins[pos].gpio.pinmap = 270;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 4;
b->pins[pos].gpio.gpio_line = 6;
pos++; pos++;
strncpy(b->pins[pos].name, "GND", 8); strncpy(b->pins[pos].name, "GND", 8);
@@ -493,6 +551,8 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 271; b->pins[pos].gpio.pinmap = 271;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 4;
b->pins[pos].gpio.gpio_line = 7;
pos++; pos++;
strncpy(b->pins[pos].name, "CAMERA", 8); strncpy(b->pins[pos].name, "CAMERA", 8);
@@ -503,6 +563,8 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 272; b->pins[pos].gpio.pinmap = 272;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 4;
b->pins[pos].gpio.gpio_line = 8;
pos++; pos++;
strncpy(b->pins[pos].name, "CAMERA", 8); strncpy(b->pins[pos].name, "CAMERA", 8);
@@ -513,6 +575,8 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 411; b->pins[pos].gpio.pinmap = 411;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 54;
pos++; pos++;
// pin 60 // pin 60
@@ -524,6 +588,8 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 412; b->pins[pos].gpio.pinmap = 412;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 55;
pos++; pos++;
strncpy(b->pins[pos].name, "SPI_DAT", 8); strncpy(b->pins[pos].name, "SPI_DAT", 8);
@@ -536,30 +602,40 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 413; b->pins[pos].gpio.pinmap = 413;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 56;
pos++; pos++;
strncpy(b->pins[pos].name, "SPICLKB", 8); strncpy(b->pins[pos].name, "SPICLKB", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 384; b->pins[pos].gpio.pinmap = 384;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 27;
pos++; pos++;
strncpy(b->pins[pos].name, "SPP0CLK", 8); strncpy(b->pins[pos].name, "SPP0CLK", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 410; b->pins[pos].gpio.pinmap = 410;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 53;
pos++; pos++;
strncpy(b->pins[pos].name, "SPICLKA", 8); strncpy(b->pins[pos].name, "SPICLKA", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 383; b->pins[pos].gpio.pinmap = 383;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 26;
pos++; pos++;
strncpy(b->pins[pos].name, "SPP0TX", 8); strncpy(b->pins[pos].name, "SPP0TX", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 414; b->pins[pos].gpio.pinmap = 414;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 57;
pos++; pos++;
strncpy(b->pins[pos].name, "UART0RX", 8); strncpy(b->pins[pos].name, "UART0RX", 8);
@@ -569,12 +645,16 @@ mraa_joule_expansion_board()
b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.pinmap = 0;
b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.parent_id = 0;
b->pins[pos].uart.mux_total = 0; b->pins[pos].uart.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 38;
pos++; pos++;
strncpy(b->pins[pos].name, "SPP0RX", 8); strncpy(b->pins[pos].name, "SPP0RX", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 415; b->pins[pos].gpio.pinmap = 415;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 58;
pos++; pos++;
// pin 70 // pin 70
@@ -585,6 +665,8 @@ mraa_joule_expansion_board()
b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.pinmap = 0;
b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.parent_id = 0;
b->pins[pos].uart.mux_total = 0; b->pins[pos].uart.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 40;
pos++; pos++;
strncpy(b->pins[pos].name, "I2C1SDA", 8); strncpy(b->pins[pos].name, "I2C1SDA", 8);
@@ -602,6 +684,8 @@ mraa_joule_expansion_board()
b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.pinmap = 0;
b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.parent_id = 0;
b->pins[pos].uart.mux_total = 0; b->pins[pos].uart.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 41;
pos++; pos++;
strncpy(b->pins[pos].name, "I2C1SCL", 8); strncpy(b->pins[pos].name, "I2C1SCL", 8);
@@ -619,6 +703,8 @@ mraa_joule_expansion_board()
b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.pinmap = 0;
b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.parent_id = 0;
b->pins[pos].uart.mux_total = 0; b->pins[pos].uart.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 51;
pos++; pos++;
strncpy(b->pins[pos].name, "I2C2SDA", 8); strncpy(b->pins[pos].name, "I2C2SDA", 8);
@@ -636,6 +722,8 @@ mraa_joule_expansion_board()
b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.pinmap = 0;
b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.parent_id = 0;
b->pins[pos].uart.mux_total = 0; b->pins[pos].uart.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 50;
pos++; pos++;
strncpy(b->pins[pos].name, "I2C2SCL", 8); strncpy(b->pins[pos].name, "I2C2SCL", 8);
@@ -653,12 +741,16 @@ mraa_joule_expansion_board()
b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.pinmap = 0;
b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.parent_id = 0;
b->pins[pos].uart.mux_total = 0; b->pins[pos].uart.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 52;
pos++; pos++;
strncpy(b->pins[pos].name, "RTC_CLK", 8); strncpy(b->pins[pos].name, "RTC_CLK", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 367; b->pins[pos].gpio.pinmap = 367;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 1;
b->pins[pos].gpio.gpio_line = 10;
pos++; pos++;
// pin 80 // pin 80
@@ -668,6 +760,8 @@ mraa_joule_expansion_board()
b->pins[pos].uart.pinmap = 0; b->pins[pos].uart.pinmap = 0;
b->pins[pos].uart.parent_id = 0; b->pins[pos].uart.parent_id = 0;
b->pins[pos].uart.mux_total = 0; b->pins[pos].uart.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 53;
pos++; pos++;
while (pos != 100) { while (pos != 100) {
@@ -679,24 +773,32 @@ mraa_joule_expansion_board()
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 337; b->pins[pos].gpio.pinmap = 337;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 22;
pos++; pos++;
strncpy(b->pins[pos].name, "LED101", 8); strncpy(b->pins[pos].name, "LED101", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 338; b->pins[pos].gpio.pinmap = 338;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 23;
pos++; pos++;
strncpy(b->pins[pos].name, "LED102", 8); strncpy(b->pins[pos].name, "LED102", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 339; b->pins[pos].gpio.pinmap = 339;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 24;
pos++; pos++;
strncpy(b->pins[pos].name, "LED103", 8); strncpy(b->pins[pos].name, "LED103", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 }; b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 340; b->pins[pos].gpio.pinmap = 340;
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 2;
b->pins[pos].gpio.gpio_line = 25;
pos++; pos++;
strncpy(b->pins[pos].name, "LEDBT", 8); strncpy(b->pins[pos].name, "LEDBT", 8);
@@ -711,6 +813,14 @@ mraa_joule_expansion_board()
b->pins[pos].gpio.mux_total = 0; b->pins[pos].gpio.mux_total = 0;
pos++; pos++;
strncpy(b->pins[pos].name, "GPBTN", 8);
b->pins[pos].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pos].gpio.pinmap = 446;
b->pins[pos].gpio.mux_total = 0;
b->pins[pos].gpio.gpio_chip = 0;
b->pins[pos].gpio.gpio_line = 17;
pos++;
return b; return b;
error: error: