def main(self): while not self.shutdown(): while self.dataReady("inbox"): data = self.recv("inbox") # extract basic info from this PSI packet - enough to work # out what table it is; what section, and the version e = [ord(data[i]) for i in range(0,3) ] table_id = e[0] if table_id != 0x70: continue syntax = e[1] & 0x80 if syntax: continue # now were reasonably certain we've got a correct packet # we'll convert the rest of the packet section_length = ((e[1]<<8) + e[2]) & 0x0fff e = [ord(data[i]) for i in range(0,8) ] utc = list( parseMJD((e[3]<<8) + e[4]) ) utc.extend( [unBCD(e[5]), unBCD(e[6]), unBCD(e[7])] ) self.send(utc, "outbox") self.pause() yield 1
def main(self): while not self.shutdown(): while self.dataReady("inbox"): data = self.recv("inbox") # extract basic info from this PSI packet - enough to work # out what table it is; what section, and the version e = [ord(data[i]) for i in range(0, 3)] table_id = e[0] if table_id != 0x73: continue syntax = e[1] & 0x80 if syntax: continue section_length = ((e[1] << 8) + e[2]) & 0x0fff if not dvbcrc(data[:3 + section_length]): continue # now were reasonably certain we've got a correct packet # we'll convert the rest of the packet e = [ord(data[i]) for i in range(0, 10)] timeNow = list(parseMJD((e[3] << 8) + e[4])) timeNow.extend([unBCD(e[5]), unBCD(e[6]), unBCD(e[7])]) descriptors_length = ((e[8] << 8) + e[9]) & 0x0fff i = 10 descriptors_end = i + descriptors_length while i < descriptors_end: (dtype, descriptor), i = parseDescriptor(i, data) if descriptor['type'] == "local_time_offset": table = { "table_type": "TOT", "UTC_now": timeNow, "offset": descriptor['offset'], "next": { "offset": descriptor['nextOffset'], "when": descriptor['timeOfChange'], }, "country": descriptor['country'], "region": descriptor['region'], } self.send(table, "outbox") self.pause() yield 1
def main(self): while not self.shutdown(): while self.dataReady("inbox"): data = self.recv("inbox") # extract basic info from this PSI packet - enough to work # out what table it is; what section, and the version e = [ord(data[i]) for i in range(0,3) ] table_id = e[0] if table_id != 0x73: continue syntax = e[1] & 0x80 if syntax: continue section_length = ((e[1]<<8) + e[2]) & 0x0fff if not dvbcrc(data[:3+section_length]): continue # now were reasonably certain we've got a correct packet # we'll convert the rest of the packet e = [ord(data[i]) for i in range(0,10) ] timeNow = list( parseMJD((e[3]<<8) + e[4]) ) timeNow.extend( [unBCD(e[5]), unBCD(e[6]), unBCD(e[7])] ) descriptors_length = ((e[8]<<8) + e[9]) & 0x0fff i = 10 descriptors_end = i + descriptors_length while i < descriptors_end: (dtype,descriptor),i = parseDescriptor(i,data) if descriptor['type'] == "local_time_offset": table = { "table_type" : "TOT", "UTC_now" : timeNow, "offset" : descriptor['offset'], "next" : { "offset" : descriptor['nextOffset'], "when" : descriptor['timeOfChange'], }, "country" : descriptor['country'], "region" : descriptor['region'], } self.send(table, "outbox") self.pause() yield 1
def parseTableSection(self, index, section): (table_id, service_id, current_next, transport_stream_id, original_network_id) = index msg = { "table_type": "EIT", "table_id": table_id, "actual_other": self.acceptTables[table_id][0], "is_present_following": self.acceptTables[table_id][1], "current": current_next, "transport_stream_id": transport_stream_id, "original_network_id": original_network_id, "events": [], } (data, section_length) = section service_id = (ord(data[3]) << 8) + ord(data[4]) i = 14 while i < section_length + 3 - 4: e = [ord(data[x]) for x in range(i + 0, i + 12)] event = {"service_id": service_id} event["event_id"] = (e[0] << 8) + e[1] # ( Y,M,D, HH,MM,SS ) event["starttime"] = list(parseMJD((e[2] << 8) + e[3])) event["starttime"].extend([unBCD(e[4]), unBCD(e[5]), unBCD(e[6])]) event["duration"] = unBCD(e[7]), unBCD(e[8]), unBCD(e[9]) event["running_status"] = (e[10] >> 5) & 0x07 event["free_CA_mode"] = e[10] & 0x10 descriptors_length = ((e[10] << 8) + e[11]) & 0x0fff event["descriptors"] = [] i = i + 12 descriptors_end = i + descriptors_length while i < descriptors_end: descriptor, i = parseDescriptor(i, data) event['descriptors'].append(descriptor) msg["events"].append(event) return msg
def parseTableSection(self, index, section): (table_id, service_id, current_next, transport_stream_id, original_network_id) = index msg = { "table_type" : "EIT", "table_id" : table_id, "actual_other" : self.acceptTables[table_id][0], "is_present_following": self.acceptTables[table_id][1], "current" : current_next, "transport_stream_id" : transport_stream_id, "original_network_id" : original_network_id, "events" : [], } (data,section_length) = section service_id = (ord(data[3])<<8) + ord(data[4]) i=14 while i < section_length+3-4: e = [ord(data[x]) for x in range(i+0,i+12)] event = { "service_id" : service_id } event["event_id"] = (e[0]<<8) + e[1] # ( Y,M,D, HH,MM,SS ) event["starttime"] = list( parseMJD((e[2]<<8) + e[3]) ) event["starttime"].extend( [unBCD(e[4]), unBCD(e[5]), unBCD(e[6])] ) event["duration"] = unBCD(e[7]), unBCD(e[8]), unBCD(e[9]) event["running_status"] = (e[10] >> 5) & 0x07 event["free_CA_mode"] = e[10] & 0x10 descriptors_length = ((e[10]<<8) + e[11]) & 0x0fff event["descriptors"] = [] i=i+12 descriptors_end = i + descriptors_length while i < descriptors_end: descriptor,i = parseDescriptor(i,data) event['descriptors'].append(descriptor) msg["events"].append(event) return msg