/*@}*/
} maa_mux_t;
-/**
- * A Strucutre representing a singular I/O pin. i.e GPIO/PWM
- */
+typedef struct {
+ maa_boolean_t complex_pin:1;
+ maa_boolean_t output_en:1;
+ maa_boolean_t output_en_high:1;
+ maa_boolean_t pullup_en:1;
+ maa_boolean_t pullup_en_hiz:1;
+} maa_pin_cap_complex_t;
+
typedef struct {
/*@{*/
unsigned int pinmap; /**< sysfs pin */
unsigned int parent_id; /** parent chip id */
unsigned int mux_total; /** Numfer of muxes needed for operation of pin */
maa_mux_t mux[6]; /** Array holding information about mux */
+ unsigned int output_enable; /** Output Enable GPIO, for level shifting */
+ unsigned int pullup_enable; /** Pull-Up enable GPIO, inputs */
+ maa_pin_cap_complex_t complex_cap;
/*@}*/
} maa_pin_t;
char bu[MAX_SIZE];
int length;
+ int out_switch = 0;
switch(dir) {
case MAA_GPIO_OUT:
length = snprintf(bu, sizeof(bu), "out");
+ out_switch = 1;
break;
case MAA_GPIO_IN:
length = snprintf(bu, sizeof(bu), "in");
return MAA_ERROR_FEATURE_NOT_IMPLEMENTED;
}
+ if (dev->phy_pin >= 0) {
+ maa_result_t swap_res = maa_swap_complex_gpio(dev->phy_pin, out_switch);
+ if (swap_res != MAA_SUCCESS)
+ return swap_res;
+ }
+
if (write(direction, bu, length*sizeof(char)) == -1) {
fprintf(stderr, "Failed to write to direction\n");
close(direction);
//static maa_pininfo_t* pindata;
static maa_board_t* plat = NULL;
+static maa_platform_t platform_type = 99;
const char *
maa_get_version()
Py_InitializeEx(0);
PyEval_InitThreads();
#endif
- maa_platform_t platform_type = MAA_UNKNOWN_PLATFORM;
+ platform_type = MAA_UNKNOWN_PLATFORM;
// detect a galileo gen2 board
char *line = NULL;
maa_mmap_pin_t *ret = &(plat->pins[pin].mmap);
return ret;
}
+
+maa_result_t
+maa_swap_complex_gpio(int pin, int out)
+{
+ if (plat == NULL)
+ return MAA_ERROR_INVALID_PLATFORM;
+
+ printf("SWAP CALLED on %i with bool as %i", pin,out);
+
+ switch (platform_type) {
+ case MAA_INTEL_GALILEO_GEN2:
+ printf("Intel Galileo Gen 2\n");
+ if (plat->pins[pin].gpio.complex_cap.complex_pin != 1)
+ return MAA_SUCCESS;
+ if (plat->pins[pin].gpio.complex_cap.output_en == 1) {
+ maa_gpio_context output_e;
+ printf("Doing stuff here with %i", plat->pins[pin].gpio.output_enable);
+ output_e = maa_gpio_init_raw(plat->pins[pin].gpio.output_enable);
+ if (maa_gpio_dir(output_e, MAA_GPIO_OUT) != MAA_SUCCESS)
+ return MAA_ERROR_INVALID_RESOURCE;
+ int output_val;
+ if (plat->pins[pin].gpio.complex_cap.output_en_high == 1)
+ output_val = out;
+ else
+ if (out == 1)
+ output_val = 0;
+ else
+ output_val = 1;
+ if (maa_gpio_write(output_e, output_val) != MAA_SUCCESS)
+ return MAA_ERROR_INVALID_RESOURCE;
+ }
+ //if (plat->pins[pin].gpio.complex_cap.pullup_en == 1) {
+ // maa_gpio_context pullup_e;
+ // pullup_e = maa_gpio_init_raw(plat->pins[pin].gpio.pullup_enable);
+ // if (maa_gpio_mode(pullup_e, MAA_GPIO_HIZ) != MAA_SUCCESS)
+ // return MAA_ERROR_INVALID_RESOURCE;
+ //}
+ break;
+ default: return MAA_SUCCESS;
+ }
+}