⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hamaro_findrise.c

📁 机顶盒Hamaro解调器驱动。包含自动搜台
💻 C
📖 第 1 页 / 共 3 页
字号:

/* Rise edge flat state */
static void   
RISEEDGE_Flat()
{
    HAMARO_STS_SAMPLE* p_samples;

    if (STS_StepForward() == False)
    {
        s_step_forward = False;
    }

    p_samples = STS_GetSamples();

    s_pattern = STS_PatternTest(*p_samples->p_power[0], 
                                *p_samples->p_power[1],
                                *p_samples->p_power[2], 
                                s_pattern_delta);
}

static BOOL   
RISEEDGE_Flat2RiseReadyCriterion()
{
    return (!s_step_forward);
}

static STATE* 
RISEEDGE_Flat2RiseReady()
{
    s_abort_state = True;
    DBG_CHECK_FSM_LIMITS(&rise_edge_ready_state);
	return &rise_edge_ready_state;
}

BOOL
RISEEDGE_IsAbortState()
{
    return s_abort_state;
}

static BOOL   
RISEEDGE_Flat2RiseUphillCriterion()
{
    if (s_pattern == PATTERN_UPHILL)
    {
        return (True);
    }
	return (False);
}

static STATE* 
RISEEDGE_Flat2RiseUphill()
{
    DBG_CHECK_FSM_LIMITS(&rise_edge_uphill_state);
	return &rise_edge_uphill_state;
}

static BOOL   
RISEEDGE_Flat2RiseHumpCriterion()
{
    if (s_pattern == PATTERN_HUMP)
    {
        return (True);
    }
	return (False);
}

static STATE* 
RISEEDGE_Flat2RiseHump()
{
    DBG_CHECK_FSM_LIMITS(&rise_edge_hump_state);
	return &rise_edge_hump_state;
}

static BOOL   
RISEEDGE_Flat2RiseDownhillCriterion()
{
    if (s_pattern == PATTERN_DOWNHILL)
    {
        return (True);
    }
	return (False);
}

static STATE* 
RISEEDGE_Flat2RiseDownhill()
{
    DBG_CHECK_FSM_LIMITS(&rise_edge_downhill_state);
	return &rise_edge_downhill_state;
}

static BOOL   
RISEEDGE_Flat2RiseTroughCriterion()
{
    if (s_pattern == PATTERN_TROUGH)
    {
        return (True);
    }
	return (False);
}

static STATE* 
RISEEDGE_Flat2RiseTrough()
{
    DBG_CHECK_FSM_LIMITS(&rise_edge_trough_state);
	return &rise_edge_trough_state;
}

static BOOL   
RISEEDGE_Flat2RiseUnknownCriterion()
{
    if (s_pattern == PATTERN_UNKNOWN)
    {
        return (True);
    }
	return (False);
}

static STATE* 
RISEEDGE_Flat2RiseUnknown()
{
    DBG_CHECK_FSM_LIMITS(&rise_edge_unknown_state);
	return &rise_edge_unknown_state;
}

/* Rise edge unknown state */
static void   
RISEEDGE_UnknownEnter()
{
    s_step_size = STS_FINDRISE_DEFAULT_STEP_SIZE; /* 500 kHz if scan step size was 125 kHz */
    STS_StartAllOver(s_step_size, 0xFFFF);
}

static BOOL   
RISEEDGE_Unknown2ResetCriterion()
{
    return (True); /* always go to reset state */
}

static STATE* 
RISEEDGE_Unknown2Reset()
{
    DBG_CHECK_FSM_LIMITS(&rise_edge_reset_state);
	return &rise_edge_reset_state;
}

/*****************************************************************************/
/*                               RISE RANGE FSM                              */
/*****************************************************************************/
/* Function prototypes */
/* Rise range Reset state */
static void   RISERANGE_ResetEnter();

static BOOL   RISERANGE_Reset2RiseConvexCriterion();
static STATE* RISERANGE_Reset2RiseConvex();

static BOOL   RISERANGE_Reset2RiseConcaveCriterion();
static STATE* RISERANGE_Reset2RiseConcave();

static BOOL   RISERANGE_Reset2RiseStraightCriterion();
static STATE* RISERANGE_Reset2RiseStraight();


/* Rise range convex state */
static void   RISERANGE_Convex();

static BOOL   RISERANGE_Convex2ConvexCriterion();
static STATE* RISERANGE_Convex2Convex();

static BOOL   RISERANGE_Convex2ReadyCriterion();
static STATE* RISERANGE_Convex2Ready();


/* Rise range concave state */
static void   RISERANGE_Concave();

static BOOL   RISERANGE_Concave2ConcaveCriterion();
static STATE* RISERANGE_Concave2Concave();

static BOOL   RISERANGE_Concave2ConvexCriterion();
static STATE* RISERANGE_Concave2Convex();

static BOOL   RISERANGE_Concave2ReadyCriterion();
static STATE* RISERANGE_Concave2Ready();


/* Rise range ready state */
static void   RISERANGE_ReadyEnter();

/* State tables */
STATE rise_range_reset_state = /* FIND_RISE_RANGE FSM, RESET state */
{
	RISERANGE_ResetEnter, /* Entry task */
   	{
      		{RISERANGE_Reset2RiseConvexCriterion,   RISERANGE_Reset2RiseConvex},   /* Criterion1 and Exit task */
      		{RISERANGE_Reset2RiseConcaveCriterion,  RISERANGE_Reset2RiseConcave},  /* Criterion2 and Exit task */
      		{RISERANGE_Reset2RiseStraightCriterion, RISERANGE_Reset2RiseStraight}, /* Criterion3 and Exit task */
      		{0,0} /* End of Criterion/Exit task */
   	},
   	0, /* Regular/Routine task */
   	0, /* No counter */
   	RISERANGE_RESET_STATE /* state code */	
};

STATE rise_range_convex_state = /* FIND_RISE_RANGE FSM, CONVEX state */
{
	0, /* Entry task */
   	{
      		{RISERANGE_Convex2ConvexCriterion, RISERANGE_Convex2Convex},    /* Criterion1 and Exit task */
      		{RISERANGE_Convex2ReadyCriterion,  RISERANGE_Convex2Ready},     /* Criterion2 and Exit task */
      		{0,0} /* End of Criterion/Exit task */
   	},
   	RISERANGE_Convex, /* Regular/Routine task */
   	0, /* No counter */
   	RISERANGE_CONVEX_STATE /* state code */	
};

STATE rise_range_concave_state = /* FIND_RISE_RANGE FSM, CONCAVE state */
{
	0, /* Entry task */
   	{
      		{RISERANGE_Concave2ConcaveCriterion,   RISERANGE_Concave2Concave},   /* Criterion1 and Exit task */
        {RISERANGE_Concave2ConvexCriterion,    RISERANGE_Concave2Convex},   
      	{RISERANGE_Concave2ReadyCriterion,     RISERANGE_Concave2Ready},     
      		{0,0} /* End of Criterion/Exit task */
   	},
   	RISERANGE_Concave, /* Regular/Routine task */
   	0, /* No counter */
   	RISERANGE_CONCAVE_STATE /* state code */	
};

STATE rise_range_ready_state = /* FIND_RISE_EDGE FSM, READY state */
{
	RISERANGE_ReadyEnter, /* Entry task */
   	{
      		{0,0} /* End of Criterion/Exit task */
   	},
   	0, /* Regular/Routine task */
   	0, /* No counter */
   	RISERANGE_READY_STATE /* state code */	
};

/*****************************************************************************/
/* RISERANGE_Start() */
/* Main FSM function  */
/*****************************************************************************/
void 
RISERANGE_Start(FSM *fsm)
{  
   fsm->p_curr = &rise_range_reset_state; 
}

/* Rise range Reset state */
static HAMARO_STS_CURVATURE s_curvature_status = CURVATURE_UNKNOWN;
static void 
RISERANGE_ResetEnter()
{    
    s_curvature_status = CURVATURE_UNKNOWN;
}

static BOOL   
RISERANGE_Reset2RiseConvexCriterion()
{
    if (s_curvature == CURVATURE_CONCAVE)
    {
        return (True);
    }
	return (False);
}

static STATE* 
RISERANGE_Reset2RiseConvex()
{
    DBG_CHECK_FSM_LIMITS(&rise_range_convex_state);
	return &rise_range_convex_state;    
}

static BOOL   
RISERANGE_Reset2RiseConcaveCriterion()
{
    if (s_curvature == CURVATURE_CONVEX || s_curvature == CURVATURE_UNKNOWN)
    {
    if (s_curvature == CURVATURE_CONVEX)
    {
            s_curvature_status = CURVATURE_CONVEX;
            STS_UpdateRiseCurvaturePoints(&s_find_rise_range_curvature, s_curvature);
        }
        return (True);
    }
	return (False);
}

static STATE* 
RISERANGE_Reset2RiseConcave()
{
    DBG_CHECK_FSM_LIMITS(&rise_range_concave_state);
	return &rise_range_concave_state; 
}

static BOOL   
RISERANGE_Reset2RiseStraightCriterion()
{
    if (s_curvature == CURVATURE_STRAIGHT)
    {
        return (True);
    }
	return (False);
}

static STATE* 
RISERANGE_Reset2RiseStraight()
{
    STS_UpdateRiseCurvaturePoints(&s_find_rise_range_curvature, s_curvature); 
    DBG_CHECK_FSM_LIMITS(&rise_range_ready_state); 
	return &rise_range_ready_state; 
}


/* Rise range convex state */
static void   
RISERANGE_Convex()
{
    HAMARO_STS_SAMPLE* p_samples;
    
    p_samples = STS_GetSamples();

    s_curvature = STS_CurvatureTest(*p_samples->p_power[0],
                                    *p_samples->p_power[1], 
                                    *p_samples->p_power[2],
                                    STS_CURVATURE_TEST_THRESH);

    //STS_UpdateRiseCurvaturePoints(&s_find_rise_range_curvature, s_curvature);
}

static BOOL   
RISERANGE_Convex2ConvexCriterion()
{
    if (s_curvature == CURVATURE_CONCAVE || s_curvature == CURVATURE_UNKNOWN)
    {
        if (s_curvature == CURVATURE_CONCAVE)
            {
            STS_UpdateRiseCurvaturePoints(&s_find_rise_range_curvature, s_curvature);
        }

       // if (STS_GetNoDoubleStep() == False) /* double step */
       // {
       //     s_step_size = s_step_size * 2;
       //     STS_SetStep(s_step_size);
       //     if (STS_StepForward() == False)
       //     {
       //         s_step_forward = False;
       //     }
       // }
       // else
        {
            if (STS_StepForward() == False)
            {
                s_step_forward = False;
            }
        }
        return (True);
    }
    	return (False);
}

static STATE* 
RISERANGE_Convex2Convex()
{
    DBG_CHECK_FSM_LIMITS(&rise_range_convex_state);
	return &rise_range_convex_state;    
}

static BOOL   
RISERANGE_Convex2ReadyCriterion()
{
    if (s_curvature == CURVATURE_CONVEX/* || s_curvature == CURVATURE_STRAIGHT*/) 
    {
      //  if (s_curvature == CURVATURE_STRAIGHT) 
      //  {
      //      STS_UpdateRiseCurvaturePoints(&s_find_rise_range_curvature, CURVATURE_CONVEX); 
      //  }
       // else /* re-visit */
        {
            STS_UpdateRiseCurvaturePoints(&s_find_rise_range_curvature, s_curvature); 
        }
       // STS_MoveLeft();
        return (True);
    }
    else if (s_step_forward == False)
    {
        return (True);
    }

	return (False);
}

static STATE* 
RISERANGE_Convex2Ready()
{
    s_curvature_status = CURVATURE_UNKNOWN;
    DBG_CHECK_FSM_LIMITS(&rise_range_ready_state);
	return &rise_range_ready_state; 
}


/* Rise range concave state */
static void   
RISERANGE_Concave()
{
    HAMARO_STS_SAMPLE* p_samples;
    
    p_samples = STS_GetSamples();

    s_curvature = STS_CurvatureTest(*p_samples->p_power[0],
                                    *p_samples->p_power[1], 
                                    *p_samples->p_power[2],
                                    STS_CURVATURE_TEST_THRESH);

    //STS_UpdateRiseCurvaturePoints(&s_find_rise_range_curvature, s_curvature);
}

static BOOL   
RISERANGE_Concave2ConcaveCriterion()
{
    if (s_curvature_status == CURVATURE_CONVEX)
    {
        if (s_curvature == CURVATURE_CONVEX || s_curvature == CURVATURE_UNKNOWN)
        {
    if (s_curvature == CURVATURE_CONVEX)
    {
                STS_UpdateRiseCurvaturePoints(&s_find_rise_range_curvature, s_curvature);
            }

        STS_StepBackward();
        return (True);
    }
    }
    else if (s_curvature_status == CURVATURE_UNKNOWN)
    {
        // else 
        if (s_curvature == CURVATURE_UNKNOWN)
    {
        if (STS_StepForward() == False)
        {
            s_step_forward = False;
        }
        return (True);
    }
    }
	return (False);
}

static STATE* 
RISERANGE_Concave2Concave()
{
    DBG_CHECK_FSM_LIMITS(&rise_range_concave_state);
	return &rise_range_concave_state; 
}

static BOOL   
RISERANGE_Concave2ConvexCriterion()
{
    if (s_curvature_status == CURVATURE_CONVEX)
    {
        if (s_curvature == CURVATURE_CONCAVE)
        {
            STS_UpdateRiseCurvaturePoints(&s_find_rise_range_curvature, s_curvature);
            return (True);
        }
    }
    return (False);
}

static STATE* 
RISERANGE_Concave2Convex()
{
    DBG_CHECK_FSM_LIMITS(&rise_range_convex_state);
	return &rise_range_convex_state; 
}

static BOOL   
RISERANGE_Concave2ReadyCriterion()
{
    if (s_curvature == CURVATURE_CONCAVE /*|| s_curvature == CURVATURE_STRAIGHT*/) 
    {
        //if (s_curvature == CURVATURE_STRAIGHT) 
        {
            STS_UpdateRiseCurvaturePoints(&s_find_rise_range_curvature, CURVATURE_CONCAVE);
        }
       // STS_MoveRight();
        return (True);
    }
    else if (s_step_forward == False)
    {
        return (True);
    }

	return (False);
}

static STATE* 
RISERANGE_Concave2Ready()
{
    DBG_CHECK_FSM_LIMITS(&rise_range_ready_state);
    s_curvature_status = CURVATURE_UNKNOWN;
	return &rise_range_ready_state; 
}


/* Rise range ready state */
static void   
RISERANGE_ReadyEnter()
{
    /* do nothing */ 
}

/*****************************************************************************/
/* FINDRISE_GetRiseCurvaturePoints() */
/*  */
/*****************************************************************************/
HAMARO_STS_CURVATURE_POINTS* 
FINDRISE_GetRiseCurvaturePoints()
{
    return &s_find_rise_range_curvature;
}

/*****************************************************************************/
#endif /* #if HAMARO_SCAN_THE_SKY */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -