#include<stdio.h>
#define STATE_1 0x0
#define STATE_2 0x1
#define TRUE 0x1
#define FALSE 0x0
#define GET_MSG_BODY(demo_msg) (VOID_PTR)demo_msg.msg_body
typedef void (*demo_test_func)(int);
typedef void * VOID_PTR;
typedef struct demo_msg_tag{
int msg_type;
VOID_PTR msg_body;
demo_test_func test_entry;
}demo_msg_t;
typedef struct demo_msg_body1_tag{
int msg_body;
}demo_msg_body1_t;
typedef struct demo_msg_body2_tag{
int msg_body;
}demo_msg_body2_t;
void demo_test1(demo_msg_body1_t *msg_body){
printf("demo test1 : %d\n",msg_body->msg_body);
}
void demo_test2(demo_msg_body2_t *msg_body){
printf("demo test2 : %d\n",msg_body->msg_body);
}
void demo_test_schd(demo_msg_t demo_msg){
VOID_PTR msg_body;
msg_body = GET_MSG_BODY(demo_msg);
switch(demo_msg.msg_type){
case STATE_1:
demo_test1((demo_msg_body1_t *)msg_body);
break;
case STATE_2:
demo_test2((demo_msg_body2_t *)msg_body);
break;
default:
printf(" default");
break;
}
}
int main(int argc,char **argv){
demo_msg_t demo_msg;
demo_msg_body1_t demo_msg_body1;
demo_msg_body1.msg_body = 1000;
demo_msg.msg_type = STATE_2;
demo_msg.msg_body = (VOID_PTR)(&demo_msg_body1);
demo_test_schd(demo_msg);
return 0;
}