[Programmation] initialisation paramètre réseau pic32
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

initialisation paramètre réseau pic32



  1. #1
    davidif

    initialisation paramètre réseau pic32


    ------

    Bonjour,

    Mon problème serait de 2 ordres, en fait comme je les stipulé sur une autres discutions serait de mémoriser mes paramètres réseaux en flash lors du reboot de la pile TCP/IP

    Pour initialiser mes valeurs réseau au démarrage, à l'initiale j'ai ça

    Code:
    SYS_MODULE_OBJ TCPIP_STACK_Init()
    {
    
        TCPIP_STACK_INIT    tcpipInit;
    
               
        
        tcpipInit.moduleInit.sys.powerState = SYS_MODULE_POWER_RUN_FULL;
        tcpipInit.pNetConf = TCPIP_HOSTS_CONFIGURATION; 
        tcpipInit.nNets = sizeof (TCPIP_HOSTS_CONFIGURATION) / sizeof (*TCPIP_HOSTS_CONFIGURATION);
        tcpipInit.pModConfig = TCPIP_STACK_MODULE_CONFIG_TBL;
        tcpipInit.nModules = sizeof (TCPIP_STACK_MODULE_CONFIG_TBL) / sizeof (*TCPIP_STACK_MODULE_CONFIG_TBL);
    
        return TCPIP_STACK_Initialize(0, &tcpipInit.moduleInit);
    }
    Avec

    Code:
    const TCPIP_NETWORK_CONFIG __attribute__((unused))  TCPIP_HOSTS_CONFIGURATION[] =
    {
    /*** Network Configuration Index 0 ***/
        {
            TCPIP_NETWORK_DEFAULT_INTERFACE_NAME,       // interface
            TCPIP_NETWORK_DEFAULT_HOST_NAME,            // hostName
            TCPIP_NETWORK_DEFAULT_MAC_ADDR,             // macAddr
            TCPIP_NETWORK_DEFAULT_IP_ADDRESS,           // ipAddr
            TCPIP_NETWORK_DEFAULT_IP_MASK,              // ipMask
            TCPIP_NETWORK_DEFAULT_GATEWAY,              // gateway
            TCPIP_NETWORK_DEFAULT_DNS,                  // priDNS
            TCPIP_NETWORK_DEFAULT_SECOND_DNS,           // secondDNS
            TCPIP_NETWORK_DEFAULT_POWER_MODE,           // powerMode
            TCPIP_NETWORK_DEFAULT_INTERFACE_FLAGS,      // startFlags
           &TCPIP_NETWORK_DEFAULT_MAC_DRIVER,           // pMacObject
        },  
    /*** Network Configuration Index 1 ***/
        {
            TCPIP_NETWORK_DEFAULT_INTERFACE_NAME_IDX1,       // interface
            TCPIP_NETWORK_DEFAULT_HOST_NAME_IDX1,            // hostName
            TCPIP_NETWORK_DEFAULT_MAC_ADDR_IDX1,             // macAddr
            TCPIP_NETWORK_DEFAULT_IP_ADDRESS_IDX1,           // ipAddr      
            TCPIP_NETWORK_DEFAULT_IP_MASK_IDX1,              // ipMask
            TCPIP_NETWORK_DEFAULT_GATEWAY_IDX1,              // gateway
            TCPIP_NETWORK_DEFAULT_DNS_IDX1,                  // priDNS
            TCPIP_NETWORK_DEFAULT_SECOND_DNS_IDX1,           // secondDNS
            TCPIP_NETWORK_DEFAULT_POWER_MODE_IDX1,           // powerMode
            TCPIP_NETWORK_DEFAULT_INTERFACE_FLAGS_IDX1,      // startFlags
           &TCPIP_NETWORK_DEFAULT_MAC_DRIVER_IDX1,           // pMacObject
        },
    };
    et évidemment de pourvoir les ré-initialiser au démarrage, pour ça j'ai cherché sur le net les solutions existantes et parmis eux j'ai trouvé du code qui m'à l'aire intéressante pour initialiser mes valeurs.
    Seulement, j'aurai quelques question par rapport à ce code ci-dessous

    Code:
    SYS_MODULE_OBJ TCPIP_STACK_Init()
    {
        TCPIP_STACK_INIT    tcpipInit;
        TCPIP_NETWORK_CONFIG networkConfig[1];
        uint8_t boardAddress = 0;
        bool useDHCP = false;
        
        networkConfig[0].gateway = DEFAULT_GATEWAY;
        networkConfig[0].interface = TCPIP_NETWORK_DEFAULT_INTERFACE_NAME;
        networkConfig[0].ipMask = DEFAULT_MASK;
        networkConfig[0].ipv6Addr = 0;
        networkConfig[0].ipv6PrefixLen = 0;
        networkConfig[0].ipv6Gateway = 0;
        networkConfig[0].macAddr = 0;
        networkConfig[0].powerMode = TCPIP_NETWORK_DEFAULT_POWER_MODE;
        networkConfig[0].priDNS = DEFAULT_DNS;
        networkConfig[0].secondDNS = DEFAULT_DNS;
        
        initDipSwitches();
        boardAddress = getBoardAddress();  // Read the board DIP switches for the address (if set for using static)
        useDHCP = getDHCPMode(); // See if the DHCP DIP switch is on or off (overrides address settings if on)
        
        // see if the board is set for DHCP addressing
        if(useDHCP == true)
        {
            // if here the board is set to use DHCP so just set a default hostname
            // IP address and ensure the correct start flags for the stack are set to use DHCP
            networkConfig[0].hostName = HOSTNAME_DHCP;
            networkConfig[0].ipAddr = IP_ADDRESS_0; // will be replaced by the DHCP provided IP address
            networkConfig[0].startFlags = TCPIP_NETWORK_CONFIG_DHCP_CLIENT_ON;
        }
        else
        {
            // if here the board is set to use a pre-configured static IP address
            networkConfig[0].startFlags = 0;
            
            // determine the static address according to the DIP switch settings
            switch(boardAddress)
            {
                case 0: 
                    networkConfig[0].hostName = HOSTNAME_0;
                    networkConfig[0].ipAddr = IP_ADDRESS_0;
                    break;
                case 1: 
                    networkConfig[0].hostName = HOSTNAME_1;
                    networkConfig[0].ipAddr = IP_ADDRESS_1;
                    break;
                case 2: 
                    networkConfig[0].hostName = HOSTNAME_2;
                    networkConfig[0].ipAddr = IP_ADDRESS_2;
                    break;
                case 3: 
                    networkConfig[0].hostName = HOSTNAME_3;
                    networkConfig[0].ipAddr = IP_ADDRESS_3;
                    break;
                case 4: 
                    networkConfig[0].hostName = HOSTNAME_4;
                    networkConfig[0].ipAddr = IP_ADDRESS_4;
                    break;
                case 5: 
                    networkConfig[0].hostName = HOSTNAME_5;
                    networkConfig[0].ipAddr = IP_ADDRESS_5;
                    break;
                case 6: 
                    networkConfig[0].hostName = HOSTNAME_6;
                    networkConfig[0].ipAddr = IP_ADDRESS_6;
                    break;
                case 7: 
                    networkConfig[0].hostName = HOSTNAME_7;
                    networkConfig[0].ipAddr = IP_ADDRESS_7;
                    break;
            }
        }
        
        tcpipInit.moduleInit.sys.powerState = SYS_MODULE_POWER_RUN_FULL;
        tcpipInit.pNetConf = networkConfig;
        tcpipInit.nNets = sizeof (networkConfig) / sizeof (*networkConfig);
        tcpipInit.pModConfig = TCPIP_STACK_MODULE_CONFIG_TBL;
        tcpipInit.nModules = sizeof (TCPIP_STACK_MODULE_CONFIG_TBL) / sizeof (*TCPIP_STACK_MODULE_CONFIG_TBL);
    
        return TCPIP_STACK_Initialize(0, &tcpipInit.moduleInit);
    }
    en autre, le "networkConfig[0]" utilisé serait-il une structure de tableau de variable ? comment déclarer celle-ci

    Dans l'idée, à la réception des nouveaux paramètres, serai au mieux de les mettre en flash directement lors d'un reboot, les ré-initialiser, seulement je n'arrive pas à comprendre sous quels type ou forme dois-je les stoker pour les charger à l'init ? sous forme de tableau de caratères, genre

    char new_ip[12]={0x31,0x39,0x32,0x2E,0x31,0x3 6,0x38,0x2E,0x31,0x31,0x33,0x3 5};

    puis je viens charger mon IP comme ça

    networkConfig[0].ipAddr = new_ip;

    en m'inspirant du code ci-dessus :

    Code:
    char new_ip[12]={0x31,0x39,0x32,0x2E,0x31,0x36,0x38,0x2E,0x31,0x31,0x33,0x35};
    char new_hostname[11]={0x4d,0x43,0x48,0x50,0x42,0x4F,0x41,0x52,0x44,0x5F,0x57};
    
    
    SYS_MODULE_OBJ TCPIP_STACK_Init()
    {
    
        TCPIP_STACK_INIT    tcpipInit;
        TCPIP_NETWORK_CONFIG networkConfig[1];
        
            
    
        networkConfig[0].startFlags = 0;
        networkConfig[0].hostName = new_hostname;
        networkConfig[0].ipAddr = new_ip;
        
        
        
        
        
        tcpipInit.moduleInit.sys.powerState = SYS_MODULE_POWER_RUN_FULL;
        tcpipInit.pNetConf = networkConfig;
        tcpipInit.nNets = sizeof (networkConfig) / sizeof (*networkConfig);
        tcpipInit.pModConfig = TCPIP_STACK_MODULE_CONFIG_TBL;
        tcpipInit.nModules = sizeof (TCPIP_STACK_MODULE_CONFIG_TBL) / sizeof (*TCPIP_STACK_MODULE_CONFIG_TBL);
    
        return TCPIP_STACK_Initialize(0, &tcpipInit.moduleInit);
    }

    -----

  2. #2
    davidif

    Re : initialisation paramètre réseau pic32

    Bon apriori, sa ça marche :

    Code:
    SYS_MODULE_OBJ TCPIP_STACK_Init()
    {
    
        TCPIP_STACK_INIT    tcpipInit;
         
        
        TCPIP_NETWORK_CONFIG networkConfig[1];
        
        tcpipInit.moduleInit.sys.powerState = SYS_MODULE_POWER_RUN_FULL;    
        
        
        networkConfig[0].interface = TCPIP_NETWORK_DEFAULT_INTERFACE_NAME_IDX1;
        networkConfig[0].hostName =TCPIP_NETWORK_DEFAULT_HOST_NAME_IDX1;
        networkConfig[0].macAddr =TCPIP_NETWORK_DEFAULT_MAC_ADDR_IDX1;
        networkConfig[0].ipAddr=TCPIP_NETWORK_DEFAULT_IP_ADDRESS_IDX1;
        //networkConfig[0].ipAddr = (new_ip[0] | new_ip[1]<<8ul | new_ip[2]<<16ul | new_ip[3]<<24ul);
        //networkConfig[0].ipAddr = (new_ip[0] | new_ip[1]| new_ip[2]| new_ip[3]);
        networkConfig[0].ipMask =TCPIP_NETWORK_DEFAULT_IP_MASK_IDX1;
        networkConfig[0].gateway = TCPIP_NETWORK_DEFAULT_GATEWAY_IDX1;
        networkConfig[0].priDNS = TCPIP_NETWORK_DEFAULT_DNS_IDX1;
        networkConfig[0].secondDNS =TCPIP_NETWORK_DEFAULT_SECOND_DNS_IDX1;
        networkConfig[0].powerMode =TCPIP_NETWORK_DEFAULT_POWER_MODE_IDX1;
        networkConfig[0].startFlags=TCPIP_NETWORK_DEFAULT_INTERFACE_FLAGS_IDX1;   
        networkConfig[0].pMacObject=&TCPIP_NETWORK_DEFAULT_MAC_DRIVER_IDX1;
    
    
        //networkConfig[0].startFlags = 0;
    
    
    
        //tcpipInit.pNetConf = TCPIP_HOSTS_CONFIGURATION; 
        //tcpipInit.nNets = sizeof (TCPIP_HOSTS_CONFIGURATION) / sizeof (*TCPIP_HOSTS_CONFIGURATION);
        tcpipInit.pNetConf = networkConfig;
        tcpipInit.nNets = sizeof (networkConfig) / sizeof (*networkConfig);
        tcpipInit.pModConfig = TCPIP_STACK_MODULE_CONFIG_TBL;
        tcpipInit.nModules = sizeof (TCPIP_STACK_MODULE_CONFIG_TBL) / sizeof (*TCPIP_STACK_MODULE_CONFIG_TBL);
    
        return TCPIP_STACK_Initialize(0, &tcpipInit.moduleInit);
    }
    Mais quel type de valeur et sous quel forme pourrai-je mettre une variable ici

    networkConfig[0].ipAddr=TCPIP_NETWORK_DEFAULT_ IP_ADDRESS_IDX1;

    j'ai essayé

    //networkConfig[0].ipAddr = (new_ip[0] | new_ip[1]<<8ul | new_ip[2]<<16ul | new_ip[3]<<24ul);
    //networkConfig[0].ipAddr = (new_ip[0] | new_ip[1]| new_ip[2]| new_ip[3]);

    avec différent format de tableau

    //char new_ip[12]={0x31,0x39,0x32,0x2E,0x31,0x3 6,0x38,0x2E,0x31,0x31,0x33,0x3 5};
    char new_ip[4]={192,168,1,136};

    s'il vous plait, auriez-vous une explication.

  3. #3
    satinas

    Re : initialisation paramètre réseau pic32

    Si tu es sous Windows, tu te mets dans le dossier Harmony et
    findstr /s /c:TCPIP_NETWORK_DEFAULT_IP_ADD RESS_IDX1 *.*
    si Linux utiliser grep

  4. #4
    davidif

    Re : initialisation paramètre réseau pic32

    Citation Envoyé par satinas Voir le message
    Si tu es sous Windows, tu te mets dans le dossier Harmony et
    findstr /s /c:TCPIP_NETWORK_DEFAULT_IP_ADD RESS_IDX1 *.*
    si Linux utiliser grep
    Excuse satinas, mais je comprend pas ce que je dois chercher, je suis sous windows ?

  5. A voir en vidéo sur Futura
  6. #5
    satinas

    Re : initialisation paramètre réseau pic32

    La commande retourne 1 milliard de lignes qui se ressemblent, un exemple :
    #define TCPIP_NETWORK_DEFAULT_IP_ADDRE SS_IDX1 "192.168.100.131"
    Ca répond pas à ta question ?

  7. #6
    davidif

    Re : initialisation paramètre réseau pic32

    A priori l'initialisation des paramètre réseau ce rentrerai en string et ma difficulté serai a partir d'un tableau de char variable

    char new_ip[12]={0x31,0x39,0x32,0x2E,0x31,0x3 6,0x38,0x2E,0x31,0x31,0x33,0x3 5};

    en "192.168.1.135" pour

    networkConfig[0].ipAddr="192.168.1.135";

    Style

    networkConfig[0].ipAddr=string(new_ip);

  8. #7
    satinas

    Re : initialisation paramètre réseau pic32

    string() je connais pas
    ipAddr ressemble à un char* vu la syntaxe ("findstr /s /c:ipAddr *.h" devrait te le confirmer)
    Une ip fait 15 caractères max, plus le zéro de fin de chaîne.
    Tu stockes ton ip en ascii dans un tableau new_ip[16]
    puis networkConfig[0].ipAddr = new_ip;

    En espérant que j'ai compris ce que tu veux faire.

  9. #8
    davidif

    Re : initialisation paramètre réseau pic32

    Merci satinas pour tes explications, pour une ip sous cette forme :

    0x31,0x39,0x32,0x2E,0x31,0x3 6,0x38,0x2E,0x31,0x31,0x33,0x3 5 -> pour 192.168.1.135 je met en fin un \0 donc 0x2F et 0x30 pour notifier la fin ?

    0x31,0x39,0x32,0x2E,0x31,0x3 6,0x38,0x2E,0x31,0x31,0x33,0x3 5,0x2F,0x30 donc

    char new_ip[14]={0x31,0x39,0x32,0x2E,0x31,0x3 6,0x38,0x2E,0x31,0x31,0x33,0x3 5,0x2F,0x30};

    ou

    char new_ip[14]={0x31,0x39,0x32,0x2E,0x31,0x3 6,0x38,0x2E,0x31,0x31,0x33,0x3 5,"\0"};

    pour après pouvoir l'interpréter

    networkConfig[0].ipAddr = new_ip; // networkConfig[0].ipAddr = "192.168.1.135";

  10. #9
    satinas

    Re : initialisation paramètre réseau pic32

    Pourquoi tu passes par de l'hexa, en oubliant un 0x2e d'ailleurs
    C'est pas plus simple de faire :
    char new_ip[16] = "192.168.1.135"
    Démarrer en C sur un Pic32, je trouve ça téméraire.

  11. #10
    davidif

    Re : initialisation paramètre réseau pic32

    Bah en faite, quand je modifie mes paramètres réseau via l'interface web, je réception l'iP modifier en hexa dans le custom_http.c que je souhaite mettre en flash et l'initialiser au démarrage.
    Donc en l'état l'iP est en hexa, c'est pour ça que j'ai cette difficultés de pouvoir passer d'un tableau de char en string pour la charger.
    Après effectivement je suis pas un pro en prog mais j'y travail et il y a peut-être d'autre méthode, je suis preneur si il y a mieux.

    Merci

  12. #11
    satinas

    Re : initialisation paramètre réseau pic32

    Désolé mais je sais pas comment tout ça marche, es-tu en DHCP, à quoi sert l'interface Web, ect
    Alors pour te suivre c'est dur, je sais toujours pas comment est stockée l'adresse ip que tu récupères, hexa c'est pas un type de donnée.

  13. #12
    satinas

    Re : initialisation paramètre réseau pic32

    Si l'adresse est stockée dans 4 octets (unsigned char ip[4])

    Code:
    char new_ip[16]; 
    new_ip[0] = 0;
    int i; for (i=0; i<4; i++) {
      itoa(ip[i], new_ip+strlen(new_ip), 10);
      if (i < 3) strcat(new_ip, ".");
    }
    ou
    char new_ip[16];
    sprintf(new_ip, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]);
    Dernière modification par satinas ; 24/07/2016 à 20h47.

  14. #13
    davidif

    Re : initialisation paramètre réseau pic32

    Désolé j'essai d'être explicite, mais mes notion en prog étant limité j'ai quelques difficulté.

    en fait, mon interface web est comme ça

    Nom : int web.png
Affichages : 61
Taille : 106,0 Ko

    Donc quand je souhaite changer mes paramètres , je clic sur "restart interface" je reçois mon IP en récupérant ce qui ce trouve dans le buffer sous cette forme

    0x31,0x39,0x32,0x2E,0x31,0x3 6,0x38,0x2E,0x31,0x31,0x33,0x3 5

    Après je peux récupérer en hexa comme ci-dessus et le mettre dans un tableau pour le mettre en flash interne

    ou

    je peus faire en sorte de le stocker sous une autre forme

    ipAddr[4]={192,168,1,135}

    Après mon problème est de le rendre lisible à l'initialisation sous cette forme "192.168.1.135"

    networkConfig[0].ipAddr = "192.168.1.135"

    Suis-je claire (:
    Dernière modification par davidif ; 24/07/2016 à 21h11.

  15. #14
    satinas

    Re : initialisation paramètre réseau pic32

    0x31,0x39,0x32,0x2E,0x31,0x3 6,0x38,0x2E,0x31,0x31,0x33,0x3 5
    ça nous donne 192.168.1135
    c'est quoi ce truc

  16. #15
    davidif

    Re : initialisation paramètre réseau pic32

    Oui

    0x31 --> 1
    0x39 --> 9
    0x32 --> 2
    0x2E --> .
    0x31 --> 1
    0x36 --> 6
    0x38 --> 8
    0x2E --> .
    0x31 -->1
    0x2E --> .
    0x31 -->1
    0x33 -->3
    0x35 -->5

    j'ai loupé un 0x2E --> .

  17. #16
    davidif

    Re : initialisation paramètre réseau pic32

    ça y est , j'arrive à initialiser mes paramètres , effectivement, j'ai oublier un 0x2E --> .

    networkConfig[0].ipAddr =new_ip;

    nickel

    Merci Satinas

Discussions similaires

  1. Paramètre de maille et réseau cristallin
    Par jerome0 dans le forum Chimie
    Réponses: 5
    Dernier message: 14/06/2016, 16h35
  2. Réponses: 0
    Dernier message: 25/01/2015, 17h59
  3. jtag et pic32
    Par eldudo dans le forum Électronique
    Réponses: 2
    Dernier message: 15/06/2011, 23h34
  4. bootloader pic32
    Par invite365ecf67 dans le forum Électronique
    Réponses: 0
    Dernier message: 10/05/2011, 11h24
  5. Probleme parametre réseau wifi
    Par invite8ccae921 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 5
    Dernier message: 15/10/2010, 15h58
Découvrez nos comparatifs produits sur l'informatique et les technologies.