Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
ns_fnet_events.c
00001 /* 00002 * Copyright (c) 2017-2018, Arm Limited and affiliates. 00003 * SPDX-License-Identifier: Apache-2.0 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 */ 00017 00018 /* 00019 * Nanostack tasklet to handle FNET services. 00020 * Module will start tasklet that will drive FNET poll service 00021 * 00022 * */ 00023 00024 #include "fnet.h" 00025 00026 #include "ns_types.h" 00027 #include "ns_list.h" 00028 #include "eventOS_event.h" 00029 #include "eventOS_scheduler.h" 00030 #include "eventOS_event_timer.h" 00031 #include "net_interface.h" 00032 00033 #define NS_FNET_TIMER 0x01 00034 #define NS_FNET_TIMER_INTERVAL_MS 100 00035 00036 typedef struct ns_fnet_events { 00037 arm_event_storage_t *ns_fnet_timer_storage; 00038 uint32_t current_time_in_ms; 00039 int8_t ns_fnet_tasklet_id; 00040 int8_t receiver_id; 00041 } ns_fnet_events_t; 00042 00043 static ns_fnet_events_t ns_fnet_events = { 00044 .ns_fnet_tasklet_id = -1, 00045 .ns_fnet_timer_storage = NULL, 00046 .receiver_id = -1, 00047 .current_time_in_ms = 0, 00048 }; 00049 00050 ns_fnet_events_t *ns_fnet_events_ptr = &ns_fnet_events; 00051 00052 static void ns_fnet_events_interval_timer_start(int8_t receiver) 00053 { 00054 struct arm_event_s event = { 00055 .receiver = receiver, 00056 .sender = receiver, 00057 .event_type = ARM_LIB_SYSTEM_TIMER_EVENT, 00058 .event_id = NS_FNET_TIMER, 00059 .priority = ARM_LIB_LOW_PRIORITY_EVENT, 00060 }; 00061 00062 ns_fnet_events_ptr->ns_fnet_timer_storage = eventOS_event_timer_request_every(&event, eventOS_event_timer_ms_to_ticks(NS_FNET_TIMER_INTERVAL_MS)); 00063 } 00064 00065 static void ns_fnet_event_handler(arm_event_s *event) 00066 { 00067 if (event->event_type == ARM_LIB_TASKLET_INIT_EVENT) { 00068 FNET_DEBUG("NS FNET tasklet initialised"); 00069 ns_fnet_events_ptr->receiver_id = event->receiver; 00070 ns_fnet_events_interval_timer_start(ns_fnet_events_ptr->receiver_id); 00071 } else if (event->event_type == ARM_LIB_SYSTEM_TIMER_EVENT) { 00072 if (event->event_id == NS_FNET_TIMER) { 00073 ns_fnet_events_ptr->current_time_in_ms += NS_FNET_TIMER_INTERVAL_MS; 00074 fnet_poll_service(); 00075 } 00076 } 00077 } 00078 00079 void ns_fnet_events_start(void) 00080 { 00081 if (ns_fnet_events_ptr->ns_fnet_tasklet_id < 0) { 00082 ns_fnet_events_ptr->ns_fnet_tasklet_id = eventOS_event_handler_create(&ns_fnet_event_handler, ARM_LIB_TASKLET_INIT_EVENT); 00083 } else { 00084 if (ns_fnet_events_ptr->ns_fnet_timer_storage == NULL) { 00085 ns_fnet_events_interval_timer_start(ns_fnet_events_ptr->receiver_id); 00086 } 00087 } 00088 } 00089 00090 void ns_fnet_events_stop(void) 00091 { 00092 if (ns_fnet_events_ptr->ns_fnet_tasklet_id < 0) { 00093 return; 00094 } 00095 00096 if (ns_fnet_events_ptr->ns_fnet_timer_storage) { 00097 eventOS_cancel(ns_fnet_events_ptr->ns_fnet_timer_storage); 00098 ns_fnet_events_ptr->ns_fnet_timer_storage = NULL; 00099 } 00100 } 00101 00102 void ns_fnet_events_fast_poll(void) 00103 { 00104 if (ns_fnet_events_ptr->ns_fnet_tasklet_id < 0) { 00105 return; 00106 } 00107 00108 if (ns_fnet_events_ptr->ns_fnet_timer_storage) { 00109 // scheduler is up and running, poll immediately 00110 fnet_poll_service(); 00111 } 00112 } 00113 00114 00115 uint32_t ns_fnet_time_in_ms_get(void) 00116 { 00117 return ns_fnet_events_ptr->current_time_in_ms; 00118 }
Generated on Tue Jul 12 2022 13:54:38 by
