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

📄 myprogram.txt

📁 自己写的nandflash文件系统源代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
//-----------------------------------------------------------------------------------------------------
 
tmErrorCode_t GetDrawableInfo(tmSWVersion_t *pVersion,tmPowerState_t *pState)
{
	tmErrorCode_t errcode;

	if(TM_OK != (errcode = tmhwDrawGetPowerState(pState)))
		return errcode;
	if(TM_OK != (errcode = tmhwDrawGetSWVersion (pVersion)))
		return errcode;
}

//----------------------------------------------------------------------------------------------------
//函数名:clearBox
//输  入:pDraw,box,pColor
//输  出: TM_OK 或错误号
//完成人: nxf
//完成日期: 2005-5-25
//描  述: 清除某一给定矩形区域
//参数说明:box - 矩形区域  pColor -颜色
//-----------------------------------------------------------------------------------------------------
tmErrorCode_t clearBox(
    tmhwDrawable_t *pDst,       //  I: -> our drawable
    tmhwUnkColor_t color,       //  I: color to which to clear
    tmRect_t box                //  I: rectangle to clear
)
{
    tmErrorCode_t errcode;
    static const tmhwDrawFillFlags_t fillFlags =
    {
        tmhwDrawRop2CopyPen,    // rop2
        tmhwDrawCmpOpNone,      // compareOp
        FALSE                   // sync
    };

    if (
        TM_OK != (
            errcode = tmhwDrawFill(
                pDst,
                &box,
                1,
                color,
                fillFlags
            )
        )
    )
    {
			#ifdef PRNT_ERRINFO
			  myprintf("Clear Box failed.\n");
      #endif
			return errcode;
    }
	 return errcode;
} 

//----------------------------------------------------------------------------------------------------
//函数名:DrawableFill
//输  入:pDraw,rect,pColor
//输  出: TM_OK 或错误号
//完成人: nxf
//完成日期: 2005-5-25
//描  述: 填充某一给定矩形区域
//参数说明:rect - 矩形区域  pColor -颜色
//-----------------------------------------------------------------------------------------------------
tmErrorCode_t DrawableFill( 
													  tmhwDrawable_t *pDraw,    
														tmhwUnkColor_t pColour, 
                            tmRect_t rect              
)
{
  tmErrorCode_t errcode;

	if(!InitFlg)
		{
		  myprintf("Drawable hasn't been initialized.\n"); 
			return TMHW_ERR_DRAW_NO_DEVICE_OK;
		}
	else
		{
			static const tmhwDrawFillFlags_t fillFlags =
			{
        tmhwDrawRop2CopyPen,    
        tmhwDrawCmpOpNone,      
        FALSE                 
			};
			tmhwUnkColor_t color;
	   if(rect.ul.x <0 || rect.lr.x <0 || rect.ul.y <0 || rect.lr.y <0 || \
				 rect.ul.x > pDraw->shape.x || rect.ul.y > pDraw->shape.y || \
		     rect.lr.x > pDraw->shape.x || rect.lr.y > pDraw->shape.y  
	   )
		 {
				#ifdef PRNT_ERRINFO
		      myprintf("The Rect to be filled out of range.\n"); 
				#endif
	    	return TMHW_ERR_DRAW_BAD_RECTS;  
		 }
		  //myprintf("now clearbox..\n");
		//	clearBox(pDraw, PCOLOR(0,0,0), fillarea);
     // myprintf("clearbox finished.\n");
		 
        if (
            TM_OK != (
                errcode = tmhwDrawFill(
                    pScreen,
                    &rect,  
                    1,
                    pColour,
                    fillFlags
                )
             )
         )
				{
          #ifdef PRNT_ERRINFO
            myprintf("Fill Rectangle failed.err=%s\n",errcode);
          #endif
					return errcode;
        }//if
      return errcode;
		}//else
}//DrawableFill()

//----------------------------------------------------------------------------------------------------
//函数名:DrawableLine
//输  入:pDraw,startXY,endXY,pColor
//输  出: TM_OK 或错误号
//完成人: nxf
//完成日期: 2005-5-25
//描  述: 画某一给定直线
//参数说明:startXY - 直线起点坐标 endXY - 直线终点坐标 pColor -颜色
//-----------------------------------------------------------------------------------------------------
tmErrorCode_t DrawableLine(
    tmhwDrawable_t *pDst,       //  I: -> our drawable
    tmXY_t startXY,            //  I: rectangle in which we test
    tmXY_t endXY,             //  I: # cycles of swirl
    tmhwUnkColor_t pColor        //  I: -> palette in which to look up colors
)
{
	Int32 b0, b1, bE;
  UInt32 nPixels;
	tmXY_t dXY;
  UInt32 dMin, dMax, t;
	tmErrorCode_t errcode;

  static const tmhwDrawLineFlags_t kLineFlags =
  {
      tmhwDrawRop2CopyPen,    // rop2
      0,                      // octant; filled in by code
      tmhwDrawCmpOpNone,      // compareOp
      FALSE                   // sync
  }; 
	tmhwDrawLineFlags_t flags;
	flags = kLineFlags;

	dXY.x = endXY.x - startXY.x;
	dXY.y = endXY.y - startXY.y;
	if (dXY.x > 0)
	{
		flags.octant = 0;
		dMax = dXY.x;
	}
	else
	{
		flags.octant = 3;
		dMax = -dXY.x;
	}
	if (dXY.y > 0)
	{
		dMin = dXY.y;
	}
	else
	{
		flags.octant ^= 7;
		dMin = -dXY.y;
	}
	if (dMin > dMax)
	{
		t = dMax;
		dMax = dMin;
		dMin = t;
		flags.octant ^= 1;
	}
	nPixels = dMax;


	b0 = (dMin - dMax) << 1;
	b1 = dMin << 1;
	bE = (dMin << 1) - dMax;// + fudge[flags.octant];
	if(TM_OK!=(errcode=tmhwDrawLine(
	pDst, // dst drawable
	startXY, // start drawing here
	nPixels+1, // number of pixels to draw
	pColor, // pixel drawing color
	b0, // b0: diagonal step incr
	b1, // b1: axial step incr
	bE, // bE: initial error term
	flags // rop, octant, cc, sync
	)))
	{
     #ifdef PRNT_ERRINFO
        myprintf("Draw line failed.err=%s\n",errcode);
     #endif
		 return errcode;
	}

return errcode;

}
//----------------------------------------------------------------------------------------------------
//函数名:DrawableSetPixel
//输  入:pDraw,pixelXY,pColor
//输  出: TM_OK 或错误号
//完成人: nxf
//完成日期: 2005-5-25
//描  述: 画某一给定坐标点
//参数说明:pixelXY - 待画点坐标  pColor -颜色
//-----------------------------------------------------------------------------------------------------
tmErrorCode_t DrawableSetPixel(
    tmhwDrawable_t *pDraw,        
    tmXY_t pixelXY,            
    tmhwUnkColor_t pColor       
)
{
	tmErrorCode_t errcode;

	static const tmXY_t pstart =
{
	0,0
};

static const tmXY_t pend =
{
	0,1
};
  static const tmhwDrawLineFlags_t kLineFlags =
  {
      tmhwDrawRop2CopyPen,    // rop2
      0,                      // octant; filled in by code
      tmhwDrawCmpOpNone,      // compareOp
      FALSE                  // sync
  }; 
	tmhwUnkColor_t clr;
	tmhwDrawLineFlags_t flags;
	flags = kLineFlags;
	flags.octant = 4;
  clr = 0x00;
  if(TM_OK !=(errcode = DrawableLine(pScreen,pstart,pend,clr)))
	{
		 #ifdef PRNT_ERRINFO
        myprintf("SetPixel Preprocessing failed.err=%d\n",errcode);
     #endif
		 return errcode;
	}
	if(TM_OK!=(errcode=tmhwDrawLine(
		pDraw, 
		pixelXY, 
		1, 
		pColor, 
		0, 
		0, 
		0, 
		flags ) )
	)
	{
     #ifdef PRNT_ERRINFO
        myprintf("SetPixel failed.err=%d\n",errcode);
     #endif
		 return errcode;
	}

return errcode;

}

//-----------------------------------------------------------------------------------------------------
//函数名:SetFgBgColors
//输  入:pDraw,fgColor,bgColor
//输  出: TM_OK 或错误号
//完成人: nxf
//完成日期: 2005-5-25
//描  述: 设置屏幕的前景和背景颜色
//参数说明:fgColor - 前景色  bgColor -背景色
//-----------------------------------------------------------------------------------------------------
tmErrorCode_t SetFgBgColors(
														tmhwDrawable_t *pDraw,
                            tmhwUnkColor_t fgColor,
                            tmhwUnkColor_t bgColor)
{
	tmErrorCode_t errcode;

   if(!InitFlg)
	 {
      #ifdef PRNT_ERRINFO
		    myprintf("Drawable hasn't been initilazed.\n");
      #endif
			return ERR_RETURN; 
	 }
   if(TM_OK !=(errcode = tmhwDrawSetFgBgColors(pDraw,fgColor,bgColor)))
	 {
      #ifdef PRNT_ERRINFO
		    myprintf("Drawable hasn't been initilazed.\n");
      #endif
			return errcode;
	 }
	 return errcode;
}
//------------------------------------------------------------------------------------------------------
//函数名: PlotPoints
//输  入: pDraw,xcenter,ycenter,x,y,pColor,octant
//输  出: 无
//完成人: nxf
//完成日期: 2005-5-26
//描  述: 完成给定坐标点的绘画
//参数说明:(xcenter,ycenter)-图形中心原点。octant - 坐标象限。
//------------------------------------------------------------------------------------------------------
void PlotPoints (tmhwDrawable_t *pDraw,int xcenter, int ycenter, int x, int 
y,tmhwUnkColor_t pColor,int octant)
{
		static tmXY_t dotXY =
	{
		0,0
	};
		switch(octant)
		{
		case 0:  //四个象限
			{
         dotXY.x = xcenter + x;
         dotXY.y = ycenter + y;
         DrawableSetPixel(pDraw,dotXY,pColor);
				 dotXY.x = xcenter - x;
         dotXY.y = ycenter + y;										 
         DrawableSetPixel(pDraw,dotXY,pColor);
				 dotXY.x = xcenter + x;
         dotXY.y = ycenter - y;	
         DrawableSetPixel(pDraw,dotXY,pColor);
				 dotXY.x = xcenter - x;
         dotXY.y = ycenter - y;	
         DrawableSetPixel(pDraw,dotXY,pColor);
				 break;
			}
		case 1: //仅第一象限
			{
         dotXY.x = xcenter + x;
         dotXY.y = ycenter + y;
         DrawableSetPixel(pDraw,dotXY,pColor);
				 break;
			}
		case 2://仅第二象限
			{
			   dotXY.x = xcenter - x;
         dotXY.y = ycenter + y;										 
         DrawableSetPixel(pDraw,dotXY,pColor);
				 break;
      }   
		case 3://仅第三象限
			{
				 dotXY.x = xcenter - x;
         dotXY.y = ycenter - y;	
         DrawableSetPixel(pDraw,dotXY,pColor);
				 break;
			}
		case 4://仅第四象限
			{
				 dotXY.x = xcenter + x;
         dotXY.y = ycenter - y;	
         DrawableSetPixel(pDraw,dotXY,pColor);
				 break;
      }
		default:
			{
         #ifdef PRNT_ERRINFO
           myprintf("octant is wrong.\n");
         #endif
			}
		};
}



//--------------------------------------------------------------------------------------------------
//函数名: DrawableArc
//输  入: pDraw,xcenter,ycenter,rx,ry,pclr,octant,startx,endx,width
//输  出: SUCCESS_RETURN 或  ERR_RETURN
//完成人: nxf
//完成日期: 2005-5-26
//描  述: 完成任意指定宽度弧线的绘画,圆、椭圆、弧线段等,以及完成图形的填充功能。
//参数说明:
//(xcenter,ycenter)-坐标原点。rx - 横半径,ry - 纵半径.
//octant  - 象限的指定值。 0:四个象限都选中,1:仅第一象限,...4:仅第四象限.
//posy    - 开始点y坐标值。开始点为(startx,starty).其中starty=(int)posy
//posendy - 终止点y坐标值。终止点为(endx,endy).其中endy=(int)posendy
//--------------------------------------------------------------------------------------------------
int DrawableArc(tmhwDrawable_t *pDraw,int xcenter, int ycenter, int rx, int 
ry,tmhwUnkColor_t pclr,int octant,int startx,int endx,int width) 
 {
	  int i,x,starty,endy;
		int tmp_y;
		int min_x=0;
		float posy,posendy;
   

		int rx2 = rx * rx;
    int ry2 = ry * ry;
    int tworx2 = 2 * rx2;
    int twory2 = 2 * ry2;
    int p,p2;
    int y = ry;
    int px = 0;
    int py = tworx2 * y;
		if(startx < 0 || endx < 0  || startx > rx || \
			startx > endx || width < 0 || width > ry) 
		{
       #ifdef PRNT_ERRINFO
           myprintf("parameter statx or width is wrong.\n");
       #endif			 
			 return ERR_RETURN;
		}
		//=======开始及终止点Y坐标的计算==================================
 		posy  = sqrt((rx*rx*ry*ry - ry*ry*startx*startx)/(rx*rx));
 		starty = (int)posy;

		posendy= sqrt((rx*rx*ry*ry - ry*ry*endx*endx)/(rx*rx));
		endy = (int)posendy;
    //================================================================
    x = startx;
		y = starty;
		min_x = rx;   //计算x方向上的最小值,用于环形椭圆
		tmp_y = y;   //保存y值
		for( i = 1; i <= width && y >0; i++)  //宽度处理
		{
      PlotPoints(pDraw,xcenter, ycenter, x, y--,pclr,octant); 
			if(!y)
			{
        if(x < min_x)
					  min_x =x;
			}
		}
		y = tmp_y;    //恢复y
    p =  ry2 - (rx2 * ry) + (0.25 * rx2);
    while (ry2*(x+1) < rx2*(y-0.5)) //画上半部分
    {
      if (p<0)
			{
			    p +=ry2*(2*x+3); 
					x++; 
			}
		  else  
			{  
				 p +=(ry2*(2*x+3)+rx2*(-2*y+2));
			   x++; 
				 y--;	
			} 
			tmp_y = y; //保存y值
			for( i = 1; i <= width && y >0; i++)  //宽度处理
			{
				PlotPoints(pDraw,xcenter, ycenter, x, y--,pclr,octant);
				if(!y)
				{
					 if(x < min_x)
					    min_x =x;
				}
			}	
			y = tmp_y;
		}
		p2 =  ry2*(x+0.5)*(x+0.5) + rx2*(y-1)*(y-1) - rx2*ry2; //下半部分,初始化p2
    while (y >= endy)
    {
      if (p2 <0) 
			{ 
				p2 +=ry2*(2*x+2)+rx2*(-2*y+3);

⌨️ 快捷键说明

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