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)
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)