На форуме запрещены ссылки на пиратский контент))).Nick писал(а):Кстати, интересно, где можно взять дистрибутив винды, чтобы его поставить в виртуалбоксе? И какой лучше брать?
Сканаторная голова, запустить под Linux
- tooshka
- Почётный участник
- Сообщения: 1803
- Зарегистрирован: 24 окт 2012, 14:26
- Репутация: 209
- Настоящее имя: Андрей
- Откуда: Нижний Новгород
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
Милая, ты услышь меня
под окном стою со своим я ЧПУ! (Протяжно; с надрывом; форте)
Внимание!!! Чрезмерное увлечение ЧПУ приводит к проблемам в семейных отношениях!
под окном стою со своим я ЧПУ! (Протяжно; с надрывом; форте)
Внимание!!! Чрезмерное увлечение ЧПУ приводит к проблемам в семейных отношениях!
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
Черт, я так и думал
Кстати, если сделать
cat /dev/bus/usb/005/010
(/dev/bus/usb/005/010 это плата)
то выдает следующее:
Кстати, если сделать
cat /dev/bus/usb/005/010
(/dev/bus/usb/005/010 это плата)
то выдает следующее:
Код: Выделить всё
12 01 01 01 00 00 00 40 51 04 01 90 05 05 01 02 00 01 09 02
20 00 01 01 00 c0 00 09 04 00 00 02 00 00 00 00 07 05 01 02
40 00 00 07 05 81 02 40 00 00
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
scanlab, зараза, отказывается отправлять спеки... Ок, пойдем трудным путем...
Взял я usb сниффер и наснифил следующее: Видно, что комп отправляет:
На что получает ответ:
где 87 09 - желаемая величина.
Теперь вопрос, как все это послать плате?
Нашел такую штуку: https://github.com/walac/pyusb/blob/mas ... torial.rst
Но с ней не удается прочитать из девайса - вроде как ничего не отправляет...
Вот мой код:
Взял я usb сниффер и наснифил следующее: Видно, что комп отправляет:
Код: Выделить всё
00000000 14 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000010 00 00 00 00 00 C7 09 16 00 .........
Код: Выделить всё
00000000 94 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000010 00 00 00 00 00 87 09 00 00 .........
Теперь вопрос, как все это послать плате?
Нашел такую штуку: https://github.com/walac/pyusb/blob/mas ... torial.rst
Но с ней не удается прочитать из девайса - вроде как ничего не отправляет...
Код: Выделить всё
Traceback (most recent call last):
File "1.py", line 138, in <module>
main()
File "1.py", line 109, in main
dev.write(1, raw)
File "/usr/local/lib/python2.6/dist-packages/usb/core.py", line 921, in write
self.__get_timeout(timeout)
File "/usr/local/lib/python2.6/dist-packages/usb/backend/libusb0.py", line 528, in bulk_write
data, timeout)
File "/usr/local/lib/python2.6/dist-packages/usb/backend/libusb0.py", line 611, in __write
timeout
File "/usr/local/lib/python2.6/dist-packages/usb/backend/libusb0.py", line 425, in _check
raise USBError(errmsg, ret)
usb.core.USBError: [Errno None] Connection timed out
Код: Выделить всё
#!/usr/bin/python
import os
import sys
import time
import usb.core
import usb.util
packet_len = 64
# Packing a request. Please see HexWax documentation for the list of all commands
# Packets are 64 bytes long, most of the commands are 4 bytes long. So up to 18
# can be batched into a packet. For example command with bytes [0x94, 0x0, 0x0, 0x0]
# is getting firmware id
def pack_request(*arguments):
packet = [0x0] * packet_len
i = 0
for arg in arguments:
packet[i] = arg
i += 1
#packet[0:4] = [0x94, 0x0, 0x0, 0x0] #get firmware id
return ''.join([chr(c) for c in packet])
# Logs error to the error output
def log_error(functionName, ret):
sys.stderr.write(functionName + (" failed with return code %d\n" % ret))
# Logs result onto standard output. Result is 64 bytes as decimal numbers
# Response is 64 bytes long
def show_result(bytes):
print ("Result:")
print (''.join(['%d ' % abyte for abyte in bytes]))
# Turns LED on the bord on or off depending on input parameter on. 0 is turning
# the led on 1 is turning it off. The command is 0x9F set port bit (set output
# pin value), port is 0x03 (port C), 0x06 is bit index (so this is 7th bit),
# and the last bit is 0 for clear, 1 for set
def set_led(on, dev):
if on:
param = 0x00
else:
param = 0x01
raw = pack_request(0x9F, 0x03, 0x06, param) #set port bit - 0 to turn it on 1 to turn it off
dev.write(1, raw, 0, 100)
bytes = dev.read(0x81, packet_len, 0, 100)
show_result(bytes)
def main():
#initialising debuging - don't have a clue if this will work
os.environ['PYUSB_LOG_FILENAME'] = 'debug'
dev = usb.core.find(idVendor=0x0451, idProduct=0x9001)
cfg = dev.get_active_configuration()
alt = usb.util.find_descriptor(cfg, find_all=True, bInterfaceNumber=1)
print alt
intf = cfg[(0,0)]
ep = usb.util.find_descriptor(
intf,
# match the first OUT endpoint
custom_match = \
lambda e: \
usb.util.endpoint_direction(e.bEndpointAddress) == \
usb.util.ENDPOINT_OUT)
print ep
# was it found?
if dev is None:
raise ValueError('Device not found')
try:
# dev.detach_kernel_driver(0)
print "ok"
except: # this usually mean that kernel driver has already been dettached
print "not ok"
pass
# set the active configuration, the device has 2 configurations you can see them
# by using: lsusb -vvv -d 0x0b40:
# this device has configurations 1 and 2 I'm using the first one, not sure at the
# moment if 2nd would work the same
dev.set_configuration(1)
#removed following lines if you're running this from command line
#my netbeans didn't want to show standard output so I had to redirect it to
#a file
# fsock = open('out.log', 'w')
# sys.stdout = fsock
# fsock2 = open('out.err', 'w')
# sys.stderr = fsock2
#prepare our own command - this is get firmware id, only the first byte is
#significant
raw = pack_request(0x14,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC7,0x09,0x16,0x00)
#send the packet
dev.write(1, raw)
raw = pack_request(0x94, 0x00, 0x06, 0x00, 0x00)
dev.write(1, raw)
#then read the result
try:
bytes = dev.read(1, 1, 1000)
show_result(bytes)
except:
pass
#prepare another request
#set register TRISC bit 6 - port C bit 6 to be output
#mind though 0x9B command can be used to write any register, so check the
#microcontroller's datasheet
# raw = pack_request(0x94, 0x00, 0x06, 0x00, 0X00)
# dev.write(1, raw, 0, 100)
# bytes = dev.read(packet_len, 100)
# show_result(bytes)
if __name__ == '__main__':
main()
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
хммм... там в функции read есть endpoint, но я не могу понять, откуда его брать?
https://github.com/walac/pyusb/blob/mas ... re.py#L924
https://github.com/walac/pyusb/blob/mas ... re.py#L924
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
О, и еще, там в коде есть такие строчки
По ходу он еще не может драйвер ядра отсоединить... но не факт, что это важно...
raise USBError(errmsg, ret)
usb.core.USBError: [Errno None] could not detach kernel driver from interface 0: No data available
Код: Выделить всё
try:
dev.detach_kernel_driver(0)
except: # this usually mean that kernel driver has already been dettached
pass
raise USBError(errmsg, ret)
usb.core.USBError: [Errno None] could not detach kernel driver from interface 0: No data available
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
Ухты... она начала что-то отвечать.... походу надо было определенное количество байт ей запихукть - в сумме надо 35 байт...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
хммм... точнее надо послать 25, потом два раза по 5 байт...
- selenur
- Почётный участник
- Сообщения: 4605
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1622
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
При подключении usb устройства, компьютер от устройства получает id идентификаторы, потом список конечных точек, в твоем случае только одна точка (а бывает и больше, например при подключении всего 1-го разъма usb, в системе появляется мышь и клавиатура), после этого у конечной точки запрашивается протокол обмена, для приема и передачи(по отдельности), так вот тут передается размер данных, в твоем случае 35 байт, нельзя изменять размер этих данных, т.к. пакеты будут игнорироваться. а так ты вообще молодец!
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
- selenur
- Почётный участник
- Сообщения: 4605
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1622
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
странно....Nick писал(а):хммм... точнее надо послать 25, потом два раза по 5 байт...
Я просто сейчас изучаю протокол usb, и такие посылки не должны работать, пожет твой код остаток данных нулями заполняет?
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
- selenur
- Почётный участник
- Сообщения: 4605
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1622
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
да и размер данных делают обычно 8,16,32, или 64 байта
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
хммм... как-то оно странно себя ведет... то ему надо один раз отправить 0x94, 0x00, 0x06, 0x00, 0x00, то два раза, иначе вываливает в ошибку...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
ха, вроде начинаю его побеждать!
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
Вроде победил . Хотя надо еще с головой проверить, пока плату тестирую на столе .
В итоге, он шлет пакеты, есть несколько типов:
1. комманда
14 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 -- (25, 'bytes')
последние 2 байта - номер команды, дальше с конца могут быть арументы.
2. запись в лист
1 байт - длинна пакета
2-3 - оффет (если все не вместилось в предыдущий пакет)
потом два байта хрен знает что, но если они = 04 00, то это вопсринемается как запись во внутренний лист
и потом подряд записи в лист, а именно по 8 байт,
1-2 - номер команды
2-6 - параметры
например
03 00 FF FF AA AA 00 00 - маркировать в точку (x,y) (FFFF, AAAA)
Если отправляем 0x94, 0x00, 0x06, 0x00, 0x00, то плата шлет нам какой-то ответ... Желательно после каждой записи получать ответик...
Вот как-то так . Делаю я это в первый раз - делаю как могу
PS Самое главное - Итог - плата работает из под Linux и из python!
В итоге, он шлет пакеты, есть несколько типов:
1. комманда
14 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 -- (25, 'bytes')
последние 2 байта - номер команды, дальше с конца могут быть арументы.
2. запись в лист
1 байт - длинна пакета
2-3 - оффет (если все не вместилось в предыдущий пакет)
потом два байта хрен знает что, но если они = 04 00, то это вопсринемается как запись во внутренний лист
и потом подряд записи в лист, а именно по 8 байт,
1-2 - номер команды
2-6 - параметры
например
03 00 FF FF AA AA 00 00 - маркировать в точку (x,y) (FFFF, AAAA)
Если отправляем 0x94, 0x00, 0x06, 0x00, 0x00, то плата шлет нам какой-то ответ... Желательно после каждой записи получать ответик...
Вот как-то так . Делаю я это в первый раз - делаю как могу
PS Самое главное - Итог - плата работает из под Linux и из python!
- selenur
- Почётный участник
- Сообщения: 4605
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1622
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
Вот немного информации, по устройству протокола USB.
Пример свойств, моего устройства (которое показал снифер): 1) Собственно описание usb устройства
2) Описание того какое количество устройств, будет в системе, и прочее
далее идет описание интерфейса, того самого единого устройства.
3) параметры порта/канала для передачи от компьютера к USB устройству (желтым выделено направление, и тот самый адрес что ты спрашивал пару постов назад), а красным выделил сколько байт обязательно нужно посылать в устройство.
4) параметры порта/канала для передачи от USB устройства в компьютер, а также адрес, и размер пакетов.
Пример свойств, моего устройства (которое показал снифер): 1) Собственно описание usb устройства
2) Описание того какое количество устройств, будет в системе, и прочее
далее идет описание интерфейса, того самого единого устройства.
3) параметры порта/канала для передачи от компьютера к USB устройству (желтым выделено направление, и тот самый адрес что ты спрашивал пару постов назад), а красным выделил сколько байт обязательно нужно посылать в устройство.
4) параметры порта/канала для передачи от USB устройства в компьютер, а также адрес, и размер пакетов.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
Вот это то и интересно, что у меня нужно отправлять пакет не фиксированной длины... если отправлять фиксированной (пустое место добиваем нулями), то плата начинает тупить.selenur писал(а):а красным выделил сколько байт обязательно нужно посылать в устройство.
- selenur
- Почётный участник
- Сообщения: 4605
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1622
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
Есть возможность под windows сниффером получить данные, при запуске родного ПО? (сниффер: http://www.usblyzer.com/ 30 дней бесплатно работает).Nick писал(а):Вот это то и интересно, что у меня нужно отправлять пакет не фиксированной длины... если отправлять фиксированной (пустое место добиваем нулями), то плата начинает тупить.selenur писал(а):а красным выделил сколько байт обязательно нужно посылать в устройство.
Т.к. странно, и интересно, почему с нефиксированной длиной у тебя работает....
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
Вот тут запакованные данные, как раз от этого сниффера и от родного ПО:
Re: Сканаторная голова, запустить под Linux #23
Re: Сканаторная голова, запустить под Linux #23
- selenur
- Почётный участник
- Сообщения: 4605
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1622
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
А можешь описание USB устройства показать...
т.к. и в правду есть поссылки в устройство разной длины...
т.к. и в правду есть поссылки в устройство разной длины...
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
Только если вечером... и то не факт - плата уже на производстве, а там винды вообще нет...
- selenur
- Почётный участник
- Сообщения: 4605
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1622
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: Сканаторная голова, запустить под Linux
Ну ладно.... просто интересно как так получается....
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/