Exemplo n.º 1
0
ERRCODE Config::load( std::string filename, bool createnew )
{
    std::ifstream configfile;
    std::string lineinput, category( "Global" ), item, value;
    ERRCODE ret = OZ_OK;

    if( isloaded()) clear();

    configfile.open( filename.c_str());
    if( !configfile.is_open()) {
        if( FileExists( filename ) || !createnew ) {    
            returncode( OZ_INI_FAILED_TO_OPEN );
        } else {
            return( create( filename ));
        }
    }
    m_isloaded = true;

    while( configfile.good()) {
        std::getline( configfile, lineinput );
        trim( lineinput );
        if( matchcategory( lineinput, category )) {
        } else if( matchline( lineinput, item, value )) {
            if(( ret = set( category + ":" + item, value )) != 0 ) {
                configfile.close();
                m_isloaded = false;
                returncode( ret );
            }
        }
    }

    configfile.close();
    m_configfilename = filename;
    returncode( OZ_OK );
}
Exemplo n.º 2
0
//---------------------------------------------------------------------------
// character received will be stored in linebuffer, which will be
// processed when a line-feed (0x0a) is encountered.
void p1_char(uint8_t c)
{
  if(c == 0x0d) return;

  p1data.line[p1data.len] = c;
  if(p1data.line[p1data.len] == 0x0a || p1data.len == sizeof(p1data.line) - 1)
  {
    // discard newline, close string, parse line and clear it.
    if(p1data.len > 0) p1data.line[p1data.len] = 0;
    p1data.linecount++;
    matchline();
    p1data.len = 0;
  }
  else
  {
    ++p1data.len;
  }
}
Exemplo n.º 3
0
void Get_Edge(void)
{    
  int16 i,j;    //循环变量
//        float average;      //平均值
//        float variance;     //方差         
        uint8 nomal_track_flag = 1; //正常赛道
        uint8 l_complete_lost_flag = 0 ;  //左线完全丢线标志
        uint8 r_complete_lost_flag = 0;   //右线完全丢失标志
//        uint8 passing_section_straight_flag = 1;  //超出区前为直道
//        uint8 l_start_lost_cross_flag = 0;  //起始丢线的十字
//        uint8 r_start_lost_cross_flag = 0 ;    //
        uint8 left_status = 0;    // 左线状态  上黑下白为1  上白下黑为2 
        uint8 right_status = 0;   // 右线状态  上黑下白为1  上白下黑为2
        int8 left_jump_point = 0;
        int8 right_jump_point = 0; 
        int8 l_jump_point[5] = {0};
        int8 r_jump_point[5] = {0};
        int8 left_jump_point1=0,right_jump_point1=0;
        int8 left_jump_point2=0,right_jump_point2=0;
        int8 Fjump_end;             //跳变点滤波终止行
        int8 l_jump_count = 0;
        int8 r_jump_count = 0;
        int8 min_jump_count;
        int8 l_cross_turn_point = 0;            //左斜十字拐点位置
        int8 r_cross_turn_point = 0;            //右斜十字拐点位置
//        uint8 l_diagonally_cross_flag = 0 ;     //左斜入十字
//        uint8 r_diagonally_cross_flag = 0 ;     //右斜入十字
        uint8 l_diagonally_flag =1 ;     //左斜入十字前为直道
        uint8 r_diagonally_flag =1;      //右斜入十字前为直道
        float l_First_derivative[118] = {0};   //左线一阶导
        float r_First_derivative[118] = {0};   //右线一阶导
        float l_average[116] = {0};            //左线平均值
        float r_average[116] = {0};            //右线平均值
        float l_variance[116] = {0};           //左线方差
        float r_variance[116] = {0};           //右线方差
        int16 leftline_start = L_LINE_START ;  //左边线寻线起点
        int16 rightline_start = R_LINE_START ; //右边线寻线起点 
//        int16 left_restart = 0;   //左线重新寻线起点
//        int16 right_restart = 0;  //右线重新寻线起点
//        int8 row_restart = 0 ;
        int8 l_jump_derivative ; 
        int8 r_jump_derivative ;
        float range_derivative;
        int8 row ;   //寻线行变量
      
        //寻线
        for(row = 0 ; row <120 ; row ++)
        {
            Lline[row] = L_LINE_INITIAL_VALUE ; 
            Rline[row] = R_LINE_INITIAL_VALUE ;
            Mline[row] = M_LINE_INITIAL_VALUE ;           
        }  
                //寻线
        for(row = 119 ; row >=0 ;row --)
        {
               //寻左线 
            if( l_complete_lost_flag == 0)
            {
                for( i = leftline_start ; i>0 ; i--)
                    { 
                        if(leftline_start > 162)   //左边线已寻到最右边                       
                              break ;
                        if((img_handle[row][i+2]+img_handle[row][i+1]) == 510 && (img_handle[row][i] + img_handle[row][i-1]) == 0)
                        {
                            Lline[row] = i ;
                            if(row<118)
                            {    
                                 if(ABS(Lline[row+2] - Lline[row+1]) < 20)
                                 {
                                   leftline_start = i + ABS(Lline[row+2] - Lline[row+1])+5 ;  
                                 }
                                 else
                                 {
                                    leftline_start = L_LINE_START;
                                 }
                            }
                            else
                                 leftline_start = i + 5;
                            break;
                        } 
                    } 
                  if(i == 0)
                   {
                      if(row < 118)
                      {
                        if( (Rline[row+2]-Rline[row+1]) >4&& (Rline[row+1] < 60))
                        {
                            l_complete_lost_flag = 1;
                        }
                        else
                        {
                           leftline_start =(int16)((Rline[row+1] + Lline[row+1])/2.0);
                        }
                      }
                   } 
            }
          //    寻右线
            if(r_complete_lost_flag == 0)
            {
              for( j = rightline_start;j<159;j++)
              {
                 if(rightline_start <-3) 
                     break;
                 if((img_handle[row][j-2] + img_handle[row][j-1]) == 510 && (img_handle[row][j] + img_handle[row][j+1]) == 0)
                 {
                    Rline[row] = j;
                    if(row<118)
                      {
                          if((ABS(Rline[row+2] - Rline[row+1]) < 20))
                          {
                            rightline_start = j - ABS(Rline[row+2] - Rline[row+1])-5;
                          }
                          else
                          {
                             rightline_start = R_LINE_START;
                          }
                      }
                    else
                        rightline_start = j -5;
                    break;
                 }
              }    
             if(j == 159)
             {
                 if(row < 118)
                 {
                     if((Lline[row+1]-Lline[row+2])> 4 && (Lline[row+1] >100) )
                     {
                        r_complete_lost_flag = 1;
                     }
                     else
                     {
                         rightline_start = (int16)((Rline[row+1] + Lline[row+1])/2.0);
                     }
                 }
             }  
           }
        }
    
        ImgFilter(Lline);
        ImgFilter(Rline);
        //求导
        for(row = 117;row>=0;row--)
        {
            l_First_derivative[row] = (Lline[row+2] - Lline[row])/2.0;
            r_First_derivative[row] = (Rline[row+2] - Rline[row])/2.0;
        }
        
        //跳变点判断
        for(row = 115; row>=0;row--)
        {
            l_average[row] = calculation_average(l_First_derivative[row+2],l_First_derivative[row+1],l_First_derivative[row]);   //计算平均值
            
            l_variance[row] = calculation_variance(l_First_derivative[row+2],l_First_derivative[row+1],l_First_derivative[row],l_average[row]);    //计算方差
            if(l_variance[row] > VARIANCE_THRESHOLD)
            {
                if(left_jump_point == 0 )
                {
                    left_jump_point = row+2;
                }
                if(l_variance[row+1] < VARIANCE_THRESHOLD && l_jump_count < 5)
                {
                    l_jump_point[l_jump_count] = row + 2;
//                    mexPrintf("l_jump_point[%d] = %d\n",l_jump_count,l_jump_point[l_jump_count]);
                    l_jump_count ++ ;
                }
//                 mexPrintf("l_jump_point = %d\n",left_jump_point);
            }
            r_average[row] = calculation_average(r_First_derivative[row+2],r_First_derivative[row+1],r_First_derivative[row]);   //计算平均值
            r_variance[row] = calculation_variance(r_First_derivative[row+2],r_First_derivative[row+1],r_First_derivative[row],r_average[row]);   //计算方差
            if(r_variance[row] > VARIANCE_THRESHOLD)
            {
                if(right_jump_point ==0)
                {
                    right_jump_point = row+2; 
                }
                if(r_variance[row+1] < VARIANCE_THRESHOLD && r_jump_count < 5)
                {
                    r_jump_point[r_jump_count] = row + 2;
//                    mexPrintf("r_jump_point[%d] = %d\n",r_jump_count,r_jump_point[r_jump_count]);
                    r_jump_count ++ ;
                }
//                  mexPrintf("r_jump_point = %d\n",right_jump_point);
            }
        }

        if(nomal_track_flag == 1)
        {   
            //左斜入十字
            if(right_jump_point && (right_jump_point > left_jump_point))    //左斜入十字 右跳变存在且大于左跳变
            {
                for(row = 115;row > right_jump_point ; row --)
                {
                    if(((l_First_derivative[row+2]*l_First_derivative[row-2])<0))
                    {
                        if(l_cross_turn_point == 0)
                        {
                            l_cross_turn_point = row;
                            break;      //找到拐点跳出循环
                        }
                    }
                }
                if(l_cross_turn_point != 0)     //找到拐点
                {  
//                      mexPrintf("l_cross_turn_point%d\n",l_cross_turn_point);
                     if(l_diagonally_flag == 1)
                    {
                        for(row = l_cross_turn_point ; row >=right_jump_point;row--)
                        {
                            if(Rline[row] != 159)   //左拐点到右跳变    右边丢线
                            {
                                l_diagonally_flag = 0 ;
                            }
                        }
                    }
                     
                     if(Rline[119] == 159 && Rline[118] ==159 && Rline[117] ==159 && l_diagonally_flag)
                     {
                        for(row = 116 ; row > right_jump_point ; row--)
                        {
                            if(Rline[row] != 159)
                            {    
                                 l_diagonally_flag  = 0 ;
                                 break;
                            }
                        }
                     }
                     else
                     {
                            for(row = 117 ; row >= l_cross_turn_point ;row --)    //拐点之前 左右斜率乘积
                            {
                                if((l_First_derivative[row] * r_First_derivative [row] )>1.0)
                                {
                                     l_diagonally_flag  = 0 ;
                                }
                            }     
                     }
                     
                    if(l_diagonally_flag == 1)
                    {
                        for(row = l_cross_turn_point ; row >=0; row--)
                        {
                            Lline[row] = 0; 
                        }
                        for(row = right_jump_point - 1 ; row >0 ;row --)
                        {
                             leftline_start = Rline[right_jump_point - 3];
                             for(i = 157;i > leftline_start;i --)     //从左跳变找右线
                             {
                                    if((img_handle[row][i+2]+img_handle[row][i+1]) == 510 && (img_handle[row][i] + img_handle[row][i-1]) == 0)
                                     {
                                        Lline[row] = i ;
                                        break;
                                     }
                             }
                        }
                        
                        if(Lline[right_jump_point-2] != 0)
                        {
                            for(row = right_jump_point + 1; row > 0; row --)
                            {
                                Rline[row] = 159;
                            }
                            ImgFilter_range(right_jump_point - 1,0,Lline);
                            matchline(l_cross_turn_point+3,right_jump_point-3,Lline);
                            nomal_track_flag =0 ;
                        }
                    }
                }
            }
         
            //右斜入十字
            if(left_jump_point && (left_jump_point > right_jump_point))   //右斜入十字  左跳变存在且大于右跳变
            { 
                for(row = 115;row > left_jump_point ; row --)
                {
                    if((r_First_derivative[row+2]*r_First_derivative[row-2])<0)
                    {
                       if(r_cross_turn_point ==0)
                        {
                            r_cross_turn_point = row;
                            break;      //找到拐点跳出循环
                        }
                    }         
                }
                if(r_cross_turn_point != 0)     //找到拐点
                {
                    if(r_diagonally_flag == 1)
                    {
                        for(row = r_cross_turn_point ; row >=left_jump_point;row --)
                        {
                            if(Lline[row] != 0)   //右拐点到左跳变    左边丢线
                            {
                                r_diagonally_flag = 0 ;
                            }
                        }
                    }
    
                    if(Lline[119] == 0 && Lline[118] ==0 && Lline[117] == 0 && r_diagonally_flag)
                    {
                        for(row = 116 ; row > left_jump_point ; row--)
                        {
                            if(Lline[row] != 0)
                            {    
                                 r_diagonally_flag  = 0 ;
                                 break;
                            }
                        }
                    }
                    else
                    {
                        for(row = 117 ; row >= r_cross_turn_point ;row --)    //拐点之前 左右斜率乘积
                        {
                            if((l_First_derivative[row] * r_First_derivative [row] )>1.0)
                            {
                                 r_diagonally_flag  = 0 ;
                            }
                        }            
                    }
                    if(r_diagonally_flag == 1)      
                    { 
                         for(row = r_cross_turn_point ; row >=0; row--)
                        {
                            Rline[row] = 159; 
                        }
                        for(row = left_jump_point - 1 ; row >0 ;row --)
                        {
                             rightline_start = Lline[left_jump_point - 3];
                             for(j = 2;j < rightline_start;j ++)     //从左跳变找右线
                             {
                                     if((img_handle[row][j-2] + img_handle[row][j-1]) == 510 && (img_handle[row][j] + img_handle[row][j+1]) == 0)
                                     {
                                        Rline[row] = j ;
                                        break;
                                     }
                             }
                        }
                        if(Rline[left_jump_point - 2] != 159)
                        {
                            for(row = left_jump_point +1 ; row>0 ;row --)
                            {
                                Lline[row] = 0;
                            }
                          ImgFilter_range(left_jump_point - 1,0,Rline);
                          matchline(r_cross_turn_point+3 ,left_jump_point - 3,Rline);  //两点连线
                          nomal_track_flag = 0 ;
                        }
                    }
                }
            }
        }
        
        if(left_jump_point && right_jump_point && ABS(left_jump_point - right_jump_point)<16 && nomal_track_flag==1)       //正入十字
        {
            if(l_jump_count >= r_jump_count)
                min_jump_count = r_jump_count;
            else
                min_jump_count = l_jump_count;
            if(left_jump_point<115 && left_jump_point > 20)
               {
                    for(row = left_jump_point+2 ;row > left_jump_point-3;row--)
                    {
                        if(Lline[row+3] == 0&& Lline[row+2] ==0 && Lline[row+1] ==0 &&Lline[row-1]!=0 && Lline[row-2]!=0 && Lline[row-3] !=0 )
                        {
                            left_status  = 1;
                            break;
                        } 
                        else if(Lline[row+3] != 0&& Lline[row+2] !=0 && Lline[row+1] !=0 &&Lline[row-1]==0 && Lline[row-2]==0 && Lline[row-3] ==0)
                        {
                           left_status = 2;
                            break;
                        }
                    }
               }
               if(right_jump_point <115 && right_jump_point > 20)
               {
                    for(row = right_jump_point+2 ; row > right_jump_point-3;row--)
                    {
                        if(Rline[row+3]==159 && Rline[row+2]==159 && Rline[row+1]==159 && Rline[row-1]!=159 && Rline[row-2]!=159 && Rline[row-3]!=159)
                        {
                            right_status = 1;
                            break;
                        }
                        else if(Rline[row+3]!=159 && Rline[row+2]!=159 && Rline[row+1]!=159 && Rline[row-1]==159 && Rline[row-2]==159 && Rline[row-3]==159)
                        {
                            right_status = 2;
                            break; 
                        }
                    }
               }
             if(l_jump_count==1 && r_jump_count ==1)        //左右都只有一个跳变点
             {
                   if( left_status == right_status)
                   {
                       nomal_track_flag = 0;
                       if( left_status == 1 )
                       {
                           if(left_jump_point >= right_jump_point)
                           {
                                range_derivative = ComSlope_Range(left_jump_point,0,l_First_derivative);
                                Track_complexity =   (int16)(range_derivative * range_derivative *10);
                                Prospect_See = 0;
                           }
                           else
                           {
                                range_derivative = ComSlope_Range(right_jump_point,0,r_First_derivative);
                                Track_complexity =   (int16)(range_derivative * range_derivative *10);
                                Prospect_See = 0;
                           }
                       }
                       else if(left_status == 2)
                       {
                           if(left_jump_point >= right_jump_point)
                           {
                                range_derivative = ComSlope_Range(117,right_jump_point,r_First_derivative);
                                Track_complexity =   (int16)(range_derivative * range_derivative *10);
                                Prospect_See = 0;
                           }
                           else
                           {
                               range_derivative = ComSlope_Range(117,left_jump_point,l_First_derivative);
                                Track_complexity =   (int16)(range_derivative * range_derivative *10);
                                Prospect_See = 0;
                           }  
                       }
                   }
                   if(left_jump_point > right_jump_point)//跳变点间滤波
                   {
                        for(row=left_jump_point;row<right_jump_point;row--)
                        {
                            Lline[row] = 0;
                            Rline[row] = 159;
                        } 
                   }
                   else if(left_jump_point < right_jump_point)
                   {
                        for(row=right_jump_point;row<left_jump_point;row--)
                        {
                            Lline[row] = 0;
                            Rline[row] = 159;
                        }
                   }
            }
             else if(min_jump_count == 1 || min_jump_count == 2)
             {
                if(left_status == right_status)
                {
                    nomal_track_flag = 0;
                    if(left_status == 1)
                    {
                        if(l_jump_point[1] >= r_jump_point[1])
                        {
                            range_derivative = ComSlope_Range(r_jump_point[0],r_jump_point[1],r_First_derivative);
                            Track_complexity =   (int16)(range_derivative * range_derivative *10);
                            Prospect_See = r_jump_point[1];
                        }
                        else
                        {
                            range_derivative = ComSlope_Range(l_jump_point[0],l_jump_point[1],l_First_derivative);
                            Track_complexity =  (int16)(range_derivative * range_derivative *10);
                            Prospect_See = l_jump_point[1];
                        }
                        if(left_jump_point > right_jump_point)//跳变点间滤波
                       {
                            for(row=left_jump_point;row<right_jump_point;row--)
                            {
                                Lline[row] = 0;
                                Rline[row] = 159;
                            } 
                       }
                       else if(left_jump_point < right_jump_point)
                       {
                            for(row=right_jump_point;row>left_jump_point;row--)
                            {
                                Lline[row] = 0;
                                Rline[row] = 159;
                            }
                       }
                    }
                    else if(left_status == 2)
                    {
                        if(left_jump_point >= right_jump_point)
                        {
                            range_derivative = ComSlope_Range(r_jump_point[0],r_jump_point[1],r_First_derivative);
                            Track_complexity =   (int16)(range_derivative * range_derivative *10);
                            Prospect_See = 0;
                        }
                        else
                        {
                            range_derivative = ComSlope_Range(l_jump_point[0],l_jump_point[1],l_First_derivative);
                            Track_complexity =   (int16)(range_derivative * range_derivative *10);
                            Prospect_See = 0;
                        }
                        if(left_jump_point > right_jump_point)//跳变点间滤波
                        {
                            Fjump_end = MIN(l_jump_point[1],r_jump_point[1]);
                            for(row=left_jump_point;row> Fjump_end;row--)
                            {
                                Lline[row] = 0;
                                Rline[row] = 159;
                            } 
                        }
                        else if(right_jump_point > left_jump_point)
                        {
                            Fjump_end = MIN(l_jump_point[1],r_jump_point[1]);
                            for(row=right_jump_point;row>Fjump_end;row--)
                            {
                                Lline[row] = 0;
                                Rline[row] = 159;
                            }
                        }
                    }
                    if(left_status == 1)//前丢线后弯道
                    {
                         //十字后端补线
                        left_jump_point1 = l_jump_point[1];
                        right_jump_point1 = r_jump_point[1];
                        if(left_jump_point1)
                        {
                            for(row = left_jump_point1;row>=0;row--)
                            {
                                Lline[row] = 0;
                            }
                        }
                        if(right_jump_point1)
                        {
                            for(row = right_jump_point1; row >= 0 ;row--)
                            {
                                Rline[row] = 159;
                            }
                        }
                        if(left_jump_point1 && Lline[left_jump_point1+1] != 0 && Lline[left_jump_point1+2] !=0)
                       {
                            l_jump_derivative = Lline[left_jump_point1+1] - Lline[left_jump_point1+2];
                            for(row = left_jump_point1;row>=0;row--)
                            {
                                 Lline[row] = Lline[row+1] + l_jump_derivative;
                            }
                       }
                       if(right_jump_point1 && Rline[right_jump_point1+1] !=159 && Rline[right_jump_point1+2] !=159)
                       {
                            r_jump_derivative = Rline[right_jump_point1+1] - Rline[right_jump_point1+2];
                            for(row = right_jump_point1;row>=0;row--)
                            {
                                Rline[row] = Rline[row+1] + r_jump_derivative;
                            }
                       }//后端补线
                    }
                }
             }
             else if(min_jump_count > 2)
             {
                if(left_status == 2 && right_status == 2)
                {
                    nomal_track_flag = 0;
                    if(min_jump_count == 3)
                    {
                        if(l_jump_point[2] >= r_jump_point[2])
                        {
                            range_derivative = ComSlope_Range(l_jump_point[1],l_jump_point[2],l_First_derivative);
                            Track_complexity =   (int16)(range_derivative * range_derivative *10);
                            Prospect_See = r_jump_point[2];
                        }
                        else 
                        {
                            range_derivative = ComSlope_Range(r_jump_point[1],r_jump_point[2],r_First_derivative);
                            Track_complexity =   (int16)(range_derivative * range_derivative *10);
                            Prospect_See = l_jump_point[2];
                        }
                         //十字后端补线
                        left_jump_point2 = l_jump_point[2];
                        right_jump_point2 = r_jump_point[2];
                        if(left_jump_point2)
                        {
                            for(row = left_jump_point2;row>=0;row--)
                            {
                                Lline[row] = 0;
                            }
                        }
                        if(right_jump_point2)
                        {
                            for(row = right_jump_point2; row >= 0 ;row--)
                            {
                                Rline[row] = 159;
                            }
                        }
                        if(left_jump_point2 && Lline[left_jump_point2+1] != 0 && Lline[left_jump_point2+2] !=0)
                       {
                            l_jump_derivative = Lline[left_jump_point2+1] - Lline[left_jump_point2+2];
                            for(row = left_jump_point2;row>=0;row--)
                            {
                                 Lline[row] = Lline[row+1] + l_jump_derivative;
                            }
                       }
                       if(right_jump_point2 && Rline[right_jump_point2+1] !=159 && Rline[right_jump_point2+2] !=159)
                       {
                            r_jump_derivative = Rline[right_jump_point2+1] - Rline[right_jump_point2+2];
                            for(row = right_jump_point2;row>=0;row--)
                            {
                                Rline[row] = Rline[row+1] + r_jump_derivative;
                            }
                       }//后端补线
                    }
                    
                }
                 if(left_jump_point > right_jump_point)//跳变点间滤波
                {
                    Fjump_end = MIN(l_jump_point[1],r_jump_point[1]);
                    for(row=left_jump_point;row>Fjump_end;row--)
                    {
                        Lline[row] = 0;
                        Rline[row] = 159;
                    }
                }
                else if(right_jump_point > left_jump_point)
                {
                    Fjump_end = MIN(l_jump_point[1],r_jump_point[1]);
                    for(row=right_jump_point;row>Fjump_end;row--)
                    {
                        Lline[row] = 0;
                        Rline[row] = 159;
                    }
                }
             }
        }
          
          if(nomal_track_flag  == 1 && (left_jump_point < 80 || right_jump_point <80))  //如果为正常赛道(弯道)则利用赛道边缘最后一个点的斜率对赛道进行补线
           { 
                if(left_jump_point)
                {
                    for(row = left_jump_point;row>=0;row--)
                    {
                        Lline[row] = 0;
                    }
                }
                if(right_jump_point)
                {
                    for(row = right_jump_point; row >= 0 ;row--)
                    {
                        Rline[row] = 159;
                    }
                }
                if(left_jump_point && Lline[left_jump_point+1] != 0 && Lline[left_jump_point+2] !=0)
               {
                    l_jump_derivative = Lline[left_jump_point+1] - Lline[left_jump_point+2];
                    for(row = left_jump_point;row>=0;row--)
                    {
                         Lline[row] = Lline[row+1] + l_jump_derivative;
                    }
               }
               if(right_jump_point && Rline[right_jump_point+1] !=159 && Rline[right_jump_point+2] !=159)
               {
                    r_jump_derivative = Rline[right_jump_point+1] - Rline[right_jump_point+2];
                    for(row = right_jump_point;row>=0;row--)
                    {
                        Rline[row] = Rline[row+1] + r_jump_derivative;
                    }
               }
           }
        
         for(row = 119 ; row >= 0; row --)
           {
                if(Lline[row] !=0 && Rline[row] != 159)
                {
                    Mline[row] = (Lline[row] + Rline[row])/2.0 ;
                } 
                if(Lline[row] != 0 && Rline[row] == 159)
                {
                    Mline[row] = (Lline[row] + 72.0);
                }
                if(Lline[row] ==0 && Rline[row] != 159)
                {
                    Mline[row] = (Rline[row] - 72.0);
                }
           }
        
        Imgfilter_Mline(Mline);
          
       if(nomal_track_flag == 1)
        {  
             if(left_jump_point || right_jump_point)
             {
                if(left_jump_point > right_jump_point)
                 {
                    range_derivative = Slope_Range(left_jump_point,l_First_derivative);
                    Track_complexity =  (int16)(range_derivative * range_derivative *10);
                 }
                else
                {
                    range_derivative = Slope_Range(right_jump_point,r_First_derivative);
                    Track_complexity =   (int16)(range_derivative * range_derivative *10);
                }
             }
             else 
             {      
                    range_derivative =  ABS(Slope_Range(0,l_First_derivative) - Slope_Range(0,r_First_derivative));
                    Track_complexity  =  (int16)(range_derivative * range_derivative *10);
             }
             if(left_jump_point && right_jump_point)
             {
                Prospect_See = MIN(left_jump_point,right_jump_point);
             }
             else
             {
                 if(left_jump_point || right_jump_point)
                    Prospect_See = MAX(left_jump_point,right_jump_point);
                 else
                    Prospect_See = 0;
             }
        }
        camer_error_calculation();


}
Exemplo n.º 4
0
/* Reads one entry from file. Returns entry or NULL on error. */
struct entry*
read_entry(FILE* in, const char* name, int *lineno, uint32_t* default_ttl, 
	ldns_rdf** origin, ldns_rdf** prev_rr)
{
	struct entry* current = NULL;
	char line[MAX_LINE];
	char* parse;
	ldns_pkt_section add_section = LDNS_SECTION_QUESTION;
	struct reply_packet *cur_reply = NULL;
	bool reading_hex = false;
	ldns_buffer* hex_data_buffer = NULL;

	while(fgets(line, (int)sizeof(line), in) != NULL) {
		line[MAX_LINE-1] = 0;
		parse = line;
		(*lineno) ++;
		
		while(isspace((int)*parse))
			parse++;
		/* test for keywords */
		if(isendline(*parse))
			continue; /* skip comment and empty lines */
		if(str_keyword(&parse, "ENTRY_BEGIN")) {
			if(current) {
				error("%s line %d: previous entry does not ENTRY_END", 
					name, *lineno);
			}
			current = new_entry();
			current->lineno = *lineno;
			cur_reply = entry_add_reply(current);
			continue;
		} else if(str_keyword(&parse, "$ORIGIN")) {
			get_origin(name, *lineno, origin, parse);
			continue;
		} else if(str_keyword(&parse, "$TTL")) {
			*default_ttl = (uint32_t)atoi(parse);
			continue;
		}

		/* working inside an entry */
		if(!current) {
			error("%s line %d: expected ENTRY_BEGIN but got %s", 
				name, *lineno, line);
		}
		if(str_keyword(&parse, "MATCH")) {
			matchline(parse, current);
		} else if(str_keyword(&parse, "REPLY")) {
			replyline(parse, cur_reply->reply);
		} else if(str_keyword(&parse, "ADJUST")) {
			adjustline(parse, current, cur_reply);
		} else if(str_keyword(&parse, "EXTRA_PACKET")) {
			cur_reply = entry_add_reply(current);
		} else if(str_keyword(&parse, "SECTION")) {
			if(str_keyword(&parse, "QUESTION"))
				add_section = LDNS_SECTION_QUESTION;
			else if(str_keyword(&parse, "ANSWER"))
				add_section = LDNS_SECTION_ANSWER;
			else if(str_keyword(&parse, "AUTHORITY"))
				add_section = LDNS_SECTION_AUTHORITY;
			else if(str_keyword(&parse, "ADDITIONAL"))
				add_section = LDNS_SECTION_ADDITIONAL;
			else error("%s line %d: bad section %s", name, *lineno, parse);
		} else if(str_keyword(&parse, "HEX_ANSWER_BEGIN")) {
			hex_data_buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN);
			reading_hex = true;
		} else if(str_keyword(&parse, "HEX_ANSWER_END")) {
			if (!reading_hex) {
				error("%s line %d: HEX_ANSWER_END read but no HEX_ANSWER_BEGIN keyword seen", name, *lineno);
			}
			reading_hex = false;
			cur_reply->reply_from_hex = data_buffer2wire(hex_data_buffer);
			ldns_buffer_free(hex_data_buffer);
		} else if(str_keyword(&parse, "ENTRY_END")) {
			return current;
		} else if(reading_hex) {
			ldns_buffer_printf(hex_data_buffer, line);
		} else {
			/* it must be a RR, parse and add to packet. */
			ldns_rr* n = NULL;
			ldns_status status;
			if(add_section == LDNS_SECTION_QUESTION)
				status = ldns_rr_new_question_frm_str(
					&n, parse, *origin, prev_rr);
			else status = ldns_rr_new_frm_str(&n, parse, 
				*default_ttl, *origin, prev_rr);
			if(status != LDNS_STATUS_OK)
				error("%s line %d:\n\t%s: %s", name, *lineno,
					ldns_get_errorstr_by_id(status), parse);
			ldns_pkt_push_rr(cur_reply->reply, add_section, n);
		}

	}
	if (reading_hex) {
		error("%s: End of file reached while still reading hex, "
			"missing HEX_ANSWER_END\n", name);
	}
	if(current) {
		error("%s: End of file reached while reading entry. "
			"missing ENTRY_END\n", name);
	}
	return 0;
}