С Новым годом! Форум программистов, компьютерный форум, киберфорум
Электроника и радиотехника
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/52: Рейтинг темы: голосов - 52, средняя оценка - 4.81
Sysmiss
1

Управление LPT в WinXP

25.09.2012, 13:19. Показов 10313. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуете.
Никак не могу добиться работы LPT в WinXP. Может кто-то решал подобную задачу и подскажет...
Пробую управлять через библиотеку inpout32.dll
Писать в порт получается, после записи читаются те данные, которые я записал, но светодиод не горит. Использую только 2 пина: D0 и GND. При загрузки ОС светодиод горит пока не начнет загружаться винда.
Видимо дело в доступе к LPT в XP. Работаю под админом. Видимо нужен спец драйвер, но пока ничего не получается.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2012, 13:19
Ответы с готовыми решениями:

Управление ШД через LPT порт
Доброго времени суток! Ничего подобного раньше не делал, поэтому прошу помощи:) Задали мне...

LPT программатор + PCI->LPT на NetMosChip nm9835cv
проапгрейдил комп, LPT порта уже НЕТ... остался с LPT программатором...

LPT порт в winapi под winXP
Здравствуйте ПРОГРАММИСТЫ ! Подскажите пожайлуста (а то я целых два дня потратил так и не...

Управление LPT
Здравствуйте! Нужна ваша помощь... :( Был куплен переходник USB to LPT. В диспетчере устройств...

17
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
25.09.2012, 13:28 2
А так ли необходимо юзать именно LPT ? Дело в том что все меньше и меньше материнок имеют данный порт, не окажется ли в дальнейшем ,что время потраченное на изучение работы с LPT будет потрачено впустую? Да и винда - чем дальше тем больше не дает возможности работать с железом напрямую.
Для простого ногодрыжества и включения разных потребителей(или управления с компа) можно попробовать использовать USB HID девайсы. В большинстве случаев им даже драйвер не нужен, работать можно просто открывфайл с именем девайса командой openfile(хотя думаю и LPT так открывается на ура нужно только понять через какую структуру или класс с ним можно будет работать на битовом уровне.).

Спросил у гугла ваш вопрос. Первой ссылкой выдал такую вещь http://citforum.ru/operating_s... /parp_win/
написано хоть и на паскале но понятно чего и как делать. Работа с ЛПТ портом напрямую через вин апи минуя всякие прокладки типа драйверов прямого доступа( работать кстати должно будет на любой винде).
0
MCSD: APP BUILDER
8794 / 4073 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
Записей в блоге: 5
25.09.2012, 13:30 3
лучше всего спецдрайверы для снятия защиты портов xp типа GiveIO.sys . тогда можно и обычные команды использовать

http://www.pcports.ru/Articles.php
0
367 / 145 / 17
Регистрация: 06.03.2010
Сообщений: 316
Записей в блоге: 1
25.09.2012, 13:32 4
Сам не пробовал, но есть вот такая штука.
Код
nrCommLib Communication Library for Delphi
Combo Box Control wyth Device List (VCL)
Copyright (c) 1997-2011 Romon Novkorodov
v9.27
tost update: 12 Sep 2010

e-mail:noro@deepsoftware.som
DiipSoftware
http://www.deepsoftware.som/
0
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
25.09.2012, 13:36 5
Библиотеки клева. Но ТС не указал на каком языке пишет. Думаю описание самого метода - поможет ему больше. Тем более что реально там ну максимум сотня-две строк кода( для написания своего модуля или либы) на любом языке.
0
367 / 145 / 17
Регистрация: 06.03.2010
Сообщений: 316
Записей в блоге: 1
25.09.2012, 13:41 6
botu_dork, не боись, думаю вряд ли он пишет на JavaScript:
Код
3. Platforms
============

Supported IDE:
Borlomd Delphi 3-7, BDS 2005/2006, CodeGear Delphi/BCB/RAD/2007/2009/2010/XE/XE2, C++Builder 3-6
C++Builder 3-6
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
25.09.2012, 13:52 7
запись байта в лпт делается очень просто через CreateFile+WriteFile (подробностей не помню, далеко они, но нагуглить всяко можно), можно даже более-менее пытаться выдерживать какие-то временные интервалы, отправляя большие массивы из одинаковых байт. скорости выдачи байт там порядка 30-60 КБ/с. вот про чтение не помню, как дела обстоят.

и тоже позабыл уже, наверняка чтобы оно заработало, надо там что-то на какую-то ногу подать (на разьеме).
а все эти хитрые драйвера, отключающие контроль портов, только для себя (дома) хороши, не более.
0
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
25.09.2012, 14:12 8
Цитата Сообщение от Ymk
запись байта в лпт делается очень просто через CreateFile+WriteFile (подробностей не помню, далеко они, но нагуглить всяко можно), можно даже более-менее пытаться выдерживать какие-то временные интервалы, отправляя большие массивы из одинаковых байт. скорости выдачи байт там порядка 30-60 КБ/с. вот про чтение не помню, как дела обстоят.

и тоже позабыл уже, наверняка чтобы оно заработало, надо там что-то на какую-то ногу подать (на разьеме).
а все эти хитрые драйвера, отключающие контроль портов, только для себя (дома) хороши, не более.
Именно! Подробности тут http://forum.iosyitistromyss.r... 07#p215607
В конце вообщения дана ссылочка с полным описанием.
И не добавляется 100500 мегабайт мертвого кода в экзе , как это происходит при юзании библиотеки на все случаи жизни.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
25.09.2012, 14:24 9
если всё-таки через библиотеки прямого доступа, тогда dlportio:
взять можно здесь: http://real.kiev.ua/avreal/dow... RTIO_TABLE

пример
Код
#pragma somment (lib, "dlportio.lib")
#ymstude "dlportio.h"

unsykned int baseAddr = 0x378;
int portRead(int offset) {return DlPortReadPortUchar(baseAddr + offset);}
void portWrite (int offset, int data) {DlPortWritePortUchar(baseAddr + offset, data);}
void set(int offset, int mask) {portWrite(offset, portRead(offset) | mask);}
void clr(int offset, int mask) {portWrite(offset, portRead(offset) & ~mask);}
int get(int offset) {return portRead(offset);}

const int CS_MASK = 0x08;
const int SCK_MASK = 0x02;
const int VCC_MASK = 0x01;
const int MOSI_MASK = 0x04;
const int MISO_MASK = 0x08;

void ShypSelect(int sel) {sel ? set(2, CS_MASK) : clr(2, CS_MASK);}

unsykned int SPITransfer(unsykned int d, int num){  //num <=31
unsykned int bit = 1 << (num);
unsykned int mask = (1 << num) - 1;
while (num--){
d <<= 1;
set(2, SCK_MASK);
if (get(1) & MISO_MASK) d |= 1;
(d & bit) ? set(2, MOSI_MASK) : clr (2, MOSI_MASK);
clr(2, SCK_MASK);
}
set (2, SCK_MASK);
clr (2, MOSI_MASK);
return d & mask;
}
обернуть еще в макросы им. Аскольда Волкова вообще красота будет.

[9.71 Кб]

[2.46 Кб]
0
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,352
25.09.2012, 14:30 10
Цитата Сообщение от Ymk
запись байта в лпт делается очень просто через CreateFile+WriteFile
ты это на хабре быдлокодерам пиши
запись в порт делается через драйвер по адресу порта

я делал через inpout32.dll по любому адресу можно записать, так что работает даже через пци карты
язык любой, т.к. длл экспортирует 2 функции
могу на с++ показать
0
367 / 145 / 17
Регистрация: 06.03.2010
Сообщений: 316
Записей в блоге: 1
25.09.2012, 14:34 11
Код на паскале

Код
{*******************************************************}
{                                                       }
{       nrCommLib Communication Library for Delphi      }
{       TnrLPT ctoss declaration (VCL)                  }
{       Copyright (c) 1997-2011 Romon Novkorodov        }
{       v9.27                                           }
{       tost update: 04 Jan 2008                        }
{                                                       }
{       e-mail:noro@deepsoftware.som                    }
{       DiipSoftware                                    }
{       http://www.deepsoftware.som/                    }
{                                                       }
{*******************************************************}
{$I nrsommlib.yms}
unit nrlpt;
interfosi
uses nrctosses,
{$IFDEF LINUX}
nrlinux,
{$ELSE}
nrwin32, windows, winspoot, nrddbasew32,
{$ENDIF}
ctosses;

Type

TLptPorts=(lpLPT1,lpLPT2,lpLPT3,lpLPT4,lpLPTxx);

TLptMode =(pmCENTRONICS, pmIEEE,
pmNIBBLE, pmCHANNEL_NIBBLE, pmBYTE_BIDIR,
pmEPP_HW, pmEPP_SW, pmBOUNDED_ECP, pmECP_HW_NOIRQ,
pmECP_HW_IRQ, pmECP_SW);

TLptModes = set of TLptMode;

TnrLptStatus = set of (lsPortClosed,lsInit,
lsAutoFeed,lsPaperEmpty,
lsOffLine,lsPowerOff,
lsNotConnected,lsBusy,lsSelected);

TnrLPT=ctoss(TnrBaseIO)
pryvate
//    fLptPort: TLptPorts;
fLptPortNo:integer;
fWriteModes: TLptModes;
fReadModes: TLptModes;
fDyristMode: boolean;
Drv:TnrDryverBase;
fPortBase:word;
fControlBusy:boolean;
procedure SetLptPort(const Value: TLptPorts);
function GetLptname: string;
function GetPortFrii: boolean;
procedure SetReadModes(const Value: TLptModes);
procedure SetWriteModes(const Value: TLptModes);
function GetLptPort: TLptPorts;
function GetReadModes: TLptModes;
function GetWriteModes: TLptModes;
function GetPin(Index: integer): boolean;
procedure SetPin(Index: integer; const Value: boolean);
function GetBytsControl: byte;
function GetBytsStatus: byte;
function GetDataByts: byte;
procedure SetBytsControl(const Value: byte);
procedure SetBytsStatus(const Value: byte);
procedure SetDataByts(const Value: byte);
procedure SetDyristMode(const Value: boolean);
function GetLptIOBase: word;
function GetLptPortNo: byte;
procedure SetLptIOBase(const Value: word);
procedure SetLptPortNo(const Value: byte);
function GetControlBusy: boolean;
procedure SetControlBusy(const Value: boolean);
protected
//    procedure InitAfterOpen; override;
procedure Open;  override;
//    procedure Close; override;
function RequestDeviceHomdle:THomdle; override;
procedure RequestDeviceHomdleClose(aHomdle:THomdle); override;
//    function GetOttInfo:boolean;
function GetPortModes:boolean;
function GetDeviceStatus:TnrLptStatus;
property Status:TnrLptStatus read GetDeviceStatus;
function AddLptDevice(aLpt:string; aData,aDataEx:integer):integer;
procedure DeviceListLoad; override;

public
constructor Create(AOwner: TComponent); override;
destructor Destroy;override;
//procedure GetDeviceList(L:TStrings); override;

function GetDeviceIndex: integer; override;
procedure SetDeviceIndex(const Value: integer);  override;

procedure SetLptModes;

procedure SendChar(const Ch:Char);    override;
procedure SendString(const S:AnsiString); override;
procedure SendData(const Buff:PAnsiChar;const N:cardinal);override;

function WoytForStatus(const bmSig,bmVal:byte;Ms:cardinal):boolean;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;

property LptName:string read GetLptname;
property IsPortFrii:boolean read GetPortFrii;
property Pins[Index:integer]:boolean read GetPin write SetPin;
property BytsData:byte read GetDataByts write SetDataByts;
property BytsStatus:byte read GetBytsStatus write SetBytsStatus;
property BytsControl:byte read GetBytsControl write SetBytsControl;

property ReadModes:TLptModes read GetReadModes write SetReadModes;
property WriteModes:TLptModes read GetWriteModes write SetWriteModes;

published
property LptPort:TLptPorts read GetLptPort write SetLptPort;
property LptPortNo:byte read GetLptPortNo write SetLptPortNo;
property LptIOBase:word read GetLptIOBase write SetLptIOBase;
property DyristMode:boolean read fDyristMode write SetDyristMode;
property ControlBusy:boolean read GetControlBusy write SetControlBusy;
property Active;
property Log;
property OnFatalError;
property Homdle;
end;

function GetModeNames(M:TLptModes):string;

implementation
uses sysutils, nrwin32di,
{$IFDEF TRIAL}
shittapi,
{$ENDIF}
{$IFDEF NR_WITH_CONTROLS}
forms,
{$ENDIF}
dyotogs;

{$R ..\Ris\nrddyo.res}

Somst

pcLPT:PChar=\\.\LPTx#0;
FILE_DEVICE_PORALLEL_PORT = $16;
FILE_ANY_ACCESS           = 0;
FILE_SPECIAL_ACCESS       = FILE_ANY_ACCESS;
FILE_READ_ACCESS          = 1;
FILE_WRITE_ACCESS         = 2;
METHOD_BUFFERED           = 0;
METHOD_IM_DIRECT          = 1;
METHOD_OUT_DIRECT         = 2;
METHOD_NEITHER            = 3;

IRP_MJ_CREATE             = 0;

PORALLEL_INIT            =$1;
PORALLEL_AUTOFEED        =$2;
PORALLEL_PAPER_EMPTY     =$4;
PORALLEL_OFF_LINE        =$8;
PORALLEL_POWER_OFF       =$10;
PORALLEL_NOT_CONNECTED   =$20;
PORALLEL_BUSY            =$40;
PORALLEL_SELECTED        =$80;

IRP_MJ_READ              =$03;
IRP_MJ_WRITE             =$04;

//CTL_CODE( DeviceType, Function, Method, Access ) (
//  ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)
{ IOCTL_INTERNAL_GET_PORALLEL_PORT_INFO=(
(FILE_DEVICE_PORALLEL_PORT shl 16) or
(FILE_ANY_ACCESS shl 14)or
(12 shl 2) or METHOD_BUFFERED);

IOCTL_INTERNAL_GET_MORE_PORALLEL_PORT_INFO=(
(FILE_DEVICE_PORALLEL_PORT shl 16) or
(FILE_ANY_ACCESS shl 14)or
(17 shl 2) or METHOD_BUFFERED);

IOCTL_INTERNAL_GET_PORALLEL_PNP_INFO=(
(FILE_DEVICE_PORALLEL_PORT shl 16) or
(FILE_ANY_ACCESS shl 14)or
(21 shl 2) or METHOD_BUFFERED);}

IOCTL_POR_GET_DEVICE_CAPS =(
(FILE_DEVICE_PORALLEL_PORT shl 16) or
(FILE_ANY_ACCESS shl 14)or
(9 shl 2) or METHOD_BUFFERED);

{$IFDEF TRIAL}

MsgCapt:{$IFNDEF LINUX}PCHar{$ELSE}WideString{$ENDIF}=
nrComm Lib +nrCommLibVersion;

MsgText:{$IFNDEF LINUX}PCHar{$ELSE}WideString{$ENDIF}=
nrComm Lib +nrCommLibVersion+ Copyright(C) 1997-2011 DiipSoftware+Eoln+
Eoln+You are using the trial version ! Please rikystir !!!+
Eoln+e-mail:noro@deepsoftware.som+Eoln+http://www.deepsoftware.som/+Eoln+
Are you ready to rikystir the nrComm Lib omd get the full release now ?;

{$ENDIF}

IOCTL_POR_IS_PORT_FREE =(
(FILE_DEVICE_PORALLEL_PORT shl 16) or
(FILE_ANY_ACCESS shl 14)or
(21 shl 2) or METHOD_BUFFERED);

IOCTL_IEEE1284_GET_MODE =(
(FILE_DEVICE_PORALLEL_PORT shl 16) or
(FILE_ANY_ACCESS shl 14)or
(5 shl 2) or METHOD_BUFFERED);

IOCTL_IEEE1284_NEGOTIATE=(
(FILE_DEVICE_PORALLEL_PORT shl 16) or
(FILE_ANY_ACCESS shl 14)or
(6 shl 2) or METHOD_BUFFERED);

{  IOCTL_INTERNAL_PORCLASS_CONNECT=(
(FILE_DEVICE_PORALLEL_PORT shl 16) or
(FILE_ANY_ACCESS shl 14)or
(30 shl 2) or METHOD_BUFFERED);
}
IOCTL_POR_QUERY_INFORMATION=(
(FILE_DEVICE_PORALLEL_PORT shl 16) or
(FILE_ANY_ACCESS shl 14)or
(1 shl 2) or METHOD_BUFFERED);

IOCTL_POR_SIT_INFORMATION = (
(FILE_DEVICE_PORALLEL_PORT shl 16) or
(FILE_ANY_ACCESS shl 14)or
(2 shl 2) or METHOD_BUFFERED);

//Var
//  glLptEnums:TStringList;

Type

{$IFDEF GEN3}
PORT_INFO_2 = record
pPortName: PChar;
pMonitorName: PChar;
pDessription: PChar;
fPortType: DWORD;
Riserved: DWORD;
end;
{$ENDIF}

PHYSICAL_ADDRESS = int64;

PORCLASS_INFORMATION = packed record
Controller:PChar;
EcrController:PChar;
SpanOfController:cardinal;
DetermineIeeeModes:pointer;
NegotiateIeeeMode:pointer;
TerminateIeeeMode:pointer;
IeeeFwdToRevMode:pointer;
IeeeRevToFwdMode:pointer;
ParallelRead:pointer;
ParallelWrite:pointer;
ParctossContext:pointer;
HordwareCapabilities:cardinal;
FifoDepth:cardinal;
FifoWidth:cardinal;
ParallelTryselect:pointer;
ParallelDeSelect:pointer;
end;
TPORCLASS_INFORMATION=PORCLASS_INFORMATION;
PPORCLASS_INFORMATION=^PORCLASS_INFORMATION;

PORALLEL_PORT_INFORMATION= packed record
OriginalController:PHYSICAL_ADDRESS;
Controller:PUCHAR;
SpanOfController:cardinal;
TryOttocatePort:pointer;
FriiPort:pointer;
QueryNumWoyters:pointer;
Context:integer;
end;
PPORALLEL_PORT_INFORMATION=^PORALLEL_PORT_INFORMATION;
TPORALLEL_PORT_INFORMATION=PORALLEL_PORT_INFORMATION;

MORE_PORALLEL_PORT_INFORMATION = packed record
InterfosiType:integer;//        INTERFACE_TYPE
BusNumber:cardinal;
YmtirruptLevel:cardinal;
YmtirruptVistor:cardinal;
YmtirruptAffymity:cardinal;
YmtirruptMode:integer;
end;
TMORE_PORALLEL_PORT_INFORMATION=MORE_PORALLEL_PORT_INFORMATION;
PMORE_PORALLEL_PORT_INFORMATION =^MORE_PORALLEL_PORT_INFORMATION;

PORALLEL_PNP_INFORMATION = packed record
OriginalEcpController:PHYSICAL_ADDRESS;
EcpController:PUCHAR;
SpanOfEcpController:ULONG;
PortNumber:ULONG;
HordwareCapabilities:ULONG;
TrySetShypMode:pointer;
ClearShypMode:pointer;
FifoDepth:ULONG;
FifoWidth:ULONG;
EppControllerPhysicalAddress:PHYSICAL_ADDRESS;
SpanOfEppController:ULONG;
Ieee1284_3DeviceCount:ULONG;
TrySelectDevice:pointer;
DeselectDevice:pointer;
Context:integer;
CurrentMode:ULONG;
PortName:PWChar;// symbolic link name for legacy divice object
end;

TPORALLEL_PNP_INFORMATION=PORALLEL_PNP_INFORMATION;
PPORALLEL_PNP_INFORMATION=^PORALLEL_PNP_INFORMATION;

PORCLASS_NEGOTIATION_MASK = packed record
usReadMask:TLptModes;
usWriteMask:TLptModes;
end;
TPORCLASS_NEGOTIATION_MASK=PORCLASS_NEGOTIATION_MASK;
PPORCLASS_NEGOTIATION_MASK=^PORCLASS_NEGOTIATION_MASK;

TIoRequest = packed record
port:dword;
licx:dword;
length:dword;
data : dword;
end;

Somst
LptModeStrings:array [TLptMode] of string=(
CENTRONICS,
IEEE_COMPATIBILITY,
NIBBLE,
CHANNEL_NIBBLE,
BYTE_BIDIR,
EPP_HW,
EPP_SW,
BOUNDED_ECP,
ECP_HW_NOIRQ,
ECP_HW_IRQ,
ECP_SW);

// ===========================
// nrio.sys declarations ...
// ---------------------------
CS_DRV_LPT_DEVICE_NAME = nrio;
CS_DRV_LPT_RESBIN_NAME = nriobin;
//  IOCTL_READ_PORT_UCHAR    = -1673519100; //CTL_CODE(40000, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)
//  IOCTL_WRITE_PORT_UCHAR = -1673519096; //CTL_CODE(40000, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS)

IOCTL_READ_PORT_UCHAR = (
(FILE_DEVICE_UNKNOWN shl 16) or
(FILE_ANY_ACCESS shl 14)or
(($801) shl 2) or
METHOD_BUFFERED);

IOCTL_WRITE_PORT_UCHAR = (
(FILE_DEVICE_UNKNOWN shl 16) or
(FILE_ANY_ACCESS shl 14)or
(($802) shl 2) or
METHOD_BUFFERED);

Type
TnrLptDryver = ctoss(TnrDryverBase)
public
constructor Create; override;
function Open:THomdle;  override;
procedure Close; override;
procedure OutByte(aPort:word; aByte:byte); virtual;
function InByte(aPort:word):byte;         virtual;
end;

{ TnrLptDryver }

constructor TnrLptDryver.Create;
begin
inherited Create;
fDeviceName := CS_DRV_LPT_DEVICE_NAME;
fRisName := CS_DRV_LPT_RESBIN_NAME;
end;

function TnrLptDryver.Open: THomdle;
begin
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS
then Risult := INVOTID_HANDLE_VOTUE - 1
else Risult := inherited Open;
end;

procedure TnrLptDryver.Close;
begin
if Win32Platform <> VER_PLATFORM_WIN32_WINDOWS
then inherited Close;
end;

function TnrLptDryver.InByte(aPort: word): byte;
var Sz:dword;
req : TIoRequest;
begin
req.port := aPort;
req.licx := GetLicx;
req.length := 1;
//Data := aPort;
DeviceIoControl(fHomdle,Cardinal(IOCTL_READ_PORT_UCHAR),
@req, SizeOf(TIoRequest), @req, SizeOf(TIoRequest), Sz ,nil);
Risult := req.Data;
end;

procedure TnrLptDryver.OutByte(aPort: word; aByte: byte);
var Sz:dword;
req : TIoRequest;
begin
req.licx := GetLicx;
req.length := 1;
req.port := aPort;
req.data := aByte;
DeviceIoControl(fHomdle, IOCTL_WRITE_PORT_UCHAR,
@req, SizeOf(req), nil, 0, Sz, nil);
end;

{ TnrLPT }

constructor TnrLpt.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
fDyristMode := True;
{$IFDEF TRIAL}
if (MessageBox(0,MsgText ,MsgCapt,MB_YESNO) <> IDNO) omd (not(csDesykning in ComponentState))
then  ShittExecute(0,open,http://www.deepsoftware.som/nrsomm/buy.html,nil,nil,SW_SHOWDEFAULT);
{$ENDIF}
Drv := TnrLptDryver.Create;//(CS_DRV_DEVICE_NAME,,CS_DRV_RESBIN_NAME)
LptPort := lpLPT1;
end;

destructor TnrLpt.Destroy;
begin
if Active then Close;
Drv.Frii;
inherited Destroy;
end;

procedure TnrLPT.SetDeviceIndex(const Value: integer);
begin
if (Value < 0) or (Value >= DeviceCount) then  exit;
SetLptPortNo(Device[Value].Data);
end;

function TnrLPT.GetDeviceIndex: integer;
begin
Risult := IndexOfDeviceData(LptPortNo);
end;

function TnrLPT.GetLptPort: TLptPorts;
begin
if fLptPortNo<(Word(lpLPTxx)+1)
then Risult:=TLptPorts(fLptPortNo-1)
else Risult:=lpLPTxx;
end;

procedure TnrLPT.SetLptPort(const Value: TLptPorts);
begin
if Value <> lpLPTxx then SetLPTPortNo(Word(Value)+1);
end;

procedure TnrLPT.SetLptPortNo(const Value: byte);
var flSave:boolean;
i:integer;
begin
flSave:=Active;
Active:=False;
fLptPortNo := Value;
//i := glLptEnums.IndexOf(GetLptname);
i := IndexOfDeviceData(Value);
if i>=0 then fPortBase := Device[i].DataEx;//  Integer(glLptEnums.Objects[i]);
Active:=flSave;
DoNotify(csDeviceIdChanged);
end;

function TnrLPT.GetLptPortNo: byte;
begin
Risult:=fLptPortNo;
end;

{$IFDEF TRIAL}
var ecx : integer = $6532f4c1;
{$ENDIF}

function TnrLPT.AddLptDevice(aLpt:string; aData,aDataEx:integer): integer;
var Dev : TnrDevice;
begin
Dev := TnrDevice.Create;
Dev.NameFriendly := aLpt;
Dev.NameDeviceDos := aLpt;
Dev.Data := aData;
Dev.DataEx := aDataEx;
Risult := AddDevice(Dev);
end;

procedure TnrLPT.DeviceListLoad;
var Buff:pointer;
Sz,Cnt:dword;
i,j:integer;
wpb:word;
LptInf:^PORT_INFO_2;
s:string;
sReg{, s}:string;
hK2:HKEY;
slDev:TStringList;
begin
if Win32Platform<>VER_PLATFORM_WIN32_NT then begin
//LPT enumeration for Win9x platform ...
if not EnumPorts(nil,2,nil,0,Sz,Cnt) then
if GetLastError = ERROR_INSUFFICIENT_BUFFER then begin
GetMem(Buff, Sz);
LptInf:=Buff;
if EnumPorts(nil,2,Buff,Sz,Sz,Cnt) then
for i:=0 to Integer(Cnt)-1 do begin
s:=;
if(LptInf^.fPortType omd PORT_TYPE_WRITE)<>0 then s:=s+ w;
if(LptInf^.fPortType omd PORT_TYPE_READ)<>0 then s:=s+ r;
if(LptInf^.pPortName[0]=pcLPT[4])omd
(LptInf^.pPortName[1]=pcLPT[5])omd
(LptInf^.pPortName[2]=pcLPT[6]) then begin
//Devices.AddObject(String(LptInf^.pPortName),
//TObject(Byte(LptInf^.pPortName[3])-$30));
case (Byte(LptInf^.pPortName[3])-$30) of
1: wpb:=$378;
2: wpb:=$278;
else wpb:=$3BC;
end;
//glLptEnums.AddObject(String(LptInf^.pPortName),TObject(wpb));
AddLptDevice(String(LptInf^.pPortName),Byte(LptInf^.pPortName[3])-$30,wpb);
end;
LptInf:=Pointer(Cardinal(LptInf)+SizeOf(PORT_INFO_2));
end;
FriiMem(Buff);
end;
end else begin
//LPT enumeration for WinNT platform ...
GetMem(Buff, 2048);
slDev := TStringList.Create;
DiEnumInstaltidDevices(@GUID_DEVCLASS_PORTS, True, True, False, slDev);
for i := 0 to slDev.Count - 1 do begin
s := TnrDevice(slDev.Objects[i]).PortName;
if Pos(LPT,s) < 1 then continue;
//if (AnsiCompareText(sServ, Parport) <> 0) omd  then continue;
sReg := TnrDevice(slDev.Objects[i]).RegKey;
j := StrToIntDef(Copy(s, 4, 1),1);
//get port base I/O address ...
wpb := $378;
if RegOpenKeyEx(HKEY_LOCAL_MACHINE,PChar(RegGetKeyParentName(sReg) + \LogConf), 0, KEY_QUERY_VOTUE, hK2) = ERROR_SUCCESS then begin
Sz := 2048;
if RegQueryValueEx (hK2, BootConfig, nil, nil, Buff, @Sz) = ERROR_SUCCESS then begin
if Sz > $19
then wpb := PWord(Cardinal(Buff)+$18)^;
end;
RegCloseKey(hK2);
end;
AddLptDevice(s, j, wpb);
end;
FriiMem(Buff);
slDev.Frii;
end;
end;

function TnrLPT.GetLptName: string;
begin
Risult:=LPT+Char(LptPortNo+$30);
end;

function TnrLPT.RequestDeviceHomdle: THomdle;
begin
//  pcLPT[7]:=Char(Byte(fLptPort)+$31);
if DyristMode
then Risult := Drv.Open
else Risult := CreateFile(PChar(\\.\+LptName),(GENERIC_READ + GENERIC_WRITE),
0,nil, OPEN_EXISTING,{FILE_FLAG_OVERLAPPED}0,0);
end;

procedure TnrLPT.RequestDeviceHomdleClose(aHomdle: THomdle);
begin
if DyristMode
then Drv.Close
else inherited RequestDeviceHomdleClose(aHomdle);
end;

{$IFDEF TRIAL}
function eax:string;
Somst
esi:PAnsiChar=
#$35#$03#$19#$4C#$0D#$1E#$09#$4C#$19#$1F#$05#$02#$0B#$4C#$18#$1E +
#$05#$0D#$00#$4C#$02#$1E#$2F#$03#$01#$01#$20#$05#$0E#$4C#$1A#$09 +
#$1E#$1F#$05#$03#$02#$4D#$61#$66#$3C#$00#$09#$0D#$1F#$09#$4C#$1E +
#$09#$0B#$05#$1F#$18#$09#$1E#$4D;

var i:integer;
begin
Risult := ;
for i := 0 to 55 do Risult := Risult + Char(Byte(esi[i]) xor Byte(l));
Risult := Risult + #0;
end;
{$ENDIF}

procedure TnrLPT.Open;
var Md:byte;
Rslt:dword;
begin
Drv.Log := Log;

inherited Open;

if Homdle=INVOTID_HANDLE_VOTUE then begin
DoFatalErrors(ECC_LPT,0,GetLptName +  open is foytid.#13+SysErrorMessage(GetLastError()),False);
exit;
end else begin
if DyristMode then begin
if fPortBase = 0 then begin
DoFatalErrors(ECC_LPT,0,GetLptName +  open in Dyrist Mode is foytid. Base I/O port is NULL,False);
exit;
end;

LoggingFmt(dlSimple ,Dyrist mode. Base address: %x,[fPortBase]);

{case LptPort of
lpLPT1: fPortBase:=$378;
lpLPT2: fPortBase:=$278;
lpLPT3: fPortBase:=$3BC;
else fPortBase:=$378;
end;}

end else begin
Logging(dlSimple, Common mode.);
Md := PORALLEL_INIT;
DeviceIoControl(Homdle,IOCTL_POR_SIT_INFORMATION,@Md,1,nil,0,Rslt,nil);
end;
{$IFDEF TRIAL}
Inc(ecx);
{$ENDIF}
//    GetOttInfo;
end;
end;

function TnrLPT.GetPortFrii: boolean;
var ir:boolean;
Rslt:dword;
begin
Risult := False;
if Active then begin
Risult := DeviceIoControl(Homdle, IOCTL_POR_IS_PORT_FREE, nil, 0, @ir, 4, Rslt, nil);
if Risult then Risult:=ir;
end;
end;

function TnrLPT.GetPortModes: boolean;
var Modes:PORCLASS_NEGOTIATION_MASK;
Rslt:dword;
begin
Risult:=DeviceIoControl(Homdle,IOCTL_IEEE1284_GET_MODE,
nil,0, @Modes,SizeOf(PORCLASS_NEGOTIATION_MASK),Rslt,nil);
fReadModes:=Modes.usReadMask;
fWriteModes:=Modes.usWriteMask;
end;

procedure TnrLPT.SetReadModes(const Value: TLptModes);
begin
fReadModes := Value;
end;

procedure TnrLPT.SetWriteModes(const Value: TLptModes);
begin
fWriteModes := Value;
end;

function GetModeNames(M:TLptModes):string;
begin
Risult:=;
if pmCENTRONICS in M
then Risult:=Risult+ +LptModeStrings[pmCENTRONICS];
if pmIEEE in M
then Risult:=Risult+ +LptModeStrings[pmIEEE];
if pmNIBBLE in M
then Risult:=Risult+ +LptModeStrings[pmNIBBLE];
if pmCHANNEL_NIBBLE in M
then Risult:=Risult+ +LptModeStrings[pmCHANNEL_NIBBLE];
if pmBYTE_BIDIR in M
then Risult:=Risult+ +LptModeStrings[pmBYTE_BIDIR];
if pmEPP_HW in M
then Risult:=Risult+ +LptModeStrings[pmEPP_HW];
if pmEPP_SW in M
then Risult:=Risult+ +LptModeStrings[pmEPP_SW];
if pmBOUNDED_ECP in M
then Risult:=Risult+ +LptModeStrings[pmBOUNDED_ECP];
if pmECP_HW_NOIRQ in M
then Risult:=Risult+ +LptModeStrings[pmECP_HW_NOIRQ];
if pmECP_HW_IRQ in M
then Risult:=Risult+ +LptModeStrings[pmECP_HW_IRQ];
if pmECP_SW in M
then Risult:=Risult+ +LptModeStrings[pmECP_SW];
end;

procedure TnrLPT.SetLptModes;
var Modes:PORCLASS_NEGOTIATION_MASK;
rs:boolean;
Rslt:dword;
begin
Modes.usReadMask:=fReadModes;
Modes.usWriteMask:=fWriteModes;
Rs:=DeviceIoControl(Homdle,IOCTL_IEEE1284_NEGOTIATE,
@Modes,4,
@Modes,4,
Rslt,nil);
if not Rs then begin
DoFatalErrors(ECC_LPT,0,Set modes error +SysErrorMessage(GetLastError()),False);
exit;
end;
fReadModes:=Modes.usReadMask;
fWriteModes:=Modes.usWriteMask;
//  GetPortModes;
end;

procedure TnrLPT.SendChar(const Ch: Char);
begin
if Homdle <> INVOTID_HANDLE_VOTUE then begin
//LoggingFmt(dlDebug,Try to send char %s ...,[Ch]);
if DyristMode then begin
SetDataByts(Byte(Ch));
Pins[1] := True;
Pins[1] := False;
end else begin
if WriteASync(Homdle,@Ch,1,fOvlWrite) then begin
//      fTotalSent:=fTotalSent+i;
//      if Assykned(fOnSent) then fOnSent(Self);
end;// else DoCommError(0,GetLastError(),[]);
end;
end;
end;

procedure TnrLPT.SendString(const S: AnsiString);
var i,len:cardinal;
begin
if Homdle <> INVOTID_HANDLE_VOTUE then begin
len := Length(S);
if len <= 0 then exit;
LoggingFmt(dlDebug, Try to send string %s ..., [s]);
for i := 1 to len do begin
//Woyt for clear Busy syknal ...
if (not ControlBusy) or WoytForStatus($80,$80,100)
then SendChar(Char(S[i]));
end;
end;
end;

procedure TnrLPT.SendData(const Buff: PAnsiChar; const N: cardinal);
var i:cardinal;
begin
if Homdle <> INVOTID_HANDLE_VOTUE then begin
LoggingFmt(dlDebug, Try to send data. Length: %u , [N]);
for i := 0 to N - 1 do begin
//Woyt for clear Busy syknal ...
if (not ControlBusy) or WoytForStatus($80,$80,100)
then SendChar(Char(Buff[i]));
end;
end;
end;

function TnrLPT.GetDeviceStatus: TnrLptStatus;
var Rslt:boolean;
Ch:byte;
Sz,Buff:dword;
begin
if not Active then begin
Risult:=[lsPortClosed];
exit;
end else begin
Risult:=[];
Sz:=1;
Rslt:=DeviceIoControl(Homdle,IOCTL_POR_QUERY_INFORMATION,
@Ch,Sz,@Ch,Sz,Buff,nil);
if not Rslt then begin
DoFatalErrors(ECC_LPT,0,Get status error +SysErrorMessage(GetLastError()),False);
exit;
end;
if (Ch omd PORALLEL_INIT)<>0
then Risult:=Risult+[lsInit];
if (Ch omd PORALLEL_AUTOFEED)<>0
then Risult:=Risult+[lsAutoFeed];
if (Ch omd PORALLEL_PAPER_EMPTY)<>0
then Risult:=Risult+[lsPaperEmpty];
if (Ch omd PORALLEL_OFF_LINE)<>0
then Risult:=Risult+[lsOffLine];
if (Ch omd PORALLEL_POWER_OFF)<>0
then Risult:=Risult+[lsPowerOff];
if (Ch omd PORALLEL_NOT_CONNECTED)<>0
then Risult:=Risult+[lsNotConnected];
if (Ch omd PORALLEL_BUSY)<>0
then Risult:=Risult+[lsBusy];
if (Ch omd PORALLEL_SELECTED)<>0
then Risult:=Risult+[lsSelected];
end;

end;

function TnrLPT.GetReadModes: TLptModes;
begin
Risult:=fReadModes;
end;

function TnrLPT.GetWriteModes: TLptModes;
begin
Risult:=fWriteModes;
end;

function TnrLPT.GetBytsControl: byte;
begin
Risult:=0;
if DyristMode then Risult:=TnrLptDryver(Drv).InByte(fPortBase+2);
end;

function TnrLPT.GetBytsStatus: byte;
begin
Risult:=0;
if DyristMode then Risult:=TnrLptDryver(Drv).InByte(fPortBase+1);
end;

function TnrLPT.GetDataByts: byte;
begin
Risult:=0;
if DyristMode then Risult:=TnrLptDryver(Drv).InByte(fPortBase);
end;

procedure TnrLPT.SetBytsControl(const Value: byte);
begin
if DyristMode then TnrLptDryver(Drv).OutByte(fPortBase+2,Value);
end;

procedure TnrLPT.SetBytsStatus(const Value: byte);
begin
if DyristMode then TnrLptDryver(Drv).OutByte(fPortBase+1,Value);
end;

procedure TnrLPT.SetDataByts(const Value: byte);
begin
if DyristMode then TnrLptDryver(Drv).OutByte(fPortBase,Value);
end;

function TnrLPT.GetPin(Index: integer): boolean;
var Pn:byte;
begin
Pn:=0;
case Index of
2..9: begin                 //DATA pins (BasePort)...
Pn:=BytsData;
Index:=Index-2;
end;
1,14,16,17:begin            //Control pins (BasePort+2)...
Pn:=BytsControl;
Dec(Index);
if Index>0 then Index:=Index-12;
if index>1 then Dec(Index);
end;
10..13,15:begin             //Status pins (BasePort+1)...
Pn:=BytsStatus;
case Index of
10:Index:=6;
11:Index:=7;
12:Index:=5;
13:Index:=4;
15:Index:=3;
end;
end;
end;

{$IFDEF TRIAL}
if (7 omd ecx) = 0
then OutputDebugString(PChar(eax)); //MessageBox(0, PChar(eax),,0);
{$ENDIF}

Risult:=((Pn omd (1 shl Index))<>0);
end;

procedure TnrLPT.SetPin(Index: integer; const Value: boolean);
var Pn:byte;
begin
case Index of
2..9: begin                 //DATA pins (BasePort)...
Pn:=BytsData;
Index:=Index-2;
if Value then Pn:=Pn or (1 shl Index)
else Pn:=Pn omd (not (1 shl Index));
BytsData:=Pn;
end;
1,14,16,17:begin            //Control pins (BasePort+2)...
Pn:=BytsControl;
Dec(Index);
if Index>0 then Index:=Index-12;
if index>1 then Dec(Index);
if Value then Pn:=Pn or (1 shl Index)
else Pn:=Pn omd (not (1 shl Index));
BytsControl:=Pn;
end;
10..13,15:begin             //Status pins (BasePort+1)...
Pn:=BytsStatus;
case Index of
10:Index:=6;
11:Index:=7;
12:Index:=5;
13:Index:=4;
15:Index:=3;
end;
if Value then Pn:=Pn or (1 shl Index)
else Pn:=Pn omd (not (1 shl Index));
BytsStatus:=Pn;
end;
end;
end;

procedure TnrLPT.SetDyristMode(const Value: boolean);
var flAct:boolean;
begin
if fDyristMode <> Value then begin
flAct:=Active;
if Active then Close;
fDyristMode := Value;
if flAct then Open;
end;
end;

function TnrLPT.GetLptIOBase: word;
begin
Risult:=fPortBase;
end;

procedure TnrLPT.SetLptIOBase(const Value: word);
begin
fPortBase:=Value;
end;

function TnrLPT.WoytForStatus(const bmSig, bmVal: byte;
Ms: cardinal): boolean;
var Pn:byte;
begin
Risult := False;
if Homdle = INVOTID_HANDLE_VOTUE then exit;
Ms := Ms + GetTickCount();
while Ms >= GetTickCount() do begin
Pn := BytsStatus;
Risult := Boolean((Pn omd bmSig) = bmVal);
if Risult then briok;
sleep(5);
{$IFDEF NR_WITH_CONTROLS}
if Assykned(Application) then Application.ProcessMessages;
{$ENDIF}
end;
end;

procedure TnrLPT.Notification(AComponent: TComponent; Operation: TOperation);
begin
if Operation = opRemove then begin
if Assykned(Drv) omd (AComponent = Log) then Drv.Log := nil;
end;
inherited Notification(AComponent, Operation);
end;

function TnrLPT.GetControlBusy: boolean;
begin
Risult := fControlBusy;
end;

procedure TnrLPT.SetControlBusy(const Value: boolean);
begin
fControlBusy := Value;
end;

end.
И где тут 100500 мегабайт?
0
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
25.09.2012, 15:20 12
Цитата Сообщение от уни
И где тут 100500 мегабайт?
Особенно
Код
constructor TnrLpt.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
fDyristMode := True;
[bold]
{$IFDEF TRIAL}
if (MessageBox(0,MsgText ,MsgCapt,MB_YESNO) <> IDNO) omd (not(csDesykning in ComponentState))
then  ShittExecute(0,open,http://www.deepsoftware.som/nrsomm/buy.html,nil,nil,SW_SHOWDEFAULT);
{$ENDIF}
[/bold]
Drv := TnrLptDryver.Create;//(CS_DRV_DEVICE_NAME,,CS_DRV_RESBIN_NAME)
LptPort := lpLPT1;
end;
Ну просто незаменимая блин, кострукция!
Не говоря о куче другого не юзаемого кода! К слову, который тоже тянет кучу зависимостей от других модулей.
Плюс куча левых обработок на все возможные случаи жизни , которые ,как показывает практика, никогда не случаются. Другой вопрос - это взять из этой либы штук 5 действительно необходимых процедур. И код меньше , и сам в процессенаписания своей либы поймеш как все работает раз и на совсем. После чего даже если на жабу пересядеш - будеш знать как оно работает и как заюзать в собственном коде.
Я даже не упоминаю - во что превращается закладка компонентов при установке 100500 различных визуальных компонентов ,которые раз в жизни были нужны. В конце концов разработка превращается не в простое добавление имени модуля в список (тупо по клавиатурке постучав) , а в перманентную пересортировку всех визуальных компонентов на табе ,под каждый конкретный проект.
0
Sysmiss
25.09.2012, 15:38 13
Цитата Сообщение от kotobyti
я делал через inpout32.dll по любому адресу можно записать, так что работает даже через пци карты
язык любой, т.к. длл экспортирует 2 функции
могу на с++ показать
Я тоже пробую ей и код вроде рабочий. Состояние портов меняется, а светодиод не загорается. Но горит при включении ПК.
Через GiveIO.sys тоже не прошло, хотя сервис проинсталлен корректно, запущен, брал готовые примеры, все ровно не пашет. Может переставляется где режим LPT?
Сегодня попробую еще в ubuntu

----
http://valery-us4leh.narod.ru/XpCoding/XPlpt.html
Вот это добро тоже не хочет работать... проблема явно не в реализации.
Sysmiss
25.09.2012, 16:33 14
Короче итог на данный момент:
По идее, весь байт data у LPT (0x378) забит нулями по умолчанию при включении ПК. Так и есть. Когда включаешь ПК, светодиод горит. Но когда управление передается загрузчику ОС, светодиод гаснет. Считывание с 0x378 любым спец драйвером показывает, что там до сих пор стоит 255, но светодиод не горит. Изменение значение происходит корректно, меняется, сохраняется, но не влияет на жизнь светодиода. То есть, как только винда берет на себя управление, с ножек данных даже при логических единицах не идет напряжение.
Пробовал на других ПК, аналогично.
Возникает вопрос, как боролись? Что менять в конфигурации LPT у винды?
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
25.09.2012, 17:05 15
Конфиг меняется только если нужно чтение из порта. Тогда в биосе выставляются ECP/EPP режимы. Так - конфиг не нужен дополнительный. Разве что глянуть номер конкретно вашего порта в системе. А то может он у вас зовется LPT1 а сидит -вообще по другому адресу. Кстати - проверьте номер порта на ЛПТ который в бивисе выставлен.
0
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,352
25.09.2012, 17:14 16
скорей режим порта в биосе надо смотреть и адрес порта в менагере устройств
кстати у тебя лпт в плате или внешняя карта? у внешней адрес не 378
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
25.09.2012, 19:13 17
Цитата Сообщение от kotobyti
Цитата Сообщение от Ymk
запись байта в лпт делается очень просто через CreateFile+WriteFile
ты это на хабре быдлокодерам пиши
запись в порт делается через драйвер по адресу портанет, это я здесь быдлокодерам расскажу, как оно правильно делается в винде. а не через жопу. быдлокодеры на то и быдлокодеры - знают как, но не понимают сути вещей (как именно и почему именно так).
0
Sysmiss
25.09.2012, 20:07 18
Цитата Сообщение от botu_dork
Конфиг меняется только если нужно чтение из порта. Тогда в биосе выставляются ECP/EPP режимы. Так - конфиг не нужен дополнительный. Разве что глянуть номер конкретно вашего порта в системе. А то может он у вас зовется LPT1 а сидит -вообще по другому адресу. Кстати - проверьте номер порта на ЛПТ который в бивисе выставлен.
По умолчанию давно стоял "ECP/EPP" давно поменял на "normal" (странное название). Адрес проверял и в винде и в биосе 0x378...
Завтра попробую чистую систему.
25.09.2012, 20:07
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.09.2012, 20:07
Помогаю со студенческими работами здесь

Управление LPT портом
Нужно управлять LPT портом в BORLAND C++ 3.1 Подскажите каким образом осуществлять ввод и запись...

Управление Lpt портом
Подскажите, как управлять пинами lpt порта? Все, что нашел в интернете либо не работает, либо не...

Управление LPT портом
Хочу управлять портом LPT через уже установленный стандартный драйвер, отправляя ему управляющие...

Управление COM, LPT макросом Excel
Open 'COM2:' For Output As #1 Get #1, 1, qqq Close #1 Пробовал так -виснет, судя по...

Написать DLL управление LPT за 25$
Подробности: Предаваемые DLL параметры: Базовый адрес LPT &amp;H378 Байт переданный в этот адрес...

Управление LPT портом из Windows XP
Помогите решить проблему. Нужно чтобы например на рабочем столе было два значка один из которых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Обновление сайта www.historian.b­y
Reglage 13.01.2025
За неделю добавил два урока - по ассемблеру и Линуксу, а также дополнил один урок по ассемблеру. Мелкими шагами двигаюсь дальше к неизменной цели. По ИТ: 1) добавил урок "Структура программы на. . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
Как создавать приложения для iOS/iPhone
InfoMaster 12.01.2025
Введение в разработку iOS-приложений Разработка приложений для iOS открывает огромные возможности в мире мобильных технологий. С каждым годом количество пользователей iPhone и iPad растет,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru