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
 | 
						|
 |