MTK设置闹钟 - jues
C语言字符串向前查找
冒泡算法

MTK设置闹钟

jues posted @ 2013年9月18日 15:56 in 笔记(原创) , 1456 阅读

格式:“时间#周期”

周期格式:

1,2,3,4,5,6,7分别代表周一到周七,

如果选择了周三和周四,就“09:30#34”,

每天都响,就“09:30#1234567”,

只响一次就“09:30#0”

 

/* 设置闹钟 */
void my_easy_set_alarm_clock( U8 i,alm_nvram_struct  *p  )
{
	srv_alm_write( i,p );
	AlmActivateIndicator();
}

/*****************************************************************************
 * FUNCTION
 *  pow
 * DESCRIPTION
 *  
 * PARAMETERS
 *  base        [IN]        
 *  index       [IN]        
 * RETURNS
 *  
 *****************************************************************************/
int my_pow(int base, int index)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    int i, ret = 1;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    for (i = 0; i < index; i++)
    {
        ret = ret * base;
    }
    return ret;
}


/*  根据指令直接修改系统闹钟*/
void my_set_alarm_clock( U8 index,const char *str )
{
	const int max = 13;
	int len;
	int i = 6;
	int num;
	alm_nvram_struct *p;

	if (  NULL == str  )
		return;

	len = strlen( str );
	
	if ( 7 > len  || NUM_OF_ALM <= index ) 
		return;/* 不是有效数据 */

	p = ( alm_nvram_struct *)srv_alm_read( index );
	/*时间*/
       p->Hour = 10 * ( str[ 0 ] - 48 ) + ( str[ 1 ] - 48 ) ;
       p->Min = 10 * ( str[ 3 ] - 48 ) + ( str[ 4 ] - 48 );

	if ( 24 <= p->Hour || 59 <  p->Min  )
		return; /* 时间无效 */
	
	p->Snooze = 0;
	p->SnoozeInterval = 0;
	/* 周期 */
	p->Freq = 4; /* 53 和50D 不一样 */
	p->Days = 0;	
	while ( 0 != str[ i ] && max > i )
	{
		num = ( int )str[ i ] - 48;
		if ( 0 <= num && 7 >= num )
		{
			if ( 0 == num )
			{ p->Days |= 0; 
			}
			else
			{
			    if ( 7 == num )
				  num = 1;
				else
				  num += 1;
				p->Days |= my_pow( 2,num - 1 );
			}
		}
		else
		{ /* 数据无效 */
			return;
		}
		i++;
	}
	if ( 0 ==  p->Days  )
		p->Freq = 1;/* 53 和50D 不一样 */
	/*开关*/
	p->State = 1;
	/* 保存生效 */
	my_easy_set_alarm_clock( index,p );
}

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter