BrickOS und LNP problem



  • Hallo
    Will ne kleine IR-Kommunikation für BrickOS (Lego Mindstorms Roboter aufsetzen)
    irgendwie gehts aber nicht ....
    hier die 2 Programme ...
    das eine schickt die Daten per Seriellem-IR-Tower
    der RCX (Mikrocontroller empfängt):

    PC-Program:

    #include <liblnp.h>
    #include <unistd.h>
    
    #define MY_PORT 7
    
    #define DEST_HOST 0
    #define DEST_PORT 2
    #define DEST_ADDR ( DEST_HOST << 4 | DEST_PORT )
    
    void printInt(int i);
    
    int test;
    int num;
    int result;
    
    int main()
    {
    
    if(lnp_init(0,0,0,0,0))
    {
      perror("lnp_init");
        exit(1);
        }
        else
          printf("init OK\n");
    
    test=1;
    
    printInt(test);
    }
    
    void printInt(int i)
    {
      char buf[3];
      int result;
      num = (char *)(&i);
      buf[0] = 'i';
      memcpy(buf + 1, &i, 2);
      result = lnp_addressing_write(buf,3, DEST_ADDR, MY_PORT);
      printf("Result: %d\n",result);
    }
    

    Der LNPD läuft einwandfrei
    der IR-Tower blinkt grün beim starten des programms und das sende-pc-programm gibt 0 zurück --> funktioniert fehlerfrei ?!?
    The second program is the RCX-program:

    #include <lnp.h>
    #include <lnp/lnp-logical.h>
    #include <sys/lcd.h>
    #include <conio.h>
    #include <unistd.h>
    
    #define MY_PORT 2
    
    #define DEST_HOST 0x80
    #define DEST_PORT 2
    #define DEST_ADDR ( DEST_HOST << 4 | DEST_PORT )
    
    int flag=0;
    
    void addr_handler_1(const unsigned char *data, unsigned char length, unsigned
    char src){
    ++flag;
    }
    
    int main()
    {
    lnp_logical_range(1);
    cputs("Hallo");
    msleep(2000);
    cputs("     ");
    lnp_addressing_set_handler(MY_PORT,addr_handler_1);
    while(1)
    {
    if(flag!=0)break;
    }
    cputs("Exit");
    msleep(1000);
    return 0;
    }
    

    It should break and print EXIT on the RCX-LCD when it receives a message, no
    matter what message.
    Leider passiert gar nix .... das ding bleibt in der endlos-schleife
    wenns hilft: lnp_adressing_set_handler setzt den interrupt für addr_handler_1
    irgendjemand ne idee warum nix passiert ?
    gruß
    lars

    [ edit by c.rackwitz: cpp-Tags ]


Anmelden zum Antworten