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