lwip-related improvements.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@8066 35acf78f-673a-0410-8e92-d51de3d6d3f4master
parent
ff637e456f
commit
151e9e60ec
|
@ -618,9 +618,11 @@ int main(void) {
|
|||
* and performs the board-specific initializations.
|
||||
* - Kernel initialization, the main() function becomes a thread and the
|
||||
* RTOS is active.
|
||||
* - lwIP subsystem initialization using the default configuration.
|
||||
*/
|
||||
halInit();
|
||||
chSysInit();
|
||||
lwipInit(NULL);
|
||||
|
||||
/*
|
||||
* Initializes a serial-over-USB CDC driver.
|
||||
|
@ -660,12 +662,6 @@ int main(void) {
|
|||
*/
|
||||
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
|
||||
|
||||
/*
|
||||
* Creates the LWIP threads (it changes priority internally).
|
||||
*/
|
||||
chThdCreateStatic(wa_lwip_thread, LWIP_THREAD_STACK_SIZE, NORMALPRIO + 2,
|
||||
lwip_thread, NULL);
|
||||
|
||||
/*
|
||||
* Creates the HTTP thread (it changes priority internally).
|
||||
*/
|
||||
|
|
|
@ -79,10 +79,15 @@
|
|||
#define PERIODIC_TIMER_ID 1
|
||||
#define FRAME_RECEIVED_ID 2
|
||||
|
||||
/**
|
||||
/*
|
||||
* Suspension point for initialization procedure.
|
||||
*/
|
||||
thread_reference_t lwip_trp = NULL;
|
||||
|
||||
/*
|
||||
* Stack area for the LWIP-MAC thread.
|
||||
*/
|
||||
THD_WORKING_AREA(wa_lwip_thread, LWIP_THREAD_STACK_SIZE);
|
||||
static THD_WORKING_AREA(wa_lwip_thread, LWIP_THREAD_STACK_SIZE);
|
||||
|
||||
/*
|
||||
* Initialization.
|
||||
|
@ -214,7 +219,7 @@ static err_t ethernetif_init(struct netif *netif) {
|
|||
* @param[in] p pointer to a @p lwipthread_opts structure or @p NULL
|
||||
* @return The function does not return.
|
||||
*/
|
||||
THD_FUNCTION(lwip_thread, p) {
|
||||
static THD_FUNCTION(lwip_thread, p) {
|
||||
event_timer_t evt;
|
||||
event_listener_t el0, el1;
|
||||
struct ip_addr ip, gateway, netmask;
|
||||
|
@ -261,7 +266,8 @@ THD_FUNCTION(lwip_thread, p) {
|
|||
chEvtRegisterMask(macGetReceiveEventSource(ÐD1), &el1, FRAME_RECEIVED_ID);
|
||||
chEvtAddEvents(PERIODIC_TIMER_ID | FRAME_RECEIVED_ID);
|
||||
|
||||
/* Goes to the final priority after initialization.*/
|
||||
/* Resumes the caller and goes to the final priority.*/
|
||||
chThdResume(&lwip_trp, MSG_OK);
|
||||
chThdSetPriority(LWIP_THREAD_PRIORITY);
|
||||
|
||||
while (true) {
|
||||
|
@ -310,4 +316,25 @@ THD_FUNCTION(lwip_thread, p) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initializes the lwIP subsystem.
|
||||
* @note The function exits after the initialization is finished.
|
||||
*
|
||||
* @param[in] opts pointer to the configuration structure, if @p NULL
|
||||
* then the static configuration is used.
|
||||
*/
|
||||
void lwipInit(const lwipthread_opts_t *opts) {
|
||||
|
||||
/* Creating the lwIP thread (it changes priority internally).*/
|
||||
chThdCreateStatic(wa_lwip_thread, LWIP_THREAD_STACK_SIZE,
|
||||
chThdGetPriorityX() - 1, lwip_thread, (void *)opts);
|
||||
|
||||
/* Waiting for the lwIP thread complete initialization. Note,
|
||||
this thread reaches the thread reference object first because
|
||||
the relative priorities.*/
|
||||
chSysLock();
|
||||
chThdSuspendS(&lwip_trp);
|
||||
chSysUnlock();
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
|
|
@ -26,102 +26,132 @@
|
|||
|
||||
#include <lwip/opt.h>
|
||||
|
||||
/** @brief MAC thread priority.*/
|
||||
/**
|
||||
* @brief lwIP thread priority.
|
||||
*/
|
||||
#ifndef LWIP_THREAD_PRIORITY
|
||||
#define LWIP_THREAD_PRIORITY LOWPRIO
|
||||
#endif
|
||||
|
||||
/** @brief MAC thread stack size. */
|
||||
/**
|
||||
* @brief lwIP thread stack size.
|
||||
*/
|
||||
#if !defined(LWIP_THREAD_STACK_SIZE) || defined(__DOXYGEN__)
|
||||
#define LWIP_THREAD_STACK_SIZE 576
|
||||
#endif
|
||||
|
||||
/** @brief Link poll interval. */
|
||||
/**
|
||||
* @brief Link poll interval.
|
||||
*/
|
||||
#if !defined(LWIP_LINK_POLL_INTERVAL) || defined(__DOXYGEN__)
|
||||
#define LWIP_LINK_POLL_INTERVAL S2ST(5)
|
||||
#endif
|
||||
|
||||
/** @brief IP Address. */
|
||||
/**
|
||||
* @brief IP Address.
|
||||
*/
|
||||
#if !defined(LWIP_IPADDR) || defined(__DOXYGEN__)
|
||||
#define LWIP_IPADDR(p) IP4_ADDR(p, 192, 168, 1, 10)
|
||||
#endif
|
||||
|
||||
/** @brief IP Gateway. */
|
||||
/**
|
||||
* @brief IP Gateway.
|
||||
*/
|
||||
#if !defined(LWIP_GATEWAY) || defined(__DOXYGEN__)
|
||||
#define LWIP_GATEWAY(p) IP4_ADDR(p, 192, 168, 1, 1)
|
||||
#endif
|
||||
|
||||
/** @brief IP netmask. */
|
||||
/**
|
||||
* @brief IP netmask.
|
||||
*/
|
||||
#if !defined(LWIP_NETMASK) || defined(__DOXYGEN__)
|
||||
#define LWIP_NETMASK(p) IP4_ADDR(p, 255, 255, 255, 0)
|
||||
#endif
|
||||
|
||||
/** @brief Transmission timeout. */
|
||||
/**
|
||||
* @brief Transmission timeout.
|
||||
*/
|
||||
#if !defined(LWIP_SEND_TIMEOUT) || defined(__DOXYGEN__)
|
||||
#define LWIP_SEND_TIMEOUT 50
|
||||
#endif
|
||||
|
||||
/** @brief Link speed. */
|
||||
/**
|
||||
* @brief Link speed.
|
||||
*/
|
||||
#if !defined(LWIP_LINK_SPEED) || defined(__DOXYGEN__)
|
||||
#define LWIP_LINK_SPEED 100000000
|
||||
#endif
|
||||
|
||||
/** @brief MAC Address byte 0. */
|
||||
/**
|
||||
* @brief MAC Address byte 0.
|
||||
*/
|
||||
#if !defined(LWIP_ETHADDR_0) || defined(__DOXYGEN__)
|
||||
#define LWIP_ETHADDR_0 0xC2
|
||||
#endif
|
||||
|
||||
/** @brief MAC Address byte 1. */
|
||||
/**
|
||||
* @brief MAC Address byte 1.
|
||||
*/
|
||||
#if !defined(LWIP_ETHADDR_1) || defined(__DOXYGEN__)
|
||||
#define LWIP_ETHADDR_1 0xAF
|
||||
#endif
|
||||
|
||||
/** @brief MAC Address byte 2. */
|
||||
/**
|
||||
* @brief MAC Address byte 2.
|
||||
*/
|
||||
#if !defined(LWIP_ETHADDR_2) || defined(__DOXYGEN__)
|
||||
#define LWIP_ETHADDR_2 0x51
|
||||
#endif
|
||||
|
||||
/** @brief MAC Address byte 3. */
|
||||
/**
|
||||
* @brief MAC Address byte 3.
|
||||
*/
|
||||
#if !defined(LWIP_ETHADDR_3) || defined(__DOXYGEN__)
|
||||
#define LWIP_ETHADDR_3 0x03
|
||||
#endif
|
||||
|
||||
/** @brief MAC Address byte 4. */
|
||||
/**
|
||||
* @brief MAC Address byte 4.
|
||||
*/
|
||||
#if !defined(LWIP_ETHADDR_4) || defined(__DOXYGEN__)
|
||||
#define LWIP_ETHADDR_4 0xCF
|
||||
#endif
|
||||
|
||||
/** @brief MAC Address byte 5. */
|
||||
/**
|
||||
* @brief MAC Address byte 5.
|
||||
*/
|
||||
#if !defined(LWIP_ETHADDR_5) || defined(__DOXYGEN__)
|
||||
#define LWIP_ETHADDR_5 0x46
|
||||
#endif
|
||||
|
||||
/** @brief Interface name byte 0. */
|
||||
/**
|
||||
* @brief Interface name byte 0.
|
||||
*/
|
||||
#if !defined(LWIP_IFNAME0) || defined(__DOXYGEN__)
|
||||
#define LWIP_IFNAME0 'm'
|
||||
#endif
|
||||
|
||||
/** @brief Interface name byte 1. */
|
||||
/**
|
||||
* @brief Interface name byte 1.
|
||||
*/
|
||||
#if !defined(LWIP_IFNAME1) || defined(__DOXYGEN__)
|
||||
#define LWIP_IFNAME1 's'
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Runtime TCP/IP settings.
|
||||
* @brief Runtime TCP/IP settings.
|
||||
*/
|
||||
struct lwipthread_opts {
|
||||
typedef struct lwipthread_opts {
|
||||
uint8_t *macaddress;
|
||||
uint32_t address;
|
||||
uint32_t netmask;
|
||||
uint32_t gateway;
|
||||
};
|
||||
|
||||
extern THD_WORKING_AREA(wa_lwip_thread, LWIP_THREAD_STACK_SIZE);
|
||||
} lwipthread_opts_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
THD_FUNCTION(lwip_thread, p);
|
||||
void lwipInit(const lwipthread_opts_t *opts);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -74,6 +74,9 @@
|
|||
*****************************************************************************
|
||||
|
||||
*** 3.0.0 ***
|
||||
- NEW: Added an initialization function to the lwIP bindings, now it is
|
||||
sufficient to call lwipInit(NULL); in order to start the subsystem.
|
||||
Demo updated.
|
||||
- HAL: Fixed TIM2 wrongly classified as 32bits in STM32F1xx devices
|
||||
(bug #610).
|
||||
|
||||
|
|
Loading…
Reference in New Issue