Пример #1
0
    def test_build_from_raw_message(self):
        str_metadata = json.dumps(self.metadata)
        str_cmd_params = json.dumps(self.dtg.cmd_params)

        dtg = SBusDatagram.build_from_raw_message(
            self.fds, str_metadata, str_cmd_params)

        self.assertEqual(self.command, dtg.command)
        self.assertEqual(self.fds, dtg.fds)
        self.assertEqual(self.metadata, dtg.metadata)
        self.assertEqual(self.params, dtg.params)
        self.assertEqual(self.task_id, dtg.task_id)
Пример #2
0
    def receive(self, sbus_handler):
        ph_files = POINTER(c_int)()
        pp_metadata = (c_char_p)()
        pp_params = (c_char_p)()
        pn_files = (c_int)()
        pn_metadata = (c_int)()
        pn_params = (c_int)()

        # Invoke C function
        n_status = self.sbus_back_.sbus_recv_msg(sbus_handler,
                                                 ph_files,
                                                 pn_files,
                                                 pp_metadata,
                                                 pn_metadata,
                                                 pp_params,
                                                 pn_params)
        if n_status < 0:
            return None

        # The invocation was successful.
        # De-serialize the data

        # Aggregate file descriptors
        n_files = pn_files.value
        h_files = []
        for i in xrange(n_files):
            h_files.append(ph_files[i])

        # Extract Python strings
        n_metadata = pn_metadata.value
        str_metadata = pp_metadata.value
        n_params = pn_params.value
        str_params = pp_params.value

        # Trim the junk out
        if 0 < n_metadata:
            str_metadata = str_metadata[0:n_metadata]
        str_params = str_params[0:n_params]

        # Construct actual result datagram
        return SBusDatagram.build_from_raw_message(
            h_files, str_metadata, str_params)