From 1fe6d367ceb9ea2def4981d3b2133612096a4fd2 Mon Sep 17 00:00:00 2001
From: hinni <hinni@81a1dc3b-b13d-400b-aceb-764788c761c2>
Date: Sat, 3 Jan 2004 18:36:44 +0000
Subject: [PATCH] * avr910.c, pgm.c, pgm.h, config_gram.y, lexer.l: Add new
 configuration parameter baudrate to support avr910-programmers with
 non-standard baudrates * avrdude.conf.in, doc/avrdude.texi: Added "baudrate"
 to documentation.

git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@398 81a1dc3b-b13d-400b-aceb-764788c761c2
---
 ChangeLog        |  7 +++++++
 avr910.c         |  9 ++++++++-
 avrdude.conf.in  | 25 +++++++++++++------------
 config_gram.y    |  7 +++++++
 doc/avrdude.texi | 23 ++++++++++++-----------
 lexer.l          |  1 +
 pgm.c            |  1 +
 pgm.h            |  1 +
 8 files changed, 50 insertions(+), 24 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 6b50daf9..2aedc8ee 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2004-01-03  Jan-Hinnerk Reichert  <hinni@despammed.com>
+
+	* avr910.c, pgm.c, pgm.h, config_gram.y, lexer.l: Add new configuration
+	parameter baudrate to support avr910-programmers with non-standard
+	baudrates
+	* avrdude.conf.in, doc/avrdude.texi: Added "baudrate" to documentation.
+
 2004-01-03  Jan-Hinnerk Reichert  <hinni@despammed.com>
 
 	avr910.c: Removed debugging stuff that is no longer needed.
diff --git a/avr910.c b/avr910.c
index a64b71ab..4ec05483 100644
--- a/avr910.c
+++ b/avr910.c
@@ -307,8 +307,15 @@ static int avr910_cmd(PROGRAMMER * pgm, unsigned char cmd[4],
 
 static void avr910_open(PROGRAMMER * pgm, char * port)
 {
+  /*
+   *  If baudrate was not specified use 19.200 Baud
+   */
+  if(pgm->baudrate == 0) {
+    pgm->baudrate = 19200;
+  }
+
   strcpy(pgm->port, port);
-  pgm->fd = serial_open(port, 19200);
+  pgm->fd = serial_open(port, pgm->baudrate);
 
   /*
    * drain any extraneous input
diff --git a/avrdude.conf.in b/avrdude.conf.in
index 89bf3d18..5c045553 100644
--- a/avrdude.conf.in
+++ b/avrdude.conf.in
@@ -13,18 +13,19 @@
 # Possible entry formats are:
 #
 #   programmer
-#       id     = <id1> [, <id2> [, <id3>] ...] ;  # <idN> are quoted strings
-#       desc   = <description> ;                  # quoted string
-#       type   = par | stk500 | avr910;           # programmer type
-#       vcc    = <num1> [, <num2> ... ] ;         # pin number(s)
-#       reset  = <num> ;                          # pin number
-#       sck    = <num> ;                          # pin number
-#       mosi   = <num> ;                          # pin number
-#       miso   = <num> ;                          # pin number
-#       errled = <num> ;                          # pin number
-#       rdyled = <num> ;                          # pin number
-#       pgmled = <num> ;                          # pin number
-#       vfyled = <num> ;                          # pin number
+#       id       = <id1> [, <id2> [, <id3>] ...] ;  # <idN> are quoted strings
+#       desc     = <description> ;                  # quoted string
+#       type     = par | stk500 | avr910;           # programmer type
+#       baudrate = <num> ;                          # baudrate for avr910-programmer
+#       vcc      = <num1> [, <num2> ... ] ;         # pin number(s)
+#       reset    = <num> ;                          # pin number
+#       sck      = <num> ;                          # pin number
+#       mosi     = <num> ;                          # pin number
+#       miso     = <num> ;                          # pin number
+#       errled   = <num> ;                          # pin number
+#       rdyled   = <num> ;                          # pin number
+#       pgmled   = <num> ;                          # pin number
+#       vfyled   = <num> ;                          # pin number
 #     ;
 #
 #   part
diff --git a/config_gram.y b/config_gram.y
index 8d56fc95..8624009a 100644
--- a/config_gram.y
+++ b/config_gram.y
@@ -65,6 +65,7 @@ static int parse_cmdbits(OPCODE * op);
 %token K_PAGE_SIZE
 %token K_PAGED
 
+%token K_BAUDRATE
 %token K_BS2
 %token K_BUFF
 %token K_CHIP_ERASE_DELAY
@@ -358,6 +359,12 @@ prog_parm :
     }
   } |
 
+  K_BAUDRATE TKN_EQUAL TKN_NUMBER {
+    {
+      current_prog->baudrate = $3->value.number;
+    }
+  } |
+
   K_RESET  TKN_EQUAL TKN_NUMBER { free_token($1); 
                                   assign_pin(PIN_AVR_RESET, $3); } |
   K_SCK    TKN_EQUAL TKN_NUMBER { free_token($1); 
diff --git a/doc/avrdude.texi b/doc/avrdude.texi
index efacd460..7eca2355 100644
--- a/doc/avrdude.texi
+++ b/doc/avrdude.texi
@@ -940,17 +940,18 @@ The format of the programmer definition is as follows:
 @example
 programmer
     id     = <id1> [, <id2> [, <id3>] ...] ;  # <idN> are quoted strings
-    desc   = <description> ;                  # quoted string
-    type   = par | stk500 ;                   # programmer type
-    vcc    = <num1> [, <num2> ... ] ;         # pin number(s)
-    reset  = <num> ;                          # pin number
-    sck    = <num> ;                          # pin number
-    mosi   = <num> ;                          # pin number
-    miso   = <num> ;                          # pin number
-    errled = <num> ;                          # pin number
-    rdyled = <num> ;                          # pin number
-    pgmled = <num> ;                          # pin number
-    vfyled = <num> ;                          # pin number
+    desc     = <description> ;                  # quoted string
+    type     = par | stk500 ;                   # programmer type
+    baudrate = <num> ;                          # baudrate for avr910
+    vcc      = <num1> [, <num2> ... ] ;         # pin number(s)
+    reset    = <num> ;                          # pin number
+    sck      = <num> ;                          # pin number
+    mosi     = <num> ;                          # pin number
+    miso     = <num> ;                          # pin number
+    errled   = <num> ;                          # pin number
+    rdyled   = <num> ;                          # pin number
+    pgmled   = <num> ;                          # pin number
+    vfyled   = <num> ;                          # pin number
   ;
 @end example
 
diff --git a/lexer.l b/lexer.l
index 65f9f8f5..7baeedca 100644
--- a/lexer.l
+++ b/lexer.l
@@ -117,6 +117,7 @@ SIGN     [+-]
 
 bank_size        { yylval=NULL; return K_PAGE_SIZE; }
 banked           { yylval=NULL; return K_PAGED; }
+baudrate         { yylval=NULL; return K_BAUDRATE; }
 bs2              { yylval=NULL; return K_BS2; }
 buff             { yylval=NULL; return K_BUFF; }
 chip_erase_delay { yylval=NULL; return K_CHIP_ERASE_DELAY; }
diff --git a/pgm.c b/pgm.c
index 8ee45779..1fc28d18 100644
--- a/pgm.c
+++ b/pgm.c
@@ -57,6 +57,7 @@ PROGRAMMER * pgm_new(void)
   pgm->type[0] = 0;
   pgm->config_file[0] = 0;
   pgm->lineno = 0;
+  pgm->baudrate = 0;
 
   for (i=0; i<N_PINS; i++)
     pgm->pinno[i] = 0;
diff --git a/pgm.h b/pgm.h
index b0297965..d6219f5f 100644
--- a/pgm.h
+++ b/pgm.h
@@ -42,6 +42,7 @@ typedef struct programmer_t {
   char port[PGM_PORTLEN];
   unsigned int pinno[N_PINS];
   int ppidata;
+  int baudrate;
   int fd;
   int  page_size;  /* page size if the programmer supports paged write/load */
   int  (*rdy_led)        (struct programmer_t * pgm, int value);