I am Japanese. I apologize in advance for any inappropriate expressions that may be included in the translation as it was done using google translate.
What we want to do.
I want to acquire telemetry data for Computer Vision.
What we did.
in # guidance #
(section registration), as I understand it.
self.tlm_cv = telemetry.TlmSection(
"/dev/shm", "cv@tracking@proposals", subset=subset
)
(From the guidance, the service triggers the “cv@tracking@proposals” section to get the telemetry data from the device?) I understand that this is the case.
def begin_step(self):
self.tlm_cv.fetch_sample()
in # service #
/cv_service
processing.h
Definition of inputs from devices and outputs to guidance, etc.
struct processing_input {
uint count;
}
struct processing_output {
uint count;
}
sample.cpp
Definition of “cv@tracking@proposals” constant
#define TLM_SECTION_USER "cv@tracking@proposals"
Register variables using recursive structural descriptions and pointers to the base of the structure
int tlm_consumer_ reg_struct_ptr
static int context_init(struct context *ctx)
{
res = tlm_consumer_reg_struct_ptr(ctx->consumer,
&ctx->tlm_data_in,
TLM_SECTION_USER,
&s_tlm_data_in_struct);
Define tlm_data_in and tlm_data_out
struct tlm_data_in {
int count;
};
struct tlm_data_out {
int count;
};
Define s_tlm_data_in_fields and s_tlm_data_out_fields and map values
static const struct tlm_reg_field s_tlm_data_in_fields[] = {
TLM_REG_FIELD_SCALAR_EX(struct tlm_data_in, count,
"count", TLM_TYPE_UINT32),
};
static const struct tlm_reg_field s_tlm_data_out_fields[] = {
TLM_REG_FIELD_SCALAR(struct tlm_data_out, count,
TLM_TYPE_UINT32),
};
Definition of s_tlm_data_in_struct and s_tlm_data_out_struct
static const struct tlm_reg_struct s_tlm_data_in_struct =
TLM_REG_STRUCT("tlm_data_in", s_tlm_data_in_fields);
static const struct tlm_reg_struct s_tlm_data_out_struct =
TLM_REG_STRUCT("tlm_data_out", s_tlm_data_out_fields);
Update output telemetry values
static void processing_evt_cb(struct pomp_evt *evt, void *userdata)
{
/* Update telemetry output */
ud->tlm_data_out.algo.count = output.count;
Setup of input structure to processing
static void frame_cb(struct vipcc_ctx *ctx,
const struct vipc_frame *frame,
void *be_frame,
void *userdata)
{
/* Setup input structure for processing */
memset(&input, 0, sizeof(input));
input.count = ud->tlm_data_in.count;
processing.cpp
Output of counts obtained from the “cv@tracking@proposals” section in do_step
static void do_step(struct processing *self,
const struct processing_input *input,
struct processing_output *output)
{
ULOGC("cv-service: count %d", input->count);
}
Current Status
As shown in the image, we have reached do_step in processing.cpp, but the value of count is 0.
Our own hypothesis
- The description is insufficient on the service side.
- Computer vision should be turned on.
Please let me know if I am missing something.