示例#1
0
/*! \brief Obtention depuis le fichier du bloc contenant l'enregistrement
 * d'indice-fichier donné.
 * 
 *  \ingroup cache_internal
 *
 * Cette fonction retourne un bloc valide contenant l'enregistrement cherché.
 * On cherche d'abord l'enregistrement dans le cache grâce à Find_Block.  Si on
 * ne l'y trouve pas, on obtient un bloc libre grâce à la fonction
 * Strategy_Replace_Block (qui, comme son nom l'indique, depend de la
 * strategie). On sauve ce bloc si il est marqué modifié puis on initialise son
 * entête et on lit son contenu depuis le fichier (Read_Block).
 *
 * \param pcache un pointeur sur le cache à synchroniser
 * \param irfile indice du bloc cherché dans le fichier
 * \return un pointeur sur l'entête du bloc (ou le pointeur nul si le bloc n'est pas trouvé)  
*/
struct Cache_Block_Header *Get_Block(struct Cache *pcache, int irfile)
{
    struct Cache_Block_Header *pbh;

    if ((pbh = Find_Block(pcache, irfile)) == NULL)
    {
        /* L'enregistrement n'est pas dans le cache */
        
        /* On demande un block à Strategy_Replace_Block */
	pbh = Strategy_Replace_Block(pcache);
	if (pbh == NULL) return NULL;

	/* Si le bloc libéré est valide et modifié, on le sauve sur le fichier */
	if ((pbh->flags & VALID) && (pbh->flags & MODIF)
            && (Write_Block(pcache, pbh) != CACHE_OK))
	    return NULL; 
	
        /* On remplit le bloc libre et son entête avec l'information de
         * l'enregistrement d'indice-fichier irfile
         */
	pbh->flags = 0;
	pbh->ibfile = irfile / pcache->nrecords; /* indice du bloc dans le fichier */
	if (Read_Block(pcache, pbh) != CACHE_OK) return NULL;
    }

    /* Soit l'enregistrement était déjà dans le cache, soit on vient de l'y mettre */
    return pbh;
}
示例#2
0
void app_brushMemSetting(void)
{
	BOOL flag = FALSE;
#define U8_FIRST_BRUSH_CARD_DLY     5
	UINT8 u8_FirstBrushCardDly = 0;			//第一次刷管理卡显示信息,再次刷则更改

	app_timeClear(AD_CHANNEL_NUM);          //清除时间

	do
	{
		if (app_brushCard() == MEM_CARD && Read_Block(gBuff, 4) == FM1702_OK)
		{
			if (gBuff[0] == 0x01 && gBuff[1] == 0x0A)			//金额管理卡
			{
				if (u8_FirstBrushCardDly)
				{
					s_System.Money += 10;
					if (s_System.Money > 200)
					{
						s_System.Money = 10;
					}
					flag = TRUE;
				}
				drv_ledDisplayChannel(0, s_System.Money);
				drv_ledDisplayChannel(1, 0);
				u8_ledDot = 1 << 0;
			}
			else if (gBuff[0] == 0xFA && gBuff[1] == 0x01)		//时间管理卡
			{
				if (u8_FirstBrushCardDly)
				{
					s_System.Time += 30;
					if (s_System.Time > 600)
					{
						s_System.Time = 30;
					}
					flag = TRUE;
				}
				drv_ledDisplayChannel(0, 0);
				drv_ledDisplayChannel(1, s_System.Time);
			}
			else if (gBuff[0] == 0xFF && gBuff[1] == 0xFF)
			{
				if (b_TestMode)
				{
					b_TestMode = FALSE;
				}
				else
				{
					b_TestMode = TRUE;
				}
				drv_buzzerNumber(1);
				break;
			}
			drv_buzzerNumber(1);
			u8_FirstBrushCardDly = 1;
		}
		sys_delayms(1000);
		u8_FirstBrushCardDly++;
	} while (u8_FirstBrushCardDly < U8_FIRST_BRUSH_CARD_DLY);

	if (flag)
	{
		app_configWrite(SYSTEM_SETTING_SECTOR);
	}
}