97 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			97 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#ifndef signal_h__
							 | 
						||
| 
								 | 
							
								#define signal_h__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "stdint.h"
							 | 
						||
| 
								 | 
							
								#include "rtthread.h"
							 | 
						||
| 
								 | 
							
								#include <rthw.h>
							 | 
						||
| 
								 | 
							
								#include "string.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define signal void
							 | 
						||
| 
								 | 
							
								#define emit
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _slot_list{
							 | 
						||
| 
								 | 
							
								  struct _slot_list *next;
							 | 
						||
| 
								 | 
							
								  void *fun;
							 | 
						||
| 
								 | 
							
								  void *mb;
							 | 
						||
| 
								 | 
							
								  void *obj;
							 | 
						||
| 
								 | 
							
								}slot_list;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _signal_list{
							 | 
						||
| 
								 | 
							
								  struct _signal_list *next;
							 | 
						||
| 
								 | 
							
								  slot_list *head;
							 | 
						||
| 
								 | 
							
								  void *sig_obj;
							 | 
						||
| 
								 | 
							
								  void *signal_;
							 | 
						||
| 
								 | 
							
								}signal_list;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct{
							 | 
						||
| 
								 | 
							
								  const char *name;
							 | 
						||
| 
								 | 
							
								  void *signal_;
							 | 
						||
| 
								 | 
							
								//  slot_list *head;
							 | 
						||
| 
								 | 
							
								}signal_def;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct{
							 | 
						||
| 
								 | 
							
								  void *fun;
							 | 
						||
| 
								 | 
							
								  void *src;
							 | 
						||
| 
								 | 
							
								  int param_num;
							 | 
						||
| 
								 | 
							
								  uint32_t param[0];
							 | 
						||
| 
								 | 
							
								}slot_msg_def;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct{
							 | 
						||
| 
								 | 
							
								  void *mb;
							 | 
						||
| 
								 | 
							
								  int run;
							 | 
						||
| 
								 | 
							
								}slot_run_def;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef void * sig_thread;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define signal_export(name_) \
							 | 
						||
| 
								 | 
							
								  const static char __sig_##name_##_name[] SECTION(".rodata.sigstr") = #name_; \
							 | 
						||
| 
								 | 
							
								  RT_USED static signal_def _signal_##name_ SECTION("signalstruct")= \
							 | 
						||
| 
								 | 
							
								  {\
							 | 
						||
| 
								 | 
							
								    .name=__sig_##name_##_name,\
							 | 
						||
| 
								 | 
							
								    .signal_=name_,\
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sig_thread thread_creat(int pro);
							 | 
						||
| 
								 | 
							
								void thread_delete(sig_thread t);
							 | 
						||
| 
								 | 
							
								signal_def *signal_find(void *signal_);
							 | 
						||
| 
								 | 
							
								int connect(void *sig_obj,void *signal_,sig_thread t,void *slot_obj,void *slot);
							 | 
						||
| 
								 | 
							
								int disconnect(void *sig_obj,void *signal_,sig_thread t,void *slot_obj,void *slot);
							 | 
						||
| 
								 | 
							
								int signal_init(void);
							 | 
						||
| 
								 | 
							
								int disconnect_sig(void *sig_obj);
							 | 
						||
| 
								 | 
							
								int disconnect_slot(void *slot_obj);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								int _signal_emit(void *sig_obj,void *signal_,uint32_t *param,int param_num);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 |