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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.