示例#1
0
文件: main.cpp 项目: andr7e/siemens
static int maincsm_onmessage(CSM_RAM *data, GBS_MSG *msg)
{
    MAIN_CSM *csm=(MAIN_CSM*)data;
    if ((msg->msg==MSG_GUI_DESTROYED)&&((int)msg->data0==csm->gui_id))
    {
        csm->csm.state=-3;
    }

    if(msg->msg == MSG_RECONFIGURE_REQ)
    {
        char *successed_conf_name=GetConfigName ();
        if (strncasecmp(successed_conf_name, (char *)msg->data0, strlen(successed_conf_name) ) == 0 )
        {

            InitConfig(ELF_NAME);
            IsFontCfgUpdate=1;
            char upd_msg[128];
            sprintf (upd_msg, "%s::%s", ELF_NAME, "Config updated!");
            ShowMSG (1, (int)upd_msg);

        }
    }

    return(1);
}
示例#2
0
void *BridgeMessageSend(void *func_ptr, int type, void *packed_args)
{
    ThreadInfo *i = (ThreadInfo*) malloc(sizeof(ThreadInfo));
    i->sync = (type == NU_SYNCHRONIZED_PROC);
    i->loked = 1;
    i->ret = 0;


    if(i->sync && NU_Create_Semaphore(&i->loker, "mopi", 0, NU_PRIORITY) != NU_SUCCESS) {
        ShowMSG(1, (int)"ProcB: Semaphore init failed");
        free(i);
        return 0;
    }

    GBS_SendMessage(BridgeMOPI_ID, MOPI_THREAD_PROC, func_ptr, i, packed_args);

    switch(type)
    {
        case NU_SYNCHRONIZED_PROC:
            NU_Obtain_Semaphore(&i->loker, NU_SUSPEND);
            break;

        case NU_ASYNC_PROC:
            /* in async mode return not support */
            return 0;
    }

    if(i->sync)
        NU_Delete_Semaphore(&i->loker);

    /* возвращаемое значение */
    void *ret = i->ret;

    /* больше не нужно оно */
    free(i);

    /* чистим стек аргументов */
    free(packed_args);

    /* возвращаем результат выполнения */
    return ret;
}
示例#3
0
文件: main.c 项目: FTCr/sie-elf
void main(void)
{
	FILE *fp;
	char str[128];
	const char *xml_path = "0:\\Zbin\\Utilities\\mxmltest\\test.xml";
	
	fp = fopen(xml_path, "r");
	
	if (fp == NULL)
	{
		sprintf(str, "Can't open file: %s", xml_path);
		ShowMSG(1, (int)str);
		return;
	}
	mxml_node_t *tree = mxmlLoadFile(NULL, fp, MXML_TEXT_CALLBACK);
	fclose(fp);
	
	if (tree == NULL)
	{
		ShowMSG(1, (int)"mxmlLoadFile = NULL");
		return;
	}
	
	const char *log_path = "0:\\Zbin\\Log\\mxmltest.log";
	fp = fopen(log_path, "a");
	if (fp == NULL)
	{
		sprintf(str, "Can't open file: %s", log_path);
		ShowMSG(1, (int)str);
		mxmlDelete(tree);
		return;
	}
	
	mxml_node_t *node = tree;
	mxml_node_t *next = NULL;
	while (node != NULL)
	{
		switch (mxmlGetType(node))
		{
			case MXML_ELEMENT:
				sprintf(str, "MXML_ELEMENT = %s\n", mxmlGetElement(node));
				fwrite(str, sizeof(char), strlen(str), fp);
			break;
			case MXML_TEXT:
				sprintf(str, "MXML_TEXT = %s\n", mxmlGetText(node, 0));
				fwrite(str, sizeof(char), strlen(str), fp);
			break;
		}
		
		
		
		next = mxmlGetFirstChild(node);
		if (next != NULL)
		{
			node = next;
		}
		else
		{
			next = mxmlGetNextSibling(node);
			if (next == NULL)
			{
				next = mxmlWalkNext(node, NULL, MXML_DESCEND);
			}
			node = next;
		}
	}
	fclose(fp);
	mxmlDelete(tree);
}
示例#4
0
/* Bridge of mopi and nucleus */
void MopiBridgeMessenger()
{
    GBS_MSG msg;
    if (GBS_RecActDstMessage(&msg))
    {
        if (msg.msg == MOPI_THREAD_PROC)
        {
            if(msg.submess)
            {
                ThreadInfo *inf = (ThreadInfo *)msg.data0;

                uint32_t pcnt;
                void **args, *pret = 0, *arg_ptr = msg.data1;
                void *(*ptr_func)(void *, ...) = (void *(*)(void *, ...))msg.submess;

                /* нету параметров */
                if(!arg_ptr)  {
                    ptr_func(0);
                    pcnt = 0;

                } else
                    pcnt = unpack_args(arg_ptr, &args);

                switch(pcnt)
                {
                    case 0:
                        pret = ptr_func(0);
                        break;

                    case 1:
                        pret = ptr_func(args[0]);
                        break;

                    case 2:
                        pret = ptr_func(args[0], args[1]);
                        break;

                    case 3:
                        pret = ptr_func(args[0], args[1], args[2]);
                        break;

                    case 4:
                        pret = ptr_func(args[0], args[1], args[2], args[3]);
                        break;

                    case 5:
                        pret = ptr_func(args[0], args[1], args[2], args[3], args[4]);
                        break;

                    case 6:
                        pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5]);
                        break;

                    case 7:
                        pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5],
                                        args[6]);
                        break;

                    case 8:
                        pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5],
                                        args[6]);
                        break;

                    case 9:
                        pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5],
                                        args[6]);
                        break;

                    case 10:
                        pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5],
                                        args[6], args[7], args[8], args[9]);
                        break;

                    case 11:
                        pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5],
                                        args[6], args[7], args[8], args[9], args[10]);
                        break;

                    case 12:
                        pret = ptr_func(args[0], args[1], args[2], args[3], args[4], args[5],
                                        args[6], args[7], args[8], args[9], args[10], args[11]);
                        break;

                    default:
                        ShowMSG(1, (int)"Bridge invalid param!");
                        break;
                }

                if(inf->sync) {
                    inf->ret = pret;
                    inf->loked = 0;
                    NU_Release_Semaphore(&inf->loker);
                }
                else {
                    free(arg_ptr);
                    free(inf);
                }
            }
        }
        else
        {
            GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,msg.pid_from,msg.msg,msg.submess);
        }
    }
}