ports/83174: [Maintainer Update] devel/picprog "Werner Almesberger" patch, dev fix
Erik Greenwald
erik at smluc.org
Sat Jul 9 02:10:15 UTC 2005
>Number: 83174
>Category: ports
>Synopsis: [Maintainer Update] devel/picprog "Werner Almesberger" patch, dev fix
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: maintainer-update
>Submitter-Id: current-users
>Arrival-Date: Sat Jul 09 02:10:14 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator: Erik Greenwald
>Release: FreeBSD 5.4-RELEASE-p2 i386
>Organization:
>Environment:
System: FreeBSD fenris 5.4-RELEASE-p2 FreeBSD 5.4-RELEASE-p2 #2: Fri Jun 10 23:00:35 EDT 2005 root at fenris:/usr/obj/usr/src/sys/FENRIS i386
>Description:
"Werner Almesberger" patch, which adds a "--slow" argument. Long
serial cables and/or JDM programmers seem to need this, my gear
(olimex, 6' serial, 16f88's) refuses to work right without it...
this is the blurb from the picprog webpage
Long cables, different values on capacitors and resistors,
and differences on sertial ports can cause very long signal
rise and fall times. The JDM device is sensitive to that,
and mostly is designed to be connected directly to computer
or with very short cable. The sensitivity also depends on
the PIC chip type. It may help to stretch the delays in
Picprog to allow for longer signal settling times. For
example this patch by Werner Almesberger,
picprog-1.7-werner-almesberger.diff, gives good example on
how to accomodate longer delays. Larger delays are needed
also for the uJDM programmer device.
additionally, I changed the default device from ttyS0 to cuaa0
(seems to be the first serial on my 5.4 box, tho my 6 box says
cuad0)
>How-To-Repeat:
>Fix:
--- devel-picprog.patch begins here ---
Index: devel/picprog/Makefile
===================================================================
RCS file: /home/ncvs/ports/devel/picprog/Makefile,v
retrieving revision 1.12
diff -u -r1.12 Makefile
--- devel/picprog/Makefile 25 May 2005 09:21:12 -0000 1.12
+++ devel/picprog/Makefile 9 Jul 2005 02:05:49 -0000
@@ -7,6 +7,7 @@
PORTNAME= picprog
PORTVERSION= 1.7
+PORTREVISION= 1
CATEGORIES= devel
MASTER_SITES= http://hyvatti.iki.fi/~jaakko/pic/
Index: devel/picprog/files/patch-main.cc
===================================================================
RCS file: /home/ncvs/ports/devel/picprog/files/patch-main.cc,v
retrieving revision 1.2
diff -u -r1.2 patch-main.cc
--- devel/picprog/files/patch-main.cc 19 Nov 2002 01:59:27 -0000 1.2
+++ devel/picprog/files/patch-main.cc 9 Jul 2005 02:05:49 -0000
@@ -1,10 +1,49 @@
---- main.cc.orig Tue Nov 19 12:50:51 2002
-+++ main.cc Tue Nov 19 12:51:11 2002
-@@ -32,6 +32,7 @@
+--- main.cc.orig Thu Apr 29 00:41:25 2004
++++ main.cc Fri Jul 8 22:02:29 2005
+@@ -31,6 +31,7 @@
#include <sysexits.h>
#include <unistd.h>
+#define HAVE_DECL_GETOPT 1
#include <getopt.h>
+ #include <string.h>
- #include "hexfile.h"
+@@ -41,7 +42,7 @@
+
+ program prog;
+
+-char short_opts [] = "d:p:i:o:c:qh?";
++char short_opts [] = "d:p:i:o:c:qsh?";
+
+ int
+ main (int argc, char **argv)
+@@ -52,7 +53,7 @@
+ int opt_usage = 0;
+
+ int opt_format = hexfile::unknown;
+- char *opt_port = (char *)"/dev/ttyS0";
++ char *opt_port = (char *)"/dev/cuaa0";
+ char *opt_input = NULL;
+ char *opt_output = NULL;
+ char *opt_cc = NULL;
+@@ -81,6 +82,7 @@
+ {"erase", no_argument, &opt_erase, 1},
+ {"burn", no_argument, &opt_burn, 1},
+ {"force-calibration", no_argument, &opt_calibration, 1},
++ {"slow", no_argument, NULL, 's'},
+ {0, 0, 0, 0}
+ };
+
+@@ -113,6 +115,12 @@
+ case 'q':
+ opt_quiet = 1;
+ break;
++ case 's':
++ // Add extra delays for capacity added by very long cable
++ picport::t_edge = 10; // 10 us
++ picport::t_on = 200000; // 200 ms
++ picport::t_off = 700000; // 700 ms - I'm not kidding !
++ break;
+ default: // -? -h --help unknown flag
+ opt_usage = 1;
+ }
Index: devel/picprog/files/patch-picport.cc
===================================================================
RCS file: /home/ncvs/ports/devel/picprog/files/patch-picport.cc,v
retrieving revision 1.4
diff -u -r1.4 patch-picport.cc
--- devel/picprog/files/patch-picport.cc 25 May 2005 09:21:12 -0000 1.4
+++ devel/picprog/files/patch-picport.cc 9 Jul 2005 02:05:49 -0000
@@ -1,5 +1,5 @@
---- picport.cc.orig Thu Apr 29 06:08:10 2004
-+++ picport.cc Wed May 25 11:09:06 2005
+--- picport.cc.orig Thu Apr 29 00:08:10 2004
++++ picport.cc Fri Jul 8 21:46:07 2005
@@ -40,7 +40,7 @@
#include <unistd.h>
#include <termios.h>
@@ -9,3 +9,81 @@
#include <sched.h>
#include "picport.h"
+@@ -54,6 +54,11 @@
+ unsigned int picport::tsc_1000ns = 0;
+ int picport::use_nanosleep = -1;
+
++// Extra delays for long cables, in us
++int picport::t_on = 0;
++int picport::t_off = 0;
++int picport::t_edge = 0;
++
+ void
+ picport::set_clock_data (int rts, int dtr)
+ {
+@@ -102,7 +107,7 @@
+ // Before first call to set_clock_data, read the modem status.
+ ioctl (fd, TIOCMGET, &modembits);
+ set_clock_data (0, 0);
+- usleep (50);
++ usleep (50+t_edge);
+ // Check the CTS. If it is up, even when we just lowered DTR,
+ // we probably are not talking to a JDM type programmer.
+ int i;
+@@ -200,13 +205,13 @@
+ cerr << "Unable to start break on tty " << tty << ":" << strerror (e) << endl;
+ exit (EX_IOERR);
+ }
+- usleep (10);
++ usleep (10+t_off);
+ }
+
+ picport::~picport ()
+ {
+ ioctl (fd, TIOCCBRK, 0);
+- usleep (1);
++ usleep (1+t_off);
+ tcsetattr (fd, TCSANOW, &saved);
+ close (fd);
+ delete [] portname;
+@@ -216,15 +221,15 @@
+ {
+ set_clock_data (0, 0);
+ ioctl (fd, TIOCCBRK, 0);
+- usleep (50);
++ usleep (50+t_off);
+ ioctl (fd, TIOCSBRK, 0);
+- usleep (10);
++ usleep (10+t_on);
+ addr = 0;
+ }
+
+ void picport::delay (long ns)
+ {
+- if (1 == use_nanosleep) {
++ if (1 == use_nanosleep && !t_edge) {
+ timespec ts = {ns / 1000000000, ns % 1000000000}, ts2;
+ while (nanosleep (&ts, &ts2) && EINTR == errno)
+ ts = ts2;
+@@ -232,7 +237,7 @@
+ }
+
+ #ifdef RDTSC_WORKS
+- if (tsc_1000ns > 1) {
++ if (tsc_1000ns > 1 && !t_edge) {
+ unsigned long a1, d1, a2, d2;
+ asm volatile("rdtsc":"=a" (a1), "=d" (d1));
+ d2 = d1;
+@@ -259,10 +264,10 @@
+ volatile int i;
+ gettimeofday (&tv1, 0);
+ tv2.tv_sec = tv1.tv_sec;
+- tv2.tv_usec = 0xffffffff & (tv1.tv_usec + 1 + (ns + 999)/1000);
++ tv2.tv_usec = 0xffffffff & (tv1.tv_usec + 1 + (ns + 999)/1000+t_edge);
+ if (tv2.tv_usec < tv1.tv_usec)
+ tv2.tv_sec++;
+- for (i = 0; i < 10000; i++) {
++ for (i = 0; i < 10000 || t_edge; i++) {
+ gettimeofday (&tv1, 0);
+ if (tv1.tv_sec > tv2.tv_sec
+ || tv1.tv_sec == tv2.tv_sec && tv1.tv_usec >= tv2.tv_usec)
Index: devel/picprog/files/patch-picport.h
===================================================================
RCS file: devel/picprog/files/patch-picport.h
diff -N devel/picprog/files/patch-picport.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ devel/picprog/files/patch-picport.h 9 Jul 2005 02:05:49 -0000
@@ -0,0 +1,13 @@
+--- picport.h.orig Thu Apr 29 00:09:38 2004
++++ picport.h Fri Jul 8 21:46:07 2005
+@@ -59,6 +59,10 @@
+
+ public:
+
++ static int t_on;
++ static int t_off;
++ static int t_edge;
++
+ static void delay (long ns);
+
+ enum commands {
Index: devel/picprog/files/patch-program.h
===================================================================
RCS file: /home/ncvs/ports/devel/picprog/files/patch-program.h,v
retrieving revision 1.2
diff -u -r1.2 patch-program.h
--- devel/picprog/files/patch-program.h 19 Nov 2002 01:59:27 -0000 1.2
+++ devel/picprog/files/patch-program.h 9 Jul 2005 02:05:49 -0000
@@ -1,6 +1,6 @@
---- program.h.orig Tue Nov 19 12:53:12 2002
-+++ program.h Tue Nov 19 12:53:20 2002
-@@ -31,6 +31,7 @@
+--- program.h.orig Thu Jan 1 20:35:09 2004
++++ program.h Fri Jul 8 21:44:23 2005
+@@ -30,6 +30,7 @@
#ifndef H_PROGRAM
#define H_PROGRAM
--- devel-picprog.patch ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list