Всем привет
Надеюсь меня не будут склонять за мой англицкий, ну нету его
Сразу оговорюсь, MMD я в руках не держал и логи его не видел.
Все что ниже наковырянно методом тыка. Надеюсь что кто нибудь
разберется в том что я накропал ниже. В принципе это что то типа
описания протокола с упором на MMD.
Склепал устройство, написал код для PIC и драйвер для Винампа.
Все работает, но осталось дописать обработку разрывов связи и механизм
вкл-выкл компа. Кстати используя инфу для глупых голов можно
синтезировать еще 250 устройств
Format packets
St 1 000 1 XXXXXXXX P 000 1 YYYYYYYY P R 1111 p R ZZZZZZZZ p R DDDDDDDD p R .... DDDDDDDD p R SSSSSSSS p R 1
St - start packet bit 200 ms
1 - 20/20 ms
0 - 30/10 ms
R - sens connect bit
XXXXXXXX - ID sender (IDSD)
YYYYYYYY - ID receiver (IDRC)
DDDDDDDD - data byte (DATA)
ZZZZZZZZ - long packet
SSSSSSSS - parity summ = (((IDSD + IDRC) >> RLF(4)) + ((IDSD + IDRC) RRF(4)) + 0xA0 + 0xF + LONG + DATA +... + DATA
P - parity in header P = B0 xor B1 xor B2 xor B3 xor B4 xor B5 xor B6 xor B7 xor 1
p - parity in data p = B0 xor B1 xor B2 xor B3 xor B4 xor B5 xor B6 xor B7
Inbound data (from HU for MMD)
in all packets
InData[03] - HU power status
if InData[01] = 0x01
if InData[01] = 0x10
if InData[01] = 0x30 key command InData[07] - master key code, InData[08] - slaver key code
if InData[01] = 0x40 find from end to start 0x02 , next code MAIN POWER STATUS (MMD)
if InData[01] = 0x50 HU retraive text info
InData[07] = type 0x30 - disc title, 0x31 - track title
InData[08] = disc number (BCD)
InData[09] = track number (BCD)
InData[10] = frame number (HEX)
if InData[01] = 0x70
Outbound packets (from MMD to HU)
SEND_OK 0xA1
COM_STATUS STAT,0x10
STAT: 01 - init retraive
00 - ready
INIT_50 0x50,0x10,SENDER ID,RECEIVER ID,0x20,0x00,0x04
COM_50 0x50,0x10,SENDER ID,RECEIVER ID,0x20,0x01,0x04
COM_10_37 0x10,0x10,SENDER ID,RECEIVER ID,0x34,0x00,InQueire_Packet_ID,MAIN_POWER_STATUS
COM_10_00 0x10,0x10,SENDER ID,RECEIVER ID,0x23,0x01,0x00,0x38,0x00
COM_10_52 0x10,0x52,0x00,SENDER ID,RECEIVER ID,0x00,0x00,InQueire_Packet_ID,MAIN_POWER_STATUS
COM_11 0x11,0x10,SENDER ID,RECEIVER ID,BEEP_TONE,MODE,InQueire_Packet_ID,Master_Key_Code
COM_61_00 0x61,0x10,SENDER ID,RECEIVER ID,0x20,MODE,0x00,MAX_DISC_Numb_BCD,DISC_Numb_BCD,MIN_Hight_BCD,MIN_Low_BCD,SECONDS_BCD,
TRACK_Hight_BCD,TRACK_Low_BCD,0x00,Cn+0x00,Playing_Status,Text_0,...,Text_7
01 - Packet Code
02 - ???????
03 - MAIN ID (12 for MMD)
04 - HU ID ( 00 )
05 - Packet Code Slave 1
06 - mode
NO_SHOW 0x00
ERROR 0x01
TOC_READING 0x02
OK 0x04
SEEC_TRACK 0x07
SEEC_DISC 0x11
TOC_READING_1 0x40
NO_DISK 0xFA
STOP 0xFB
HEAT 0xFC
ERROR_SHOW 0xFD
TEST_MODE 0xFE
07 - Packet Code Slave 2
08 - Max Disk in device
09 - Current disk number
10 - Hundredths minutes ( 9 maximum, BCD)
11 - minutes (BCD)
12 - seconds (BCD)
13 - Hundredths current track number ( 9 maximum, BCD)
14 - current track number (BCD)
15 - ?????????
16 - Playing status slave
b'XX000000' - Random: 00-ON, 01-"1", 10-"2"
b'00XX0000' - Scan: 00-ON, 01-"1", 10-"2"
17 - Playing status master
b'0000000X' - ???
b'000000X0' - SCAN: 1-ON, 0-OFF
b'00000X00' - RDM: 1-ON, 0-OFF
b'0000X000' - ???
b'000X0000' - ???
b'0XX00000' - RPT: 00-TRK, 01-DSK, 10-MMD, 11-ALL
b'X0000000' - ???
18 ~ 25 - Sucsk text, data for stupid HU
COM_61_TXT 0x61,0x10,SENDER ID,RECEIVER ID,0x20,MODE,Type_Info,Info_Disc_Number,Info_Track_Number,Info_Text_Frame_Number,Info_Data_Status,
Info_Text_0,...,Info_Text_7
07 - Type info (30;31)
08 - Disc number
09 - Track number
10 - Frame number
11 - Status Info
00 - good data 1
01 - good data 1
02 - no data
Coalition
packets
HU MMD
00 > SEND_OK
01 > SEND_OK, INIT_50
10 > SEND_OK, COM_STATUS
30 > SEND_OK, COM_11
40 > SEND_OK, COM_10_37
50 > SEND_OK, COM_61_TXT
MMD HU
COM_61_00 > OK