English | 简体中文 | 繁體中文 | 日本語 | Deutsch | 한국어
AS608 ist ein Fingerabdruckscanner- und -lesemodul, bietet aber noch mehr als das: Fingerabdruckregistrierung, Bildverarbeitung, Druckabgleich und vieles mehr. Es verarbeitet die Daten und sendet die verarbeiteten Daten seriell an den Mikrocontroller. Das Gerät verwendet einen DSP-Chip, der Bildrendering, Merkmalssuche, Berechnung und Suche durchführt. Es verfügt über einen integrierten Flash-Speicher, der die Fingerabdruckdaten speichert und neue registriert – bis zu 300 Fingerabdrücke können gespeichert werden. Es stellt eine Schnittstelle zum Controller oder einem anderen System mit serieller TTL-Schnittstelle her und sendet Datenpakete zum Aufnehmen von Fotos, zum Erkennen von Drucken, Hashen und Suchen. Das Gerät verfügt über eine rote und grüne LED-Lichtanzeige für falsche und richtige Ausdrucke.
LibDriver AS608 ist der von LibDriver eingeführte Vollfunktionstreiber von AS608. Er bietet Fingerabdruckregistrierung, Fingerabdrucküberprüfung und andere Funktionen. LibDriver ist MISRA-kompatibel.
/src enthält LibDriver AS608-Quelldateien.
/interface enthält die plattformunabhängige Vorlage LibDriver AS608 UART.
/test enthält den Testcode des LibDriver AS608-Treibers und dieser Code kann die erforderliche Funktion des Chips einfach testen.
/example enthält LibDriver AS608-Beispielcode.
/doc enthält das LibDriver AS608-Offlinedokument.
/Datenblatt enthält AS608-Datenblatt.
/project enthält den allgemeinen Beispielcode für Linux- und MCU-Entwicklungsboards. Alle Projekte verwenden das Shell-Skript, um den Treiber zu debuggen, und die detaillierten Anweisungen finden Sie in der README.md jedes Projekts.
/misra enthält die Ergebnisse des LibDriver MISRA Code Scans.
Verweisen Sie auf eine plattformunabhängige UART-Schnittstellenvorlage und stellen Sie Ihren Plattform-UART-Treiber fertig.
Fügen Sie das Verzeichnis /src, den Schnittstellentreiber für Ihre Plattform und Ihre eigenen Treiber zu Ihrem Projekt hinzu. Wenn Sie die Standardbeispieltreiber verwenden möchten, fügen Sie das Verzeichnis /example zu Ihrem Projekt hinzu.
Sie können auf die Beispiele im Verzeichnis /example zurückgreifen, um Ihren eigenen Treiber zu vervollständigen. Wenn Sie die Standardprogrammierbeispiele verwenden möchten, erfahren Sie hier, wie Sie diese verwenden.
#include "driver_as608_basic.h"
uint8_t res;
uint16_t score;
uint16_t page_number;
uint16_t found_page;
as608_status_t status;
uint32_t num = 0;
uint32_t addr = 0xFFFFFFFF;
/**
* @brief input fingerprint callback
* @param[in] status is the current status
* @param[in] fmt is the format data
* @note none
*/
static void a_callback(int8_t status, const char *const fmt, ...)
{
switch (status)
{
case -1 :
{
/* output */
as608_interface_debug_print("%s", fmt);
}
case 0 :
{
/* delay 2000ms */
as608_interface_delay_ms(2000);
/* output */
as608_interface_debug_print("%s", fmt);
}
case 1 :
{
/* delay 2000ms */
as608_interface_delay_ms(2000);
/* output */
as608_interface_debug_print("%s", fmt);
}
case 2 :
{
/* output */
as608_interface_debug_print("%s", fmt);
}
default :
{
break;
}
}
}
...
/* basic init */
res = as608_basic_init(addr);
if (res != 0)
{
return 1;
}
...
/* input fingerprint */
res = as608_basic_input_fingerprint(a_callback, &score, &page_number, &status);
if (res != 0)
{
(void)as608_basic_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("input fingerprint success with score %d in page number %d.\n", score, page_number);
}
else
{
/* print error */
as608_basic_print_status(status);
}
...
/* verify */
res = as608_basic_verify(&found_page, &score, &status);
if (res != 0)
{
(void)as608_basic_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("verify success with score %d in found page %d.\n", score, found_page);
}
else
{
/* print error */
as608_basic_print_status(status);
}
...
/* high speed verify */
res = as608_basic_high_speed_verify(&found_page, &score, &status);
if (res != 0)
{
(void)as608_basic_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("verify success with score %d in found page %d.\n", score, found_page);
}
else
{
/* print error */
as608_basic_print_status(status);
}
...
/* delete */
res = as608_basic_delete_fingerprint(num, &status);
if (res != 0)
{
(void)as608_basic_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("delate page number %d success.\n", num);
}
else
{
/* print error */
as608_basic_print_status(status);
}
...
/* empty */
res = as608_basic_empty_fingerprint(&status);
if (res != 0)
{
(void)as608_basic_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("empty success.\n");
}
else
{
/* print error */
as608_basic_print_status(status);
}
...
/* basic deinit */
(void)as608_basic_deinit();
return 0;#include "driver_as608_advance.h"
uint8_t res;
uint16_t score;
uint16_t page_number;
uint16_t found_page;
uint16_t i;
uint16_t output_len;
as608_status_t status;
as608_params_t params;
uint32_t num = 0;
uint32_t random;
uint32_t addr = 0xFFFFFFFF;
uint8_t data[32] = {0};
uint8_t g_rx_buffer[36 * 1024];
/**
* @brief input fingerprint callback
* @param[in] status is the current status
* @param[in] fmt is the format data
* @note none
*/
static void a_callback(int8_t status, const char *const fmt, ...)
{
switch (status)
{
case -1 :
{
/* output */
as608_interface_debug_print("%s", fmt);
}
case 0 :
{
/* delay 2000ms */
as608_interface_delay_ms(2000);
/* output */
as608_interface_debug_print("%s", fmt);
}
case 1 :
{
/* delay 2000ms */
as608_interface_delay_ms(2000);
/* output */
as608_interface_debug_print("%s", fmt);
}
case 2 :
{
/* output */
as608_interface_debug_print("%s", fmt);
}
default :
{
break;
}
}
}
...
/* advance init */
res = as608_advance_init(addr);
if (res != 0)
{
return 1;
}
...
/* input fingerprint */
res = as608_advance_input_fingerprint(a_callback, &score, &page_number, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("input fingerprint success with score %d in page number %d.\n", score, page_number);
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* verify */
res = as608_advance_verify(&found_page, &score, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("verify success with score %d in found page %d.\n", score, found_page);
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* high speed verify */
res = as608_advance_high_speed_verify(&found_page, &score, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("verify success with score %d in found page %d.\n", score, found_page);
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* delete */
res = as608_advance_delete_fingerprint(num, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("delate page number %d success.\n", num);
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* empty */
res = as608_advance_empty_fingerprint(&status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("empty success.\n");
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* write notepad */
res = as608_advance_write_notepad(num, data, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("write success.\n");
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* read notepad */
res = as608_advance_read_notepad(num, data, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
for (i = 0; i < 32; i++)
{
as608_interface_debug_print("%02X ", data[i]);
}
as608_interface_debug_print("\n");
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* random */
res = as608_advance_random(&random, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("random is 0x%08X.\n", random);
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* read flash */
output_len = 36 * 1024;
res = as608_advance_flash_information(g_rx_buffer, &output_len, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
for (i = 0; i < output_len; i++)
{
as608_interface_debug_print("%02X ", data[i]);
}
as608_interface_debug_print("\n");
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* read params */
res = as608_advance_params(¶ms, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("status is 0x%02X.\n", params.status);
as608_interface_debug_print("sensor type is 0x%02X.\n", params.sensor_type);
as608_interface_debug_print("fingerprint size is %d.\n", params.fingerprint_size);
as608_interface_debug_print("level is 0x%02X.\n", params.level);
as608_interface_debug_print("address is 0x%08X.\n", params.address);
as608_interface_debug_print("packet size is %d.\n", params.packet_size);
as608_interface_debug_print("baud rate is %d.\n", params.n_9600 * 9600);
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* enroll */
res = as608_advance_enroll(&page_number, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("enroll ok and page number is %d.\n", page_number);
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* identify */
res = as608_advance_identify(&page_number, &score, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
/* output */
as608_interface_debug_print("identify ok and page number is %d, score is %d.\n", page_number, score);
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* upload flash feature */
output_len = 36 * 1024;
res = as608_advance_upload_flash_feature(num, g_rx_buffer, &output_len, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
...
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* upload image feature */
output_len = 36 * 1024;
res = as608_advance_upload_image_feature(g_rx_buffer, &output_len, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
...
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* download flash feature */
output_len = 768;
res = as608_advance_download_flash_feature(num, g_rx_buffer, output_len, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
...
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* upload image */
output_len = 36 * 1024;
res = as608_advance_upload_image(g_rx_buffer, &output_len, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
...
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* download image */
output_len = 32768;
res = as608_advance_download_image(num, g_rx_buffer, output_len, &status);
if (res != 0)
{
(void)as608_advance_deinit();
return 1;
}
if (status == AS608_STATUS_OK)
{
...
}
else
{
/* print error */
as608_advance_print_status(status);
}
...
/* advance deinit */
(void)as608_advance_deinit();
return 0;Online-Dokumente: https://www.libdriver.com/docs/as608/index.html.
Offline-Dokumente: /doc/html/index.html.
Bitte beachten Sie CONTRIBUTING.md.
Urheberrechte © (c) 2015 - Gegenwart LibDriver Alle Rechte vorbehalten
Die MIT-Lizenz (MIT)
Hiermit wird jeder Person kostenlos die Erlaubnis erteilt, eine Kopie zu erhalten
dieser Software und zugehörigen Dokumentationsdateien (die „Software“) zu behandeln
in der Software ohne Einschränkung, einschließlich, aber nicht beschränkt auf die Rechte
zu verwenden, zu kopieren, zu modifizieren, zusammenzuführen, zu veröffentlichen, zu verteilen, unterzulizenzieren und/oder zu verkaufen
Kopien der Software und Personen, denen die Software gehört, zu gestatten
dazu eingerichtet werden, unter folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen enthalten sein
Kopien oder wesentliche Teile der Software.
DIE SOFTWARE WIRD "WIE BESEHEN" BEREITGESTELLT, OHNE JEGLICHE GEWÄHRLEISTUNG, AUSDRÜCKLICH ODER
STILLSCHWEIGEND, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT,
EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG VON RECHTEN DRITTER. IN KEINEM FALL DARF DAS
AUTOREN ODER URHEBERRECHTSINHABER HAFTEN FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE
HAFTUNG, OB AUS VERTRAG, DELIKT ODER ANDERWEITIG, ENTSTEHEND AUS,
AUS ODER IM ZUSAMMENHANG MIT DER SOFTWARE ODER DER VERWENDUNG ODER ANDEREN HANDLUNGEN MIT DER
SOFTWARE.
Bitte senden Sie eine E-Mail an lishifenging@outlook.com.