2 * Copyright (C) 2000, 2001, 2002, 2003 HÃ¥kan Hjort <d95hjort@dtek.chalmers.se>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 #include "nav_types.h"
28 #include "dvdread_internal.h"
30 void navRead_PCI(pci_t
*pci
, unsigned char *buffer
) {
33 CHECK_VALUE(sizeof(pci_t
) == PCI_BYTES
- 1); // -1 for substream id
35 memcpy(pci
, buffer
, sizeof(pci_t
));
37 /* Endian conversions */
40 B2N_32(pci
->pci_gi
.nv_pck_lbn
);
41 B2N_16(pci
->pci_gi
.vobu_cat
);
42 B2N_32(pci
->pci_gi
.vobu_s_ptm
);
43 B2N_32(pci
->pci_gi
.vobu_e_ptm
);
44 B2N_32(pci
->pci_gi
.vobu_se_e_ptm
);
47 for(i
= 0; i
< 9; i
++)
48 B2N_32(pci
->nsml_agli
.nsml_agl_dsta
[i
]);
51 B2N_16(pci
->hli
.hl_gi
.hli_ss
);
52 B2N_32(pci
->hli
.hl_gi
.hli_s_ptm
);
53 B2N_32(pci
->hli
.hl_gi
.hli_e_ptm
);
54 B2N_32(pci
->hli
.hl_gi
.btn_se_e_ptm
);
56 /* pci hli btn_colit */
57 for(i
= 0; i
< 3; i
++)
58 for(j
= 0; j
< 2; j
++)
59 B2N_32(pci
->hli
.btn_colit
.btn_coli
[i
][j
]);
61 /* NOTE: I've had to change the structure from the disk layout to get
62 * the packing to work with Sun's Forte C compiler. */
65 for(i
= 0; i
< 36; i
++) {
66 char tmp
[sizeof(pci
->hli
.btnit
[i
])], swap
;
67 memcpy(tmp
, &(pci
->hli
.btnit
[i
]), sizeof(pci
->hli
.btnit
[i
]));
68 /* Byte 4 to 7 are 'rotated' was: ABCD EFGH IJ is: ABCG DEFH IJ */
75 /* Then there are the two B2N_24(..) calls */
76 #ifndef WORDS_BIGENDIAN
85 memcpy(&(pci
->hli
.btnit
[i
]), tmp
, sizeof(pci
->hli
.btnit
[i
]));
93 CHECK_VALUE(pci
->pci_gi
.zero1
== 0);
96 CHECK_VALUE(pci
->hli
.hl_gi
.zero1
== 0);
97 CHECK_VALUE(pci
->hli
.hl_gi
.zero2
== 0);
98 CHECK_VALUE(pci
->hli
.hl_gi
.zero3
== 0);
99 CHECK_VALUE(pci
->hli
.hl_gi
.zero4
== 0);
100 CHECK_VALUE(pci
->hli
.hl_gi
.zero5
== 0);
102 /* Are there buttons defined here? */
103 if((pci
->hli
.hl_gi
.hli_ss
& 0x03) != 0) {
104 CHECK_VALUE(pci
->hli
.hl_gi
.btn_ns
!= 0);
105 CHECK_VALUE(pci
->hli
.hl_gi
.btngr_ns
!= 0);
107 CHECK_VALUE((pci
->hli
.hl_gi
.btn_ns
!= 0 && pci
->hli
.hl_gi
.btngr_ns
!= 0)
108 || (pci
->hli
.hl_gi
.btn_ns
== 0 && pci
->hli
.hl_gi
.btngr_ns
== 0));
112 for(i
= 0; i
< pci
->hli
.hl_gi
.btngr_ns
; i
++) {
113 for(j
= 0; j
< (36 / pci
->hli
.hl_gi
.btngr_ns
); j
++) {
114 int n
= (36 / pci
->hli
.hl_gi
.btngr_ns
) * i
+ j
;
115 CHECK_VALUE(pci
->hli
.btnit
[n
].zero1
== 0);
116 CHECK_VALUE(pci
->hli
.btnit
[n
].zero2
== 0);
117 CHECK_VALUE(pci
->hli
.btnit
[n
].zero3
== 0);
118 CHECK_VALUE(pci
->hli
.btnit
[n
].zero4
== 0);
119 CHECK_VALUE(pci
->hli
.btnit
[n
].zero5
== 0);
120 CHECK_VALUE(pci
->hli
.btnit
[n
].zero6
== 0);
122 if (j
< pci
->hli
.hl_gi
.btn_ns
) {
123 CHECK_VALUE(pci
->hli
.btnit
[n
].x_start
<= pci
->hli
.btnit
[n
].x_end
);
124 CHECK_VALUE(pci
->hli
.btnit
[n
].y_start
<= pci
->hli
.btnit
[n
].y_end
);
125 CHECK_VALUE(pci
->hli
.btnit
[n
].up
<= pci
->hli
.hl_gi
.btn_ns
);
126 CHECK_VALUE(pci
->hli
.btnit
[n
].down
<= pci
->hli
.hl_gi
.btn_ns
);
127 CHECK_VALUE(pci
->hli
.btnit
[n
].left
<= pci
->hli
.hl_gi
.btn_ns
);
128 CHECK_VALUE(pci
->hli
.btnit
[n
].right
<= pci
->hli
.hl_gi
.btn_ns
);
129 //vmcmd_verify(pci->hli.btnit[n].cmd);
132 CHECK_VALUE(pci
->hli
.btnit
[n
].btn_coln
== 0);
133 CHECK_VALUE(pci
->hli
.btnit
[n
].auto_action_mode
== 0);
134 CHECK_VALUE(pci
->hli
.btnit
[n
].x_start
== 0);
135 CHECK_VALUE(pci
->hli
.btnit
[n
].y_start
== 0);
136 CHECK_VALUE(pci
->hli
.btnit
[n
].x_end
== 0);
137 CHECK_VALUE(pci
->hli
.btnit
[n
].y_end
== 0);
138 CHECK_VALUE(pci
->hli
.btnit
[n
].up
== 0);
139 CHECK_VALUE(pci
->hli
.btnit
[n
].down
== 0);
140 CHECK_VALUE(pci
->hli
.btnit
[n
].left
== 0);
141 CHECK_VALUE(pci
->hli
.btnit
[n
].right
== 0);
142 for (k
= 0; k
< 8; k
++)
143 CHECK_VALUE(pci
->hli
.btnit
[n
].cmd
.bytes
[k
] == 0); //CHECK_ZERO?
150 void navRead_DSI(dsi_t
*dsi
, unsigned char *buffer
) {
153 CHECK_VALUE(sizeof(dsi_t
) == DSI_BYTES
- 1); // -1 for substream id
155 memcpy(dsi
, buffer
, sizeof(dsi_t
));
157 /* Endian conversions */
160 B2N_32(dsi
->dsi_gi
.nv_pck_scr
);
161 B2N_32(dsi
->dsi_gi
.nv_pck_lbn
);
162 B2N_32(dsi
->dsi_gi
.vobu_ea
);
163 B2N_32(dsi
->dsi_gi
.vobu_1stref_ea
);
164 B2N_32(dsi
->dsi_gi
.vobu_2ndref_ea
);
165 B2N_32(dsi
->dsi_gi
.vobu_3rdref_ea
);
166 B2N_16(dsi
->dsi_gi
.vobu_vob_idn
);
169 B2N_16(dsi
->sml_pbi
.category
);
170 B2N_32(dsi
->sml_pbi
.ilvu_ea
);
171 B2N_32(dsi
->sml_pbi
.ilvu_sa
);
172 B2N_16(dsi
->sml_pbi
.size
);
173 B2N_32(dsi
->sml_pbi
.vob_v_s_s_ptm
);
174 B2N_32(dsi
->sml_pbi
.vob_v_e_e_ptm
);
177 for(i
= 0; i
< 9; i
++) {
178 B2N_32(dsi
->sml_agli
.data
[ i
].address
);
179 B2N_16(dsi
->sml_agli
.data
[ i
].size
);
183 B2N_32(dsi
->vobu_sri
.next_video
);
184 for(i
= 0; i
< 19; i
++)
185 B2N_32(dsi
->vobu_sri
.fwda
[i
]);
186 B2N_32(dsi
->vobu_sri
.next_vobu
);
187 B2N_32(dsi
->vobu_sri
.prev_vobu
);
188 for(i
= 0; i
< 19; i
++)
189 B2N_32(dsi
->vobu_sri
.bwda
[i
]);
190 B2N_32(dsi
->vobu_sri
.prev_video
);
193 for(i
= 0; i
< 8; i
++)
194 B2N_16(dsi
->synci
.a_synca
[i
]);
195 for(i
= 0; i
< 32; i
++)
196 B2N_32(dsi
->synci
.sp_synca
[i
]);
202 CHECK_VALUE(dsi
->dsi_gi
.zero1
== 0);