亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hamaro_fsm.c

?? 機頂盒Hamaro解調器驅動。包含自動搜臺
?? C
字號:
/* hamaro_fsm.c */
/*+++ *******************************************************************\
*
*  Abstract:
*
*       Hamaro FSM framework implementation file.
*
*  Created: 07/15/2005
*
*
*  Copyright and Disclaimer: 
*  
*     --------------------------------------------------------------- 
*     This software is provided "AS IS" without warranty of any kind, 
*     either expressed or implied, including but not limited to the 
*     implied warranties of noninfringement, merchantability and/or  
*     fitness for a particular purpose.
*     --------------------------------------------------------------- 
*     
*   Author: Amar Puttur
*   
*   Module Revision Id:
*
*       $Header: hamaro_fsm.c, 5, 2006-10-20 7:01:12, Sunbey (VSS Migration)$
*
*     Copyright (c) 2005 Conexant Systems, Inc. 
*     All rights reserved. 
*
\******************************************************************* ---*/
#include "hamaro_fsm.h"

#if HAMARO_SCAN_THE_SKY

#include "hamaro_sts.h" 

#if HAMARO_WIN_DEBUG

#define  STSDBG_WR_INT_LN(str, val)	        (WINDBG_WriteIntegerLn((char*)(str), val))
#define  STSDBG_WR_INT(str, val)	        (WINDBG_WriteInteger((char*)(str), val))
#define  STSDBG_WR_HEX(str, val)            (WINDBG_WriteHex((char*)(str), val))
#define  STSDBG_WR_UNSIGNED_LN(str, val)	(WINDBG_WriteUnsignedLn((char*)(str), val))
#define  STSDBG_WR_UNSIGNED(str, val)	    (WINDBG_WriteUnsigned((char*)(str), val))
#define  STSDBG_WR_STR(str, nl)	            (WINDBG_WriteString((char*)(str), nl))
#define  STSDBG_WR_ELAPSED_TIME()           (WINDBG_FileWriteDuration())
#define  STSDBG_START_TIMER()               (WINDBG_SetTimer()) /* used for time measurements */

#else  // HAMARO_WIN_DEBUG

#define  STSDBG_WR_INT_LN(str, val)	        /* Expands to nothing */ 
#define  STSDBG_WR_INT(str, val)	        /* Expands to nothing */ 
#define  STSDBG_WR_UNSIGNED_LN(str, val)	/* Expands to nothing */ 
#define  STSDBG_WR_UNSIGNED(str, val)       /* Expands to nothing */ 
#define  STSDBG_WR_STR(str, nl)	            /* Expands to nothing */ 
#define  STSDBG_WR_ELAPSED_TIME()           /* Expands to nothing */
#define  STSDBG_START_TIMER()               /* Expands to nothing */

#endif /* HAMARO_WIN_DEBUG */

/* Common state for all FSMs */
STATE idle_state = {0, {0, 0}, 0, 0, 0}; 

#if HAMARO_INCLUDE_DEBUG

static FSM_STATE_SEQUENCE_DATA  fsm_sequence_data[STS_MAX_STATE_SEQUENCES+1];

/* Array indices - used to manage the data points and array limits */
static unsigned char sequence_index;

#endif /* HAMARO_INCLUDE_DEBUG */

/*****************************************************************************/
/* FSM_Init() */
/*   */
/*****************************************************************************/
void 
FSM_Init(FSM *fsm)
{
   fsm->p_prev = &idle_state;
   fsm->p_curr = &idle_state;
   fsm->time_counter = 0;
}

/*****************************************************************************/
/* FSM_Poll() */
/*   */
/*****************************************************************************/
void 
FSM_Poll(FSM *fsm)
{   
	unsigned long tmp;   
	CRITERIA *curr_criterion;

	/* update state coding */
	tmp  = *fsm->p_state_code;
	tmp &= ~(fsm->state_code_mask);
	tmp |= (fsm->p_curr->coding && fsm->state_code_mask);
	*fsm->p_state_code = tmp;
   
	/* Optimization: Exit state machine immediately in case it's not started yet. */ 
	if (fsm->p_curr == &idle_state)
	{            
		return;
	} 

	if (fsm->p_prev != fsm->p_curr) /* state transition */
	{	  
		DBG_UPDATE_STATE_SEQUENCE(fsm->p_curr->coding);

		fsm->time_counter = 0;      

		if (1 == fsm->p_curr->counter_type)  
		{
			fsm->last_time_value =  0; /* TBD: Get system clock ticks in msec; */
		}

		if (fsm->p_curr->enter_task) /* execute the enter task once */
		{
			fsm->p_curr->enter_task();
		}
		fsm->p_prev = fsm->p_curr;
	}

	if (fsm->p_curr->regular_task) /* regular task run every poll */
	{
		fsm->p_curr->regular_task();
	}

	/* start executing criterion and corresponding exit tasks one by one */
	curr_criterion = &fsm->p_curr->criteria[0];

	while(curr_criterion->condition) /* criterion exist/valid */
	{               
		if (curr_criterion->condition(fsm->time_counter)) /* criterion returns True */
		{   /* execute the exit task to transit to some other state */
			fsm->p_curr = curr_criterion->exit_task();
			break;
		}   
		++curr_criterion;	  	  
	}   

	/* keep accumulating timer ticks (delta) */
	/* This is optionally implemented when state transition criterions start using timeouts */
	if (1 == fsm->p_curr->counter_type) 
	{
		tmp = 0; /* TBD : Get system clock ticks in msec; */
		fsm->time_counter += (tmp >= fsm->last_time_value ? 
							(unsigned long)(tmp-fsm->last_time_value) : 
							(unsigned long)0xFFFF-( unsigned long)(fsm->last_time_value-tmp));
		fsm->last_time_value = tmp;
	}
}

/*****************************************************************************/
/* FSM_CheckState() */
/* Checks if the given FSM is in the requested state  */
/*****************************************************************************/
BOOL 
FSM_CheckState(FSM *fsm, unsigned long state)
{
    if (fsm == 0)
    {
        return (False);
    }

    if (fsm->p_curr->coding == state)
    {
        return (True);
    }
    else
    {
        return (False);
    }
}

/*****************************************************************************/
/*                         D E B U G  S E C T I O N                          */
/*****************************************************************************/
#if HAMARO_INCLUDE_DEBUG
/*****************************************************************************/
/* DEBUG_Init() */
/*   */
/*****************************************************************************/
void DEBUG_Init()
{
    unsigned char index;

	for (index = 0; index < STS_MAX_STATE_SEQUENCES; index++)
	{
	    fsm_sequence_data[index].state = 0;
	    fsm_sequence_data[index].time_spent = 0;  	
	}
	sequence_index = 0;
}

/*****************************************************************************/
/* DEBUG_UpdateTimeSpent() */
/*   */
/*****************************************************************************/
void DEBUG_UpdateTimeSpent(unsigned short time)
{
    time = 0; /* TBD */
}

/*****************************************************************************/
/* DEBUG_UpdateStateSequence() */
/*   */
/*****************************************************************************/
void DEBUG_UpdateStateSequence(unsigned long state)
{
	if (sequence_index < STS_MAX_STATE_SEQUENCES)
	{
		fsm_sequence_data[sequence_index].state = state;
		sequence_index++;
	}
}

/*****************************************************************************/
/* DEBUG_DumpStateSequence() */
/*   */
/*****************************************************************************/
void   DEBUG_DumpStateSequence()
{
    unsigned char index;

    STSDBG_WR_STR("\nState sequence...\n-----------------\n", False);

    for (index = 0; index < sequence_index; index++)
    {
        STSDBG_WR_INT_LN("State: ", fsm_sequence_data[index].state);
    }
}

/* Debug functions to set and get state_limits */
static unsigned long state_code_limits;
/*****************************************************************************/
/* DEBUG_CheckFSMLimits() */
/*   */
/*****************************************************************************/
void 
DEBUG_SetFSMLimits(unsigned long limits)
{
    state_code_limits = limits;
}

/*****************************************************************************/
/* DEBUG_CheckFSMLimits() */
/*   */
/*****************************************************************************/
static unsigned long 
DEBUG_GetFSMLimits(void)
{
	return state_code_limits;
}

/*****************************************************************************/
/* DEBUG_StateCode2String() */
/*   */
/*****************************************************************************/
static void
DEBUG_StateCode2String(unsigned long coding)
{
#if HAMARO_WIN_DEBUG
    STSDBG_WR_HEX("FSM State = ", coding);

    switch (coding)
    {   /* STS FSM */
        case STS_RESET_STATE:           STSDBG_WR_STR("[STS_RESET_STATE]", True);          break; /* 1 */
        case STS_PWRSCAN_STATE:         STSDBG_WR_STR("[STS_PWRSCAN_STATE]", True);        break; /* 2 */
        case STS_RISING_EDGE_STATE:     STSDBG_WR_STR("[STS_RISING_EDGE_STATE]", True);    break; /* 3 */
        case STS_BINARY_SEARCH_STATE:   STSDBG_WR_STR("[STS_BINARY_SEARCH_STATE]", True);  break; /* 4 */
        case STS_FALLING_EDGE_STATE:    STSDBG_WR_STR("[STS_FALLING_EDGE_STATE]", True);   break; /* 5 */
        case STS_RESCAN_STATE:          STSDBG_WR_STR("[STS_RESCAN_STATE]", True);         break; /* 6 */
        case STS_READY_STATE:           STSDBG_WR_STR("[STS_READY_STATE]", True);          break; /* 7 */            
        case STS_SRBIN_STATE:           STSDBG_WR_STR("[STS_SRBIN_STATE]", True);          break; /* 8 */            
        case STS_COMPLETE_STATE:        STSDBG_WR_STR("[STS_COMPLETE_STATE]", True);       break; /* 9 */
        /* BINARY SEARCH FSM */
        case BINSEARCH_RESET_STATE:     STSDBG_WR_STR("[BINSEARCH_RESET_STATE]", True);    break; /* (1 << 4) */
        case BINSEARCH_BEGIN_STATE:		STSDBG_WR_STR("[BINSEARCH_BEGIN_STATE]", True);    break; /* (2 << 4) */  
        case BINSEARCH_CONVEX_STATE:    STSDBG_WR_STR("[BINSEARCH_CONVEX_STATE]", True);   break; /* (3 << 4) */
        case BINSEARCH_CONCAVE_STATE:   STSDBG_WR_STR("[BINSEARCH_CONCAVE_STATE]", True);  break; /* (4 << 4) */
        case BINSEARCH_READY_STATE:     STSDBG_WR_STR("[BINSEARCH_READY_STATE]", True);    break; /* (5 << 4) */
        /* RISING EDGE FSM */
        case RISEEDGE_UPHILL_STATE:     STSDBG_WR_STR("[RISEEDGE_UPHILL_STATE]", True);    break; /* (1 << 8) */
        case RISEEDGE_DOWNHILL_STATE:   STSDBG_WR_STR("[RISEEDGE_DOWNHILL_STATE]", True);  break; /* (2 << 8) */
        case RISEEDGE_FLAT_STATE:       STSDBG_WR_STR("[RISEEDGE_FLAT_STATE]", True);      break; /* (3 << 8) */
        case RISEEDGE_TROUGH_STATE:     STSDBG_WR_STR("[RISEEDGE_TROUGH_STATE]", True);    break; /* (4 << 8) */
        case RISEEDGE_PEAK_STATE:       STSDBG_WR_STR("[RISEEDGE_PEAK_STATE]", True);      break; /* (5 << 8) */
        case RISEEDGE_UNKNOWN_STATE:    STSDBG_WR_STR("[RISEEDGE_UNKNOWN_STATE]", True);   break; /* (6 << 8) */
        case RISEEDGE_RESET_STATE:      STSDBG_WR_STR("[RISEEDGE_RESET_STATE]", True);     break; /* (7 << 8) */
        case RISEEDGE_READY_STATE:      STSDBG_WR_STR("[RISEEDGE_READY_STATE]", True);     break; /* (8 << 8) */            
        /* RISING RANGE FSM */
        case RISERANGE_RESET_STATE:     STSDBG_WR_STR("[RISERANGE_RESET_STATE]", True);    break; /* (1 << 12) */
        case RISERANGE_CONVEX_STATE:    STSDBG_WR_STR("[RISERANGE_CONVEX_STATE]", True);   break; /* (2 << 12) */
        case RISERANGE_CONCAVE_STATE:   STSDBG_WR_STR("[RISERANGE_CONCAVE_STATE]", True);  break; /* (3 << 12) */
        case RISERANGE_READY_STATE:     STSDBG_WR_STR("[RISERANGE_READY_STATE]", True);    break; /* (4 << 12) */
        /* FALLING EDGE FSM */
        case FALLEDGE_UPHILL_STATE:     STSDBG_WR_STR("[FALLEDGE_UPHILL_STATE]", True);    break; /* (1 << 16) */
        case FALLEDGE_DOWNHILL_STATE:   STSDBG_WR_STR("[FALLEDGE_DOWNHILL_STATE]", True);  break; /* (2 << 16) */
        case FALLEDGE_FLAT_STATE:       STSDBG_WR_STR("[FALLEDGE_FLAT_STATE]", True);      break; /* (3 << 16) */
        case FALLEDGE_TROUGH_STATE:     STSDBG_WR_STR("[FALLEDGE_TROUGH_STATE]", True);    break; /* (4 << 16) */
        case FALLEDGE_PEAK_STATE:       STSDBG_WR_STR("[FALLEDGE_PEAK_STATE]", True);      break; /* (5 << 16) */
        case FALLEDGE_UNKNOWN_STATE:    STSDBG_WR_STR("[FALLEDGE_UNKNOWN_STATE]", True);   break; /* (6 << 16) */
        case FALLEDGE_RESET_STATE:      STSDBG_WR_STR("[FALLEDGE_RESET_STATE]", True);     break; /* (7 << 16) */
        case FALLEDGE_ABORT_STATE:      STSDBG_WR_STR("[FALLEDGE_ABORT_STATE]", True);     break; /* (8 << 16) */                        
        case FALLEDGE_READY_STATE:      STSDBG_WR_STR("[FALLEDGE_READY_STATE]", True);     break; /* (9 << 16) */            
        /* FALLING RANGE FSM */
        case FALLRANGE_RESET_STATE:     STSDBG_WR_STR("[FALLRANGE_RESET_STATE]", True);    break; /* (1 << 20) */
        case FALLRANGE_CONVEX_STATE:    STSDBG_WR_STR("[FALLRANGE_CONVEX_STATE]", True);   break; /* (2 << 20) */
        case FALLRANGE_CONCAVE_STATE:   STSDBG_WR_STR("[FALLRANGE_CONCAVE_STATE]", True);  break; /* (3 << 20) */
        case FALLRANGE_PRE_READY_STATE: STSDBG_WR_STR("[FALLRANGE_PRE_READY_STATE]", True);break; /* (4 << 20) */
        case FALLRANGE_READY_STATE:     STSDBG_WR_STR("[FALLRANGE_READY_STATE]", True);    break; /* (5 << 20) */
        /* SYMB RATE BIN FSM */
        case SRBIN_RESET_STATE:         STSDBG_WR_STR("[SRBIN_RESET_STATE]", True);        break; /* (1 << 24) */
        case SRBIN_NEXT_CHANNEL_STATE:  STSDBG_WR_STR("[SRBIN_NEXT_CHANNEL_STATE]", True); break; /* (2 << 24) */
        case SRBIN_NEXT_BIN_STATE:      STSDBG_WR_STR("[SRBIN_NEXT_BIN_STATE]", True);     break; /* (3 << 24) */
        case SRBIN_LOCK_TEST_STATE:     STSDBG_WR_STR("[SRBIN_LOCK_TEST_STATE]", True);    break; /* (4 << 24) */
        case SRBIN_CLEANUP_STATE:       STSDBG_WR_STR("[SRBIN_CLEANUP_STATE]", True);      break; /* (5 << 24) */
        case SRBIN_READY_STATE:         STSDBG_WR_STR("[SRBIN_READY_STATE]", True);        break; /* (6 << 24) */   
        /* POWER SCAN FSM */
        case PWRSCAN_RESET_STATE:	    STSDBG_WR_STR("[PWRSCAN_RESET_STATE]", True);      break; /* (1 << 28) */
        case PWRSCAN_TUNE_STATE:        STSDBG_WR_STR("[PWRSCAN_TUNE_STATE]", True);       break; /* (2 << 28) */
        case PWRSCAN_START_STATE:  	    STSDBG_WR_STR("[PWRSCAN_START_STATE]", True);      break; /* (3 << 28) */
        case PWRSCAN_STEP_STATE: 		STSDBG_WR_STR("[PWRSCAN_STEP_STATE]", True);       break; /* (4 << 28) */
        case PWRSCAN_STOP_STATE:        STSDBG_WR_STR("[PWRSCAN_STOP_STATE]", True);       break; /* (5 << 28) */
        case PWRSCAN_READY_STATE:       STSDBG_WR_STR("[PWRSCAN_READY_STATE]", True);      break; /* (6 << 28) */   
        case PWRSCAN_ABORT_STATE:       STSDBG_WR_STR("[PWRSCAN_ABORT_STATE]", True);      break; /* (7 << 28) */

        default:STSDBG_WR_STR("[UNDEFINED STATE]", True); break;
    }
#endif /* HAMARO_WIN_DEBUG */
}

/*****************************************************************************/
/* DEBUG_CheckFSMLimits() */
/*   */
/*****************************************************************************/
STATE* 
DEBUG_CheckFSMLimits(STATE* curr_state)
{
    DEBUG_StateCode2String(curr_state->coding);

	if ((curr_state->coding & (DEBUG_GetFSMLimits())) != 0)
	{
		return &idle_state;
	}
	return curr_state;
}

#endif /* HAMARO_INCLUDE_DEBUG */

#endif /* HAMARO_SCAN_THE_SKY */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久图片| 一区二区三区不卡在线观看| 欧美一区二区在线播放| 欧美性大战久久久久久久蜜臀| 91亚洲男人天堂| 成人av在线电影| 99热在这里有精品免费| 暴力调教一区二区三区| 波多野结衣在线一区| 成人黄色电影在线| 99精品国产91久久久久久 | 成人小视频在线观看| 加勒比av一区二区| 国产尤物一区二区| 国产精品一区二区久久精品爱涩| 国产精品亚洲第一区在线暖暖韩国| 久草中文综合在线| 色婷婷香蕉在线一区二区| 成人激情图片网| 91亚洲国产成人精品一区二区三| 99国产精品国产精品久久| 一本色道久久综合亚洲精品按摩 | 久久亚洲二区三区| 久久亚洲一级片| 国产欧美精品一区二区色综合| 国产精品久久久久久久浪潮网站| 亚洲女女做受ⅹxx高潮| 性做久久久久久久久| 日本 国产 欧美色综合| 国产乱码一区二区三区| av一区二区三区在线| 欧美亚洲日本国产| 欧美一区二区三区视频在线 | 久久久久久久一区| 国产精品久久久一本精品| 亚洲一区二区三区不卡国产欧美| 日本最新不卡在线| 国产成人午夜精品5599| 在线精品视频免费播放| 欧美一区二区三区成人| 国产亚洲欧美色| 一区二区三区四区激情| 麻豆国产精品官网| 成人av免费网站| 欧美日韩黄色一区二区| 精品第一国产综合精品aⅴ| 最新日韩在线视频| 蜜臀av亚洲一区中文字幕| 成人国产在线观看| 欧美高清激情brazzers| 国产精品理论在线观看| 午夜激情一区二区| 不卡在线观看av| 666欧美在线视频| 国产精品伦理一区二区| 日本亚洲电影天堂| 成人午夜电影久久影院| 欧美一区二区三区电影| 亚洲欧美自拍偷拍| 久国产精品韩国三级视频| 一本色道a无线码一区v| 久久蜜桃av一区二区天堂| 一区二区高清视频在线观看| 国产精品一色哟哟哟| 欧美日韩激情一区二区三区| 国产精品色眯眯| 麻豆精品一区二区三区| 欧洲日韩一区二区三区| 国产视频一区在线观看| 日韩成人免费看| 一本大道久久精品懂色aⅴ| 26uuu久久天堂性欧美| 午夜免费久久看| 94色蜜桃网一区二区三区| 2023国产一二三区日本精品2022| 亚洲超丰满肉感bbw| 日韩欧美成人午夜| 亚洲一区二区三区三| 风间由美一区二区av101| 在线播放一区二区三区| 一区二区三区电影在线播| 国产另类ts人妖一区二区| 日韩一卡二卡三卡国产欧美| 亚洲一区二区影院| 91蝌蚪porny| 欧美国产在线观看| 国产一区二区三区视频在线播放| 欧美一区在线视频| 亚州成人在线电影| 色噜噜狠狠成人网p站| 国产精品视频第一区| 国产综合色精品一区二区三区| 91精品国产91热久久久做人人| 亚洲一区二区综合| 在线观看亚洲a| 亚洲精品日韩综合观看成人91| 99久久久国产精品| 国产精品污污网站在线观看| 福利一区二区在线| 国产欧美精品一区二区三区四区 | 午夜精品免费在线| 在线日韩国产精品| 亚洲黄色av一区| 91国偷自产一区二区开放时间 | 精品夜夜嗨av一区二区三区| 7777精品伊人久久久大香线蕉完整版 | 久久久亚洲精华液精华液精华液| 日韩在线a电影| 欧美电影一区二区| 日本91福利区| 日韩欧美不卡在线观看视频| 久久99精品国产.久久久久| 日韩女优av电影| 韩国女主播成人在线| 国产亚洲精品福利| 粉嫩绯色av一区二区在线观看| 欧美经典一区二区| 成人午夜激情在线| 亚洲欧洲日韩av| 欧美综合一区二区| 亚洲444eee在线观看| 欧美一区二区三区性视频| 久久不见久久见免费视频1| 日韩精品一区国产麻豆| 国产乱妇无码大片在线观看| 国产精品理论片| 在线精品视频一区二区三四| 天天影视涩香欲综合网| 日韩亚洲欧美高清| 国内精品免费在线观看| 中文字幕va一区二区三区| 色综合中文字幕| 亚洲狠狠爱一区二区三区| 欧美一级二级在线观看| 国产乱码精品一区二区三区五月婷 | 国产精品―色哟哟| 色偷偷一区二区三区| 亚洲成av人**亚洲成av**| 精品美女在线播放| zzijzzij亚洲日本少妇熟睡| 亚洲一级电影视频| 精品国产欧美一区二区| 99免费精品在线观看| 亚洲一二三四区| 26uuu亚洲| 色综合色狠狠天天综合色| 日本亚洲最大的色成网站www| 同产精品九九九| 精品国产乱码久久久久久久| 99国产精品一区| 日本美女一区二区| 国产精品美女久久久久久2018| 欧美偷拍一区二区| 国产精品夜夜嗨| 亚洲综合色噜噜狠狠| 久久综合九色综合欧美就去吻| 91网站最新地址| 久久超碰97人人做人人爱| 亚洲免费在线看| 欧美精品一区二区三区视频| 色综合婷婷久久| 精品一区二区三区免费毛片爱| 亚洲免费观看高清完整版在线| 欧美电影精品一区二区| 91久久精品一区二区| 国产一区二区三区综合| 亚洲不卡一区二区三区| 欧美国产日产图区| 欧美一区二区人人喊爽| 91视频你懂的| 国产精品白丝jk白祙喷水网站| 亚洲国产一区视频| 欧美国产精品一区| 日韩精品一区二区在线| 欧美四级电影网| 暴力调教一区二区三区| 九一九一国产精品| 午夜视频久久久久久| 综合久久综合久久| 国产亲近乱来精品视频| 欧美一区二区三区免费| 在线观看日韩电影| 不卡av电影在线播放| 黄一区二区三区| 奇米精品一区二区三区在线观看| 亚洲激情自拍视频| 亚洲欧洲日韩av| 国产欧美va欧美不卡在线| 日韩精品中文字幕一区二区三区| 欧美日韩国产在线观看| 91年精品国产| 北条麻妃一区二区三区| 国产精品一色哟哟哟| 久久不见久久见免费视频7 | 精品一区二区影视| 一片黄亚洲嫩模| 亚洲乱码国产乱码精品精98午夜 | 91精品在线麻豆| 欧美日韩午夜在线| 日本久久一区二区三区|