mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #3221 from andreaslarssonublox/ublox_odin_w2_drivers_update
u-blox odin w2 drivers updatepull/3230/head
commit
96e1d5bd73
|
@ -47,6 +47,11 @@ void emac_stack_mem_free(emac_stack_t* stack, emac_stack_mem_t *mem)
|
|||
pbuf_free((struct pbuf*)mem);
|
||||
}
|
||||
|
||||
void emac_stack_mem_copy(emac_stack_t* stack, emac_stack_mem_t *to, emac_stack_mem_t *from)
|
||||
{
|
||||
pbuf_copy((struct pbuf*)to, (struct pbuf*)from);
|
||||
}
|
||||
|
||||
void *emac_stack_mem_ptr(emac_stack_t* stack, emac_stack_mem_t *mem)
|
||||
{
|
||||
return ((struct pbuf*)mem)->payload;
|
||||
|
|
|
@ -49,6 +49,15 @@ emac_stack_mem_t *emac_stack_mem_alloc(emac_stack_t* stack, uint32_t size, uint3
|
|||
*/
|
||||
void emac_stack_mem_free(emac_stack_t* stack, emac_stack_mem_t *mem);
|
||||
|
||||
/**
|
||||
* Copy memory
|
||||
*
|
||||
* @param stack Emac stack context
|
||||
* @param to Memory to copy to
|
||||
* @param from Memory to copy from
|
||||
*/
|
||||
void emac_stack_mem_copy(emac_stack_t* stack, emac_stack_mem_t *to, emac_stack_mem_t *from);
|
||||
|
||||
/**
|
||||
* Return pointer to the payload
|
||||
*
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -22,6 +22,7 @@
|
|||
#include "mbed_events.h"
|
||||
|
||||
#include "rtos.h"
|
||||
#include "cmsis_os.h"
|
||||
#include "emac_api.h"
|
||||
#include "nsapi_types.h"
|
||||
#include "lwip/netif.h"
|
||||
|
@ -211,8 +212,9 @@ private:
|
|||
int32_t target_id;
|
||||
// Event queue for sending start up and connection events from driver to this class
|
||||
MsgQueue _event_queue;
|
||||
// Event queue for sending scan events from driver to this class
|
||||
MsgQueue _scan_event_queue;
|
||||
// Message queue for sending scan events from driver to this class
|
||||
osMessageQId _scan_msg_queue_id;
|
||||
osMessageQDef_t _queue_def;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -110,6 +110,7 @@ extern void cbMAIN_startOS(void);
|
|||
/**
|
||||
* Get event queue. Used for running a function in the same thread context as the driver.
|
||||
* Can not be called before cbMAIN_initOS/cbMAIN_initBt/cbMAIN_initWlan.
|
||||
* Use cbMAIN_dispatchEventQueue to trigger the driver to call the queued up functions.
|
||||
* @return EventQueue Pointer to the event queue where function calls can be enqueued.
|
||||
*/
|
||||
extern EventQueue* cbMAIN_getEventQueue(void);
|
||||
|
@ -128,4 +129,11 @@ extern void cbMAIN_driverLock(void);
|
|||
*/
|
||||
extern void cbMAIN_driverUnlock(void);
|
||||
|
||||
/**
|
||||
* Dispatch event queue. Should be called to trigger calls that have been queued up in the driver context
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
extern void cbMAIN_dispatchEventQueue(void);
|
||||
|
||||
#endif /*_CB_MAIN_H_*/
|
||||
|
|
|
@ -266,8 +266,17 @@ static bool wifi_link_out(emac_interface_t *emac, emac_stack_mem_t *buf)
|
|||
{
|
||||
(void)emac;
|
||||
// Break call chain to avoid the driver affecting stack usage for the IP stack thread too much
|
||||
emac_stack_mem_ref(emac,buf);
|
||||
cbMAIN_getEventQueue()->call(send_packet,emac,buf);
|
||||
emac_stack_mem_t *new_buf = emac_stack_mem_alloc(emac, emac_stack_mem_chain_len(emac,buf),0);
|
||||
if (new_buf != NULL) {
|
||||
emac_stack_mem_copy(emac, new_buf, buf);
|
||||
int id = cbMAIN_getEventQueue()->call(send_packet, emac, new_buf);
|
||||
if (id != 0) {
|
||||
cbMAIN_dispatchEventQueue();
|
||||
}
|
||||
else {
|
||||
emac_stack_mem_free(emac, new_buf);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue