Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2019, 11:58   #1
АндрейНет
Новичок
Джуниор
 
Регистрация: 04.06.2019
Сообщений: 5
По умолчанию отправить данные сквозь USB в сторону принтера

Всем Ку.
Прошу помощи опытных камрадов.
Стоит задача имитировать передачу данных по USB.

Исходные данные:
Есть принтер Epson SureColor SC-P600 . Он умеет чистить свои головки. Команду на очистку можно отправить, нажав на кнопу из приложения, входящего в дрова принтера.

Задача:
Из Дельфи отправить такой же набор пакетов, какой отправляет драйвер на принтер. Чтобы принтер стал чистить головки, не открывая стандартное своё приложение.
Набор пакетов в HEX понюхали сниффером и зафиксировали.

Вопрос: Может кто-нибудь подсказать, куда копать?
АндрейНет вне форума Ответить с цитированием
Старый 05.06.2019, 12:04   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Так проблема в чем? Гугл по запросу delphi usb ничего не выдал? Книги и мсдн по усб тоже не доступны? Или у вас проблема хекс запихнуть в код?
p51x вне форума Ответить с цитированием
Старый 05.06.2019, 12:15   #3
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Скачиваете libusb для виндоуса там будет dll и заголовочные файлы.
libusb.pas и ModuleLoader.pas
Помимо этого для работы libusb нужен ещё драйвер, скачиваете ... вроде я качал
libusbK-3.0.7.0-bin-chk
Устанавливаете через визарда.

А далее подключаетесь к устройству по его pid, vid

Код:
procedure TForm1.FormCreate(Sender: TObject);
var ck:Integer;
begin
libusb_init(Nil);
libusb_set_debug(Nil, 255);
Handle:= libusb_open_device_with_vid_pid(Nil, Device_VID, Device_PID);
if (Handle<>Nil) then
   begin
   if (libusb_kernel_driver_active(handle, InterfaceNumber)<>0) then
       libusb_detach_kernel_driver(handle, InterfaceNumber);
   ck:= libusb_claim_interface(handle, InterfaceNumber);
   if (ck<0) then Application.MessageBox(libusb_error_name(ck),'ошибка захвата USB интерфейса')
   end;

end;

procedure TForm1.FormDestroy(Sender: TObject);
var ck:Integer;
begin
 ck:= libusb_release_interface(handle, InterfaceNumber);
 if (ck<0) then Application.MessageBox(libusb_error_name(ck),'ошибка освобождения USB интерфейса')
end;
А для отправки используете
libusb_control_transfer
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 05.06.2019, 12:15   #4
АндрейНет
Новичок
Джуниор
 
Регистрация: 04.06.2019
Сообщений: 5
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Так проблема в чем? Гугл по запросу delphi usb ничего не выдал? Книги и мсдн по усб тоже не доступны? Или у вас проблема хекс запихнуть в код?
Гугл много выдал.
В том числе и это.
http://www.cyberforum.ru/delphi-begi...ad1182118.html
особенно вот этот момент: Я уже перепробовал кучу сорцов из инета и дждаевский компонент, безуспешно...
Но ваш ответ мне помог намного больше, спасибо.
АндрейНет вне форума Ответить с цитированием
Старый 05.06.2019, 12:17   #5
АндрейНет
Новичок
Джуниор
 
Регистрация: 04.06.2019
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Скачиваете libusb для виндоуса там будет dll и заголовочные файлы.
libusb.pas и ModuleLoader.pas
Помимо этого для работы libusb нужен ещё драйвер, скачиваете ... вроде я качал
libusbK-3.0.7.0-bin-chk
Устанавливаете через визарда.

А далее подключаетесь к устройству по его pid, vid

Код:
procedure TForm1.FormCreate(Sender: TObject);
var ck:Integer;
begin
libusb_init(Nil);
libusb_set_debug(Nil, 255);
Handle:= libusb_open_device_with_vid_pid(Nil, Device_VID, Device_PID);
if (Handle<>Nil) then
   begin
   if (libusb_kernel_driver_active(handle, InterfaceNumber)<>0) then
       libusb_detach_kernel_driver(handle, InterfaceNumber);
   ck:= libusb_claim_interface(handle, InterfaceNumber);
   if (ck<0) then Application.MessageBox(libusb_error_name(ck),'ошибка захвата USB интерфейса')
   end;

end;

procedure TForm1.FormDestroy(Sender: TObject);
var ck:Integer;
begin
 ck:= libusb_release_interface(handle, InterfaceNumber);
 if (ck<0) then Application.MessageBox(libusb_error_name(ck),'ошибка освобождения USB интерфейса')
end;
А для отправки используете
libusb_control_transfer
Попробую! Спасибо!
АндрейНет вне форума Ответить с цитированием
Старый 06.06.2019, 00:07   #6
АндрейНет
Новичок
Джуниор
 
Регистрация: 04.06.2019
Сообщений: 5
По умолчанию

Нет.
Нифига.
ЗАдаю VID и PID точные, которые этой же либой и вынюхал.
Однако: Nil Device Handle found
Еще одно фиаско. Гугл плачет.

Последний раз редактировалось АндрейНет; 06.06.2019 в 01:27.
АндрейНет вне форума Ответить с цитированием
Старый 07.06.2019, 01:03   #7
АндрейНет
Новичок
Джуниор
 
Регистрация: 04.06.2019
Сообщений: 5
По умолчанию

Все проще оказалось.
https://support.microsoft.com/ru-ru/...-the-win32-api
или
https://github.com/andyyou/SendToPri...interHelper.cs
а также вот ))
http://www.delphikingdom.com/asp/vie...?catalogid=390
На всех NT пашет пока.
АндрейНет вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправить данные на открытый порт Leelabsuper C/C++ Сетевое программирование 1 17.09.2014 14:23
Программно отправить данные формы на сайт kockas Помощь студентам 1 29.05.2013 21:50
Отправить данные не открывая сокет Dexes PHP 8 03.05.2012 16:03
данные из си отредактировать в делфи и отправить в excel novenkaya Общие вопросы Delphi 4 11.04.2012 20:17
как отправить и загрузить данные с сервера? proglamer Работа с сетью в Delphi 3 11.03.2008 07:54