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.
Fork of OmniWheels by
ns_fnet_events.c
00001 /* 00002 * Copyright (c) 2017, 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 } 00072 else if (event->event_type == ARM_LIB_SYSTEM_TIMER_EVENT) { 00073 if (event->event_id == NS_FNET_TIMER) { 00074 ns_fnet_events_ptr->current_time_in_ms += NS_FNET_TIMER_INTERVAL_MS; 00075 fnet_poll_service(); 00076 } 00077 } 00078 } 00079 00080 void ns_fnet_events_start(void) 00081 { 00082 if (ns_fnet_events_ptr->ns_fnet_tasklet_id < 0) { 00083 ns_fnet_events_ptr->ns_fnet_tasklet_id = eventOS_event_handler_create(&ns_fnet_event_handler, ARM_LIB_TASKLET_INIT_EVENT); 00084 } else { 00085 if (ns_fnet_events_ptr->ns_fnet_timer_storage == NULL) { 00086 ns_fnet_events_interval_timer_start(ns_fnet_events_ptr->receiver_id); 00087 } 00088 } 00089 } 00090 00091 void ns_fnet_events_stop(void) 00092 { 00093 if (ns_fnet_events_ptr->ns_fnet_tasklet_id < 0) { 00094 return; 00095 } 00096 00097 if (ns_fnet_events_ptr->ns_fnet_timer_storage) { 00098 eventOS_cancel(ns_fnet_events_ptr->ns_fnet_timer_storage); 00099 ns_fnet_events_ptr->ns_fnet_timer_storage = NULL; 00100 } 00101 } 00102 00103 void ns_fnet_events_fast_poll(void) 00104 { 00105 if (ns_fnet_events_ptr->ns_fnet_tasklet_id < 0) { 00106 return; 00107 } 00108 00109 if (ns_fnet_events_ptr->ns_fnet_timer_storage) { 00110 // scheduler is up and running, poll immediately 00111 fnet_poll_service(); 00112 } 00113 } 00114 00115 00116 uint32_t ns_fnet_time_in_ms_get(void) 00117 { 00118 return ns_fnet_events_ptr->current_time_in_ms; 00119 }
Generated on Fri Jul 22 2022 04:53:57 by
1.7.2
