Here's a .comp file that uses comedi to access the parallel port. I created
it as a proof of concept. I think this version will work, but I have
multiple versions floating around between several computers.  If HAL has
changed since 2008, you'll probably need to make some changes.

I never tested it thoroughly - all I did was plug a resistor into the pport
and check that the input followed the output.

As Andy points out, there isn't much point in using comedi if you only need
the parallel port.

Mark

component comedi_test_lpt "Test of HAL-Comedi fusion with parport";
pin out bit lpt_err """Input from parallel port, pin 15, lpt_error.""";
//calling it lpt_error to avoid confusion
pin in bit lpt_data0 """Output to parallel port, pin 2, data0.""";
function _ nofp;
license "GPL";
option singleton yes;
option extra_setup yes;
option extra_cleanup yes;
;;

/*******************************************************************
***             NOTE:
***             You must add a symlink named comedi in emc2/include
***             pointing to wherever the comedi *module headers* are
***             so that the include statement below will work.
***
***             comedi's headers for modules are one directory deeper
***             than the normal headers, which include things that
***             can't be used in the kernel.
***
********************************************************************/
#include <comedi/comedilib.h>
comedi_t* ComediDev = NULL;
const char* ComediDevPath;

FUNCTION(_) {
    uint lerr = 0;
    comedi_dio_write(ComediDev,0,0,lpt_data0);
    comedi_dio_read(ComediDev,1,0,&lerr);
    lpt_err = lerr;
    }

EXTRA_SETUP() {
        ComediDevPath = "/dev/comedi0";
        ComediDev = comedi_open(ComediDevPath);
        if (ComediDev == NULL)
        {
                rtapi_print_msg(RTAPI_MSG_ERR, "COMEDI: error - could not
open device specified.");
                rtapi_app_exit();
                return (-1);
        }
        //TODO: should check subdevice type here...
        //TODO: should check that channel number is in range here...
        return(0);
}

EXTRA_CLEANUP() {
        if (ComediDev == NULL) { } //avoid an Oops by not doing
comedi_close(NULL) - %$^$@$%#!
        else if (comedi_close(ComediDev) < 0)
                rtapi_print_msg(RTAPI_MSG_ERR, "COMEDI: error - can't close
comedi device!");
}
------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
Emc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-users

Reply via email to