Работа с платой ввода вывода. (срочно нужны советы)
От: Mars_RKK  
Дата: 18.12.06 05:08
Оценка:
Есть плата под ISA порт, у нее есть драйвер, она зарегестрирована в диспетчере устройств под именем IOPLATA.

В работе на с++ к ней обращаешься следующим образом:
CString sDriverName;
    sDriverName.Format("\\\\.\\%s", s);    /// sDriverName = "\\.\IOPLATA"

    dm32Handle = CreateFile(
        sDriverName,                    /// Имя файла
        GENERIC_READ | GENERIC_WRITE,    /// Опрределяем тип доступа к файлу - чтение и запись
        0,                                /// определяем способ разделения ресурса - монопольное использование
        NULL,                            /// может ли объект(ресурс) буть наследуемым? - нет    
        OPEN_EXISTING,                    /// тип (и способ) открываемого ресурса - существующий
        NULL,                            /// атрибуты  и флаги ресурса - как для монопольно исп. ресурса
        NULL);                            /// не есть временный ресурс



Как мне открыть с ней соединение в .NET на с#?

Если использовать System.IO.Ports.SerialPort("IOPLATA") — сработает корректно?
Или мне нужно использовать какой-нибудь другой класс? Какой?
Re: Работа с платой ввода вывода. (срочно нужны советы)
От: TK Лес кывт.рф
Дата: 18.12.06 05:18
Оценка:
Hello, "Mars_RKK" .
> Есть плата под ISA порт, у нее есть драйвер, она зарегестрирована в диспетчере устройств под именем IOPLATA.
> Как мне открыть с ней соединение в .NET на с#?
> Если использовать System.IO.Ports.SerialPort("IOPLATA") — сработает корректно?
> Или мне нужно использовать какой-нибудь другой класс? Какой?

Простой вариант — импортировать CreateFile в C# а дальше, полученный Handle передать в конструктор класса FileStream. После этого, работать с платой через методы класса Stream
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Работа с платой ввода вывода. (срочно нужны советы)
От: int13h Украина  
Дата: 18.12.06 06:45
Оценка:
Здравствуйте, TK, Вы писали:
А чожно через System.IO.File.Open ?
Re[3]: Работа с платой ввода вывода. (срочно нужны советы)
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.12.06 07:31
Оценка:
Здравствуйте, int13h, Вы писали:

I>Здравствуйте, TK, Вы писали:

I>А чожно через System.IO.File.Open ?
Попробуй. Могут быть проблемы с проверкой привилегий кода на указанный путь.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Работа с платой ввода вывода. (срочно нужны советы)
От: Norex Россия  
Дата: 19.12.06 22:55
Оценка:
Здравствуйте, Mars_RKK, Вы писали:
M_R>Если использовать System.IO.Ports.SerialPort("IOPLATA") — сработает корректно?
Не — будет exception.
Там занятная проверка аргументов Если имя порта не начинается с COM/com — то ArgumentException
Зачем? У них спросить нужно
Re[4]: Работа с платой ввода вывода. (срочно нужны советы)
От: vdimas Россия  
Дата: 21.12.06 09:38
Оценка:
Здравствуйте, Sinclair, Вы писали:

I>>А чожно через System.IO.File.Open ?

S>Попробуй. Могут быть проблемы с проверкой привилегий кода на указанный путь.

Нет, дрова таким макаром открывать нельзя.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Работа с платой ввода вывода. (срочно нужны советы)
От: vdimas Россия  
Дата: 21.12.06 09:38
Оценка:
Здравствуйте, Mars_RKK, Вы писали:


M_R>Если использовать System.IO.Ports.SerialPort("IOPLATA") — сработает корректно?

M_R>Или мне нужно использовать какой-нибудь другой класс? Какой?

Бери это
Там есть DriverLib и в нем есть DeviceStream.cs — это то, что надо. (Код писался более 3-х лет назад, так что не пинайте... зато работает)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Работа с платой ввода вывода. (срочно нужны советы)
От: Mars_RKK  
Дата: 25.01.07 07:06
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, Mars_RKK, Вы писали:



M_R>>Если использовать System.IO.Ports.SerialPort("IOPLATA") — сработает корректно?

M_R>>Или мне нужно использовать какой-нибудь другой класс? Какой?

V>Бери это

V>Там есть DriverLib и в нем есть DeviceStream.cs — это то, что надо. (Код писался более 3-х лет назад, так что не пинайте... зато работает)

Спасибо, но нужно самому написатьь...
Re[2]: Работа с платой ввода вывода. (срочно нужны советы)
От: Mars_RKK  
Дата: 25.01.07 07:07
Оценка:
Здравствуйте, TK, Вы писали:

TK>Hello, "Mars_RKK" .

>> Есть плата под ISA порт, у нее есть драйвер, она зарегестрирована в диспетчере устройств под именем IOPLATA.
>> Как мне открыть с ней соединение в .NET на с#?
>> Если использовать System.IO.Ports.SerialPort("IOPLATA") — сработает корректно?
>> Или мне нужно использовать какой-нибудь другой класс? Какой?

TK>Простой вариант — импортировать CreateFile в C# а дальше, полученный Handle передать в конструктор класса FileStream. После этого, работать с платой через методы класса Stream



неужели нет ниодного стандартного метода по работе с дровами в С#
Re[3]: Работа с платой ввода вывода. (срочно нужны советы)
От: vdimas Россия  
Дата: 29.01.07 19:50
Оценка:
Здравствуйте, Mars_RKK, Вы писали:


V>>Бери это

V>>Там есть DriverLib и в нем есть DeviceStream.cs — это то, что надо. (Код писался более 3-х лет назад, так что не пинайте... зато работает)

M_R>Спасибо, но нужно самому написатьь...


там исходник
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: огромное спасибо, полезный исходник
От: Mars_RKK  
Дата: 15.02.07 22:30
Оценка:
Re: Помогите закончить решение, подкорректировать его
От: Mars_RKK  
Дата: 15.02.07 22:41
Оценка:
Вообщем в стандартных классах Framework я не нашел ничего подходящего и решился на использование ядра kernel32

Проблемма с вызовом функции


[DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true, CharSet = CharSet.Auto)]
static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode,
IntPtr lpInBuffer, uint nInBufferSize,
IntPtr lpOutBuffer, uint nOutBufferSize,
out uint lpBytesReturned, IntPtr lpOverlapped);

Просто мне она необхалдимо чтобы произвести чтение с помоью драйвера по определенному адресу.
Проблемма в том, что мне нужнно в параметр lpInBuffer передать некую структуру, причем созданную самостоятельно, как это сделать?

Можно ли это сделать без использования данной функции? Стандартными средствами Framework.

Еще как в с# объявить масив из четырех чисел типа int
и можно ли объявлять структуру внутри класса, какие правила на вызов члена этой структуры?
Заранее спасибо Иван.
Re[2]: Помогите закончить решение, подкорректировать его
От: Andrbig  
Дата: 16.02.07 07:36
Оценка:
Здравствуйте, Mars_RKK, Вы писали:

M_R>Вообщем в стандартных классах Framework я не нашел ничего подходящего и решился на использование ядра kernel32


M_R>Проблемма с вызовом функции



M_R>[DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true, CharSet = CharSet.Auto)]

M_R>static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode,
M_R>IntPtr lpInBuffer, uint nInBufferSize,
M_R>IntPtr lpOutBuffer, uint nOutBufferSize,
M_R>out uint lpBytesReturned, IntPtr lpOverlapped);

M_R>Просто мне она необхалдимо чтобы произвести чтение с помоью драйвера по определенному адресу.

M_R>Проблемма в том, что мне нужнно в параметр lpInBuffer передать некую структуру, причем созданную самостоятельно, как это сделать?

http://www.pinvoke.net/default.aspx/kernel32/DeviceIoControl.html
Re[3]: Помогите закончить решение, подкорректировать его
От: Mars_RKK  
Дата: 20.02.07 19:13
Оценка:
да я это раньше читал, но из прочитанного н6е понял ответ на свой вопрос(((
или торможу, или даун?
Re[4]: Помогите закончить решение, подкорректировать его
От: Andrbig  
Дата: 21.02.07 10:05
Оценка:
Здравствуйте, Mars_RKK, Вы писали:

M_R>да я это раньше читал, но из прочитанного н6е понял ответ на свой вопрос(((


Если ты про "в параметр lpInBuffer передать некую структуру, причем созданную самостоятельно", то кури Marshal.StructureToPtr.
Re[5]: Как подставить свою структуру...
От: Mars_RKK  
Дата: 21.02.07 15:33
Оценка:
Мне нужно в функцию

Код:

[DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true, CharSet = CharSet.Auto)]
static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode,
IntPtr lpInBuffer, uint nInBufferSize,
IntPtr lpOutBuffer, uint nOutBufferSize,
out uint lpBytesReturned, IntPtr lpOverlapped);


передать структуру созданную в проекте (можно ли структуру объявить членом какого-нить класса, как тогда грамотней ее объявить)

Код:

public struct DM32_IO_RECORD
{
public ulong DM32TypeAnswer;
public byte Size;
public byte[] IOCharData;
}


делаю, так:

Код:

uint ReturnedLength = 0;
DM32_IO_RECORD bufferIn = new DM32_IO_RECORD();
bufferIn.IOCharData = new byte[4];
IntPtr bufIn = new IntPtr(bufferIn); -- ошибка
DeviceIoControl(handle, Code_GetType, (IntPtr)null, 0, bufIn, (uint)IntPtr.Size,
out ReturnedLength, (IntPtr)null);


Т.е. проблемма как мне мою структуру перегнать в тип IntPtr
Re[6]: Как подставить свою структуру...
От: Mars_RKK  
Дата: 21.02.07 15:56
Оценка:
можно дать ответ в виде примера?
Работа с платой ввода вывода. (срочно нужны советы)
От: Аноним  
Дата: 18.12.06 05:26
Оценка:
Дальше по логике должна быть работа через API DeviceIOControl
Других вариантов нету...

Либо есть другая альтернатива...
Поставить родные драйвера и работать с ней через родные библиотеки.

Третий вариант — работа напрямую с портами (inport, outport). Но это под NT не так просто сделать... всё равно придётся через драйвер лазить... под 9х без проблем

Что за плата вообще? и чья?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Работа с платой ввода вывода. (срочно нужны советы)
От: Аноним  
Дата: 09.02.07 11:01
Оценка:
Mars_RKK:
Есть плата под ISA порт, у нее есть драйвер, она зарегестрирована в диспетчере устройств под именем IOPLATA.

В работе на с++ к ней обращаешься следующим образом:

CString sDriverName;
sDriverName.Format("\\\\.\\%s", s); /// sDriverName = "\\.\IOPLATA"

dm32Handle = CreateFile(
sDriverName, /// Имя файла
GENERIC_READ | GENERIC_WRITE, /// Опрределяем тип доступа к файлу — чтение и запись
0, /// определяем способ разделения ресурса — монопольное использование
NULL, /// может ли объект(ресурс) буть наследуемым? — нет
OPEN_EXISTING, /// тип (и способ) открываемого ресурса — существующий
NULL, /// атрибуты и флаги ресурса — как для монопольно исп. ресурса
NULL); /// не есть временный ресурс


Как мне открыть с ней соединение в .NET на с#?

Если использовать System.IO.Ports.SerialPort("IOPLATA") — сработает корректно?
Или мне нужно использовать какой-нибудь другой класс? Какой?

а правда можно использовать после \\.\ имя платы, какое оторбажается в диспетчере устройств ?
"эх женщины-женщины... понаражают сами себя
а нам потом расхлёбывать.."
(КВН ЛУНа)


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.