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
}