212 | | goto skip; |
| 218 | // goto skip; |
| 219 | { |
| 220 | // VERBOSE(VB_VBI, QString("XDS Packet : %1 %2").arg(b1).arg(b2)); |
| 221 | // Detect data packets |
| 222 | if (xds_stime) { |
| 223 | if (b1 == 0x0F) |
| 224 | { |
| 225 | xds_stime = 0; |
| 226 | VERBOSE(VB_VBI, QString("XDS Packet: Start Time/Program ID: End")); |
| 227 | } else { |
| 228 | // Process Start Time packets here |
| 229 | VERBOSE(VB_VBI, QString("XDS Packet: Start Time/Program ID: Packet %1 %2").arg(b1).arg(b2)); |
| 230 | } |
| 231 | } else if (xds_plength) { |
| 232 | if (b1 == 0x0F) |
| 233 | { |
| 234 | xds_plength = 0; |
| 235 | // Payload bytes 1 and 2 are minutes and hours in length |
| 236 | if (xds_cnt > 0) |
| 237 | VERBOSE(VB_VBI, QString("XDS Packet: Program Length: %1 hours, %1 minutes").arg(xds_buf[1]-64).arg(xds_buf[0]-64)); |
| 238 | // Payload bytes 3 and 4 are elapsed minutes and hours in length |
| 239 | if (xds_cnt >= 2) |
| 240 | VERBOSE(VB_VBI, QString("XDS Packet: Program Elapsed: %1 hours, %1 mintues").arg(xds_buf[3]-64).arg(xds_buf[2]-64)); |
| 241 | // If Payload byte 6 is filler 0x40, then payload byte 5 is elapsed seconds |
| 242 | if ((xds_cnt >= 4) && (xds_buf[5]==0x40)) |
| 243 | VERBOSE(VB_VBI, QString("XDS Packet: Program Elapsed: %1 seconds").arg(xds_buf[4]-64)); |
| 244 | |
| 245 | // VERBOSE(VB_VBI, QString("XDS Packet: Program Length/Time in Show: End")); |
| 246 | } else { |
| 247 | // Process Program Length packets here |
| 248 | // VERBOSE(VB_VBI, QString("XDS Packet: Program Length/Time in Show: Packet %1 %2").arg(b1).arg(b2)); |
| 249 | xds_buf[xds_cnt] = b1; |
| 250 | xds_cnt++; |
| 251 | xds_buf[xds_cnt] = b2; |
| 252 | xds_cnt++; |
| 253 | } |
| 254 | } else if (xds_pname) { |
| 255 | if (b1 == 0x0F) |
| 256 | { |
| 257 | xds_pname = 0; |
| 258 | // VERBOSE(VB_VBI, QString("XDS Packet: Program Name: B2 %1").arg(b2)); |
| 259 | VERBOSE(VB_VBI, QString("XDS Packet: Program Name: %1").arg(xds_ProgramName)); |
| 260 | // VERBOSE(VB_VBI, QString("XDS Packet: Program Name: End")); |
| 261 | } else { |
| 262 | // Process Program Name packets here |
| 263 | // VERBOSE(VB_VBI, QString("XDS Packet: Program Name: Packet %1 %2").arg(b1).arg(b2)); |
| 264 | xds_ProgramName += CharCC(b1); |
| 265 | xds_ProgramName += CharCC(b2); |
| 266 | } |
| 267 | } else if (xds_ptype) { |
| 268 | if (b1 == 0x0F) |
| 269 | { |
| 270 | xds_ptype = 0; |
| 271 | VERBOSE(VB_VBI, QString("XDS Packet: Program Type: End")); |
| 272 | } else { |
| 273 | // Process Program Type packets here |
| 274 | if ((b1 == 0xA8) || (b2 == 0xA8)) |
| 275 | VERBOSE(VB_VBI, QString("XDS Packet: Program Type: Advertisement")); |
| 276 | |
| 277 | VERBOSE(VB_VBI, QString("XDS Packet: Program Type: %1 %2").arg(b1).arg(b2)); |
| 278 | } |
| 279 | } else if (xds_vchip) { |
| 280 | if (b1 == 0x0F) |
| 281 | { |
| 282 | xds_vchip = 0; |
| 283 | // VERBOSE(VB_VBI, QString("XDS Packet: VChip: End")); |
| 284 | } else { |
| 285 | int xds_vchip_mpaa = (b2 & 0x07); |
| 286 | switch (xds_vchip_mpaa) { |
| 287 | case 0x01: |
| 288 | VERBOSE(VB_VBI, QString("XDS Packet: VChip Rating: TV-Y")); |
| 289 | break; |
| 290 | case 0x02: |
| 291 | VERBOSE(VB_VBI, QString("XDS Packet: VChip Rating: TV-Y7")); |
| 292 | break; |
| 293 | case 0x03: |
| 294 | VERBOSE(VB_VBI, QString("XDS Packet: VChip Rating: TV-G")); |
| 295 | break; |
| 296 | case 0x04: |
| 297 | VERBOSE(VB_VBI, QString("XDS Packet: VChip Rating: TV-PG")); |
| 298 | break; |
| 299 | case 0x05: |
| 300 | VERBOSE(VB_VBI, QString("XDS Packet: VChip Rating: TV-14")); |
| 301 | break; |
| 302 | case 0x06: |
| 303 | VERBOSE(VB_VBI, QString("XDS Packet: VChip Rating: TV-MA")); |
| 304 | break; |
| 305 | default: |
| 306 | VERBOSE(VB_VBI, QString("XDS Packet: VChip Rating: None")); |
| 307 | break; |
| 308 | } |
| 309 | if (b1 & 0x20) |
| 310 | VERBOSE(VB_VBI, QString("XDS Packet: VChip Flag: Suggestive Dialog")); |
| 311 | if (b2 & 0x20) |
| 312 | VERBOSE(VB_VBI, QString("XDS Packet: VChip Flag: Violence")); |
| 313 | if (b2 & 0x08) |
| 314 | VERBOSE(VB_VBI, QString("XDS Packet: VChip Flag: Language")); |
| 315 | if (b2 & 0x10) |
| 316 | VERBOSE(VB_VBI, QString("XDS Packet: VChip Flag: Sexual Situations")); |
| 317 | } |
| 318 | // Detect start packets |
| 319 | } else if ((b1 == 0x01) && (b2 == 0x01)) { |
| 320 | VERBOSE(VB_VBI, QString("XDS Packet: Start Time/Program ID")); |
| 321 | xds_stime = 1; |
| 322 | } else if ((b1 == 0x01) && (b2 == 0x02)) { |
| 323 | // VERBOSE(VB_VBI, QString("XDS Packet: Program Length/Time in Show")); |
| 324 | xds_plength = 1; |
| 325 | bzero(xds_buf, sizeof(xds_buf)); |
| 326 | xds_cnt = 0; |
| 327 | } else if ((b1 == 0x01) && (b2 == 0x03)) { |
| 328 | // VERBOSE(VB_VBI, QString("XDS Packet: Program Name")); |
| 329 | xds_pname = 1; |
| 330 | xds_ProgramName = ""; |
| 331 | } else if ((b1 == 0x01) && (b2 == 0x04)) { |
| 332 | VERBOSE(VB_VBI, QString("XDS Packet: Program Type")); |
| 333 | xds_ptype = 1; |
| 334 | } else if ((b1 == 0x01) && (b2 == 0x05)) { |
| 335 | // VERBOSE(VB_VBI, QString("XDS Packet: V-Chip")); |
| 336 | xds_vchip = 1; |
| 337 | } else |
| 338 | VERBOSE(VB_VBI, QString("Unknown XDS Packet : %1 %2").arg(b1).arg(b2)); |
| 339 | } |