Esempio n. 1
0
static void tt_check_stack(TT_THREAD_T *thread)
{
	if (thread == NULL)
		return;

	//Calculate max stack used.
	if ((uint32_t)thread->stack_max_used == 0
		|| (uint32_t)thread->stack_max_used > thread->uSP)
		thread->stack_max_used = (void *)thread->uSP;

	//Check stack overflow
	if ((uint32_t)thread->stack_base > 0)	/* For main thread, do not check this. */
	{
		if (thread->uSP < (uint32_t)thread->stack_limit)
		{
			tt_printf ("Stack down overflow for task: (%08x, %08x) %s\n", (int)thread, (int)thread->uSP, thread->name);
			/* Indicate stack down overflow if run to here. */
			while(1);
		}
		
		if (thread->uSP > (uint32_t)thread->stack_base - sizeof (TT_THREAD_PUSH_STACK))
		{
			tt_printf ("Stack up overflow for task: (%08xk, %08x) %s\n", (int)thread, (int)thread->uSP, thread->name);
			/* Indicate stack up overflow if run to here,
			   It rarely happens unless the program is damaged. */
			while(1);
		}
	}
}
Esempio n. 2
0
void thread_entry(void *arg)
{
	THREAD_ARG_T *the_arg = (THREAD_ARG_T *)arg;

	while(1)
	{
		int i;
		int value;

		/* Show LED so that users know that the thread is running. */
		int cur_ticks = tt_get_ticks ();
		if(cur_ticks % 64 < 32)
			DrvGPIO_SetBit(the_arg->gpio_group, the_arg->gpio_bit);	/* Turn off LED */
		else
			DrvGPIO_ClrBit(the_arg->gpio_group, the_arg->gpio_bit);	/* Turn on LED */


			
		/* Lock the mutex */
		tt_rmutex_lock(the_arg->mutex);

		/* Update value */
		for(i = 0; i < THREAD_NUM; ++i)
			++the_arg->value[i];
	
		/* (Recursive) Lock the mutex again */
		tt_rmutex_lock(the_arg->mutex);
		
		/* Check the lock operation by checking value */
		value = the_arg->value[0];
		for(i = 0; i < THREAD_NUM; ++i)
		{
			if(the_arg->value[i] != value)
			{
				/* To run to here indicates that the test for mutex lock has been failed. */
				tt_printf("Failed\n");
				while(1);
			}
		}
		
		/* (Recursive) Unlock the mutex */
		tt_rmutex_unlock(the_arg->mutex);
	
		/* Unlock the mutex */
		tt_rmutex_unlock(the_arg->mutex);
	}
}
Esempio n. 3
0
void tt_skt_status_dump_ntv(IN tt_u32_t flag)
{
    char path[PATH_MAX + 1];
    int len;
    DIR *d;
    struct dirent entry;
    struct dirent *result = NULL;

    len = snprintf(path, PATH_MAX, "/proc/%d/fd/", getpid());

    d = opendir(path);
    if (d == NULL) {
        tt_printf("fail to open %s", path);
        return;
    }

    while ((readdir_r(d, &entry, &result) == 0) && (result != NULL)) {
        char link[PATH_MAX + 1];
        ssize_t n;
        int s;

        if ((strcmp(entry.d_name, ".") == 0) ||
            (strcmp(entry.d_name, "..") == 0)) {
            continue;
        }

        path[len] = 0;
        strncat(path, entry.d_name, PATH_MAX);
        if ((n = readlink(path, link, PATH_MAX)) < 0) {
            continue;
        }
        link[n] = 0;

        if (strncmp(link, "socket", 6) != 0) {
            // only show socket
            continue;
        }

        s = strtol(entry.d_name, NULL, 10);
        __dump_socket_fdinfo(s, flag);
    }

    closedir(d);
}
Esempio n. 4
0
void tt_fs_status_dump_ntv(IN tt_u32_t flag)
{
    pid_t pid;
    int size;
    struct proc_fdinfo *fdinfo;

    pid = getpid();
    size = proc_pidinfo(pid, PROC_PIDLISTFDS, 0, NULL, 0);
    if (size <= 0) {
        return;
    }

    fdinfo = (struct proc_fdinfo *)malloc(size);
    if (fdinfo == NULL) {
        return;
    }

    size = proc_pidinfo(pid, PROC_PIDLISTFDS, 0, fdinfo, size);
    if (size > 0) {
        int n, i;

        n = size / PROC_PIDLISTFD_SIZE;
        for (i = 0; i < n; ++i) {
            if (fdinfo[i].proc_fdtype == PROX_FDTYPE_VNODE) {
                struct vnode_fdinfowithpath vi;
                int vs = proc_pidfdinfo(pid,
                                        fdinfo[i].proc_fd,
                                        PROC_PIDFDVNODEPATHINFO,
                                        &vi,
                                        PROC_PIDFDVNODEPATHINFO_SIZE);
                if (vs == PROC_PIDFDVNODEPATHINFO_SIZE) {
                    tt_printf("%s[fd: %d] [%s]\n",
                              TT_COND(flag & TT_FS_STATUS_PREFIX,
                                      "<<FS>> ",
                                      ""),
                              fdinfo[i].proc_fd,
                              vi.pvip.vip_path);
                }
            }
        }
    }

    free(fdinfo);
}
Esempio n. 5
0
unsigned char
sb_handle_button_press(event_t *ev)
{

    D_EVENTS(("sb_handle_button_press(ev [%8p] on window 0x%08x)\n", ev, ev->xany.window));

    REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &scrollbar_event_data), 0);

    button_state.bypass_keystate = (ev->xbutton.state & (Mod1Mask | ShiftMask));
    button_state.report_mode = (button_state.bypass_keystate ? 0 : ((PrivateModes & PrivMode_mouse_report) ? 1 : 0));
    scrollbar_cancel_motion();

#ifndef NO_SCROLLBAR_REPORT
    if (button_state.report_mode) {
        /* Mouse report disabled scrollbar.  Arrows send cursor key up/down, trough sends pageup/pagedown */
        if (scrollbar_win_is_uparrow(ev->xany.window))
            tt_printf((unsigned char *) "\033[A");
        else if (scrollbar_win_is_downarrow(ev->xany.window))
            tt_printf((unsigned char *) "\033[B");
        else {
            switch (ev->xbutton.button) {
                case Button2:
                    tt_printf((unsigned char *) "\014");
                    break;
                case Button1:
                    tt_printf((unsigned char *) "\033[6~");
                    break;
                case Button3:
                    tt_printf((unsigned char *) "\033[5~");
                    break;
            }
        }
    } else
#endif /* NO_SCROLLBAR_REPORT */
    {
        D_EVENTS(("ButtonPress event for window 0x%08x at %d, %d\n", ev->xany.window, ev->xbutton.x, ev->xbutton.y));
        D_EVENTS(("  up [0x%08x], down [0x%08x], anchor [0x%08x], trough [0x%08x]\n", scrollbar.up_win, scrollbar.dn_win,
                  scrollbar.sa_win, scrollbar.win));

        if (scrollbar_win_is_uparrow(ev->xany.window)) {
            scrollbar_draw_uparrow(IMAGE_STATE_CLICKED, 0);
#ifdef SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
            scroll_arrow_delay = SCROLLBAR_INITIAL_DELAY;
#endif
            if (scr_page(UP, 1)) {
                scrollbar_set_uparrow_pressed(1);
            }
        } else if (scrollbar_win_is_downarrow(ev->xany.window)) {
            scrollbar_draw_downarrow(IMAGE_STATE_CLICKED, 0);
#ifdef SCROLLBAR_BUTTON_CONTINUAL_SCROLLING
            scroll_arrow_delay = SCROLLBAR_INITIAL_DELAY;
#endif
            if (scr_page(DN, 1)) {
                scrollbar_set_downarrow_pressed(1);
            }
        } else {
            if (scrollbar_win_is_anchor(ev->xany.window)) {
                scrollbar_set_anchor_pressed(1);
                scrollbar_draw_anchor(IMAGE_STATE_CLICKED, 0);
            }
            switch (ev->xbutton.button) {
                case Button2:
                    button_state.mouse_offset = scrollbar_anchor_height() / 2;  /* Align to center */
                    if (!scrollbar_win_is_anchor(ev->xany.window)) {
                        scr_move_to(scrollbar_position(ev->xbutton.y) - button_state.mouse_offset, scrollbar_scrollarea_height());
                    } else if (scrollbar.type == SCROLLBAR_XTERM) {
                        scr_move_to(scrollbar.anchor_top + ev->xbutton.y - button_state.mouse_offset,
                                    scrollbar_scrollarea_height());
                    }
                    scrollbar_set_motion(1);
                    break;

                case Button1:
                    button_state.mouse_offset = ((scrollbar_win_is_anchor(ev->xany.window)) ? (MAX(ev->xbutton.y, 1)) : (1));
                    /* drop */
                case Button3:
#if defined(MOTIF_SCROLLBAR) || defined(NEXT_SCROLLBAR)
                    if (scrollbar.type == SCROLLBAR_MOTIF || scrollbar.type == SCROLLBAR_NEXT) {
                        if (scrollbar_is_above_anchor(ev->xany.window, ev->xbutton.y)) {
                            scrollbar_draw_trough(IMAGE_STATE_CLICKED, 0);
                            scr_page(UP, TermWin.nrow - CONTEXT_LINES);
                        } else if (scrollbar_is_below_anchor(ev->xany.window, ev->xbutton.y)) {
                            scrollbar_draw_trough(IMAGE_STATE_CLICKED, 0);
                            scr_page(DN, TermWin.nrow - CONTEXT_LINES);
                        } else {
                            scrollbar_set_motion(1);
                        }
                    }
#endif /* MOTIF_SCROLLBAR || NEXT_SCROLLBAR */

#ifdef XTERM_SCROLLBAR
                    if (scrollbar.type == SCROLLBAR_XTERM) {
                        scr_page((ev->xbutton.button == Button1 ? DN : UP), TermWin.nrow - CONTEXT_LINES);
                    }
#endif /* XTERM_SCROLLBAR */
                    break;
            }
        }
    }

    return 1;
}
Esempio n. 6
0
void __dump_socket_fdinfo(IN int s, IN tt_u32_t flag)
{
    int val;
    socklen_t len = sizeof(val);
    const char *type = "?";
    char local[128] = {0};
    char remote[128] = {0};

    if (getsockopt(s, SOL_SOCKET, SO_TYPE, &val, &len) != 0) {
        tt_printf("%s[fd: %d] ?\n",
                  TT_COND(flag & TT_SKT_STATUS_PREFIX, "<<Socket>> ", ""),
                  s);
    } else if (val == SOCK_STREAM) {
        struct sockaddr_storage a;
        socklen_t alen = sizeof(a);
        char local[128] = {0};
        char remote[128] = {0};

        if (getsockname(s, (struct sockaddr *)&a, &alen) != 0) {
            tt_snprintf(local, sizeof(local) - 1, "?|?");
        } else if (a.ss_family == AF_INET) {
            struct sockaddr_in *a4 = (struct sockaddr_in *)&a;
            tt_sktaddr_ip_t ip;
            char addr[64] = {0};

            ip.a32.__u32 = a4->sin_addr.s_addr;
            tt_sktaddr_ip_n2p(TT_NET_AF_INET, &ip, addr, sizeof(addr) - 1);
            tt_snprintf(local,
                        sizeof(local) - 1,
                        "%s@%d",
                        addr,
                        ntohs(a4->sin_port));
        } else if (a.ss_family == AF_INET6) {
            struct sockaddr_in6 *a6 = (struct sockaddr_in6 *)&a;
            tt_sktaddr_ip_t ip;
            char addr[64] = {0};

            tt_memcpy(ip.a128.__u8, a6->sin6_addr.s6_addr, 16);
            tt_sktaddr_ip_n2p(TT_NET_AF_INET6, &ip, addr, sizeof(addr) - 1);
            tt_snprintf(local,
                        sizeof(local) - 1,
                        "%s@%d",
                        addr,
                        ntohs(a6->sin6_port));
        } else if (a.ss_family == AF_LOCAL) {
            return;
        } else {
            tt_snprintf(local, sizeof(local) - 1, "?|?");
        }

        if (getpeername(s, (struct sockaddr *)&a, &alen) != 0) {
            tt_snprintf(remote, sizeof(remote) - 1, "?|?");
        } else if (a.ss_family == AF_INET) {
            struct sockaddr_in *a4 = (struct sockaddr_in *)&a;
            tt_sktaddr_ip_t ip;
            char addr[64] = {0};

            ip.a32.__u32 = a4->sin_addr.s_addr;
            tt_sktaddr_ip_n2p(TT_NET_AF_INET, &ip, addr, sizeof(addr) - 1);
            tt_snprintf(remote,
                        sizeof(remote) - 1,
                        "%s@%d",
                        addr,
                        ntohs(a4->sin_port));
        } else if (a.ss_family == AF_INET6) {
            struct sockaddr_in6 *a6 = (struct sockaddr_in6 *)&a;
            tt_sktaddr_ip_t ip;
            char addr[64] = {0};

            tt_memcpy(ip.a128.__u8, a6->sin6_addr.s6_addr, 16);
            tt_sktaddr_ip_n2p(TT_NET_AF_INET6, &ip, addr, sizeof(addr) - 1);
            tt_snprintf(remote,
                        sizeof(remote) - 1,
                        "%s@%d",
                        addr,
                        ntohs(a6->sin6_port));
        } else if (a.ss_family == AF_LOCAL) {
            return;
        } else {
            tt_snprintf(remote, sizeof(local) - 1, "?|?");
        }

        tt_printf("%s[fd: %d] tcp [%s --> %s]\n",
                  TT_COND(flag & TT_SKT_STATUS_PREFIX, "<<Socket>> ", ""),
                  s,
                  local,
                  remote);
    } else if (val == SOCK_DGRAM) {
        struct sockaddr_storage a;
        socklen_t alen = sizeof(a);
        char local[128] = {0};

        if (getsockname(s, (struct sockaddr *)&a, &alen) != 0) {
            tt_snprintf(local, sizeof(local) - 1, "?|?");
        } else if (a.ss_family == AF_INET) {
            struct sockaddr_in *a4 = (struct sockaddr_in *)&a;
            tt_sktaddr_ip_t ip;
            char addr[64] = {0};

            ip.a32.__u32 = a4->sin_addr.s_addr;
            tt_sktaddr_ip_n2p(TT_NET_AF_INET, &ip, addr, sizeof(addr) - 1);
            tt_snprintf(local,
                        sizeof(local) - 1,
                        "%s@%d",
                        addr,
                        ntohs(a4->sin_port));
        } else if (a.ss_family == AF_INET6) {
            struct sockaddr_in6 *a6 = (struct sockaddr_in6 *)&a;
            tt_sktaddr_ip_t ip;
            char addr[64] = {0};

            tt_memcpy(ip.a128.__u8, a6->sin6_addr.s6_addr, 16);
            tt_sktaddr_ip_n2p(TT_NET_AF_INET6, &ip, addr, sizeof(addr) - 1);
            tt_snprintf(local,
                        sizeof(local) - 1,
                        "%s@%d",
                        addr,
                        ntohs(a6->sin6_port));
        } else if (a.ss_family == AF_LOCAL) {
            return;
        } else {
            tt_snprintf(local, sizeof(local) - 1, "?|?");
        }

        tt_printf("%s[fd: %d] udp [%s]\n",
                  TT_COND(flag & TT_SKT_STATUS_PREFIX, "<<Socket>> ", ""),
                  s,
                  local);
    } /*else {
        tt_printf("%s[fd: %d] ?\n",
                  TT_COND(flag & TT_SKT_STATUS_PREFIX, "<<Socket>> ", ""),
                  s);
    }*/
}
Esempio n. 7
0
void __lio_std_output(IN tt_logio_t *lio,
                      IN const tt_char_t *data,
                      IN tt_u32_t data_len)
{
    tt_printf("%s", data);
}