55 */ 
66
77/** @file 
8-  * @brief OpenThread L2  stack public header 
8+  * @brief OpenThread stack public header 
99 */ 
1010
1111#ifndef  ZEPHYR_INCLUDE_NET_OPENTHREAD_H_ 
1212#define  ZEPHYR_INCLUDE_NET_OPENTHREAD_H_ 
1313
1414/** 
15-  * @brief OpenThread Layer 2 abstraction layer  
16-  * @defgroup openthread OpenThread L2 abstraction layer  
15+  * @brief OpenThread stack public header  
16+  * @defgroup openthread OpenThread stack  
1717 * @since 1.11 
1818 * @version 0.8.0 
1919 * @ingroup ieee802154 
2020 * @{ 
2121 */ 
2222
2323#include  <zephyr/kernel.h> 
24- 
2524#include  <zephyr/net/net_if.h> 
25+ #include  <zephyr/kernel/thread.h> 
2626
2727#include  <openthread/instance.h> 
28+ #include  <openthread/message.h> 
2829
2930#ifdef  __cplusplus 
3031extern  "C"  {
@@ -44,8 +45,10 @@ struct pkt_list_elem {
4445 * @brief OpenThread l2 private data. 
4546 */ 
4647struct  openthread_context  {
47- 	/** Pointer to OpenThread stack instance */ 
48- 	otInstance  * instance ;
48+ 	/** @deprecated Pointer to OpenThread stack instance. This is deprecated and will be removed 
49+ 	 * in a future release. This field must not be used outside anymore. 
50+ 	 */ 
51+ 	__deprecated  otInstance  * instance ;
4952
5053	/** Pointer to OpenThread network interface */ 
5154	struct  net_if  * iface ;
@@ -62,22 +65,40 @@ struct openthread_context {
6265	/** Array for storing net_pkt for OpenThread internal usage */ 
6366	struct  pkt_list_elem  pkt_list [CONFIG_OPENTHREAD_PKT_LIST_SIZE ];
6467
65- 	/** A mutex to protect API calls from being preempted. */ 
66- 	struct  k_mutex  api_lock ;
68+ 	/** @deprecated A mutex to protect API calls from being preempted. This is deprecated and 
69+ 	 * will be removed in a future release. This field must not be used outside anymore. 
70+ 	 */ 
71+ 	__deprecated  struct  k_mutex  api_lock ;
6772
68- 	/** A work queue for all OpenThread activity */ 
69- 	struct  k_work_q  work_q ;
73+ 	/** @deprecated A work queue for all OpenThread activity. This is deprecated and will be 
74+ 	 * removed in a future release. This field must not be used outside anymore. 
75+ 	 */ 
76+ 	__deprecated  struct  k_work_q  work_q ;
7077
71- 	/** Work object for OpenThread internal usage */ 
72- 	struct  k_work  api_work ;
78+ 	/** @deprecated Work object for OpenThread internal usage. This is deprecated and will be 
79+ 	 * removed in a future release. This field must not be used outside anymore. 
80+ 	 */ 
81+ 	__deprecated  struct  k_work  api_work ;
7382
74- 	/** A list for state change callbacks */ 
83+ 	/** @deprecated A list for state change callbacks. This is deprecated and will be removed in 
84+ 	 * a future release. 
85+ 	 */ 
7586	sys_slist_t  state_change_cbs ;
7687};
7788/** 
7889 * INTERNAL_HIDDEN @endcond 
7990 */ 
8091
92+ /** 
93+  * @brief The common callback type for receiving IPv4 (translated by NAT64) and IPv6 datagrams. 
94+  * 
95+  * This callback is called when a datagram is received. 
96+  * 
97+  * @param aMessage The message to receive. 
98+  * @param aContext The context to pass to the callback. 
99+  */ 
100+ typedef  void  (* openthread_receive_cb )(otMessage  * aMessage , void  * aContext );
101+ 
81102/** OpenThread state change callback  */ 
82103
83104/** 
@@ -88,6 +109,38 @@ struct openthread_context {
88109 * are unique pointers of struct openthread_state_changed_cb. 
89110 * Beware such structure should not be allocated on stack. 
90111 */ 
112+ struct  openthread_state_changed_callback  {
113+ 	/** 
114+ 	 * @brief Callback for notifying configuration or state changes. 
115+ 	 * 
116+ 	 * @param flags as per OpenThread otStateChangedCallback() aFlags parameter. 
117+ 	 *        See https://openthread.io/reference/group/api-instance#otstatechangedcallback 
118+ 	 * @param instance the OpenThread instance the callback is registered with. 
119+ 	 * @param user_data Data to pass to the callback. 
120+ 	 */ 
121+ 	void  (* openthread_state_changed_cb )(otChangedFlags  flags , struct  otInstance  * instance ,
122+ 					    void  * user_data );
123+ 
124+ 	/** User data if required */ 
125+ 	void  * user_data ;
126+ 
127+ 	/** 
128+ 	 * Internally used field for list handling 
129+ 	 *  - user must not directly modify 
130+ 	 */ 
131+ 	sys_snode_t  node ;
132+ };
133+ 
134+ /** 
135+  * @deprecated use @ref openthread_state_changed_callback instead. 
136+  * 
137+  * @brief OpenThread state change callback structure 
138+  * 
139+  * Used to register a callback in the callback list. As many 
140+  * callbacks as needed can be added as long as each of them 
141+  * are unique pointers of struct openthread_state_changed_cb. 
142+  * Beware such structure should not be allocated on stack. 
143+  */ 
91144struct  openthread_state_changed_cb  {
92145	/** 
93146	 * @brief Callback for notifying configuration or state changes. 
@@ -111,23 +164,42 @@ struct openthread_state_changed_cb {
111164};
112165
113166/** 
167+  * @brief Registers callbacks which will be called when certain configuration 
168+  * or state changes occur within OpenThread. 
169+  * 
170+  * @param cb callback struct to register. 
171+  */ 
172+ int  openthread_state_change_callback_register (struct  openthread_state_changed_callback  * cb );
173+ 
174+ /** 
175+  * @brief Unregisters OpenThread configuration or state changed callbacks. 
176+  * 
177+  * @param cb callback struct to unregister. 
178+  */ 
179+ int  openthread_state_change_callback_unregister (struct  openthread_state_changed_callback  * cb );
180+ 
181+ /** 
182+  * @deprecated use @ref openthread_state_change_callback_register instead. 
183+  * 
114184 * @brief Registers callbacks which will be called when certain configuration 
115185 * or state changes occur within OpenThread. 
116186 * 
117187 * @param ot_context the OpenThread context to register the callback with. 
118188 * @param cb callback struct to register. 
119189 */ 
120- int  openthread_state_changed_cb_register (struct  openthread_context  * ot_context ,
121- 					 struct  openthread_state_changed_cb  * cb );
190+ __deprecated   int  openthread_state_changed_cb_register (struct  openthread_context  * ot_context ,
191+ 						       struct  openthread_state_changed_cb  * cb );
122192
123193/** 
194+  * @deprecated use @ref openthread_state_change_callback_unregister instead. 
195+  * 
124196 * @brief Unregisters OpenThread configuration or state changed callbacks. 
125197 * 
126198 * @param ot_context the OpenThread context to unregister the callback from. 
127199 * @param cb callback struct to unregister. 
128200 */ 
129- int  openthread_state_changed_cb_unregister (struct  openthread_context  * ot_context ,
130- 					    struct  openthread_state_changed_cb  * cb );
201+ __deprecated   int  openthread_state_changed_cb_unregister (struct  openthread_context  * ot_context ,
202+ 							 struct  openthread_state_changed_cb  * cb );
131203
132204/** 
133205 * @brief Get OpenThread thread identification. 
@@ -151,6 +223,45 @@ struct openthread_context *openthread_get_default_context(void);
151223struct  otInstance  * openthread_get_default_instance (void );
152224
153225/** 
226+  * @brief Initialize the OpenThread module. 
227+  * 
228+  * This function: 
229+  * - Initializes the OpenThread module. 
230+  * - Creates an OpenThread single instance. 
231+  * - Starts the shell. 
232+  * - Enables the UART and NCP HDLC for coprocessor purposes. 
233+  * - Initializes the NAT64 translator. 
234+  * - Creates a work queue for the OpenThread module. 
235+  * - Initializes the state change callback list. 
236+  * 
237+  * @note This function is automatically called by Zephyr's networking layer. 
238+  * If you want to initialize the OpenThread independently, call this function 
239+  * in your application init code. 
240+  * 
241+  * @param rx_handler The receive callback for the OpenThread module. 
242+  * @param context The context to pass to the callback. 
243+  * @return true if initialization succeeded, false otherwise. 
244+  */ 
245+ bool  openthread_init (openthread_receive_cb  rx_handler , void  * context );
246+ 
247+ /** 
248+  * @brief Runs the OpenThread network. 
249+  * 
250+  * @details Prepares the OpenThread network and enables it. 
251+  * Depends on active settings: it uses stored network configuration, 
252+  * start joining procedure or uses default network configuration. Additionally 
253+  * when the device is MTD, it sets the SED mode to properly attach the network. 
254+  */ 
255+ int  openthread_run (void );
256+ 
257+ /** 
258+  * @brief Disables the OpenThread network. 
259+  */ 
260+ int  openthread_stop (void );
261+ 
262+ /** 
263+  * @deprecated use @ref openthread_run instead. 
264+  * 
154265 * @brief Starts the OpenThread network. 
155266 * 
156267 * @details Depends on active settings: it uses stored network configuration, 
@@ -159,9 +270,34 @@ struct otInstance *openthread_get_default_instance(void);
159270 * 
160271 * @param ot_context 
161272 */ 
162- int  openthread_start (struct  openthread_context  * ot_context );
273+ __deprecated  int  openthread_start (struct  openthread_context  * ot_context );
274+ 
275+ /** 
276+  * @brief Lock internal mutex before accessing OpenThread API. 
277+  * 
278+  * @details OpenThread API is not thread-safe, therefore before accessing any 
279+  * API function, it's needed to lock the internal mutex, to prevent the 
280+  * OpenThread thread from preempting the API call. 
281+  */ 
282+ void  openthread_mutex_lock (void );
283+ 
284+ /** 
285+  * @brief Try to lock internal mutex before accessing OpenThread API. 
286+  * 
287+  * @details This function behaves like openthread_mutex_lock() provided that 
288+  * the internal mutex is unlocked. Otherwise, it exists immediately and returns 
289+  * a negative value. 
290+  */ 
291+ int  openthread_mutex_try_lock (void );
163292
164293/** 
294+  * @brief Unlock internal mutex after accessingOpenThread API. 
295+  */ 
296+ void  openthread_mutex_unlock (void );
297+ 
298+ /** 
299+  * @deprecated use @ref openthread_mutex_lock. 
300+  * 
165301 * @brief Lock internal mutex before accessing OT API. 
166302 * 
167303 * @details OpenThread API is not thread-safe, therefore before accessing any 
@@ -170,9 +306,11 @@ int openthread_start(struct openthread_context *ot_context);
170306 * 
171307 * @param ot_context Context to lock. 
172308 */ 
173- void  openthread_api_mutex_lock (struct  openthread_context  * ot_context );
309+ __deprecated   void  openthread_api_mutex_lock (struct  openthread_context  * ot_context );
174310
175311/** 
312+  * @deprecated use @ref openthread_mutex_try_lock instead. 
313+  * 
176314 * @brief Try to lock internal mutex before accessing OT API. 
177315 * 
178316 * @details This function behaves like openthread_api_mutex_lock() provided that 
@@ -183,14 +321,16 @@ void openthread_api_mutex_lock(struct openthread_context *ot_context);
183321 * @retval 0  On success. 
184322 * @retval <0 On failure. 
185323 */ 
186- int  openthread_api_mutex_try_lock (struct  openthread_context  * ot_context );
324+ __deprecated   int  openthread_api_mutex_try_lock (struct  openthread_context  * ot_context );
187325
188326/** 
327+  * @deprecated use @ref openthread_mutex_unlock instead. 
328+  * 
189329 * @brief Unlock internal mutex after accessing OT API. 
190330 * 
191331 * @param ot_context Context to unlock. 
192332 */ 
193- void  openthread_api_mutex_unlock (struct  openthread_context  * ot_context );
333+ __deprecated   void  openthread_api_mutex_unlock (struct  openthread_context  * ot_context );
194334
195335/** @cond INTERNAL_HIDDEN */ 
196336
0 commit comments