⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 eCos操作系统源码
💻 C
字号:
//==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 2004 eCosCentric //// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================/* * init.c - misc lwip ecos glue functions  */#include <pkgconf/system.h>#include "lwip/opt.h"#include "lwip/sys.h"#include "lwip/memp.h"#include "lwip/tcpip.h"#include "lwip/ip_addr.h"#if LWIP_DHCP#include "lwip/dhcp.h"#endif#if LWIP_SLIP#include "netif/slipif.h"#endif#if PPP_SUPPORT#include "netif/ppp/ppp.h"#endif#include "netif/loopif.h"#include <cyg/hal/hal_if.h>#include <cyg/infra/diag.h>#ifdef CYGPKG_LWIP_ETH#include "netif/etharp.h"#include <cyg/io/eth/eth_drv.h>#include <cyg/io/eth/netdev.h>// Define table boundariesCYG_HAL_TABLE_BEGIN(__NETDEVTAB__, netdev);CYG_HAL_TABLE_END(__NETDEVTAB_END__, netdev);static void ecosglue_init(void);#endifvoid inline IP_ADDR(struct ip_addr *ipaddr, char a, char b, char c, char d){	IP4_ADDR(ipaddr,a,b,c,d);}void tcpip_init_done(void * arg){	sys_sem_t *sem = arg;	sys_sem_signal(*sem);}struct netif mynetif, loopif;void lwip_set_addr(struct netif *netif);#if PPP_SUPPORT#define PPP_USER "pppuser"#define PPP_PASS "ppppass"void pppMyCallback(void *a , int e, void * arg){	diag_printf("callback %d \n",e);}/* These temporarily here */unsigned longsys_jiffies(void){   return cyg_current_time();}void ppp_trace(int level, const char *format,...){    va_list args;    (void)level;    va_start(args, format);    diag_vprintf(format, args);    va_end(args);}	#endif#if LWIP_HAVE_LOOPIFstruct netif ecos_loopif;#endif/* * Called by the eCos application at startup * wraps various init calls */intlwip_init(void){	struct ip_addr ipaddr, netmask, gw;	static int inited = 0;	sys_sem_t sem;	if (inited)		return 1;	inited++;		sys_init();	/* eCos specific initialization */	mem_init();	/* heap based memory allocator */	memp_init();	/* pool based memory allocator */	pbuf_init();	/* packet buffer allocator */	netif_init();	/* netif layer */		/* Start the stack.It will spawn a new dedicated thread */	sem = sys_sem_new(0);	tcpip_init(tcpip_init_done,&sem);	sys_sem_wait(sem);	sys_sem_free(sem);#if LWIP_HAVE_LOOPIF	IP4_ADDR(&gw, 127,0,0,1);	IP4_ADDR(&ipaddr, 127,0,0,1);	IP4_ADDR(&netmask, 255,0,0,0);  	netif_add(&ecos_loopif, &ipaddr, &netmask, &gw, NULL, loopif_init,	    tcpip_input);#endif	#if LWIP_SLIP		lwip_set_addr(&mynetif);	slipif_init(&mynetif);	netif_set_default(&mynetif);#elif PPP_SUPPORT	pppInit();#if PAP_SUPPORT || CHAP_SUPPORT	pppSetAuth(PPPAUTHTYPE_PAP, PPP_USER, PPP_PASS);#endif	pppOpen(sio_open(2), pppMyCallback, NULL);#else		ecosglue_init();		#endif		return 0;}voidlwip_set_addr(struct netif *netif){	struct ip_addr ipaddr, netmask, gw;	IP_ADDR(&gw, CYGPKG_LWIP_SERV_ADDR);	IP_ADDR(&ipaddr, CYGPKG_LWIP_MY_ADDR);	IP_ADDR(&netmask, CYGPKG_LWIP_NETMASK);	netif_set_addr(netif, &ipaddr, &netmask, &gw);	netif->next = netif_list;	netif_list = netif;		netif->input = tcpip_input;	//netif->input = ip_input;}#ifdef CYGPKG_LWIP_ETH//io eth stuffcyg_sem_t delivery;voidlwip_dsr_stuff(void){  cyg_semaphore_post(&delivery);}//Input thread signalled by DSR calls deliver() on low level driversstatic voidinput_thread(void *arg){  cyg_netdevtab_entry_t *t;  for (;;) {    cyg_semaphore_wait(&delivery);    for (t = &__NETDEVTAB__[0]; t != &__NETDEVTAB_END__; t++) {      struct eth_drv_sc *sc = (struct eth_drv_sc *)t->device_instance;      if (sc->state & ETH_DRV_NEEDS_DELIVERY) {#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT)        cyg_bool was_ctrlc_int;#endif	sc->state &= ~ETH_DRV_NEEDS_DELIVERY;#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT)        was_ctrlc_int = HAL_CTRLC_CHECK((*sc->funs->int_vector)(sc), (int)sc);          if (!was_ctrlc_int) // Fall through and run normal code		  #endif	(sc->funs->deliver) (sc);      }    }  }}// Initialize all network devicesstatic voidinit_hw_drivers(void){  cyg_netdevtab_entry_t *t;  for (t = &__NETDEVTAB__[0]; t != &__NETDEVTAB_END__; t++) {    if (t->init(t)) {      t->status = CYG_NETDEVTAB_STATUS_AVAIL;    } else {      // What to do if device init fails?      t->status = 0;		// Device not [currently] available    }  }}static voidarp_timer(void *arg){  etharp_tmr();  sys_timeout(ARP_TMR_INTERVAL, (sys_timeout_handler) arp_timer, NULL);}static voidecosglue_init(void){  cyg_semaphore_init(&delivery, 0);  init_hw_drivers();  sys_thread_new(input_thread, (void*)0, CYGPKG_LWIP_ETH_THREAD_PRIORITY);  etharp_init();  sys_timeout(ARP_TMR_INTERVAL, (sys_timeout_handler) arp_timer, NULL);}#endif //CYGPKG_LWIP_ETH

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -