Refucktoring NFC.
parent
eefd452638
commit
057ce4985d
|
@ -1,6 +1,6 @@
|
||||||
project(hf-terminal)
|
project(hf-terminal)
|
||||||
|
|
||||||
add_executable(hf-terminal main.c tts.c base64.c ldap.c)
|
add_executable(hf-terminal main.c tts.c base64.c ldap.c nfc.c)
|
||||||
set(CMAKE_C_FLAGS "-std=c99")
|
set(CMAKE_C_FLAGS "-std=c99")
|
||||||
|
|
||||||
target_link_libraries(hf-terminal nfc m curl)
|
target_link_libraries(hf-terminal nfc m)
|
||||||
|
|
|
@ -1,101 +1,18 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <nfc/nfc.h>
|
#include "nfc.h"
|
||||||
#include <nfc/nfc-types.h>
|
|
||||||
|
|
||||||
#include "tts.h"
|
#include "tts.h"
|
||||||
#include "ldap.h"
|
|
||||||
|
|
||||||
static nfc_device_t *g_NFCDevice = NULL;
|
|
||||||
|
|
||||||
const nfc_modulation_t g_NFCModulations[5] = {
|
|
||||||
{ .nmt = NMT_ISO14443A, .nbr = NBR_106 },
|
|
||||||
{ .nmt = NMT_ISO14443B, .nbr = NBR_106 },
|
|
||||||
{ .nmt = NMT_FELICA, .nbr = NBR_212 },
|
|
||||||
{ .nmt = NMT_FELICA, .nbr = NBR_424 },
|
|
||||||
{ .nmt = NMT_JEWEL, .nbr = NBR_106 },
|
|
||||||
};
|
|
||||||
const size_t g_NFCModulationCount = 5;
|
|
||||||
|
|
||||||
void poll_nfc(void)
|
|
||||||
{
|
|
||||||
nfc_target_t Target;
|
|
||||||
bool Result = nfc_initiator_poll_target(g_NFCDevice, g_NFCModulations, g_NFCModulationCount, 20, 2, &Target);
|
|
||||||
|
|
||||||
if (Result)
|
|
||||||
{
|
|
||||||
if (Target.nm.nmt != NMT_ISO14443A)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (Target.nti.nai.szUidLen != 4)
|
|
||||||
return;
|
|
||||||
|
|
||||||
printf("Scanned Mifare %x.\n", *(int *)Target.nti.nai.abtUid);
|
|
||||||
|
|
||||||
char MifareID[5];
|
|
||||||
sprintf(MifareID, "%04x", *(int *)Target.nti.nai.abtUid);
|
|
||||||
|
|
||||||
char DN[128];
|
|
||||||
int DNLength = 128;
|
|
||||||
int LDAPResult = ldap_dn_by_mifare(MifareID, DN, &DNLength);
|
|
||||||
|
|
||||||
if (LDAPResult > 0)
|
|
||||||
{
|
|
||||||
if (LDAPResult == 1)
|
|
||||||
{
|
|
||||||
tts_speak("Nieznana karta.");
|
|
||||||
sleep(5);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tts_speak("Nieznany błąd przy połączeniu z eldapem.");
|
|
||||||
sleep(10);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
printf("This appears to be %s.\n", DN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
nfc_device_desc_t *Devices;
|
nfc_initialize();
|
||||||
|
|
||||||
size_t NumDevices;
|
|
||||||
Devices = (nfc_device_desc_t *) malloc(10 * sizeof(*Devices));
|
|
||||||
nfc_list_devices(Devices, 10, &NumDevices);
|
|
||||||
|
|
||||||
if (NumDevices == 0)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Error: No NFC device found.\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NumDevices > 1)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Error: More than one NFC device found.\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_NFCDevice = nfc_connect(&Devices[0]);
|
|
||||||
|
|
||||||
if (g_NFCDevice == NULL)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Error: Could not connect to NFC device.\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
nfc_initiator_init(g_NFCDevice);
|
|
||||||
printf("Connected to NFC device.\n");
|
|
||||||
|
|
||||||
tts_speak("Refryżyrator gotowy do pracy.");
|
tts_speak("Refryżyrator gotowy do pracy.");
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
poll_nfc();
|
nfc_poll();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <nfc/nfc.h>
|
||||||
|
#include <nfc/nfc-types.h>
|
||||||
|
|
||||||
|
#include "tts.h"
|
||||||
|
#include "ldap.h"
|
||||||
|
#include "base64.h"
|
||||||
|
|
||||||
|
static nfc_device_t *g_NFCDevice = NULL;
|
||||||
|
|
||||||
|
const nfc_modulation_t g_NFCModulations[5] = {
|
||||||
|
{ .nmt = NMT_ISO14443A, .nbr = NBR_106 },
|
||||||
|
{ .nmt = NMT_ISO14443B, .nbr = NBR_106 },
|
||||||
|
{ .nmt = NMT_FELICA, .nbr = NBR_212 },
|
||||||
|
{ .nmt = NMT_FELICA, .nbr = NBR_424 },
|
||||||
|
{ .nmt = NMT_JEWEL, .nbr = NBR_106 },
|
||||||
|
};
|
||||||
|
const size_t g_NFCModulationCount = 5;
|
||||||
|
|
||||||
|
void nfc_poll(void)
|
||||||
|
{
|
||||||
|
nfc_target_t Target;
|
||||||
|
bool Result = nfc_initiator_poll_target(g_NFCDevice, g_NFCModulations, g_NFCModulationCount, 20, 2, &Target);
|
||||||
|
|
||||||
|
if (Result)
|
||||||
|
{
|
||||||
|
if (Target.nm.nmt != NMT_ISO14443A)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Target.nti.nai.szUidLen != 4)
|
||||||
|
return;
|
||||||
|
|
||||||
|
printf("Scanned Mifare %x.\n", *(int *)Target.nti.nai.abtUid);
|
||||||
|
|
||||||
|
char MifareID[5];
|
||||||
|
sprintf(MifareID, "%04x", *(int *)Target.nti.nai.abtUid);
|
||||||
|
|
||||||
|
char DN[128];
|
||||||
|
int DNLength = 128;
|
||||||
|
int LDAPResult = ldap_dn_by_mifare(MifareID, DN, &DNLength);
|
||||||
|
|
||||||
|
if (LDAPResult > 0)
|
||||||
|
{
|
||||||
|
if (LDAPResult == 1)
|
||||||
|
{
|
||||||
|
tts_speak("Nieznana karta.");
|
||||||
|
sleep(5);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tts_speak("Nieznany błąd przy połączeniu z eldapem.");
|
||||||
|
sleep(10);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("This appears to be %s.\n", DN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int nfc_initialize(void)
|
||||||
|
{
|
||||||
|
nfc_device_desc_t *Devices;
|
||||||
|
|
||||||
|
size_t NumDevices;
|
||||||
|
Devices = (nfc_device_desc_t *) malloc(10 * sizeof(*Devices));
|
||||||
|
nfc_list_devices(Devices, 10, &NumDevices);
|
||||||
|
|
||||||
|
if (NumDevices == 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: No NFC device found.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NumDevices > 1)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: More than one NFC device found.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_NFCDevice = nfc_connect(&Devices[0]);
|
||||||
|
|
||||||
|
if (g_NFCDevice == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: Could not connect to NFC device.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
nfc_initiator_init(g_NFCDevice);
|
||||||
|
printf("Connected to NFC device.\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#ifndef __NFC_H__
|
||||||
|
#define __NFC_H__
|
||||||
|
|
||||||
|
int nfc_initialize(void);
|
||||||
|
void nfc_poll(void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -21,14 +21,11 @@ void tts_speak(char *Text)
|
||||||
|
|
||||||
char *URL = (char *)malloc(strlen(B64Output) + strlen(g_IvonaURL));
|
char *URL = (char *)malloc(strlen(B64Output) + strlen(g_IvonaURL));
|
||||||
sprintf(URL, g_IvonaURL, B64Output);
|
sprintf(URL, g_IvonaURL, B64Output);
|
||||||
printf("URL: %s\n", URL);
|
|
||||||
|
|
||||||
if (!fork())
|
if (!fork())
|
||||||
{
|
{
|
||||||
printf("Forking...\n");
|
|
||||||
char *CommandLine = malloc(strlen(URL) + 100);
|
char *CommandLine = malloc(strlen(URL) + 100);
|
||||||
sprintf(CommandLine, "curl -L -A Mozilla \"%s\" | mpg123 -2 -q -", URL);
|
sprintf(CommandLine, "curl -L -s -A Mozilla \"%s\" | mpg123 -2 -q -", URL);
|
||||||
printf("Cline: %s\n", CommandLine);
|
|
||||||
char *Arguments[4];
|
char *Arguments[4];
|
||||||
Arguments[0] = "bash";
|
Arguments[0] = "bash";
|
||||||
Arguments[1] = "-c";
|
Arguments[1] = "-c";
|
||||||
|
|
Reference in New Issue