Sterownik do LPT

KangurX

Użytkownik
Dołączył
Lipiec 4, 2008
Posty
281
Naucz sie asma i napisz sam, ale tez widzialem gotowa biblioteke do delphi bodajze albo pascala.
 

ProQix

Użytkownik
Dołączył
Czerwiec 11, 2008
Posty
86
Jak bym nie miał problemu z tym to nie pisał bym o pomoc...
To jedyne co znalazłem o pisaniu sterowników jak mi dasz coś innego na ten temat o chętnie przestudiuję.
 

ProQix

Użytkownik
Dołączył
Czerwiec 11, 2008
Posty
86
naucz się czytać instrukcja in nie działa, sterownik działający na Win7 a ten zlportio nie jest kompatybilny czy ty testowałeś to ?!
Analfabeta jesteś ?
 

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
chcesz napisać sterownik albo chcesz coś napisać do LPT i porzebujesz sterownik?
jesli druge, wtedy do win2k/xp jest dobry gotowy inpout32, w kazdym razie ma odkryty tekst programu, możesz przetłumaczyć go do asemblerza.

tam jest przykład użyczia inpout32 z programu na fasmie
 

ProQix

Użytkownik
Dołączył
Czerwiec 11, 2008
Posty
86
to nie działa niestety niby są dodatkowe instrukcje ale 7 blokuje in (źródło DLL)
---
System korzysta z sterownika parport.sys (w szczegółach sterownika LPT) ma nawet kod źródłowy (prawdopodobnie) pobrałem go z www.hackchina.com
proqixproj.comze.com/downloads/ms_driver_parport.zip <- ale nie bardzo ogarniam tego jak by ktoś pomógł mi to ogarnąć może coś bym złożył ;]
 
Ostatnia edycja:

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
inpout32 nie działa pod windowsem 7, tylko 9x/2k/xp

trzeba szukać albo gotowy sterownik do w7, albo jak go pisać.

poczytaj coś tu i tu - nie używam jeszcze w7, dlatego trudno mi tego sprawdzać.
 

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
no to jest zbyt stary projekt...
zobacz jeszcze tu - pisze że pracowało pod Vistą....
nic więcej nie mogę odnaleźć....
więc, albo trzeba używać XP, albo uczyć się jak pisać sterowniky do win7, albo czekać póky ktoś inny napisze, albo używać coś inne: USB konwertory, mikrokontrolery....
+++++++++++++
tu jest piękny programer do Atmelów, który używa modyfikowanę inpout32. twierdzi że działa w win7 - sprawdź. jesli tak - otrzymasz sterownika ;)
 
Ostatnia edycja:

ProQix

Użytkownik
Dołączył
Czerwiec 11, 2008
Posty
86
to jest adres bazowy portu do tego dodaje się numer pinu do którego chcesz wysłać lub odebrać a drugi parametr to dane które wysyłamy tzn wartość DWord albo byte
 

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
nie
adres bazowy - to jest rejestr danych, każdy bit odpowiada piewnemu pinu D?. adres bazowy+1 - rejestr statusu, odczytywa kilka pinów (5) a adres bazowy+2 - rejestr sterowania, włącza również kilka pinów. część pinów statusu oraz sterowania mają inwersję - trzeba sprawdzać manual

(http://en.wikipedia.org/wiki/Parallel_port)

mode również ma sens: SPP/EPP są normalne, ECP może działać dziwnie (to naprawiają w BIOS setup)
 

ProQix

Użytkownik
Dołączył
Czerwiec 11, 2008
Posty
86
fakt mój błąd :(
dobra już ma żeby zapalić 6 pin trzeba wysłać
HEX DEC
0x40 = 64
gfpOut32(0x378,0x40);

i w C++ działa wszystko
taki mały tester

Kod:
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"

typedef void    (__stdcall *lpOut32)(short, short);
typedef short    (__stdcall *lpInp32)(short);
typedef BOOL    (__stdcall *lpIsInpOutDriverOpen)(void);

lpOut32 gfpOut32;
lpInp32 gfpInp32;
lpIsInpOutDriverOpen gfpIsInpOutDriverOpen;

int main(int argc, char* argv[])
{
        HINSTANCE hInpOutDll ;
        hInpOutDll = LoadLibrary ( "InpOut32.DLL" ) ;    
        if ( hInpOutDll != NULL )
        {
            gfpOut32 = (lpOut32)GetProcAddress(hInpOutDll, "Out32");
            gfpInp32 = (lpInp32)GetProcAddress(hInpOutDll, "Inp32");
            gfpIsInpOutDriverOpen = (lpIsInpOutDriverOpen)GetProcAddress(hInpOutDll, "IsInpOutDriverOpen");

            if (gfpIsInpOutDriverOpen()){
                     gfpOut32(0x61,0x03);
                    Sleep(300);
                    gfpOut32(0x61,0xFC);
            }


            FreeLibrary ( hInpOutDll ) ;
            return 0;
        }
        else
        {
            printf("Unable to load InpOut32 DLL!\n");
            return -1;
        }
}

będzie Beep a jak mam w Delphi 2007

Kod:
var
  DLL  : THandle;
  PReg : function :Boolean;
  Proc : procedure(Port,Pin:DWORD);
begin
  DLL := LoadLibrary('inpout32.dll');
  if (DLL <> 0) then begin
   @PReg := GetProcAddress(DLL, 'IsInpOutDriverOpen');
   if not (@PReg = nil) then
   if PReg = True then ShowMessage('on') else ShowMessage('off');
   @Proc := GetProcAddress(DLL, 'Out32');
   if @Proc = nil then raise Exception.Create('Nie można załadować procedury');
   Proc($61,$03);
  end;
  FreeLibrary(DLL);

to nic się nie dzieje nie wiem czemu...
 
Ostatnia edycja:

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
no zainstalowałem win7 do wirtualnej maszyny, wszystko działa: i ISP, i lpt test (o którem chodziło powyzej).
używałem ms virtual pc - ona może podłączyć fizyczny lpt do wirtualnego systemu.
isp programer zmogł odczytać signaturę z MK, przez lpt test właczałem i wyłączałem bity.

co do tajmeru - nie sprawzałem bo nie jestem piewen jaki musi być efekt pod systemem typu xp albo win7
 

ProQix

Użytkownik
Dołączył
Czerwiec 11, 2008
Posty
86
Sterownik działa poprawnie w C++ jest sygnał Beeper'a ale w Pascal'u nie chce działać procedura Out32 nie wiem czemu bo sterownik ładuje się poprawnie.
 
Do góry Bottom