# distutils: language = c++ # cython: c_string_encoding=ascii import numpy as np cimport numpy as cnp from libcpp cimport bool from libc.string cimport memcpy from libc.stdint cimport uint32_t, uint64_t from .commonmodel cimport mat3 from .driving cimport FEATURE_LEN as CPP_FEATURE_LEN, HISTORY_BUFFER_LEN as CPP_HISTORY_BUFFER_LEN, DESIRE_LEN as CPP_DESIRE_LEN, \ TRAFFIC_CONVENTION_LEN as CPP_TRAFFIC_CONVENTION_LEN, DRIVING_STYLE_LEN as CPP_DRIVING_STYLE_LEN, \ NAV_FEATURE_LEN as CPP_NAV_FEATURE_LEN, NAV_INSTRUCTION_LEN as CPP_NAV_INSTRUCTION_LEN, \ OUTPUT_SIZE as CPP_OUTPUT_SIZE, NET_OUTPUT_SIZE as CPP_NET_OUTPUT_SIZE, MODEL_FREQ as CPP_MODEL_FREQ from .driving cimport MessageBuilder, PublishState as cppPublishState from .driving cimport fill_model_msg, fill_pose_msg FEATURE_LEN = CPP_FEATURE_LEN HISTORY_BUFFER_LEN = CPP_HISTORY_BUFFER_LEN DESIRE_LEN = CPP_DESIRE_LEN TRAFFIC_CONVENTION_LEN = CPP_TRAFFIC_CONVENTION_LEN DRIVING_STYLE_LEN = CPP_DRIVING_STYLE_LEN NAV_FEATURE_LEN = CPP_NAV_FEATURE_LEN NAV_INSTRUCTION_LEN = CPP_NAV_INSTRUCTION_LEN OUTPUT_SIZE = CPP_OUTPUT_SIZE NET_OUTPUT_SIZE = CPP_NET_OUTPUT_SIZE MODEL_FREQ = CPP_MODEL_FREQ cdef class PublishState: cdef cppPublishState state def create_model_msg(float[:] model_outputs, PublishState ps, uint32_t vipc_frame_id, uint32_t vipc_frame_id_extra, uint32_t frame_id, float frame_drop, uint64_t timestamp_eof, uint64_t timestamp_llk, float model_execution_time, bool nav_enabled, bool valid): cdef MessageBuilder msg fill_model_msg(msg, &model_outputs[0], ps.state, vipc_frame_id, vipc_frame_id_extra, frame_id, frame_drop, timestamp_eof, timestamp_llk, model_execution_time, nav_enabled, valid) output_size = msg.getSerializedSize() output_data = bytearray(output_size) cdef unsigned char * output_ptr = output_data assert msg.serializeToBuffer(output_ptr, output_size) > 0, "output buffer is too small to serialize" return bytes(output_data) def create_pose_msg(float[:] model_outputs, uint32_t vipc_frame_id, uint32_t vipc_dropped_frames, uint64_t timestamp_eof, bool valid): cdef MessageBuilder msg fill_pose_msg(msg, &model_outputs[0], vipc_frame_id, vipc_dropped_frames, timestamp_eof, valid) output_size = msg.getSerializedSize() output_data = bytearray(output_size) cdef unsigned char * output_ptr = output_data assert msg.serializeToBuffer(output_ptr, output_size) > 0, "output buffer is too small to serialize" return bytes(output_data)