diff --git a/src/systemcmds/topic_listener/generate_listener.py b/src/systemcmds/topic_listener/generate_listener.py index 496fbb2b1c..103a816f3b 100755 --- a/src/systemcmds/topic_listener/generate_listener.py +++ b/src/systemcmds/topic_listener/generate_listener.py @@ -25,72 +25,26 @@ raw_messes = [raw_messages.remove(x) for x in raw_messages if 'gps_inject_data' raw_messes = [raw_messages.remove(x) for x in raw_messages if 'gps_dump' in x] for index,m in enumerate(raw_messages): - temp_list_floats = [] - temp_list_uint64 = [] - temp_list_bool = [] - if("pwm_input" not in m and "position_setpoint" not in m): - temp_list = [] - topic_list = [] - f = open(m,'r') - for line in f.readlines(): - items = re.split('\s+', line.strip()) + topic_list = [] + f = open(m,'r') + for line in f.readlines(): + items = re.split('\s+', line.strip()) - if ('float32[' in items[0]): - num_floats = int(items[0].split("[")[1].split("]")[0]) - temp_list.append(("float_array",items[1],num_floats)) - elif ('float64[' in items[0]): - num_floats = int(items[0].split("[")[1].split("]")[0]) - temp_list.append(("double_array",items[1],num_floats)) - elif ('uint64[' in items[0]): - num_floats = int(items[0].split("[")[1].split("]")[0]) - temp_list.append(("uint64_array",items[1],num_floats)) - elif ('uint16[' in items[0]): - num_floats = int(items[0].split("[")[1].split("]")[0]) - temp_list.append(("uint16_array",items[1],num_floats)) - elif ('int32[' in items[0]): - num_floats = int(items[0].split("[")[1].split("]")[0]) - temp_list.append(("int32_array",items[1],num_floats)) - elif ('int16[' in items[0]): - num_floats = int(items[0].split("[")[1].split("]")[0]) - temp_list.append(("int16_array",items[1],num_floats)) - elif(items[0] == "float32"): - temp_list.append(("float",items[1])) - elif(items[0] == "float64"): - temp_list.append(("double",items[1])) - elif(items[0] == "uint64") and len(line.split('=')) == 1: - temp_list.append(("uint64",items[1])) - elif(items[0] == "uint32") and len(line.split('=')) == 1: - temp_list.append(("uint32",items[1])) - elif(items[0] == "uint16") and len(line.split('=')) == 1: - temp_list.append(("uint16",items[1])) - elif(items[0] == "int64") and len(line.split('=')) == 1: - temp_list.append(("int64",items[1])) - elif(items[0] == "int32") and len(line.split('=')) == 1: - temp_list.append(("int32",items[1])) - elif(items[0] == "int16") and len(line.split('=')) == 1: - temp_list.append(("int16",items[1])) - elif (items[0] == "bool") and len(line.split('=')) == 1: - temp_list.append(("bool",items[1])) - elif (items[0] == "uint8") and len(line.split('=')) == 1: - temp_list.append(("uint8",items[1])) - elif (items[0] == "int8") and len(line.split('=')) == 1: - temp_list.append(("int8",items[1])) - elif '# TOPICS' == ' '.join(items[:2]): - for topic in items[2:]: - topic_list.append(topic) + if '# TOPICS' == ' '.join(items[:2]): + for topic in items[2:]: + topic_list.append(topic) - f.close() + f.close() - (m_head, m_tail) = os.path.split(m) - message = m_tail.split('.')[0] + (m_head, m_tail) = os.path.split(m) + message = m_tail.split('.')[0] - if len(topic_list) == 0: - topic_list.append(message) + if len(topic_list) == 0: + topic_list.append(message) - for topic in topic_list: - messages.append(message) - topics.append(topic) - message_elements.append(temp_list) + for topic in topic_list: + messages.append(message) + topics.append(topic) num_messages = len(messages); @@ -199,9 +153,9 @@ print("}\n") for index, (m, t) in enumerate(zip(messages, topics)): print("void listen_%s(unsigned num_msgs, unsigned topic_instance) {" % t) - print("\tint sub = orb_subscribe_multi(ORB_ID(%s), topic_instance);" % t) print("\torb_id_t ID = ORB_ID(%s);" % t) - print("\t%s_s container = {};" % m) + print("\tif (orb_exists(ID, topic_instance) != 0) { printf(\"never published\\n\"); return; }") + print("\tint sub = orb_subscribe_multi(ORB_ID(%s), topic_instance);" % t) print("\tbool updated = false;") print("\tunsigned i = 0;") print("\thrt_abstime start_time = hrt_absolute_time();") @@ -212,6 +166,7 @@ for index, (m, t) in enumerate(zip(messages, topics)): print("\t\t\tstart_time = hrt_absolute_time();") print("\t\t\ti++;") print("\t\tprintf(\"\\nTOPIC: %s instance %%d #%%d\\n\", topic_instance, i);" % t) + print("\t\t%s_s container = {};" % m) print("\t\torb_copy(ID, sub, &container);") print("\t\tprint_message(container);") print("\t\t} else {")