_parallel.py :  » Game-2D-3D » PsychoPy » PsychoPy-0.96.02 » psychopy » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Game 2D 3D » PsychoPy 
PsychoPy » PsychoPy 0.96.02 » psychopy » _parallel.py
# winioport.py   Provides hardware port access for Python under Windows
# 95/98/NT/2000 
# 
# Author: Dincer Aydin dinceraydin@gmx.net www.dinceraydin.com
# 
# This module depends on:
#   ctypes Copyright (c) 2000, 2001, 2002, 2003 Thomas Heller
#   DLPortIO Win32 DLL hardware I/O functions & Kernel mode driver for WinNT
# 
# In this package you will find almost any sort of port IO function one may
# imagine. Values of port registers are srored in temporary variables. This is
# for the bit set/reset functions to work right Some register bits are inverted.
# on the port pins, but you need not worry about them. The functions in this
# module take this into account. For eaxample when you call
# winioport.pportDataStrobe(1) the data strobe pin of the printer port will go
# HIGH.
# 
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files , to deal in the Software
# without restriction, including without limitation the rights to use, copy,
# modify, merge, publish,and distribute copies of the Software, and to permit
# persons to whom the Software is furnished to do so, subject to the following
# conditions:
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
# SOFTWARE. 
#
# LPT1 = 0x0378 or 0x03BC
# LPT2 = 0x0278 or 0x0378
# LPT3 = 0x0278
#
# Data Register (base + 0) ........ outputs
#
#   7 6 5 4 3 2 1 0
#   . . . . . . . *  D0 ........... (pin 2), 1=High, 0=Low (true)
#   . . . . . . * .  D1 ........... (pin 3), 1=High, 0=Low (true)
#   . . . . . * . .  D2 ........... (pin 4), 1=High, 0=Low (true)
#   . . . . * . . .  D3 ........... (pin 5), 1=High, 0=Low (true)
#   . . . * . . . .  D4 ........... (pin 6), 1=High, 0=Low (true)
#   . . * . . . . .  D5 ........... (pin 7), 1=High, 0=Low (true)
#   . * . . . . . .  D6 ........... (pin 8), 1=High, 0=Low (true)
#   * . . . . . . .  D7 ........... (pin 9), 1=High, 0=Low (true)
#
# Status Register (base + 1) ...... inputs
#
#   7 6 5 4 3 2 1 0
#   . . . . . * * *  Undefined
#   . . . . * . . .  Error ........ (pin 15), high=1, low=0 (true)
#   . . . * . . . .  Selected ..... (pin 13), high=1, low=0 (true)
#   . . * . . . . .  No paper ..... (pin 12), high=1, low=0 (true)
#   . * . . . . . .  Ack .......... (pin 10), high=1, low=0 (true)
#   * . . . . . . .  Busy ......... (pin 11), high=0, low=1 (inverted)
#
# ctrl Register (base + 2) ..... outputs
#
#   7 6 5 4 3 2 1 0
#   . . . . . . . *  Strobe ....... (pin 1),  1=low, 0=high (inverted)
#   . . . . . . * .  Auto Feed .... (pin 14), 1=low, 0=high (inverted)
#   . . . . . * . .  Initialize ... (pin 16), 1=high, 0=low (true)
#   . . . . * . . .  Select ....... (pin 17), 1=low, 0=high (inverted)
#   * * * * . . . .  Unused


import ctypes                                       # import ctypes module 
port = ctypes.windll.dlportio                       # load dlportio.dll functions

baseAddress = 0x378                                 # printerport base address, edit to suit your port
statusRegAdrs = baseAddress + 1                     # status register address
ctrlRegAdrs = baseAddress + 2                       # control register address

dataReg = 0                                         # temporary variable to hold data register content
ctrlReg = 0                                         # temporary variable to hold control register content

# Output functions
def out(address,data):
    "the usual out(portAddress,data) function"
    global dataReg
    global ctrlReg
    if address == baseAddress:
        dataReg = data
    elif address == ctrlRegAdrs:
        ctrlReg = data
    port.DlPortWritePortUchar(address,data)
    
def pportOut(data):
    "data output function, writes data to data register"
    global dataReg
    port.DlPortWritePortUchar(baseAddress,data)     
    dataReg = data
    
# Functions  pportD0-D7 toggle data registers bits to
# the state desired, either 0 or 1
def pportD0(state):
    "toggle data register D0 bit"
    global dataReg
    if state == 0:
        dataReg = dataReg & ~0x01
    else:
        dataReg = dataReg | 0x01
    port.DlPortWritePortUchar(baseAddress,dataReg)

def pportD1(state):
    "toggle data register D1 bit"
    global dataReg
    if state == 0:
        dataReg = dataReg & ~0x02
    else:
        dataReg = dataReg | 0x02
    port.DlPortWritePortUchar(baseAddress,dataReg)

def pportD2(state):
    "toggle data register D2 bit"
    global dataReg
    if state == 0:
        dataReg = dataReg & ~0x04
    else:
        dataReg = dataReg | 0x04
    port.DlPortWritePortUchar(baseAddress,dataReg)

def pportD3(state):
    "toggle data register D3 bit"
    global dataReg
    if state == 0:
        dataReg = dataReg & ~0x08
    else:
        dataReg = dataReg | 0x08
    port.DlPortWritePortUchar(baseAddress,dataReg)

def pportD4(state):
    "toggle data register D4 bit"
    global dataReg
    if state == 0:
        dataReg = dataReg & ~0x10
    else:
        dataReg = dataReg | 0x10
    port.DlPortWritePortUchar(baseAddress,dataReg)

def pportD5(state):
    "toggle data register D5 bit"
    global dataReg
    if state == 0:
        dataReg = dataReg & ~0x20
    else:
        dataReg = dataReg | 0x20
    port.DlPortWritePortUchar(baseAddress,dataReg)

def pportD6(state):
    "toggle data register D6 bit"
    global dataReg
    if state == 0:
        dataReg = dataReg & ~0x40
    else:
        dataReg = dataReg | 0x40
    port.DlPortWritePortUchar(baseAddress,dataReg)

def pportD7(state):
    "toggle data register D7 bit"
    global dataReg
    if state == 0:
        dataReg = dataReg & ~0x80
    else:
        dataReg = dataReg | 0x80
    port.DlPortWritePortUchar(baseAddress,dataReg)
    
# This function toggle any data register bit to the state given
# bit is bit number 0-7 and state either 1 or 0
def alterDataBit(bit,state): 
    "toggle any data register bit (0-7) to the state (1 or 0) given " 
    global dataReg
    if state == 0:
        dataReg = dataReg & ~(2 ** bit)
    else:
        dataReg = dataReg | (2 ** bit)
    port.DlPortWritePortUchar(baseAddress,dataReg)

# inverts data port bit given
def invertDataBit(bit):
    "inverts any data register bit "
    global dataReg
    dataReg = dataReg ^ (2 ** bit)
    port.DlPortWritePortUchar(baseAddress,dataReg)
    
# control register output functions
def pportDataStrobe(state):
    "toggle control register data strobe bit"
    global ctrlReg
    if state == 0:
        ctrlReg = ctrlReg |  0x01
    else:
        ctrlReg = ctrlReg & ~0x01
    port.DlPortWritePortUchar(ctrlRegAdrs,ctrlReg)

def pportAutoFeed(state):
    "toggle control register auto feed bit"
    global ctrlReg
    if state == 0:
        ctrlReg = ctrlReg |  0x02
    else:
        ctrlReg = ctrlReg & ~0x02
    port.DlPortWritePortUchar(ctrlRegAdrs,ctrlReg)

def pportInitOut(state):
    "toggle control register initialize bit"
    global ctrlReg
    if state == 0:
        ctrlReg = ctrlReg & ~0x04
    else:
        ctrlReg = ctrlReg |  0x04
    port.DlPortWritePortUchar(ctrlRegAdrs,ctrlReg)
    
def pportSelect(state):
    "toggle control register select bit"
    global ctrlReg
    if state == 0:
        ctrlReg = ctrlReg |  0x08
    else:
        ctrlReg = ctrlReg & ~0x08
    port.DlPortWritePortUchar(ctrlRegAdrs,ctrlReg)

# aliases of the control register output functions
# these names may be easier to use in some cases
ctrlRegBit0 = pportDataStrobe
ctrlRegBit1 = pportAutoFeed
ctrlRegBit2 = pportInitOut
ctrlRegBit3 = pportSelect

# Input functions
def inp(address):
    "the usual in(portAddress) function"
    return port.DlPortReadPortUchar(address)
    
def pportInp():
    "input from baseAddress"
    return port.DlPortReadPortUchar(baseAddress)
    
def pportInError():
    "input from Error pin"
    if port.DlPortReadPortUchar(statusRegAdrs) & 0x08:
        return 1
    else:
        return 0

def pportInSelected():
    "input from select pin"
    if port.DlPortReadPortUchar(statusRegAdrs) & 0x10:
        return 1
    else:
        return 0

def pportInPaperOut():
    "input from paper out pin"
    if port.DlPortReadPortUchar(statusRegAdrs) & 0x20:
        return 1
    else:
        return 0

def pportInAcknowledge():
    "input from Acknowledge pin"
    if port.DlPortReadPortUchar(statusRegAdrs) & 0x40:
        return 1
    else:
        return 0

def pportInBusy():
    "input from busy pin"
    if port.DlPortReadPortUchar(statusRegAdrs) & 0x80:
        return 0
    else:
        return 1




www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.