
/*
 * Include Files
 *
 */
#if defined(MATLAB_MEX_FILE)
#include "tmwtypes.h"
#include "simstruc_types.h"
#else
#define SIMPLIFIED_RTWTYPES_COMPATIBILITY
#include "rtwtypes.h"
#undef SIMPLIFIED_RTWTYPES_COMPATIBILITY
#endif



/* %%%-SFUNWIZ_wrapper_includes_Changes_BEGIN --- EDIT HERE TO _END */
#ifndef MATLAB_MEX_FILE
#include <Adafruit_Fingerprint.h>
#include <Wire.h>
#include <FingerprintFunctions.h>
#define mySerial Serial2

// Festlegen der Seriellen Schnittstelle des Fingerabdrucksensors auf Serial2
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

// Anlegen der Programmvariablen
unsigned char state = 0;

#endif
/* %%%-SFUNWIZ_wrapper_includes_Changes_END --- EDIT HERE TO _BEGIN */
#define u_width 1
#define y_width 1

/*
 * Create external references here.  
 *
 */
/* %%%-SFUNWIZ_wrapper_externs_Changes_BEGIN --- EDIT HERE TO _END */
 
/* %%%-SFUNWIZ_wrapper_externs_Changes_END --- EDIT HERE TO _BEGIN */

/*
 * Start function
 *
 */
void leseFingerabdruck_Start_wrapper(real_T *xD)
{
/* %%%-SFUNWIZ_wrapper_Start_Changes_BEGIN --- EDIT HERE TO _END */
#ifndef MATLAB_MEX_FILE

  delay(100);

  // Setzen der Baudrate für den seriellen Sensorport
  finger.begin(57600);
  
  // Überprüfen der Verbindung zum Fingerabdrucksensor
  delay(5);
  finger.verifyPassword();

  // Auslesen der Sensorparameter
  finger.getParameters();
  finger.getTemplateCount();

#endif
/* %%%-SFUNWIZ_wrapper_Start_Changes_END --- EDIT HERE TO _BEGIN */
}
/*
 * Output function
 *
 */
void leseFingerabdruck_Outputs_wrapper(const uint8_T *FingerEin,
			uint8_T *FingerStatus,
			const real_T *xD)
{
/* %%%-SFUNWIZ_wrapper_Outputs_Changes_BEGIN --- EDIT HERE TO _END */
#ifndef MATLAB_MEX_FILE


    if (FingerEin[0] == 1) 
    {

        finger.LEDcontrol(true); // Einschalten des Fingerabdrucksensors
        state = getFingerprintID(finger); // Auslesen und Abgleich des Fingerabdrucks mit Sensordatenbank
        if (state > 0 && state < 121) { FingerStatus[0] = 1; delay(100); }

    }

    else if (FingerEin[0] == 2)
    {

        finger.LEDcontrol(true); // Einschalten des Fingerabdrucksensors
        state = getFingerprintEnroll(finger); // erstes Bild vom Fingerabdruck erstellen
        if (state == 2) { FingerStatus[0] = 2; delay(100); }
 
    }
    
    else if (FingerEin[0] == 3)
    {

        finger.LEDcontrol(true); // Einschalten des Fingerabdrucksensors
        state = getFingerprintEnroll1(finger); // zweites Bild vom Fingerabdruck erstellen
        if (state == 3) { FingerStatus[0] = 3; delay(100); } // bei Übereinstimmung in Sensordatenbank speichern

    }

    else
    {
        
        finger.LEDcontrol(false); // Ausschalten des Fingerabdrucksensors wenn nicht benötigt
        FingerStatus[0] = 0;
    
    }


#endif
/* %%%-SFUNWIZ_wrapper_Outputs_Changes_END --- EDIT HERE TO _BEGIN */
}

/*
 * Updates function
 *
 */
void leseFingerabdruck_Update_wrapper(const uint8_T *FingerEin,
			uint8_T *FingerStatus,
			real_T *xD)
{
/* %%%-SFUNWIZ_wrapper_Update_Changes_BEGIN --- EDIT HERE TO _END */
 
/* %%%-SFUNWIZ_wrapper_Update_Changes_END --- EDIT HERE TO _BEGIN */
}

