Example #1
0
/********************************************************************
 * @创建人:揭成
 * @功能 : 设置蜂鸣报警,向蜂鸣任务发送信号量
 *
 * @输入 :NONE
 *
 *@输出  :NONE
********************************************************************/
void app_global_buz_alarm( Bsize_t stop_jiffies, Bsize_t alarm_jiffies, Bsize_t cycle_times )
{
	if ( m_buz_task_pro == INVALID_PRO )
		return ;
	os_lock( m_buz_lock );
	m_buz_ctl_buf.alarm_time = alarm_jiffies;
	m_buz_ctl_buf.ctl_times  = cycle_times;
	m_buz_ctl_buf.stop_time  = stop_jiffies;
	os_unlock( m_buz_lock );
	os_sem_post( m_buz_sem );
	return;
}
Example #2
0
/********************************************************************
 * @创建人:揭成
 * @功能 : 设置蜂鸣响应,向蜂鸣任务发送信号量
 *
 * @输入 :NONE
 *
 *@输出  :NONE
********************************************************************/
void app_global_buz_response( Bsize_t response_jiffies )
{
	if ( m_buz_task_pro == INVALID_PRO )
		return ;
	os_lock( m_buz_lock );
	m_buz_ctl_buf.alarm_time = response_jiffies;
	m_buz_ctl_buf.ctl_times = 1;
	m_buz_ctl_buf.stop_time = 0;
	os_unlock( m_buz_lock );
	os_sem_post( m_buz_sem );
	return;
}
osal_result
os_event_reset(
		os_event_t* p_event )
{
	OS_ASSERT( p_event );
	/* Make sure that the event was started */
	OS_ASSERT( p_event->state == OSAL_INITIALIZED );

	os_lock( p_event->lock );
	p_event->signaled = false;
	os_unlock( p_event->lock );

	return( OSAL_SUCCESS );
}
osal_result
os_event_set(
	os_event_t* p_event )
{
	OS_ASSERT( p_event );
	/* Make sure that the event was started */
	OS_ASSERT( p_event->state == OSAL_INITIALIZED );
	
 	os_lock( p_event->lock );
	p_event->signaled = true;

	/* Wake up one */
	pthread_cond_signal( &p_event->condvar );

	os_unlock( p_event->lock );

	return( OSAL_SUCCESS );
}
Example #5
0
/********************************************************************
 * @创建人:揭成
 * @功能 : 蜂鸣任务主体,等待蜂鸣实践的到来
 *
 * @输入 :p_arg 任务参数
 *
 *@输出  :NONE
********************************************************************/
static void app_global_buz_task( void *p_arg )
{
	msleep( TYPE_DELAY );
	while ( 1 )
	{
		if ( os_task_delete_req( SELF_PRO ) == OS_TASK_DEL_REQ )/*判断是否有删除请求*/
		{
			os_task_delete( SELF_PRO );   			      		/*收到删除请求,删除自身任务*/
		}
		if ( os_sem_pend( m_buz_sem, 0) == OS_NO_ERR )			/*等待信号*/
		{
			os_lock( m_buz_lock );
			while ( m_buz_ctl_buf.ctl_times > 0 )  				/*判断响应次数*/
			{
	    		BUZ_ON();
				msleep( m_buz_ctl_buf.alarm_time );				/*等待响应节拍*/
				BUZ_OFF();
				msleep( m_buz_ctl_buf.stop_time ); 				/*等待关时间节拍*/
				m_buz_ctl_buf.ctl_times--;		   				/*响应次数减*/
			}
			os_unlock( m_buz_lock );
		}
	}
}
Example #6
0
void GUI_touch_correct( void )
{
	app_touch_t shadow;
	hwin_t*hp;
	hwin_t*formhwin[5] = {0, };
	Bsize_t offset;
	Bsize_t recnt = 0;
	touch_coord_t *pmem = ( touch_coord_t* )GUI_MALLOC( 200 );
	if ( !pmem ) return;
	GUI_set_Bgcolor( C_GUI_HIGH_BLUE );
	GUI_clean_screen();
	hp = GUI_window_creat( 5, 5, LCD_WIDE - 8, LCD_HIGH - 20, WIN_PAINT );
	if ( !hp )
	{
		GUI_FREE( pmem );
		return;
	}
	f_unlink( CORRECT_FILE );
	GUI_touch_scale_loade();
	os_lock( m_touch_read_lock );
	GUI_window_hwin_req( hp );
	GUI_set_Bgcolor( C_GUI_BlACK );
	GUI_set_Fgcolor( C_GUI_WHITE );
	formhwin[0] = GUI_form_creat( 0, 0, 2, 2, 20, 20, hp );
	formhwin[1] = GUI_form_creat( GET_XBORDER( hp ) - 45, 0, 2, 2, 20, 20, hp );
	formhwin[2] = GUI_form_creat( 0, GET_YBORDER( hp ) - 45, 2, 2, 20, 20, hp );
	formhwin[3] = GUI_form_creat( GET_XBORDER( hp ) - 45, GET_YBORDER( hp ) - 45, 2, 2, 20, 20, hp );
	formhwin[4] = GUI_form_creat( hp->win_wide / 2 - 20, hp->win_high / 2 - 20, 2, 2, 20, 20, hp );
	while ( 1 )
	{
		offset = 0;
		while ( offset < 5 )
		{
			GUI_touch_wait_data( &shadow );
			pmem[offset].touchx = shadow.x;
			pmem[offset].touchy = shadow.y;
			if ( !GUI_touch_error_match( &shadow, formhwin[offset] ) )
			{
				//		GUI_string_display_At( 100, 50, "误差太大" );
				if ( ++recnt < 8 ) continue;
				else
				{
					GUI_window_hwin_release( hp );
					GUI_window_destory( hp );
					GUI_FREE( pmem );
					os_unlock( m_touch_read_lock );
					return;
				}
			}
			recnt = 0;
			pmem[offset].lcdx	= formhwin[offset]->win_x + 20;
			pmem[offset].lcdy = formhwin[offset]->win_y + 20;
			GUI_window_hwin_req( formhwin[offset] );
			GUI_set_Fgcolor( C_GUI_RED );
			GUI_WINDIS_HLINE( 0, formhwin[offset]->win_wide, formhwin[offset]->win_high / 2 );
			GUI_WINDIS_VLINE( formhwin[offset]->win_wide / 2, 0, formhwin[offset]->win_high );
			GUI_window_hwin_release( formhwin[offset] );
			offset++;
		}
		if ( !GUI_touch_scale_count( pmem ) )
		{
			for ( offset = 0;offset < 5;offset++ )
			{
				GUI_window_hwin_req( formhwin[offset] );
				GUI_set_Fgcolor( C_GUI_WHITE );
				GUI_WINDIS_HLINE( 0, formhwin[offset]->win_wide, formhwin[offset]->win_high / 2 );
				GUI_WINDIS_VLINE( formhwin[offset]->win_wide / 2, 0, formhwin[offset]->win_high );
				GUI_window_hwin_release( formhwin[offset] );
			}
			continue;
		}
		break;
	}
	GUI_set_Fgcolor( C_GUI_WHITE );
	GUI_set_Bgcolor( C_GUI_HIGH_BLUE );
	GUI_string_display_At( 100, 100, "修正完成" );
	GUI_window_hwin_release( hp );
	GUI_window_destory( hp );
	GUI_FREE( pmem );
	os_unlock( m_touch_read_lock );
	return;
}
osal_result
os_event_wait(
		os_event_t* p_event,
		unsigned long	wait_ms) //in milliseconds
{
	osal_result	    status;
	int		        wait_ret;
	struct timespec	timeout;
	struct timeval	curtime;

	OS_ASSERT( p_event );
	/* Make sure that the event was Started */
	OS_ASSERT( p_event->state == OSAL_INITIALIZED );

	os_lock( p_event->lock );

	/* Return immediately if the event is signalled. */
	if( p_event->signaled ) {
		if( !p_event->manual_reset ) {
			p_event->signaled = false;
        }

		os_unlock( p_event->lock );
		return( OSAL_SUCCESS );
	}

	/* If just testing the state, return OSAL_TIMEOUT. */
	if( wait_ms == 0 ) {
		os_unlock( p_event->lock );
		return( OSAL_TIMEOUT );
	}

	if( wait_ms == EVENT_NO_TIMEOUT ) {
		/* Wait for condition variable to be signaled or broadcast. */
                /* WARNING! Layering violation.  Assumes os_lock_t is a
                   (pthread_mutex_t *) */
		if( (wait_ret = pthread_cond_wait( &p_event->condvar, p_event->lock ))){
			status = OSAL_NOT_DONE;
        } else {
			status = OSAL_SUCCESS;
        }
	} else {
		/* Get the current time */
		if( gettimeofday( &curtime, NULL ) != 0 ) {
			status = OSAL_ERROR;
		} else {
			timeout.tv_sec = curtime.tv_sec + (wait_ms / 1000);
			timeout.tv_nsec = (curtime.tv_usec + (wait_ms % 1000)*1000) * 1000;
			// check that tv_nsec is less than a second.  Don't
			// let it overflow or you'll be sorry
			if(timeout.tv_nsec >= 1000000000){
				timeout.tv_sec++;
				timeout.tv_nsec -= 1000000000;
			}
			/* WARNING! Layering violation.  Assumes os_lock_t is a
                           (pthread_mutex_t *) */
			wait_ret = pthread_cond_timedwait( &p_event->condvar,
				p_event->lock, &timeout );
			if( wait_ret == 0 ) {
				status = OSAL_SUCCESS;
            } else if( wait_ret == ETIMEDOUT ) {
				status = OSAL_TIMEOUT;
            } else {
				status = OSAL_NOT_DONE;
            }
		}
	}

	if( !p_event->manual_reset ) {
		p_event->signaled = false;
    }

	os_unlock( p_event->lock );
	return( status );
}
Example #8
0
void EXTIOLOCK(void)
{
   os_lock(EXTIO_lock);
   return;
}