Ejemplo n.º 1
0
static void * uart_send_worker(void * arg)
{
    message_t * message ;
    struct timeval now;
    while(1)
    {
        while(queue_dequeue(context->send_queue,(void **)&message) != 0)
        {
            usleep(1000);
            continue;
        }
        gettimeofday(&now,NULL);
        if((now.tv_sec - message->stamp.tv_sec) > 10)
        {
            free_message(message);
            continue;
        }
        LOG_DEBUG("############################[%s] data:%p, length:%d",
                  __func__,
                  message->data,
                  message->length);
        view_message(message);
        //此串口需要串口化
        uart_dev_t * dev = (uart_dev_t *)message->dev;

        if(dev->flags & SERIALIZE_MASK)
        {
            if(pthread_mutex_trylock(&dev->serial_lock) == 0)
            {
                raw_uart_send(dev->fd, message);
                free_message(message);
            }
            else
            {
                queue_enqueue(context->send_queue,message);
            }
        }
        else
        {
            raw_uart_send(dev->fd, message);
            free_message(message);
        }
        usleep(1000);
    }
    return NULL;
}
Ejemplo n.º 2
0
void * socket_uart_recv_manager(void * arg)
{
    int listen_fd = open_server_socket(UNIX_SOCKET_UART_RECV);
    pthread_t real_recv;
    int result = pthread_create(&real_recv,
                                NULL,
                                uart_recv_worker,
                                NULL);
    assert(result == 0);
    socklen_t len = -1;
    struct sockaddr_un clt_addr;
    int com_fd = -1;
    while(1)
    {
        len = sizeof(clt_addr);
        com_fd = accept(listen_fd,(struct sockaddr*)&clt_addr,&len);
        if(com_fd < 0)
        {
            perror("cannot accept client connect request");
            close(listen_fd);
            unlink(UNIX_SOCKET_UART_SEND);
            exit(-1);
        }
        int n = 0;
        uint8_t recv_buf[MAX_BUFSIZ];
        if( (n = read(com_fd,recv_buf,sizeof(recv_buf))) < 0)
        {
            LOG_ERROR("[%s] Read Error\n",__func__);
        }
        if(is_invalid_message((char *)recv_buf, n))
        {
            process_message_invalid_message(com_fd);
            close(com_fd);
        }
        else
        {
            message_t * message = deserialized_message(recv_buf,n);
#if 0
            LOG_DEBUG("XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
            view_message(message);
            LOG_DEBUG("____________________________");
#endif
            uart_dev_t * dev = get_dev_by_name(message->name);
            if(dev == NULL)
            {
                process_message_invalid_name(com_fd, message->name);
                close(com_fd);
            }
            else
            {
                struct timeval now;
                gettimeofday(&now,NULL);
                message_t * fit = NULL;
                socket_recv_handler * process_socket_recv = get_socket_recv_handler_by_protocol(dev->protocol);
                process_socket_recv->func(dev, message, &fit);
                if((fit == NULL))
                {
                    process_message_not_fit(com_fd);
                }
                else if((now.tv_sec - fit->stamp.tv_sec) > 10)
                {
                    free_message(fit);
                    process_message_not_fit(com_fd);
                }
                else
                {
                    process_message_fitted(com_fd, fit);
                }
                free_message(message);
                close(com_fd);
            }
        }
    }
    return NULL;
}
Ejemplo n.º 3
0
static int 
keypress(Screen *this_screen, int cur_key){
	switch (cur_key) {
			
		case KEY_Betty:
		case KEY_Menu:
			popup(
				"A  All\n   playlists\n\n"
				"B  Current\n   playlist\n\n"
				"C  Search\n\n"
				"D \n\n"
				"i  Info",
					0, keypress_popup);
			break;
			
		case KEY_Exit:	
			show_screen(TRACKLIST_SCREEN);
			break;
			
		case KEY_A:	
			show_screen(PLAYLIST_SCREEN);
			break;
			
		case KEY_B:	
			show_screen(TRACKLIST_SCREEN);
			break;
			
		case KEY_C:	
			show_screen(SEARCH_SCREEN);
			break;

		case KEY_Info:
			popup("Red = Stop\n"
				"Green = Play\n"
				"Yellow = Pause\n"
				"PiP = Random\n"
				"A/B = Repeat\n"
				"16:9 = Single\n"
				"\xB1 = Seek Back\n"
				"\xB0 = Seek FWD\n"
				"\xB2 = Next Song\n"
				"\xB3 = Prev. Song\n"
				"TV = Version", 
				  0, keypress_info_popup);
			break;
												
		case KEY_Left:
			user_wants_time_add(-10);	
			break;
			
		case KEY_Right:
			user_wants_time_add(+10);	
			break;
			
		case KEY_Up:
		case KEY_Pminus:
			user_wants_song(PREV_SONG);	
			break;
					
		case KEY_Down:
		case KEY_Pplus:
			user_wants_song(NEXT_SONG);
			break;
			

		case KEY_Red:
			user_wants_state(STOP);
			break;
			
		case KEY_Green:
			user_wants_state(PLAY);
			break;
						
		case KEY_Yellow:
			user_toggle_pause();
			break;

			
		case KEY_PiP:
			user_toggle_random();	
			break;
			
		case KEY_AB:
			user_toggle_repeat();	
			break;
			
		case KEY_16_9:
			user_toggle_single();	
			break;

		case KEY_VTX1:
			user_wants_script(1);
			break;
			
		case KEY_VTX3:
			user_wants_script(2);
			break;
				
		case KEY_TV:
			view_message("   McBetty\n\n"
						"Version "VERSION"\n\n\n"
						"  (c) 2010\n   H. Raap",
	  			5 * TICKS_PER_SEC);
			break;
			
		default:
			return cur_key;				// we could not handle key
	};
	return NO_KEY;
};