Wyslij bajt na LPT ? Borland Builder

0

Witam!

Znalezione gdzies w sieci, ale nie dziala :( . Zalezy mi na wyslaniu bajtu na port LPT1. Wartosc wysylanego bajtu ma odpowiadac oczywiscie ustawieniu linii DATA na tym porcie. Konkretniej piszac chce ustawiac poszczególne bity od D0....D7 zeby sterowac urzadzeniami zewnetrzymi. Skompilowane programy juz mam i dzialaja :) lecz potrzebuje zrodla w Borland Builder gdyz w tym pisze swoj projekt. Uzywam Win XP z odblokowana obsluga portu LPT (jakis patch zarzucilem). Jesli ktos bedzie zainteresowany to wysle na maila tego patcha.

Ponizej kod w Borland Builder:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
HANDLE LPTport=CreateFile("LPT1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(LPTport==INVALID_HANDLE_VALUE) // if ERROR not continue
{
MessageBox(NULL,"Impossible open this LPT port","Error",MB_OK);
ExitProcess(1);
}
BYTE *ByteOut="1"; // send 1 to port ???????????
DWORD CountByte;

WriteFile(LPTport,ByteOut,sizeof(ByteOut),&CountByte,NULL);
CloseHandle(LPTport); //Close port
}
//---------------------------------------------------------------------------

Moze to jakis trywialny problem ???, w C wlasnie teraz zaczynam stawiac pierwsze kroki :) wczesniej bylo to Delphi.

0
BYTE *ByteOut="1"; // <--- wyśle kod znaku '1' a nie wartość 0x1
DWORD CountByte;

WriteFile(LPTport,
             ByteOut,
             sizeof(ByteOut), //<--- sizeof zwróci 4 a nie 1 (pointer)
             &CountByte,
             NULL);
0

OK Wobec tego porawiam kod na :

0x666 napisał(a)
BYTE *ByteOut="49"; // <--- wysylam wobec tego "jedynkę" (kod znaku 49) na port LPT i nic nadal sie nie dzieje :(

DWORD CountByte;

WriteFile(LPTport,
             ByteOut,
             8                    //<---  mysle ze tu mozna wpisac na stale wartosc 8, bedzie to wtedy odpowiadalo 8 znakom wysylanym na port - dobrze mysle ?
             &CountByte,
             NULL);

AAA juz sie pogubilem :) jak ktos bedzie mial jeszcze jakies sugestie dotyczace tego kodu bardzo prosze o posta.

Dziekuje.

Dodam ze program niestety skomplilowany (bez zrodla) w Delphi oraz podobny w Borland Builderze (tez skompilowany) radzi sobie z ustawianiem bitów DATA na LPT wysmienicie.

0

Tak będzie poprawnie:

BYTE ByteOut=0x1; // <--- wartość 1, a nie wartość ASCII znaku '1'
DWORD CountByte;

WriteFile(LPTport,
             &ByteOut,
             sizeof(BYTE), //<--- jeden bajt wysyłamy
             &CountByte,
             NULL);
0

Kod wyglada poprawnie... największą trudność sprawia to że nie można sie przekonać naocznie czy bit jest ustawiony czy nie :) prawda?

więc spieszę donieść że ten kod też nie ustawia bitu D1 portu LPT1 na wartosć "1" :(

BYTE ByteOut=0x1; // <--- wartość 1, a nie wartość ASCII znaku '1'
DWORD CountByte;

WriteFile(LPTport,
&ByteOut,
sizeof(BYTE), //<--- jeden bajt wysyłamy
&CountByte,
NULL);

Czy komuś udalo sie ustawic chocby jeden bicik na LPT przy uzyciu WriteFile?? PLEASE o pomoc :) a moze trzeba jeszcze zastosowac jakies magiczne sztuczki pod WIN XP ?

Dziekuje 0x666 za czynny udzial w temacie!

Dodam moze ze jest to czesc programu ktory pobiera ROZKAZ (char) = "01000000" (przykladowo) z serwera FTP - ta czesc juz dziala :) rozkaz ten ma byc wrzucany wlasnie na port LPT.

1 użytkowników online, w tym zalogowanych: 0, gości: 1