SPAN class=postbody

br /br /Frame buffer의 구조 및 그래픽의 기본적인 각도 계산 및 재귀호출, 베지어곡선의 수학개념을 이해하기 위해서 만들어 본겁니다. br /lilo.conf 에 vga=0x0317 이라는 옵션을 주고 해보세요. br /br //SPAN
TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0
TBODY
TR
TDSPAN class=genmedB코드:/B/SPAN/TD/TR
TR
TD class=codebr //* br /nbsp; Copyright (C) Information Equipment co.,LTD br /nbsp; All rights reserved. br /nbsp; Code by JaeHyuk Cho lt;mailto:minzkn@infoeq.comgt; br /nbsp; CVSTAG=$Header$ br /*/ br /br /#include lt;sys/types.hgt; br /#include lt;sys/select.hgt; br /#include lt;sys/ioctl.hgt; br /#include lt;sys/mman.hgt; br /#include lt;stdio.hgt; br /#include lt;unistd.hgt; br /#include lt;fcntl.hgt; br /#include lt;time.hgt; br /#include lt;math.hgt; br /#include lt;signal.hgt; br /br /#include lt;linux/fb.hgt; br /br /#define DEF_2PI (2.0 * 3.14159265358) br /br /static intnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; g_FB_Handle, g_FB_Cx, g_FB_Cy, g_FB_ScreenSize; br /static struct fb_fix_screeninfonbsp; nbsp;g_FB_FIX; br /static struct fb_var_screeninfonbsp; nbsp;g_FB_VAR; br /static voidnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; *g_FB_Map; br /static void (*DrawPixel)(int, int, int); br /br /volatile int g_break_clock = 0; br /br /static void clock_signal(int s_signal) br /{ br /nbsp;g_break_clock = 1; br /nbsp;(void)signal(s_signal, clock_signal); br /} br /br /static void (clock_load_balance)(void) br /{ br /#if 1 br /nbsp;struct timeval s_timeval = {0l, 1000000l / 100l /* hz */}; br /nbsp;(void)select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, (struct timeval *)(amp;s_timeval)); br /#endif br /} br /br /static void DrawPixel8(int s_Color, int s_x, int s_y) br /{ br /nbsp;*(((unsigned char *)g_FB_Map) + (s_y * g_FB_FIX.line_length) + s_x) = (unsigned char)s_Color; br /} br /br /static void DrawPixel16(int s_Color, int s_x, int s_y) br /{ br /nbsp;*((unsigned short *)(((unsigned char *)g_FB_Map) + (s_y * g_FB_FIX.line_length) + (s_x lt;lt; 1))) = (unsigned short)s_Color; br /} br /br /static void DrawPixel24(int s_Color, int s_x, int s_y) br /{ br /nbsp;unsigned char *s_FB_Ptr = ((unsigned char *)g_FB_Map) + (s_y * g_FB_FIX.line_length) + ((s_x lt;lt; 1) + s_x); br /nbsp;*((unsigned short *)s_FB_Ptr) = (unsigned short)s_Color; br /nbsp;*(s_FB_Ptr + sizeof(unsigned short)) = (unsigned char)(s_Color gt;gt; 16); br /} br /br /static void DrawPixel32(int s_Color, int s_x, int s_y) br /{ br /nbsp;*((unsigned long *)(((unsigned char *)g_FB_Map) + (s_y * g_FB_FIX.line_length) + (s_x lt;lt; 2))) = (unsigned long)s_Color; br /} br /br /static void PinXY(int s_Angle, int *s_x, int *s_y, int s_r) br /{ /* s_To(Grid) : X = s_From(Grid) : s_Current */ br /nbsp;double s_Value = ((DEF_2PI * (double)(s_Angle % 360)) / 360.0); br /nbsp;*(s_x) = (int)(sin(s_Value) * s_r); *(s_y) = (int)(-cos(s_Value) * s_r); br /} br /br /static void __DrawLine__(int s_Color, float s_x1, float s_y1, float s_x2, float s_y2, int s_Level) br /{ /* Call by call level 16 optimize draw line : JaeHyuk algorithm ^^ */ br /nbsp;float s_cx = (s_x1 + s_x2) / 2.0, s_cy = (s_y1 + s_y2) / 2.0; br /nbsp;if(((int)s_x1 == (int)s_x2 amp;amp; (int)s_y1 == (int)s_y2) || s_Level gt; 16)DrawPixel(s_Color, (int)s_cx, (int)s_cy); br /nbsp;else br /nbsp;{ br /nbsp; s_Level++; br /nbsp; __DrawLine__(s_Color, s_x1, s_y1, s_cx, s_cy, s_Level); __DrawLine__(s_Color, s_cx, s_cy, s_x2, s_y2, s_Level); br /nbsp;} br /} br /br /static void DrawLine(int s_Color, int s_x1, int s_y1, int s_x2, int s_y2) br /{ br /nbsp;__DrawLine__(s_Color, (float)s_x1, (float)s_y1, (float)s_x2, (float)s_y2, 0); br /} br /br /static void DrawCircle(int s_Color, int s_x, int s_y, int s_r) br /{ br /nbsp;double s_Pi, s_Grid = 1.0 / ((double)s_r), s_sinX, s_cosY; br /nbsp;for(s_Pi = 0.0;s_Pi lt; (DEF_2PI / 4.0);s_Pi += s_Grid) br /nbsp;{ br /nbsp; s_sinX = sin(s_Pi) * (double)s_r; s_cosY = -cos(s_Pi) * (double)s_r; br /nbsp; DrawPixel(s_Color, (int)(s_x + s_sinX), (int)(s_y + s_cosY)); br /nbsp; DrawPixel(s_Color, (int)(s_x - s_sinX), (int)(s_y + s_cosY)); br /nbsp; DrawPixel(s_Color, (int)(s_x + s_sinX), (int)(s_y - s_cosY)); br /nbsp; DrawPixel(s_Color, (int)(s_x - s_sinX), (int)(s_y - s_cosY)); br /nbsp;} br /} br /br /static void Pin(int s_Color, int s_Angle, int s_Type) br /{ br /nbsp;int s_x1, s_y1, s_x2, s_y2, s_x3, s_y3; br /nbsp;int s_Size; br /nbsp;s_Size = g_FB_ScreenSize gt;gt; 1; br /nbsp;if(s_Type == 0)nbsp; nbsp; nbsp; nbsp;s_Size -= ((g_FB_ScreenSize gt;gt; 1) gt;gt; 3); br /nbsp;else if(s_Type == 10) s_Size -= ((g_FB_ScreenSize gt;gt; 1) gt;gt; 3); br /nbsp;else if(s_Type == 20) s_Size -= ((g_FB_ScreenSize gt;gt; 1) gt;gt; 2); br /nbsp;PinXY(s_Angle, amp;s_x1, amp;s_y1, s_Size gt;gt; 2); PinXY(s_Angle, amp;s_x2, amp;s_y2, s_Size); br /nbsp;DrawLine(s_Color, g_FB_Cx - s_x1, g_FB_Cy - s_y1, g_FB_Cx + s_x2, g_FB_Cy + s_y2); br /nbsp;if(s_Type gt; 0) br /nbsp;{ br /nbsp; PinXY(s_Angle +nbsp; 90, amp;s_x3, amp;s_y3, s_Type); br /nbsp; DrawLine(s_Color, g_FB_Cx - s_x1, g_FB_Cy - s_y1, g_FB_Cx + s_x3, g_FB_Cy + s_y3); br /nbsp; DrawLine(s_Color, g_FB_Cx + s_x2, g_FB_Cy + s_y2, g_FB_Cx + s_x3, g_FB_Cy + s_y3); br /nbsp; DrawLine(s_Color, g_FB_Cx - s_x1, g_FB_Cy - s_y1, g_FB_Cx - s_x3, g_FB_Cy - s_y3); br /nbsp; DrawLine(s_Color, g_FB_Cx + s_x2, g_FB_Cy + s_y2, g_FB_Cx - s_x3, g_FB_Cy - s_y3); br /nbsp;} br /} br /br /int main(int s_argc, char **s_argv) br /{ br /nbsp;(void)signal(SIGINT, clock_signal); br /nbsp;printf(fbclock v1.0.1 - Code by JaeHyuk Cho lt;minzkn@infoeq.co.krgt;\n\n); br /nbsp;g_FB_Handle = open(s_argc gt;= 2 ? s_argv[1] : /dev/fb0, O_RDWR); br /nbsp;if(g_FB_Handle gt;= 0) br /nbsp;{ br /nbsp; if(ioctl(g_FB_Handle, FBIOGET_FSCREENINFO, amp;g_FB_FIX) == 0) br /nbsp; { br /nbsp; nbsp;if(ioctl(g_FB_Handle, FBIOGET_VSCREENINFO, amp;g_FB_VAR) == 0) br /nbsp; nbsp;{ br /nbsp; nbsp; g_FB_Map = mmap((void *)0, g_FB_FIX.line_length * g_FB_VAR.yres, PROT_READ | PROT_WRITE, MAP_SHARED, g_FB_Handle, 0); br /nbsp; nbsp; if(g_FB_Map != (void *)(-1)) br /nbsp; nbsp; { br /nbsp; nbsp; nbsp;switch(g_FB_VAR.bits_per_pixel) br /nbsp; nbsp; nbsp;{ br /nbsp; nbsp; nbsp; casenbsp; 8: DrawPixel = DrawPixel8;nbsp; break; br /nbsp; nbsp; nbsp; case 16: DrawPixel = DrawPixel16; break; br /nbsp; nbsp; nbsp; case 24: DrawPixel = DrawPixel24; break; br /nbsp; nbsp; nbsp; case 32: DrawPixel = DrawPixel32; break; br /nbsp; nbsp; nbsp; default: DrawPixel = (void *)0;nbsp; nbsp;break; br /nbsp; nbsp; nbsp;} br /nbsp; nbsp; nbsp;g_FB_Cx = g_FB_VAR.xres gt;gt; 1; g_FB_Cy = g_FB_VAR.yres gt;gt; 1; br /nbsp; nbsp; nbsp;g_FB_ScreenSize = g_FB_VAR.xres lt; g_FB_VAR.yres ? g_FB_VAR.xres : g_FB_VAR.yres; br /nbsp; nbsp; nbsp;if(DrawPixel) br /nbsp; nbsp; nbsp;{ br /nbsp; nbsp; nbsp; int s_PreSecond = 0, s_PreMinute = 0, s_PreHour = 0, s_Count, s_Index, s_x, s_y; br /nbsp; nbsp; nbsp; time_t s_UTC; br /nbsp; nbsp; nbsp; struct tm *s_LocalTime; br /nbsp; nbsp; nbsp; s_Count = 0; br /nbsp; nbsp; nbsp; do br /nbsp; nbsp; nbsp; { br /nbsp; nbsp; nbsp; nbsp;s_UTC = time((time_t *)0); br /nbsp; nbsp; nbsp; nbsp;s_LocalTime = localtime(amp;s_UTC); br /nbsp; nbsp; nbsp; nbsp;if(s_LocalTime-gt;tm_sec != s_PreSecond) br /nbsp; nbsp; nbsp; nbsp;{ br /nbsp; nbsp; nbsp; nbsp; if(s_LocalTime-gt;tm_min != s_PreMinute) br /nbsp; nbsp; nbsp; nbsp; { br /nbsp; nbsp; nbsp; nbsp; nbsp;if(s_LocalTime-gt;tm_hour != s_PreHour) br /nbsp; nbsp; nbsp; nbsp; nbsp;{ br /nbsp; nbsp; nbsp; nbsp; nbsp; Pin(0, s_PreHour * 30, 20); br /nbsp; nbsp; nbsp; nbsp; nbsp; s_PreHour = s_LocalTime-gt;tm_hour; br /nbsp; nbsp; nbsp; nbsp; nbsp;} br /nbsp; nbsp; nbsp; nbsp; nbsp;Pin(0, s_PreMinute * 6, 10); br /nbsp; nbsp; nbsp; nbsp; nbsp;s_PreMinute = s_LocalTime-gt;tm_min; br /nbsp; nbsp; nbsp; nbsp; } br /nbsp; nbsp; nbsp; nbsp; Pin(0, s_PreSecond * 6, 0); br /nbsp; nbsp; nbsp; nbsp; Pin(0xf00f, s_LocalTime-gt;tm_hour * 30, 20); br /nbsp; nbsp; nbsp; nbsp; Pin(0x0ff0, s_LocalTime-gt;tm_minnbsp; *nbsp; 6, 10); br /nbsp; nbsp; nbsp; nbsp; Pin(0xffff, s_LocalTime-gt;tm_secnbsp; *nbsp; 6, 0); br /nbsp; nbsp; nbsp; nbsp; DrawCircle(0x0fff, g_FB_Cx, g_FB_Cy, 5); br /nbsp; nbsp; nbsp; nbsp; s_PreSecond = s_LocalTime-gt;tm_sec; br /nbsp; nbsp; nbsp; nbsp;} br /nbsp; nbsp; nbsp; nbsp;do br /nbsp; nbsp; nbsp; nbsp;{ br /nbsp; nbsp; nbsp; nbsp; int s_tick; br /nbsp; nbsp; nbsp; nbsp; for(s_tick = 0;s_tick lt; 10;s_tick++)clock_load_balance(); br /nbsp; nbsp; nbsp; nbsp;}while(0); br /nbsp; nbsp; nbsp; nbsp;PinXY(s_Count, amp;s_x, amp;s_y, (g_FB_ScreenSize gt;gt; 1) - (g_FB_ScreenSize gt;gt; 5)); br /nbsp; nbsp; nbsp; nbsp;s_Index = (s_Count % 30) ? 5 : 10; br /nbsp; nbsp; nbsp; nbsp;DrawCircle(0xffff, g_FB_Cx + s_x, g_FB_Cy + s_y, s_Index); br /nbsp; nbsp; nbsp; nbsp;DrawCircle(0xffff, g_FB_Cx - s_x, g_FB_Cy + s_y, s_Index); br /nbsp; nbsp; nbsp; nbsp;DrawCircle(0xffff, g_FB_Cx + s_x, g_FB_Cy - s_y, s_Index); br /nbsp; nbsp; nbsp; nbsp;DrawCircle(0xffff, g_FB_Cx - s_x, g_FB_Cy - s_y, s_Index); br /nbsp; nbsp; nbsp; nbsp;s_Count+=6; br /nbsp; nbsp; nbsp; nbsp;if(s_Count gt; 90)s_Count = 0; br /nbsp; nbsp; nbsp; }while(g_break_clock == 0); br /nbsp; nbsp; nbsp;} br /nbsp; nbsp; nbsp;else fprintf(stderr, Err: %d\n, __LINE__); br /nbsp; nbsp; nbsp;munmap(g_FB_Map, g_FB_FIX.line_length * g_FB_VAR.yres); br /nbsp; nbsp; } br /nbsp; nbsp; else fprintf(stderr, Err: %d\n, __LINE__); br /nbsp; nbsp;} br /nbsp; nbsp;else fprintf(stderr, Err: %d\n, __LINE__); br /nbsp; } br /nbsp; else fprintf(stderr, Err: %d\n, __LINE__); br /nbsp; close(g_FB_Handle); br /nbsp;} br /nbsp;else fprintf(stderr, Err: %d\n, __LINE__); br /nbsp;(void)fprintf(stdout, End of clock\n); br /nbsp;return(0); br /} br /br //* vim: set expandtab: */ br //* End of source *//TD/TR/TBODY/TABLEbr /br /br /br /SPAN style=FONT-WEIGHT: boldMarius Konitzer /SPAN씨가 예전에 만들었던 fbclock을 개선하였다고 패치된 내용을 보내왔습니다. 외국인이 직접 제 소스를 패치해준것은 공식적으로 처음이군요. br /br /잘 알지도 못하는 외국인으로부터 몇번 다른 여러 소스들에 대해서 개선점을 Mail 로 받아본적은 있지만 이렇게 패치로 보내준것은 처음인것 같네요. br /br /SPAN style=FONT-WEIGHT: boldMarius Konitzer/SPAN 씨 에게 감사(Thanks)의 마음을 이자리를 빌어서 전합니다. br /br /다음은 SPAN style=FONT-WEIGHT: boldMarius Konitzer/SPAN 씨가 저에게 보내준 Mail의 원문내용입니다. br /
TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0
TBODY
TR
TDSPAN class=genmedB인용:/B/SPAN/TD/TR
TR
TD class=quoteHello! br /br /I recently needed a analog clock for fb output. It seemed that there was none - except from your fbclock. I liked it's charming simplicity and decided to improve it somewhat. So here is what I did: br /br /* hour and minute hands are drawn on in-between positions, too br /* added some commandline options for colour switching br /* using default colours depending on the fb's bitdepth br /br /I thought this could be of interest for you, if you like to implement it in the upstream version of your fbclock!? (perhaps even mentioning me in the source... ;-)) br /br /br /Nice greetings from Germany, br /Marius Konitzer/TD/TR/TBODY/TABLESPAN class=postbodybr /br /br /아래의 패치가 patch명령으로 일부 적용되지 않을수 있습니다. 그래서 직접 손으로 해주어야 할지도 모릅니다. 원인은 제가 개념없이 버젼관리를 해서입니다. 버젼이 한가지라라면 문제가 없겠지만 비슷한 버젼이 꽤 많거든요... br /br //SPAN
TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0
TBODY
TR
TDSPAN class=genmedB코드:/B/SPAN/TD/TR
TR
TD class=code--- fbclock.orig.cnbsp; nbsp;2005-11-25 00:44:09.000000000 +0100 br /+++ fbclock.cnbsp; nbsp;2005-11-26 14:21:43.000000000 +0100 br /@@ -8,6 +8,8 @@ br /nbsp;*/ br /nbsp; br /nbsp;#include lt;stdio.hgt; br /+#include lt;stdlib.hgt; br /+#include lt;string.hgt; br /nbsp;#include lt;sys/types.hgt; br /nbsp;#include lt;unistd.hgt; br /nbsp;#include lt;fcntl.hgt; br /@@ -25,6 +27,10 @@ br /nbsp;static struct fb_var_screeninfonbsp; nbsp;g_FB_VAR; br /nbsp;static voidnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; *g_FB_Map; br /nbsp;static void (*DrawPixel)(int, int, int); br /+static charnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; *g_Progname; br /+static intnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; g_Col8[4]nbsp; = {0x04, 0x01, 0x0e, 0x07}; /* red, blue, green, grey */ br /+static intnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; g_Col16[4] = {0xf000, 0x00f0, 0xff00, 0x8410}; /* rgb565 */ br /+static intnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; g_Col24[4] = {0xdd0000, 0x0000ff, 0xffff00, 0x808080}; /* rgb888 */ br /nbsp; br /nbsp;static void DrawPixel8(int s_Color, int s_x, int s_y) br /nbsp;{ br /@@ -103,11 +109,50 @@ br /nbsp; } br /nbsp;} br /nbsp; br /+void Usage() { br /+nbsp; nbsp;printf(Usage: %s [-h] [-d fbdev] [-hc col] [-mc col] [-sc col] [-bc col]\n, g_Progname); br /+nbsp; nbsp;printf(nbsp; -hnbsp; nbsp; nbsp; nbsp; nbsp; nbsp;show this help page\n); br /+nbsp; nbsp;printf(nbsp; -d fbdevnbsp; nbsp; nbsp;use fbdev as framebuffer device\n); br /+nbsp; nbsp;printf(nbsp; -hc colnbsp; nbsp; nbsp; specifies colour for hour hand\n); br /+nbsp; nbsp;printf(nbsp; -mc colnbsp; nbsp; nbsp; specifies colour for minute hand\n); br /+nbsp; nbsp;printf(nbsp; -sc colnbsp; nbsp; nbsp; specifies colour for second hand\n); br /+nbsp; nbsp;printf(nbsp; -bc colnbsp; nbsp; nbsp; specifies border colour\n); br /+nbsp; nbsp;printf(col is a hexadecimal colour code, that depends on your framebuffer's\n); br /+nbsp; nbsp;printf(colour depth, e.g. \-hc 0xf0f0\ for 16 bit\n); br /+nbsp; nbsp;exit(1); br /+} br /+ br /nbsp;int main(int s_Argc, char *s_Argv[]) br /nbsp;{ br /+ int i, s_Colour[4], s_isColSet[4]={0,0,0,0}; br /nbsp; char *s_Device = /dev/fb0;nbsp; nbsp; br /- if(s_Argc gt; 1)s_Device = s_Argv[1]; br /+ g_Progname = s_Argv[0]; br /nbsp; printf(fbclock v1.0.1 - Code by JaeHyuk Cho lt;minzkn@infoeq.co.krgt;\n\n); br /+ while(--s_Argc) { br /+nbsp; s_Argv++; br /+nbsp; if (s_Argclt;=1) Usage(); br /+nbsp; if (!strcmp(s_Argv[0], -d)) br /+nbsp; nbsp;nbsp; s_Device = s_Argv[1]; br /+nbsp; else if (!strcmp(s_Argv[0], -hc)) { br /+nbsp; nbsp;nbsp; if (sscanf(s_Argv[1], 0x%x, amp;s_Colour[0])!=1) br /+nbsp; nbsp;nbsp; nbsp;nbsp; Usage(); br /+nbsp; nbsp;nbsp; s_isColSet[0]=1; br /+nbsp; } else if (!strcmp(s_Argv[0], -mc)) { br /+nbsp; nbsp;nbsp; if (sscanf(s_Argv[1], 0x%x, amp;s_Colour[1])!=1) br /+nbsp; nbsp;nbsp; nbsp;nbsp; Usage(); br /+nbsp; nbsp;nbsp; s_isColSet[1]=1; br /+nbsp; } else if (!strcmp(s_Argv[0], -sc)) { br /+nbsp; nbsp;nbsp; if (sscanf(s_Argv[1], 0x%x, amp;s_Colour[2])!=1) br /+nbsp; nbsp;nbsp; nbsp;nbsp; Usage(); br /+nbsp; nbsp;nbsp; s_isColSet[2]=1; br /+nbsp; } else if (!strcmp(s_Argv[0], -bc)) { br /+nbsp; nbsp;nbsp; if (sscanf(s_Argv[1], 0x%x, amp;s_Colour[3])!=1) br /+nbsp; nbsp;nbsp; nbsp;nbsp; Usage(); br /+nbsp; nbsp;nbsp; s_isColSet[3]=1; br /+nbsp; } else br /+nbsp; nbsp;nbsp; Usage(); br /+nbsp; s_Argc--; s_Argv++; br /+ } br /nbsp; g_FB_Handle = open(s_Device, O_RDWR); br /nbsp; if(g_FB_Handle gt;= 0) br /nbsp; { br /@@ -130,40 +175,49 @@ br /nbsp; nbsp; nbsp; g_FB_ScreenSize = g_FB_VAR.xres lt; g_FB_VAR.yres ? g_FB_VAR.xres : g_FB_VAR.yres; br /nbsp; nbsp; nbsp; if(DrawPixel) br /nbsp; nbsp; nbsp; { br /-nbsp; nbsp; nbsp; int s_PreSecond = 0, s_PreMinute = 0, s_PreHour = 0, s_Count, s_Index, s_x, s_y; br /+nbsp; nbsp; nbsp; int s_Count, s_Index, s_x, s_y; br /+nbsp; nbsp; nbsp; int s_PreAngleSecond = 0, s_PreAngleMinute = 0, s_PreAngleHour = 0; br /+nbsp; nbsp; nbsp; int s_AngleSecond = 0, s_AngleMinute = 0, s_AngleHour = 0; br /nbsp; nbsp; nbsp; nbsp;time_t s_UTC; br /nbsp; nbsp; nbsp; nbsp;struct tm *s_LocalTime; br /nbsp; nbsp; nbsp; nbsp;s_Count = 0; br /+nbsp; nbsp; nbsp; for (i=0; ilt;4; i++) { br /+nbsp; nbsp;nbsp; nbsp; nbsp;if (!s_isColSet[i]) br /+nbsp; nbsp;nbsp; nbsp;nbsp; nbsp; nbsp;s_Colour[i]=(DrawPixel==DrawPixel8?g_Col8[i]:(DrawPixel==DrawPixel16?g_Col16[i]:g_Col24[i])); br /+nbsp; nbsp; nbsp; } br /nbsp; nbsp; nbsp; nbsp;do br /nbsp; nbsp; nbsp; nbsp;{ br /nbsp; nbsp; nbsp; nbsp; s_UTC = time((time_t *)0); br /nbsp; nbsp; nbsp; nbsp; s_LocalTime = localtime(amp;s_UTC); br /-nbsp; nbsp; nbsp; nbsp;if(s_LocalTime-gt;tm_sec != s_PreSecond) br /+nbsp; nbsp; nbsp; nbsp;s_AngleSecond = s_LocalTime-gt;tm_sec * 6; br /+nbsp; nbsp; nbsp; nbsp;s_AngleMinute = s_LocalTime-gt;tm_min * 6 + ((float)s_LocalTime-gt;tm_sec / 10); br /+nbsp; nbsp; nbsp; nbsp;s_AngleHour = s_LocalTime-gt;tm_hour * 30 + ((float)s_LocalTime-gt;tm_min / 2); br /+nbsp; nbsp; nbsp; nbsp;if(s_AngleSecond != s_PreAngleSecond) br /nbsp; nbsp; nbsp; nbsp; { br /-nbsp; nbsp;if(s_LocalTime-gt;tm_min != s_PreMinute) br /+nbsp; nbsp;if(s_AngleMinute != s_PreAngleMinute) br /nbsp;nbsp; nbsp;{ br /-nbsp; nbsp; nbsp; nbsp; nbsp;if(s_LocalTime-gt;tm_hour != s_PreHour) br /+nbsp; nbsp; nbsp; nbsp; nbsp;if(s_AngleHour != s_PreAngleHour) br /nbsp;nbsp; nbsp; { br /-nbsp; nbsp;nbsp; Pin(0, s_PreHour * 30, 20);nbsp; nbsp;nbsp; nbsp; nbsp; nbsp; br /-nbsp; nbsp;nbsp; s_PreHour = s_LocalTime-gt;tm_hour; br /+nbsp; nbsp;nbsp; Pin(0, s_PreAngleHour, 20); br /+nbsp; nbsp;nbsp; s_PreAngleHour = s_AngleHour; br /nbsp;nbsp; nbsp; } br /-nbsp; nbsp; Pin(0, s_PreMinute * 6, 10);nbsp; nbsp;nbsp; nbsp; nbsp; nbsp; br /-nbsp; nbsp; s_PreMinute = s_LocalTime-gt;tm_min; br /+nbsp; nbsp; Pin(0, s_PreAngleMinute, 10); br /+nbsp; nbsp; s_PreAngleMinute = s_AngleMinute; br /nbsp;nbsp; nbsp;} br /-nbsp; nbsp; nbsp; nbsp; Pin(0, s_PreSecond * 6, 0);nbsp; nbsp;nbsp; nbsp; nbsp; nbsp; br /-nbsp; nbsp; nbsp; nbsp; Pin(0xf00f, s_LocalTime-gt;tm_hour * 30, 20);nbsp; nbsp;nbsp; nbsp; nbsp; nbsp; br /-nbsp; nbsp; nbsp; nbsp; Pin(0x0ff0, s_LocalTime-gt;tm_minnbsp; *nbsp; 6, 10);nbsp; nbsp;nbsp; nbsp; nbsp; nbsp; br /-nbsp; nbsp; nbsp; nbsp; Pin(0xffff, s_LocalTime-gt;tm_secnbsp; *nbsp; 6, 0);nbsp; nbsp;nbsp; nbsp; nbsp; br /-nbsp; nbsp; nbsp; nbsp; DrawCircle(0x0fff, g_FB_Cx, g_FB_Cy, 5);nbsp; nbsp; br /-nbsp; nbsp; nbsp; nbsp; s_PreSecond = s_LocalTime-gt;tm_sec; br /+nbsp; nbsp; nbsp; nbsp; Pin(0, s_PreAngleSecond, 0); br /+nbsp; nbsp; nbsp; nbsp; s_PreAngleSecond = s_AngleSecond; br /+nbsp; nbsp; nbsp; nbsp; Pin(s_Colour[0], s_AngleHour, 20); br /+nbsp; nbsp; nbsp; nbsp; Pin(s_Colour[1], s_AngleMinute, 10); br /+nbsp; nbsp; nbsp; nbsp; Pin(s_Colour[2], s_AngleSecond, 0); br /+nbsp; nbsp; nbsp; nbsp; DrawCircle(s_Colour[3], g_FB_Cx, g_FB_Cy, 5);nbsp; nbsp; br /nbsp; nbsp; nbsp; nbsp; } br /nbsp; nbsp; nbsp; nbsp; usleep(DEF_HEAT_CPU); br /nbsp; nbsp; nbsp; nbsp; PinXY(s_Count, amp;s_x, amp;s_y, (g_FB_ScreenSize gt;gt; 1) - (g_FB_ScreenSize gt;gt; 5)); br /nbsp; nbsp; nbsp; nbsp; s_Index = (s_Count % 30) ? 5 : 10; br /-nbsp; nbsp; nbsp; nbsp;DrawCircle(0xffff, g_FB_Cx + s_x, g_FB_Cy + s_y, s_Index);nbsp; nbsp; br /-nbsp; nbsp; nbsp; nbsp;DrawCircle(0xffff, g_FB_Cx - s_x, g_FB_Cy + s_y, s_Index);nbsp; nbsp; br /-nbsp; nbsp; nbsp; nbsp;DrawCircle(0xffff, g_FB_Cx + s_x, g_FB_Cy - s_y, s_Index);nbsp; nbsp; br /-nbsp; nbsp; nbsp; nbsp;DrawCircle(0xffff, g_FB_Cx - s_x, g_FB_Cy - s_y, s_Index); br /+nbsp; nbsp; nbsp; nbsp;DrawCircle(s_Colour[3], g_FB_Cx + s_x, g_FB_Cy + s_y, s_Index);nbsp; nbsp; br /+nbsp; nbsp; nbsp; nbsp;DrawCircle(s_Colour[3], g_FB_Cx - s_x, g_FB_Cy + s_y, s_Index);nbsp; nbsp; br /+nbsp; nbsp; nbsp; nbsp;DrawCircle(s_Colour[3], g_FB_Cx + s_x, g_FB_Cy - s_y, s_Index);nbsp; nbsp; br /+nbsp; nbsp; nbsp; nbsp;DrawCircle(s_Colour[3], g_FB_Cx - s_x, g_FB_Cy - s_y, s_Index); br /nbsp; nbsp; nbsp; nbsp; s_Count+=6; br /nbsp; nbsp; nbsp; nbsp; if(s_Count gt; 90)s_Count = 0; br /nbsp; nbsp; nbsp; nbsp;}while(1);/TD/TR/TBODY/TABLEbr /
댓글을 달아 주세요
댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/128댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/128