static void mdlOutputs(SimStruct *S, int_T task_id) { Filter<Dim> *pf = (Filter<Dim>*)ssGetPWork(S)[0]; // Step 1: pf->ComputeGain(); // Retrieving inputs: InputRealPtrsType input = ssGetInputPortRealSignalPtrs(S, 0); double inputs[2] = { (double)(*input[0]) , (double)(*input[1]) }; // let's hope they are convertible Filter<Dim>::VecY y; y(0) = inputs[0]; // measurement is first input Filter<Dim>::VecU u; u(0) = inputs[1]; // reference signal is second input // Step 2: pf->UpdateEstimate(y, u); // Step 3: pf->ComputeCovariance(); // Step 4: pf->ProjectAhead(u); // Updating time: double time = (double)(ssGetT(S)); pf->set_Time(time); // Setting outputs: real_T *output = ssGetOutputPortRealSignal(S, 0); output[0] = (real_T)(pf->get_State(2)); // first output is psi output[1] = (real_T)(pf->get_State(4)); // second output is b }