Wie kann ich mich beim RFID Tag einloggen?

OP #6733665
Lesenswert?

Ich habe aktuell 2 unterschiedliche Codes, die im Prinzip das gleiche 
Ziel haben aber anders funktionieren.
Der erste Code ist eine Vorlage vom Texas Instruments vom RFID 
Mikrocontroller MSP430.
Den zweiten Code habe ich selber erstellt.
Es geht um das Default Login, alle Variablen in beiden Codes haben den 
gleichen Datentypen, allerdings kann ich in meinem Code nicht beim 
Glasstag anmelden. obwohl da die gleichen Werte sind wie im Vorlage 
Code.
So schaut die Login-Funktion aus vom Vorlage Code (Code Composer Studio 
Software vom Texas Instrumets):
1
//Abschnitt der Main Funktion:
2
uint8_t Login_Password_Byte[4] = {0x00, 0x00, 0x00, 0x00}; /*defined as a global variable
3
void AskForPassword(void)
4
{    UART_sendCString("Default password (j/n)?: ");
5

6
    while(UART_Not_Recieved)
7
{
8

9
}
10
    UART_putNewLine();
11
    UART_Not_Recieved = true;
12
    if(RX == 0x6A)
13
    {
14
        Login_Password_Byte[0] = 0x00;
15
        Login_Password_Byte[1] = 0x00;
16
        Login_Password_Byte[2] = 0x00;
17
        Login_Password_Byte[3] = 0x00;
18

19
    }else{
20
    UART_sendCString("Please enter a valid 4 character password: ");
21

22
    while(UART_Not_Recieved)
23
    {
24

25
    }
26
    Login_Password_Byte[0] = RX;
27
    UART_Not_Recieved = true;
28
    while(UART_Not_Recieved)
29
        {
30

31
        }
32
    Login_Password_Byte[1] = RX;
33
    UART_Not_Recieved = true;
34
    while(UART_Not_Recieved)
35
        {
36

37
        }
38
    Login_Password_Byte[2] = RX;
39
    UART_Not_Recieved = true;
40
    while(UART_Not_Recieved)
41
        {
42

43
        }
44
    Login_Password_Byte[3] = RX;
45
    UART_Not_Recieved = true;
46
    UART_putNewLine();
47
    }
48
}
49
//Abschnitt der LOGIN Funktion
50
oid Login(uint8_t Byte1, uint8_t Byte2, uint8_t Byte3, uint8_t Byte4)
51
{
52
    uint8_t ui8Offset = 0;
53
        g_pui8TrfBuffer[ui8Offset++] = 0x8F;        // Reset FIFO
54
        g_pui8TrfBuffer[ui8Offset++] = 0x91;        // Send with CRC
55
        g_pui8TrfBuffer[ui8Offset++] = 0x3D;        // Write Continuous
56
        g_pui8TrfBuffer[ui8Offset++] = 0x00;        //length
57
        g_pui8TrfBuffer[ui8Offset++] = 0xF0;      // length
58
        g_pui8TrfBuffer[ui8Offset++] = 0x22;  // ISO15693 flags
59
        g_pui8TrfBuffer[ui8Offset++] = 0xE4;            // Login command code
60
        g_pui8TrfBuffer[ui8Offset++] = 0x16;        //IC Mfg Code
61
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[0];    // Tag UID
62
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[1];    // Tag UID
63
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[2];    // Tag UID
64
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[3];    // Tag UID
65
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[4];    // Tag UID
66
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[5];    // Tag UID
67
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[6];    // Tag UID
68
        g_pui8TrfBuffer[ui8Offset++] = g_pui8Iso15693UId[7];    // Tag UID
69

70
            g_pui8TrfBuffer[ui8Offset++] = Byte1;         // Password
71
            UART_putByte(Byte1);
72
            g_pui8TrfBuffer[ui8Offset++] = Byte2;
73
            UART_putByte(Byte2);
74

75
            g_pui8TrfBuffer[ui8Offset++] = Byte3;
76
            UART_putByte(Byte3);
77

78
            g_pui8TrfBuffer[ui8Offset++] = Byte4;
79
            UART_putByte(Byte4);
80
        TRF79xxA_writeRaw(&g_pui8TrfBuffer[0], ui8Offset);      // Issue the write Password command
81
        g_sTrfStatus = TRF79xxA_waitRxData(5,15);       // 5 millisecond TX timeout, 15 millisecond RX timeout
82

83
if (g_sTrfStatus == RX_COMPLETE)        // If data has been received
84
{
85
if (g_pui8TrfBuffer[0] == 0x00)     // Confirm "no error" in response flags byte
86
 {
87
UART_sendCString(" Login successful ");
88
UART_putNewLine();
89
 } 
90
else
91
{
92
 UART_sendCString(" Login failed (wrong password)");
93
Write_Data = false;
94
New_Password = false;
95
Change_Protect_Status = false;
96
UART_putNewLine();
97
}
98
}
99
}
Das Passwort ist 32 Bit und besteht in ASCII aus 4 Charaktern, jeder 
Charakter hat 1 Byte/8bits.
Mein Code schaut so aus: (CVI Labview Software)
1
//  Default LOGIN for new tags
2
            UINT8 LOGIN_Password_Byte[4] = {0x00, 0x00, 0x00, 0x00};
3
            LOGIN_Password_Byte[0]= 0x00;
4
            LOGIN_Password_Byte[1]= 0x00;
5
            LOGIN_Password_Byte[2]= 0x00;
6
            LOGIN_Password_Byte[3]= 0x00;
7
            
8
            //
9
            Fmt(cCommand,"%s<%s%c%c%c%c%s",LOGIN,LOGIN_Password_Byte[0],LOGIN_Password_Byte[1],LOGIN_Password_Byte[2],LOGIN_Password_Byte[3],ENDE);
10
            //Fmt(cCommand,"%s<%s%s",LOGIN,"abcd:ENDE");
11
            iResult = Befehl_Senden(cCommand,cAnswer);
12
            if(iResult == -1)
13
            {
14
                SetCtrlAttribute(sPanels.P_Hauptmenue, P_MAIN_LED_GLASS_IDEN, ATTR_CTRL_VAL, 0);
15
                Breakpoint();
16
            }
17
            if(iResult == TRUE)
18
            {
19
            SetCtrlAttribute(sPanels.P_Hauptmenue, P_MAIN_LED_LOGIN, ATTR_CTRL_VAL, iResult);
20
}
Vlt. gibt es da bestimmt irgendwas in meinem Code, was fehlen müsste 
oder ich nicht beachtet haben könnte.
Für jeden Tipp oder Hilfe wäre ich dankbar!
Im Voraus vielen Dank!
Gruß
#6733716
Lesenswert?

Du solltest Dich mal mit Schleifen beschäftigen, statt Unmengen an C&P.
Wenn ich 4-mal das gleiche machen muß, dann setze ich dafür eine 
Schleife 0..3 auf.

Und fürs Array kopieren gibt es fertige Funktionen in der <string.h>. 
Das macht man nicht zu Fuß selber und erst recht nicht als C&P.

Ich würde auch nicht blockierend schreiben, sondern die Bytes nur 
sammeln und zur Mainloop zurück kehren. Und erst, wenn 4 Byte empfangen 
wurden, würde ich die Aktion machen. Dann kann die Mainloop in der 
Zwischenzeit noch andere Sachen machen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren