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
AvecCode: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); }
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.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 }, };
Seulement, j'aurai quelques question par rapport à ce code ci-dessous
en autre, le "networkConfig[0]" utilisé serait-il une structure de tableau de variable ? comment déclarer celle-ciCode: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); }
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); }
-----