From: Bryn D. <cu...@pr...> - 2006-02-28 14:37:31
|
Hi, all. I hope this is the right place for this, and I hope somebody else hasn't already done this. It works pretty well, but the parallel port node is effectively disabled in the process, because of a lack of a unified API for parallel devices in Darwin. First, you'll need the kde & qt libraries. The quickest way to do this is probably to just install KDE out of fink. Install gpsim and gputils to taste, and then... Perform the checkout in a directory with no spaces in it, or ar will barf everywhere. Do the make -f Makefile.cvs to generate the configure script. Apply the following patches: Index: src/icndocument.cpp =================================================================== --- src/icndocument.cpp (revision 837) +++ src/icndocument.cpp (working copy) @@ -77,7 +77,7 @@ m_nodeGroupList.clear(); const GuardedNodeGroupList::iterator nglEnd = ngToDelete.end(); for ( GuardedNodeGroupList::iterator it = ngToDelete.begin(); it != nglEnd; ++it ) - delete *it; + delete (NodeGroup *)(*it); delete m_cells; m_cells = 0l; Index: src/electronics/port.cpp =================================================================== --- src/electronics/port.cpp (revision 837) +++ src/electronics/port.cpp (working copy) @@ -14,7 +14,9 @@ #include <errno.h> #include <fcntl.h> -#include <linux/ppdev.h> +#ifndef DARWIN + #include <linux/ppdev.h> +#endif #include <sys/ioctl.h> #include <unistd.h> @@ -31,7 +33,11 @@ QStringList Port::ports( unsigned probeResult ) { +#ifndef DARWIN return SerialPort::ports(probeResult) + ParallelPort::ports (probeResult); +#else + return SerialPort::ports(probeResult); +#endif } //END class Port @@ -238,12 +244,30 @@ //END class SerialPort - //BEGIN class ParallelPort +// I wasn't able to find any documentation on programming the parallel port +// in Darwin, so I've just functionally neutered this section. Apparently +// parallel output is handled on a case by case basis (???) by the +// manufacturer of whatever USB dongle is, unless they build it as a +// Comms class device, in which case it is treated as a serial device. +// ( Info from Garth Cummings, Apple Developer Technical Support ) + const int IRQ_MODE_BIT = 1 << 20; // Controls if pin 10 (Ack) causes interrupts const int INPUT_MODE_BIT = 1 << 21; // Controls if the data pins are input or output const int ALWAYS_INPUT_PINS = ParallelPort::STATUS_PINS; +// No code using these values will be reached on Darwin, this is just to +// keep the preprocessor happy. +#ifdef DARWIN + #define PPRDATA 0xFACADE + #define PPRCONTROL 0xC001D00D + #define PPWDATA 0xC0EDBABE + #define PPWCONTROL 0xFEEDFACE + #define PPRSTATUS 0xBAADF00D + #define PPCLAIM 0xDEADBEEF + #define PPRELEASE 0xCAFE +#endif + const int IOCTL_REG_READ[3] = { PPRDATA, PPRSTATUS, @@ -349,6 +373,9 @@ //BEGIN Register-oriented operations uchar ParallelPort::readFromRegister( Register reg ) { +#ifdef DARWIN + return 0; +#endif if ( m_file == -1 ) return 0; @@ -364,6 +391,9 @@ void ParallelPort::writeToRegister( Register reg, uchar value ) { +#ifdef DARWIN + return; +#endif if ( m_file == -1 ) return; @@ -431,6 +461,9 @@ Port::ProbeResult ParallelPort::probe( const QString & port ) { +#ifdef DARWIN + return Port::DoesntExist; +#endif int file = open( port.ascii(), O_RDWR ); if ( file == -1 ) return Port::DoesntExist; @@ -450,6 +483,9 @@ QStringList ParallelPort::ports( unsigned probeResult ) { QStringList list; +#ifdef DARWIN + return list; +#endif for ( unsigned i = 0; i < 8; ++i ) { @@ -471,6 +507,10 @@ bool ParallelPort::openPort( const QString & port ) { +#ifdef DARWIN + kdWarning() << k_funcinfo << "Parallel ports disabled on Darwin" << endl; + return false; +#endif if ( m_file != -1 ) { kdWarning() << k_funcinfo << "Port already open" << endl; @@ -499,6 +539,9 @@ void ParallelPort::closePort() { +#ifdef DARWIN + return; +#endif if ( m_file == -1 ) return; @@ -511,4 +554,3 @@ m_file = -1; } //END class ParallelPort - Index: src/electronics/pin.cpp =================================================================== --- src/electronics/pin.cpp (revision 837) +++ src/electronics/pin.cpp (working copy) @@ -29,11 +29,11 @@ { WireList::iterator end = m_inputWireList.end(); for ( WireList::iterator it = m_inputWireList.begin(); it != end; + +it ) - delete *it; + delete (Wire *)(*it); end = m_outputWireList.end(); for ( WireList::iterator it = m_outputWireList.begin(); it != end; + +it ) - delete *it; + delete (Wire *)(*it); } ( Patches end. ) Because qt out of fink is compiled with gcc-3.3, as opposed to Apple's shipping 4.0, you'll need to build ktechlab with 3.3 as well: CC=gcc-3.3; CXX=g++-3.3; CPPFLAGS="-I/sw/include -L/sw/lib - DDARWIN"; WANT_AUTOCONF_2_5=1; ./configure --with-qt-includes=/sw/ include/qt --with-qt-libraries=/sw/lib && make After this, you can do a make install and enjoy! Thanks for the great software, guys! Anything that minimises my time working with a real soldering iron is always greatly appreciated! Otsukaresama deshita, Bryn. -- cu...@pr... | Assistant Language Teacher http://progsoc.org/~curious/ | Kasukabe Board of Education http://livejournal.com/users/curious_jp | Saitama Prefecture, Japan |