Esempio n. 1
0
void
test1(void) {
    int pid, parent = getpid();
    if ((pid = fork()) == 0) {
        int event, sum = 0;
        while (recv_event(&pid, &event) == 0 && parent == pid) {
            if (event == -1) {
                cprintf("child1 Hmmm!\n");
                sleep(100);
                cprintf("child1 quit\n");
                exit(-1);
            }
            cprintf("child1 receive %08x from %d\n", event, pid);
            sum += event;
        }
        panic("FAIL: T.T\n");
    }
    assert(pid > 0);
    int i = 10;
    while (send_event(pid, i) == 0) {
        i --;
        sleep(50);
    }
    cprintf("test1 pass.\n");
}
Esempio n. 2
0
int
ipc_event_recv(int *pid_store, int *event_store, unsigned int timeout) {
    if (event_store == NULL) {
        return -E_INVAL;
    }

    struct mm_struct *mm = current->mm;
    if (pid_store != NULL) {
        if (!user_mem_check(mm, (uintptr_t)pid_store, sizeof(int), 1)) {
            return -E_INVAL;
        }
    }
    if (!user_mem_check(mm, (uintptr_t)event_store, sizeof(int), 1)) {
        return -E_INVAL;
    }

    unsigned long saved_ticks;
    timer_t __timer, *timer = ipc_timer_init(timeout, &saved_ticks, &__timer);

    int pid, event, ret;
    if ((ret = recv_event(&pid, &event, timer)) == 0) {
        lock_mm(mm);
        {
            ret = -E_INVAL;
            if (pid_store == NULL || copy_to_user(mm, pid_store, &pid, sizeof(int))) {
                if (copy_to_user(mm, event_store, &event, sizeof(int))) {
                    ret = 0;
                }
            }
        }
        unlock_mm(mm);
        return ret;
    }
    return ipc_check_timeout(timeout, saved_ticks);
}
Esempio n. 3
0
/*
 ******************************************************************************
 * dgadmin_rest_sync_main --                                                  *//**
 *
 * \brief This routine periodically starts sync circle.
 *
 * \param [in] pDummy	Not used.
 *
 * \retval None
 *
 *****************************************************************************/
static void dgadmin_rest_sync_main(UINT1 *pDummy)
{
    unsigned int 			listenEvent   = 0;
    unsigned int 			recvEvent     = 0;

    if (sem_give(gDgwySyncSemId) != OSW_OK) 
	{
		return;
    }
    if (create_queue("RSYNC", OSW_MAX_Q_MSG_LEN, 10, &gDgwySyncMsgId) != OSW_OK)
    {
        printf("%s:error when create queue\n",__FUNCTION__);
        return;
    }

    if (create_timer("RSTASK", DGWY_SYNC_TASK_TIMER_EVENT,
                     NULL, 0, &gDgwySyncTimerListId) != OSW_OK) 
    {
        printf("%s:error when create_timer\n",__FUNCTION__);
        return;
    }

    /* start the timer */
    start_timer(gDgwySyncTimerListId, DGADMIN_REST_SYNC_INTERVAL, 0);

    listenEvent = DGWY_SYNC_TASK_TIMER_EVENT;/* | DGWY_SYNC_TASK_MSG_EVENT; */

    log_info(ServiceUtilLogLevel,
             "INIT REST SYNC TASK ");

	while (1) 
    {
        if(recv_event(gDgwySyncTaskId, listenEvent, OSW_NO_WAIT, &recvEvent) == OSW_ERROR)
        {
            sleep(10);
            continue;
        }
    
        log_debug(ServiceUtilLogLevel,"recvEvent %d\n",
                  recvEvent);

        if(recvEvent & DGWY_SYNC_TASK_TIMER_EVENT)
        {
            if(g_dgw_role)
            {
                /* Try to be in sync with DMC */
                log_notice(ServiceUtilLogLevel,
                           "SYNC START: version %d\n", 
                           g_dgwconfig_curversion);
                dgadmin_rest_sync_process();
                log_notice(ServiceUtilLogLevel,
                           "SYNC END : version %d\n",
                           g_dgwconfig_curversion);
            }
            start_timer(gDgwySyncTimerListId, DGADMIN_REST_SYNC_INTERVAL, 0);
        }
        
    }
}
Esempio n. 4
0
void csr_setup( void )
{
    int i;

    for (i=0; i<3; i++)
    {
        bt_uart_rx(event, 7);
        bt_uart_tx(reset, 4);

        DelayMilliSeconds(200);
        if (0 == memcmp(event, reset_rsp, 7)) break;
    }

    bt_uart_tx(anafreq, sizeof(anafreq)); recv_event();
    bt_uart_tx(hostif, sizeof(hostif)); recv_event();
    bt_uart_tx(h4cfg, sizeof(h4cfg)); recv_event();
    bt_uart_tx(nopdisable, sizeof(nopdisable)); recv_event();
    bt_uart_tx(baudrate, sizeof(baudrate)); recv_event();
    bt_uart_tx(warmreset, sizeof(warmreset));
    DelayMilliSeconds(500);
    configureBtUart(BT_UART_WORKING_BAUD_RATE, 1);

    // verify
    bt_uart_tx(readver, 4);
    recv_event();
}
Esempio n. 5
0
void net::nstream_proactor::conn_nstream::read()
{
	touch();
	buffer buf;
	int n_bytes = N->recv(buf);
	if(n_bytes <= 0){
		//assume connection reset (may not be)
		error = connection_reset_error;
		Conn_Container.remove(_info->conn_ID);
	}else{
		Dispatcher.recv(recv_event(_info, buf));
	}
}