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
示例#2
0
    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
示例#4
0
    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