add mechanism for timer ticks in NICs

This commit is contained in:
Nick Moore 2018-10-16 23:09:25 +11:00
parent 1f760bded8
commit a15f3361aa
2 changed files with 21 additions and 0 deletions

View File

@ -31,6 +31,7 @@
#include "usb_mass_storage.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/network/__init__.h"
volatile uint64_t last_finished_tick = 0;
@ -41,6 +42,9 @@ void run_background_tasks(void) {
#ifdef CIRCUITPY_DISPLAYIO
displayio_refresh_display();
#endif
#ifdef MICROPY_PY_NETWORK
network_module_background();
#endif
usb_msc_background();
usb_cdc_background();
last_finished_tick = ticks_ms;

View File

@ -24,6 +24,8 @@
* THE SOFTWARE.
*/
#include <stdio.h>
#include "py/objlist.h"
#include "py/runtime.h"
#include "py/mphal.h"
@ -31,6 +33,8 @@
#include "shared-bindings/random/__init__.h"
#include "shared-module/network/__init__.h"
// mod_network_nic_list needs to be declared in mpconfigport.h
@ -41,6 +45,19 @@ void network_module_init(void) {
void network_module_deinit(void) {
}
void network_module_background(void) {
static uint32_t next_tick = 0;
uint32_t this_tick = ticks_ms;
if (this_tick < next_tick) return;
next_tick = this_tick + 1000;
for (mp_uint_t i = 0; i < MP_STATE_PORT(mod_network_nic_list).len; i++) {
mp_obj_t nic = MP_STATE_PORT(mod_network_nic_list).items[i];
mod_network_nic_type_t *nic_type = (mod_network_nic_type_t*)mp_obj_get_type(nic);
if (nic_type->timer_tick != NULL) nic_type->timer_tick(nic);
}
}
void network_module_register_nic(mp_obj_t nic) {
for (mp_uint_t i = 0; i < MP_STATE_PORT(mod_network_nic_list).len; i++) {
if (MP_STATE_PORT(mod_network_nic_list).items[i] == nic) {