PDA

Просмотр полной версии : Переименовать оси Mjoy16



seysen
27.11.2009, 18:32
Думаю сделать джойстик с двойным РУДом. Вот поэтому и хотелось бы переименовать оси в прошивке. Возможно ли это сделать в HEX файле?
С уважением, seysen

Alex Oz
27.11.2009, 20:08
В принципе это возможно,только не совсем понятно зачем

seysen
27.11.2009, 21:26
Для красоты :)
Просто чтобы все было честь по чести. Чтобы было 2 Throttle - Throttle1 и Throttle2, а не Throttle и Rudder, например

GVL224
27.11.2009, 23:42
Для красоты :)
Просто чтобы все было честь по чести. Чтобы было 2 Throttle - Throttle1 и Throttle2, а не Throttle и Rudder, например

Учти что 3 оси у МДЖоя имеют функцию автоцентрирования в момент включения. А вообще это баловство, через пару недель тебе будет глубоко паралельно как называются нетолько оси в прошивке контроллера но и как сам контроллер называется в Виндовсе. Главное что все настроено и работает :)

Baur
28.11.2009, 00:12
А вообще это баловство, через пару недель тебе будет глубоко паралельно как называются нетолько оси в прошивке контроллера но и как сам контроллер называется в Виндовсе.:D Хорошо сказано! А главное точно!:umora:

VadNik
28.11.2009, 00:38
Несогласен!
Throttle1 и Throttle2 это ВАЖНО!!!
Кода играешь в построение джойстика!!!
Когда играешь в игру, это уже неважно.

Alex Oz
28.11.2009, 00:38
Для красоты :)
Просто чтобы все было честь по чести. Чтобы было 2 Throttle - Throttle1 и Throttle2, а не Throttle и Rudder, например

Не, так не получится. В готовом хексе можно только одну ось на другую менять. А для таких фокусов надо менять хид -а это только через исходник."Тааак ша" - вместо второго тротла максимум слайдер :)

seysen
28.11.2009, 09:14
Жаль... :(

SAV1970
29.11.2009, 02:33
Подскажите как это исправить, подключаю контроллер а он опазнается в игровых устройствах как "-" ,раньше было все нормально опазновался как MJ16 .

Alex Oz
29.11.2009, 16:42
вычистить данные о джое из веток реестра

[-HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\MediaProperties\PrivateProperties\Joystick\OEM\VID_XXXX&PID_XXXX]
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM\VID_XXXX&PID_XXXX]

VID_XXXX&PID_XXXX - взять в диспетчере устройств ( для MJ16 VID_0000&PID_0002 )

После подключения по-новой название должно восстановится.

Можно воспользоваться утилиткой - можно переименовывать любые девайсы как понравится, удалить калибровочные данные.
Внимание! - некоторые антивирусы определяют наличие трояна ( см. отчёт c VIRUSTOTAL.COM )

seysen
29.11.2009, 18:04
Не, так не получится. В готовом хексе можно только одну ось на другую менять. А для таких фокусов надо менять хид -а это только через исходник."Тааак ша" - вместо второго тротла максимум слайдер :)

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

Alex Oz
30.11.2009, 00:37
Простите, я так понял что исходно прошивка была написана на ассемблере? Неужели дизассемблер не справится с задачей чтоб добыть исходник?
Извиняюсь если бред полный написал, в этих вопросах уже давно не очень шарю... :(

Да нет, всё верно. Теоретически. Осталось реализовать практически. :)

SAS_47
30.11.2009, 02:28
Для красоты :)
Просто чтобы все было честь по чести. Чтобы было 2 Throttle - Throttle1 и Throttle2, а не Throttle и Rudder, например

Тебе шашечки или ехать? :D Забей. Делай джой.

seysen
30.11.2009, 11:00
Да нет, всё верно. Теоретически. Осталось реализовать практически. :)

Попробую прогнать через дизассемблер. Может найду где присваиваются названия осей.

seysen
30.11.2009, 20:11
Нашел прогу avrdasm
Вроде расковырял. Вот только досада, разобрать ни чего не могу :lol:

Кто видел асемблер в лицо? Клиент похож? :D
00000000: C026 rjmp 0000004E
00000002: 0000 nop
00000004: 940C09A7 jmp 0000134E
00000008: 0000 nop
0000000A: 0000 nop
0000000C: 0000 nop
0000000E: 0000 nop
00000010: 0000 nop
00000012: 0000 nop
00000014: 0000 nop
00000016: 0000 nop
00000018: 0000 nop
0000001A: 0000 nop
0000001C: 0000 nop
0000001E: 0000 nop
00000020: 0000 nop
00000022: 0000 nop
00000024: 0000 nop
00000026: 0000 nop
00000028: 0000 nop
0000002A: 0000 nop
0000002C: 0000 nop
0000002E: 0000 nop
00000030: 0000 nop
00000032: 0000 nop
00000034: 0000 nop
00000036: 0000 nop
00000038: 0000 nop
0000003A: 0000 nop
0000003C: 9518 reti
0000003E: 0000 nop
00000040: 0000 nop
00000042: 0000 nop
00000044: 0000 nop
00000046: 0000 nop
00000048: 0000 nop
0000004A: 0000 nop
0000004C: C097 rjmp 0000017C
0000004E: EC49 ldi r20,#201
00000050: BF4D out $3D,r20
00000052: 940E0081 call 00000102
00000056: 27BB clr r27
00000058: 27DD clr r29
0000005A: 27FF clr r31
0000005C: 2444 clr r4
0000005E: E042 ldi r20,#2
00000060: 2A44 or r4,r20
00000062: 24EE clr r14
00000064: 940E0B06 call 0000160C
00000068: 940E0B18 call 00001630
0000006C: 940E0B26 call 0000164C
00000070: 940E0ADF call 000015BE
00000074: 940E0A8E call 0000151C
00000078: E047 ldi r20,#7
0000007A: BB48 out $18,r20
0000007C: EF4F ser r20
0000007E: BB45 out $15,r20
00000080: E748 ldi r20,#120
00000082: BB42 out $12,r20
00000084: 2744 clr r20
00000086: BB4F out $1F,r20
00000088: E846 ldi r20,#134
0000008A: B946 out $6,r20
0000008C: E440 ldi r20,#64
0000008E: B947 out $7,r20
00000090: E002 ldi r16,#2
00000092: BF0C out $3C,r16
00000094: E000 ldi r16,#0
00000096: BF02 out $32,r16
00000098: B709 in r16,$39
0000009A: 6002 ori r16,#$2
0000009C: BF09 out $39,r16
0000009E: E00D ldi r16,#13
000000A0: BF03 out $33,r16
000000A2: 940E059E call 00000B3C
000000A6: 940E00CB call 00000196
000000AA: E04F ldi r20,#15
000000AC: BF45 out $35,r20
000000AE: E440 ldi r20,#64
000000B0: BF4B out $3B,r20
000000B2: 9478 sei
000000B4: 9B80 sbis $10,0
000000B6: C00D rjmp 000000D2
000000B8: 3082 cpi r24,#2
000000BA: F0B9 breq 000000EA
000000BC: 3083 cpi r24,#3
000000BE: F089 breq 000000E2
000000C0: FC45 sbrc r4,5
000000C2: 940E0649 call 00000C92
000000C6: 3080 cpi r24,#0
000000C8: F7A9 brne 000000B4
000000CA: FC40 sbrc r4,0
000000CC: 940E00CB call 00000196
000000D0: CFF1 rjmp 000000B4
000000D2: EF4F ser r20
000000D4: 9980 sbic $10,0
000000D6: CFEE rjmp 000000B4
000000D8: 954A dec r20
000000DA: F7E1 brne 000000D4
000000DC: 940E0A8E call 0000151C
000000E0: CFE9 rjmp 000000B4
000000E2: 940E0D39 call 00001A72
000000E6: E084 ldi r24,#4
000000E8: CFE5 rjmp 000000B4
000000EA: E6C0 ldi r28,#96
000000EC: 2D7C mov r23,r12
000000EE: 940E0B3C call 00001678
000000F2: 940E0BC0 call 00001780
000000F6: 940E0B4C call 00001698
000000FA: 940E0C5F call 000018BE
000000FE: E084 ldi r24,#4
00000100: CFD9 rjmp 000000B4
00000102: E1FC ldi r31,#28
00000104: E3EA ldi r30,#58
00000106: E0D3 ldi r29,#3
00000108: EDC5 ldi r28,#213
0000010A: E142 ldi r20,#18
0000010C: 9135 lpm r19,z+
0000010E: 9339 st y+,r19
00000110: 954A dec r20
00000112: F7E1 brne 0000010C
00000114: E0D0 ldi r29,#0
00000116: E0C4 ldi r28,#4

И так далее... Много-много строк

Alex Oz
01.12.2009, 13:26
Нашел прогу avrdasm
Вроде расковырял. Вот только досада, разобрать ни чего не могу :lol:
Кто видел асемблер в лицо? Клиент похож?


Теперь осталось разделить мух и котлеты по разным тарелкам (код от данных)

seysen
01.12.2009, 23:28
Теперь осталось выяснить как определить нужные данные :D

Строка состоит из 4 колонок
Для примера

00000C6C: EF24 ldi r18,#244
00000C6E: 1702 cp r16,r18
00000C70: 0713 cpc r17,r19
00000C72: F060 brlo 00000C8C
.......
00000B1A: 937000CE sts $CE,r23
Лезем в поиск и находим ЭТО (http://www.gaw.ru/pdf/Atmel/AVR/atmega16p.pdf)
И долго втыкаем над описанием функций :rtfm:

Все что понял
1 - думаю это номер строки в 16-чной системе
2 - не понял до конца что это... кажется адреса памяти (данных если дословно переводить)
3 - функция
4 - аргументы функции (регистры, строки)

В последней строке примера во второй колонке не похоже что адрес памяти. Больше похоже на 16-тиричное значение...
Как перевести 16-тиричное значение в текст?
Я понимаю что это тупой подход, но других идей у меня нет...

Alex Oz
02.12.2009, 00:58
Предлагаю начать от печки, т.е. с изучения ассемблера. А там глядишь и с дизассемблированем полегче будет :)

Исходный код для Mjoy8 в сети имеется - в качестве пособия для начинающих :)

seysen
02.12.2009, 08:34
Было бы время... Студенческие времена уже кончились. Да и программирование я уже достаточно сильно подзабыл, чтобы сразу ассемблер изучать.
Вобщем буду пока делать с обычной прошивкой. Потом может перепрошью.
Кстати, исходник для mjoy8 немого отличается от дизассемблированного файла прошивки.

ender
03.12.2009, 02:20
а оно вам надо - дизассемблировать, ассемблировать?
http://www.obdev.at/products/vusb/prjhid.html - там есть куча проектов (на C), которые доработать напильником, и будет пристойная прошивка для mjoy16. правда вот, всякие тумблеры и енкодеры, если нужно, придётся самостоятельно реализовывать.
но есть один момент - я сам не пробовал, а получится ли иметь 2 оси типа throttle на одном устройстве?

seysen
03.12.2009, 09:33
А в чем может быть проблема в реализации двух осей тротла? Ось, она и в африке ось

Alex Oz
03.12.2009, 10:33
правда вот, всякие тумблеры и енкодеры, если нужно, придётся самостоятельно реализовывать.
но есть один момент - я сам не пробовал, а получится ли иметь 2 оси типа throttle на одном устройстве?

тумблеры ещё ладно, вот энкодеры( да чтоб ещё можно было ставить любого качества), да на 4-х пакетном низкоскоростном хиде, да чтоб лучше чем у Миндаускаса - задачка действительная нетривиальная.


А в чем может быть проблема в реализации двух осей тротла? Ось, она и в африке ось

Ежели обьявить стандартно

Usage(Throttle),
Usage(Throttle)

- то ничего путного не будет

--------------------------------------------

Упс... Как раз именно так и оказалось работоспособно!!! :)
Но больше двух винда отказывается их понимать. И вообще оси из Simulation_Controls больше двух не желает видеть.

seysen
03.12.2009, 11:13
А я гляжу Вы шарите в этом деле :)

seysen
03.12.2009, 20:02
Да... Вот только как это реализовать?

seysen
13.12.2009, 23:39
Нашел тут занимательную программку - HID Descriptor Tool
Открыл стандартный дескриптор джойстика, добавил еще один Usage_Page(Simulation Controls) Usage(Throttle)? запустил проверку и действительно ошибок не выдало :)
Более того, засунул еще один Hat Switch в Generic Desktop и тоже получилось :)

---------- Добавлено в 23:39 ---------- Предыдущее сообщение было написано в 23:26 ----------

А еще ни чего не мешает засунуть туда описание мыши. И будет у вас как в X52 манипулятор мыши на джойстике :)
Только нафиг это нужно, это другой вопрос :D

Alex Oz
14.12.2009, 03:01
Эх, если б он ещё говорил что не только нет ошибок, но что эта хрень ещё будет работать в винде....

ender
14.12.2009, 13:17
А еще ни чего не мешает засунуть туда описание мыши. И будет у вас как в X52 манипулятор мыши на джойстике :)
Только нафиг это нужно, это другой вопрос :D

вот такая штука:

0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x01, // REPORT_ID (1)
0x09, 0x01, // USAGE (Pointer)
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x15, 0x01, // LOGICAL_MINIMUM (1)
0x27, 0xFF, 0xFF, 0x00, 0x00, // LOGICAL_MAXIMUM (65535)
0x75, 0x10, // REPORT_SIZE (16)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x32, // USAGE (Z)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x0c, // USAGE_MAXIMUM (Button 12)
0x15, 0x01, // LOGICAL_MINIMUM (1)
0x25, 0x0c, // LOGICAL_MAXIMUM (12)
0x75, 0x04, // REPORT_SIZE (4)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0xc0, // END_COLLECTION
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x02, // USAGE (Mouse)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x02, // REPORT_ID (2)
0x09, 0x01, // USAGE (Pointer)
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x15, 0x01, // LOGICAL_MINIMUM (1)
0x26, 0xFF, 0x1F, // LOGICAL_MAXIMUM (8191)
0x35, 0xE0, // PHYSICAL_MINIMUM (-32)
0x45, 0x20, // PHYSICAL_MAXIMUM (32)
0x75, 0x10, // REPORT_SIZE (16)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x06, // INPUT (Data,Var,Rel)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x02, // USAGE_MAXIMUM (Button 2)
0x15, 0x01, // LOGICAL_MINIMUM (1)
0x25, 0x02, // LOGICAL_MAXIMUM (2)
0x75, 0x04, // REPORT_SIZE (4)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0x75, 0x04, // REPORT_SIZE (4)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0xc0, // END_COLLECTION
0xc0 // END_COLLECTION

определяется как 2 устройства в диспетчере устройств - джойстик и мышь. и оба девайса работают. плюс, оси мыши могут быть и absolute, а не relative. и это тоже работает. но нафига? :)