mirror of
https://github.com/avrdudes/avrdude.git
synced 2026-09-28 03:56:26 +03:00
add a new conntype for linuxgpio
This also adds a default linuxgpio port ("gpiochip0"), and adds a
programmer to the avrdude.conf file using linuxgpio from the Raspberry
Pi GPIO port.
This commit is contained in:
@@ -87,18 +87,23 @@ endif()
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
set(DEFAULT_PAR_PORT "/dev/parport0")
|
||||
set(DEFAULT_SER_PORT "/dev/ttyS0")
|
||||
set(DEFAULT_LINUXGPIO_PORT "gpiochip0")
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
|
||||
set(DEFAULT_PAR_PORT "/dev/ppi0")
|
||||
set(DEFAULT_SER_PORT "/dev/cuad0")
|
||||
set(DEFAULT_LINUXGPIO_PORT "unknown")
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "Solaris")
|
||||
set(DEFAULT_PAR_PORT "/dev/printers/0")
|
||||
set(DEFAULT_SER_PORT "/dev/term/a")
|
||||
set(DEFAULT_LINUXGPIO_PORT "unknown")
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
set(DEFAULT_PAR_PORT "lpt1")
|
||||
set(DEFAULT_SER_PORT "com1")
|
||||
set(DEFAULT_LINUXGPIO_PORT "unknown")
|
||||
else()
|
||||
set(DEFAULT_PAR_PORT "unknown")
|
||||
set(DEFAULT_SER_PORT "unknown")
|
||||
set(DEFAULT_LINUXGPIO_PORT "unknown")
|
||||
endif()
|
||||
|
||||
# =====================================
|
||||
@@ -120,6 +125,7 @@ add_custom_command(
|
||||
-D HAVE_LINUXGPIO=$<BOOL:${HAVE_LINUXGPIO}>
|
||||
-D DEFAULT_PAR_PORT=${DEFAULT_PAR_PORT}
|
||||
-D DEFAULT_SER_PORT=${DEFAULT_SER_PORT}
|
||||
-D DEFAULT_LINUXGPIO_PORT=${DEFAULT_LINUXGPIO_PORT}
|
||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/configure.cmake"
|
||||
DEPENDS avrdude.conf.in
|
||||
VERBATIM
|
||||
|
||||
@@ -411,6 +411,7 @@ default_parallel = "@DEFAULT_PAR_PORT@";
|
||||
default_serial = "@DEFAULT_SER_PORT@";
|
||||
default_spi = "@DEFAULT_SPI_PORT@";
|
||||
# default_bitclock = 2.5;
|
||||
default_linuxgpio = "@DEFAULT_LINUXGPIO_PORT@";
|
||||
|
||||
@HAVE_PARPORT_BEGIN@
|
||||
|
||||
@@ -691,7 +692,7 @@ programmer
|
||||
|
||||
@HAVE_LINUXGPIO_BEGIN@
|
||||
|
||||
# This programmer bitbangs GPIO lines using the Linux sysfs GPIO interface
|
||||
# This programmer bitbangs GPIO lines using the Linux libgpiod or sysfs GPIO interface
|
||||
#
|
||||
# To enable it set the configuration below to match the GPIO lines connected
|
||||
# to the relevant ISP header pins and uncomment the entry definition. In case
|
||||
@@ -719,6 +720,21 @@ programmer
|
||||
# sdo = ?;
|
||||
# sdi = ?;
|
||||
# ;
|
||||
|
||||
# #------------------------------------------------------------
|
||||
# # Program from a Raspberry Pi GPIO port using linuxgpio
|
||||
# #------------------------------------------------------------
|
||||
#
|
||||
programmer
|
||||
id = "raspberry_pi_gpio";
|
||||
desc = "Bitbang Raspberry Pi GPIO via linuxgpio (sysfs or libgpiod)";
|
||||
type = "linuxgpio";
|
||||
connection_type = linuxgpio;
|
||||
reset = 12;
|
||||
sck = 24;
|
||||
sdo = 23;
|
||||
sdi = 18;
|
||||
;
|
||||
@HAVE_LINUXGPIO_END@
|
||||
|
||||
@HAVE_LINUXSPI_BEGIN@
|
||||
|
||||
@@ -40,6 +40,7 @@ const char *default_parallel;
|
||||
const char *default_serial;
|
||||
const char *default_spi;
|
||||
double default_bitclock;
|
||||
char const *default_linuxgpio;
|
||||
|
||||
LISTID string_list;
|
||||
LISTID number_list;
|
||||
|
||||
@@ -81,6 +81,7 @@ static int pin_name;
|
||||
%token K_DEFAULT_PROGRAMMER
|
||||
%token K_DEFAULT_SERIAL
|
||||
%token K_DEFAULT_SPI
|
||||
%token K_DEFAULT_LINUXGPIO
|
||||
%token K_HVUPDI_SUPPORT
|
||||
%token K_DEVICECODE
|
||||
%token K_EEPROM
|
||||
@@ -88,6 +89,7 @@ static int pin_name;
|
||||
%token K_FLASH
|
||||
%token K_ID
|
||||
%token K_IO
|
||||
%token K_LINUXGPIO
|
||||
%token K_LOADPAGE
|
||||
%token K_SDI
|
||||
%token K_SDO
|
||||
@@ -228,6 +230,11 @@ def :
|
||||
K_DEFAULT_BITCLOCK TKN_EQUAL number_real TKN_SEMI {
|
||||
default_bitclock = $3->value.number_real;
|
||||
free_token($3);
|
||||
} |
|
||||
|
||||
K_DEFAULT_LINUXGPIO TKN_EQUAL TKN_STRING TKN_SEMI {
|
||||
default_linuxgpio = cache_string($3->value.string);
|
||||
free_token($3);
|
||||
}
|
||||
;
|
||||
|
||||
@@ -450,6 +457,7 @@ prog_parm_conntype:
|
||||
;
|
||||
|
||||
prog_parm_conntype_id:
|
||||
K_LINUXGPIO { current_prog->conntype = CONNTYPE_LINUXGPIO; } |
|
||||
K_PARALLEL { current_prog->conntype = CONNTYPE_PARALLEL; } |
|
||||
K_SERIAL { current_prog->conntype = CONNTYPE_SERIAL; } |
|
||||
K_USB { current_prog->conntype = CONNTYPE_USB; } |
|
||||
|
||||
@@ -364,30 +364,37 @@ case $target in
|
||||
i[[3456]]86-*-linux*|x86_64-*-linux*)
|
||||
DEFAULT_PAR_PORT="/dev/parport0"
|
||||
DEFAULT_SER_PORT="/dev/ttyS0"
|
||||
DEFAULT_LINUXGPIO_PORT="gpiochip0"
|
||||
;;
|
||||
*-*-linux*)
|
||||
DEFAULT_PAR_PORT="unknown"
|
||||
DEFAULT_SER_PORT="/dev/ttyS0"
|
||||
DEFAULT_LINUXGPIO_PORT="gpiochip0"
|
||||
;;
|
||||
i[[3456]]86-*-*freebsd*|amd64-*-*freebsd*)
|
||||
DEFAULT_PAR_PORT="/dev/ppi0"
|
||||
DEFAULT_SER_PORT="/dev/cuad0"
|
||||
DEFAULT_LINUXGPIO_PORT="unknown"
|
||||
;;
|
||||
*-*-*freebsd*)
|
||||
DEFAULT_PAR_PORT="unknown"
|
||||
DEFAULT_SER_PORT="/dev/cuad0"
|
||||
DEFAULT_LINUXGPIO_PORT="unknown"
|
||||
;;
|
||||
*-*-solaris*)
|
||||
DEFAULT_PAR_PORT="/dev/printers/0"
|
||||
DEFAULT_SER_PORT="/dev/term/a"
|
||||
DEFAULT_LINUXGPIO_PORT="unknown"
|
||||
;;
|
||||
*-*-msdos* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
|
||||
DEFAULT_PAR_PORT="lpt1"
|
||||
DEFAULT_SER_PORT="com1"
|
||||
DEFAULT_LINUXGPIO_PORT="unknown"
|
||||
;;
|
||||
*)
|
||||
DEFAULT_PAR_PORT="unknown"
|
||||
DEFAULT_SER_PORT="unknown"
|
||||
DEFAULT_LINUXGPIO_PORT="unknown"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -414,6 +421,17 @@ else
|
||||
fi
|
||||
|
||||
|
||||
if test "$enabled_linuxgpio" = "yes"; then
|
||||
AC_MSG_CHECKING([for default linuxgpio port])
|
||||
if test "$DEFAULT_LINUXGPIO_PORT" = "unknown"; then
|
||||
AC_MSG_NOTICE([linuxgpio port access disabled for this system])
|
||||
enabled_linuxgpio=no
|
||||
else
|
||||
AC_MSG_RESULT([$DEFAULT_LINUXGPIO_PORT])
|
||||
fi
|
||||
AC_SUBST(DEFAULT_LINUXGPIO_PORT, $DEFAULT_LINUXGPIO_PORT)
|
||||
fi
|
||||
|
||||
if test "$enabled_linuxgpio" = "yes"; then
|
||||
AC_DEFINE(HAVE_LINUXGPIO, 1, [Linux sysfs GPIO support enabled])
|
||||
confsubst="$confsubst -e /^@HAVE_LINUXGPIO_/d"
|
||||
|
||||
@@ -835,6 +835,7 @@ void dev_output_pgm_part(int dev_opt_c, const char *programmer, int dev_opt_p, c
|
||||
dev_info("default_parallel = %s;\n", p = cfg_escape(default_parallel)); free(p);
|
||||
dev_info("default_serial = %s;\n", p = cfg_escape(default_serial)); free(p);
|
||||
dev_info("default_spi = %s;\n", p = cfg_escape(default_spi)); free(p);
|
||||
dev_info("default_linuxgpio = %s;\n", p = cfg_escape(default_linuxgpio)); free(p);
|
||||
|
||||
dev_info("\n#\n# PROGRAMMER DEFINITIONS\n#\n\n");
|
||||
}
|
||||
@@ -1203,6 +1204,7 @@ static void dev_pgm_raw(const PROGRAMMER *pgm) {
|
||||
|
||||
static const char *connstr(conntype_t conntype) {
|
||||
switch(conntype) {
|
||||
case CONNTYPE_LINUXGPIO: return "linuxgpio";
|
||||
case CONNTYPE_PARALLEL: return "parallel";
|
||||
case CONNTYPE_SERIAL: return "serial";
|
||||
case CONNTYPE_USB: return "usb";
|
||||
|
||||
@@ -1934,6 +1934,11 @@ Assign the default parallel port device. Can be overridden using the
|
||||
Assign the default serial port device. Can be overridden using the
|
||||
@option{-P} option.
|
||||
|
||||
@item default_linuxgpio = "@var{default-linuxgpio-device}";
|
||||
Assign the default gpiochip for linuxgpio's libgpiod mode,
|
||||
e.g. "gpiochip0". Ignored for linuxgpio's sysfs mode. Can be overridden
|
||||
using the @option{-P} option.
|
||||
|
||||
@item default_programmer = "@var{default-programmer-id}";
|
||||
Assign the default programmer id. Can be overridden using the @option{-c}
|
||||
option.
|
||||
|
||||
@@ -162,6 +162,7 @@ default_parallel { yylval=NULL; return K_DEFAULT_PARALLEL; }
|
||||
default_programmer { yylval=NULL; return K_DEFAULT_PROGRAMMER; }
|
||||
default_serial { yylval=NULL; return K_DEFAULT_SERIAL; }
|
||||
default_spi { yylval=NULL; return K_DEFAULT_SPI; }
|
||||
default_linuxgpio { yylval=NULL; return K_DEFAULT_LINUXGPIO; }
|
||||
devicecode { yylval=NULL; ccap(); return K_DEVICECODE; }
|
||||
eeprom { yylval=NULL; return K_EEPROM; }
|
||||
eeprom_instr { yylval=NULL; ccap(); return K_EEPROM_INSTR; }
|
||||
@@ -180,6 +181,7 @@ id { yylval=NULL; ccap(); return K_ID; }
|
||||
io { yylval=new_token(K_IO); return K_IO; }
|
||||
is_at90s1200 { yylval=NULL; ccap(); return K_IS_AT90S1200; }
|
||||
is_avr32 { yylval=NULL; ccap(); return K_IS_AVR32; }
|
||||
linuxgpio { yylval=NULL; ccap(); return K_LINUXGPIO; }
|
||||
load_ext_addr { yylval=new_token(K_LOAD_EXT_ADDR); ccap(); return K_LOAD_EXT_ADDR; }
|
||||
loadpage_hi { yylval=new_token(K_LOADPAGE_HI); ccap(); return K_LOADPAGE_HI; }
|
||||
loadpage_lo { yylval=new_token(K_LOADPAGE_LO); ccap(); return K_LOADPAGE_LO; }
|
||||
|
||||
@@ -722,7 +722,8 @@ typedef enum {
|
||||
CONNTYPE_PARALLEL,
|
||||
CONNTYPE_SERIAL,
|
||||
CONNTYPE_USB,
|
||||
CONNTYPE_SPI
|
||||
CONNTYPE_SPI,
|
||||
CONNTYPE_LINUXGPIO
|
||||
} conntype_t;
|
||||
|
||||
/*
|
||||
@@ -1112,6 +1113,7 @@ extern const char *default_parallel;
|
||||
extern const char *default_serial;
|
||||
extern const char *default_spi;
|
||||
extern double default_bitclock;
|
||||
extern char const * default_linuxgpio;
|
||||
|
||||
/* This name is fixed, it's only here for symmetry with
|
||||
* default_parallel and default_serial. */
|
||||
|
||||
@@ -540,6 +540,7 @@ int main(int argc, char * argv [])
|
||||
default_serial = "";
|
||||
default_spi = "";
|
||||
default_bitclock = 0.0;
|
||||
default_linuxgpio = "";
|
||||
|
||||
init_config();
|
||||
|
||||
@@ -1087,6 +1088,11 @@ int main(int argc, char * argv [])
|
||||
port = cfg_strdup("main()", *default_spi? default_spi: "unknown");
|
||||
#endif
|
||||
break;
|
||||
|
||||
case CONNTYPE_LINUXGPIO:
|
||||
port = cfg_strdup("main()", default_linuxgpio);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user