PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزش emWin



صفحه ها : [1] 2 3 4 5

majidma3000
01-01-2013, 02:19
قابل توجه کاربران

لینک پست های مهم برای استفاده کاربران قرار داده شد :0013:




لینک دانلود لایبرری های emWIN (You can see links before reply)
لینک دانلود مثال های emWin (You can see links before reply)
دانلود PDF راهنمای پورت کردن emWin برای LPC1768 (You can see links before reply)
شیوه ساخت منو بدون استفاده از لایبرری های گرافیکی (You can see links before reply)
تنظیمات LCD قدم اول (You can see links before reply)
کدام لایبرری را دانلود کنیم؟ (You can see links before reply)
اولین نکته برای استفاده از emWin (You can see links before reply)
عملکرد GUI_SUPPORT_MEMDEV (You can see links before reply)
توضحیات بیشتر در مورد عملکرد GUI_SUPPORT_MEMDEV (You can see links before reply)
مقایسه emWin با UCOS 2+UCGUI (You can see links before reply)
نحوه دسترسی CPU به 64KB رم در 1768 (You can see links before reply)
تنظیمات اولیه برای emWin (You can see links before reply)
تنظیمات توابع ارسال و دریافت بایت ها (You can see links before reply)
تنظیمات السیدی (You can see links before reply)
دانلود فیلم های راه اندازی emWin (You can see links before reply)
از تنظیمات کیل برای استفاده از emWin (You can see links before reply)
خطای مربوط به تابع CreateWindow (You can see links before reply)
میزان رم مورد نیاز برای کارکردن با emWin (You can see links before reply)
رفع خطای 1 (You can see links before reply)
ایجاد اسلاید و نمایش آن (You can see links before reply)
تنظیمات emWin برای میکروهای کورتکس (You can see links before reply)
آدرس کتابخانه emWin در پوشه کیل (You can see links before reply)
توضیحات تکمیلی emWin (You can see links before reply)
تنظیمات تاچ (You can see links before reply)
دانلود برنامه ی Multitasking در emWin (You can see links before reply)
نکات مربوط به قسمت تاچ (You can see links before reply)
دانلود فایل های راه اندازی ال سی دی -lpc1788 بارم 16مگ (You can see links before reply)
ادامه توضیحات 1 (You can see links before reply)
راه اندازی emwin در RTX (You can see links before reply)
ماکروی مرتبط به SKIN (You can see links before reply)
توضیحات Window Manager (You can see links before reply)
پروژه Visual Studio که برای شبیه سازی Application های emwin (You can see links before reply)
تفاوت NAND و NOR (You can see links before reply)
ترجمه فصل 18 فایل راهنمای emwin مربوط به Gui Builder (You can see links before reply)
کالیبره کردن تاچ (You can see links before reply)
تغییر ادرس شروع SDRAM (You can see links before reply)
دانلود مثال راه اندازی تاچ (You can see links before reply)
مشکلی با GUI_Delay (You can see links before reply)
دانلود یک پروژه نمونه همراه با شماتیک (You can see links before reply)
اصلاحیه کار با تاچ (You can see links before reply)
روش دوم راه اندازی تاچ (You can see links before reply)
راه اندازی حالت FLEX برای قسمت های مختلف (You can see links before reply)
یکی از مشکلات تاچ (You can see links before reply)
کار با صفحه کلید مجازی (You can see links before reply)
کانفیگ LCD N96 (You can see links before reply)
تغیر مقدار یک Text box (You can see links before reply)
استفاده از سیمولینک (You can see links before reply)
نکاتی در استفاده از emWin (You can see links before reply)
دستور BUTTON_SetBitmapEx() (You can see links before reply)
ToolTips (You can see links before reply)
ویندوز با child کال بک دار (You can see links before reply)
Hard Fault Handler (You can see links before reply)
جدول حروف فارسی (You can see links before reply)
ایجاد فونت جدید (You can see links before reply)




تا صفحه 34 ویرایش شد.:wink:



قابلیت های emWin :
چند لایه کردن صفحه نمایش و تعیین اولویت لایه ها.
پشتیبانی از فونت های utf-8
نمایش عکس با انواع فرمت ها (jpg.png.bmp.gif)
قابلیت شفاف سازی عکس ها و لایه ها به میزان دلخواه
.

mansoory
01-01-2013, 17:03
همون طور که می دونید emWin قویترین لایبرری گرافیکی هست و فکر می کنم برای کار کردن حرفه ای با ال سی دی رنگی نیازه که اون رو یاد بگیریم.
قابلیت های emWin :
چند لایه کردن صفحه نمایش و تعیین اولویت لایه ها.
پشتیبانی از فونت های utf-8
نمایش عکس با انواع فرمت ها (jpg.png.bmp.gif)
قابلیت شفاف سازی عکس ها و لایه ها به میزان دلخواه
.
.
در کل قابلیت های زیادی داره و بهتره در رابطش تحقیق کنین.

کسایی که پایه اند بیان تا کار با این موتور قدرتمن گرافیکی رو شروع کنیم.

سلام.
خیلی خیلی خوشحال شدم که این پست رو دیدم.
منم تازه میخوام شروع کنم. و اولین مساله ای که بهش برخورد کردم نحوه پورت کردنش با ال سی دی های مختلفه. امیدوارم بتونیم با همکاری هم قسمتهای مختلف این کتابخانه رو یاد بگیریم. منبع من همون فایل pdf که توی فولدر EmWin وجود داره است و به نظرم خیلی عالیه. ورژن 5.18 آخرین ورژنشه ولی من تونستم 5.16 رو دانلود کنم

kavir
01-01-2013, 18:29
سلام
خیلی کار سختی نیست اول اینکه هر مثالی بخواین براش هست دوم یکی باید مدیریت اموزش دست بگیره و نیاز به وقت آزاد داره که هرکسی قبول زحمت کنه ما هم هواشو داریم:0013:

majidma3000
01-01-2013, 21:33
من مدیریت آموزش رو قبول می کنم ولی تازه کار با emWin رو شروع کردم.
از لینک زیر میتونید لایبرری های emWin رو دانلود کنید
emWin Graphics Library | You can see links before reply (You can see links before reply)
شرکت nxp از میکرو کنترلر lpc1788 برای emWin خیلی خوب پشتیبانی میکنه.
کسی تونسته emWin رو برای lpc1768 پیدا کنه؟
نحوه شروع با emWin رو پیوست می کنم.
4784

majidma3000
01-01-2013, 21:44
در لینک زیر میتونید مثال های emWin رو دانلود کنید.
SEGGER Microcontroller - Embedded Software Solutions - Samples (You can see links before reply)
برای هر مثال نتیجه رو به صورت فایل exe گذاشته که توسط اون میتونید خروجی رو مشاهده کنید.
یک نمونه از مثال ها رو پیوست می کنم.
4785

roohlla
01-01-2013, 21:58
دوستان این لایبراری خیلی کامله و جالبه بدونید برای انواع ال سی دی نیاز به نوشتن درایور نداره . اگه به بخش درایور ال سی دی منوال و سایت سیگر مراجعه کنید برای انواع ال سی دی ها درایور ش رو داره . در ضمن از ال سی دی n96 و ssd1963 هم پشتیبانی میکنه . در ضمن برای کار کردنش لزوم وجود سیستم عامل رو ندیدم ذکر کرده باشه اما در عمل باید استفاده کنیم . شما تصور کن میخوای کتاب خونه ی سنگین emwin رو با بقیه ی پردازشات توی یه حلقه بندازی که کار درستی از آب در نمیاد . من با سیستم عامل rtx کار کردم و منوالش رو خوندم کلا برای جاهایی که برنامه سنگین و حرفه ای میشه برنامه نویسی با اون خیلی راحت تره . در مورد پورت کردن این میکرو روی lpc1768 یه pdf اپ میکنم که خیلی کمک میکنه . الان ایام امتحانه اما ان شا الله بعد از امتحانات من هم پایم .
You can see links before reply

kavir
01-01-2013, 21:58
ucgui تقریبا همینه و خیلی بهینه تره
تقریبا همه بردهای فروشگاه سمپل براش هست
ولی یک همت بلند میخواد تا اموزش داده بشه

roohlla
01-01-2013, 22:10
بله درسته gui از نظر قدر پردازشی مورد نیاز بهینه تره . اما ظاهرش هم قدیمی تره به نظر من برای lpc1768 بهتره از ucgui استفاده بشه اما اگه خواستیم با lpc1788 کار کنیم با توجه به ساپورت قوی اون توسط nxp و نداشتن مشکل رم و ظاهر خیلی قشنگترش بهتره با emwin کار کنیم .

majidma3000
01-01-2013, 22:18
من نمیتونم منتظر بمونم تا امتحانات تموم بشه. به هر حال من gui و emWin رو دنبال می کنم و نتایج کارم رو براتون میذارم

من از فروشگاه کویر یک بورد stm32 همراه با ال سی دی 7 اینچ خریداری کردم و در مثال های اون uCGUI با ال سی دی 4.3 اینچ هست. شماتیک اتصال ال سی دی 4.3 اینچ و ال سی دی 7 اینچ یکی هست و در هردوتا از ssd1963 استفاده شده. اگه من این مثال رو که با ال سی دی 4.3 اینچ هست رو روی ال سی دی 7 اینچ اجرا کنم چیزی نشون می ده؟ منظورم اینه که فقط از 4.3 این ال سی دی استفاده کنه.

roohlla
01-01-2013, 23:22
باید توی فایل lcdconf.c و احتمالا guiconf یه سری پارامتر ها رو تغییر بدی . اون پی دی افی که گذاشتم منبع خوبی برای این دستکاری هاست

majidma3000
01-01-2013, 23:25
من اینو بدون emWin درست کردم.
بعدا فیلمشو میذارم، الان روی روبات نصبه و بهش دسترسی ندارم
4789

majidma3000
01-01-2013, 23:33
یک مثال از emWin با ال سی دی 4.3 اینچ.
توی این مثال یه چیزی توجه منو خیلی به خودش جلب کرده. توی پوشه های پروژه یه پوشه به اسم lcd_driver وجود داره، وقتی اونو باز می کنم چند تا درایور از جمله درایور n96 چینی وجود داره ولی ssd1963 توی اونا نیست، و توی شماتیک پروژه از ssd1963 استفاده کرده.
فعلا مجبورم یک روز صبر کنم تا بتونم بورد stm32 رو از روی روبات باز کنم و روی اون امتحان کنم.
حجم مثال یکم بالاست و من اینترنم ترافیکش تموم شده الان هم با اینترنت گوشیم متصل شدم.
بعدا مثال ها رو روی هاست وبسایتم قرار می دم و براتون لینکش رو می فرستم

majidma3000
02-01-2013, 02:03
بدون emWin این منو ها رو درست کردم.
You can see links before reply
You can see links before reply
You can see links before reply
You can see links before reply
You can see links before reply

البته خوب شد که با emWin آشنا شدم وگرنه داشتم روی زوم کردن عکس، چرخش عکس، ایجاد تکست باکس، لایه بندی صفحه، شفاف سازی، و حتی می خواستم روی گرافیک سه بعدی هم کار کنم و کلی هم دنبال محاسباتش رفتم.
تا حدودی هم به نتیجه رسیده بودم و داشتم شفاف سازی رو تموم میکردم.
خوب شد که emWin رو پیدا کردم و الکی وقتم رو تلف نکردم.

majidma3000
02-01-2013, 11:37
منوها رو با پاورپوینت درست کردم و بعد اون ها رو به صورت عکس ذخیره کردم، بعد با استفاده از برنامه image2lcd اونا رو به فایل bin تغییر دادم و اونو توی مموری کارت ذخیره کردم. با استفاده از کتابخانه ff.h فایل ها رو باز کردم و بر روی ال سی دی نمایش دادم.
اگه به عکسی که زمین بدمینتون داره توجه کنید می بینید که یک صفحه ی سیاه رنگ شفاف داره. اندازه این صفحه با توجه به مختصاتی که بهش میدی تغییر میکنه.
برای این کار عکس زمین بدمینتون رو به صورت بیتمپ ذخیره و بعد با استفاده از glcdtools به زبان c (آرایه) تغییر دادم.
فقط توجه داشته باشید که با استفاده از این روش اطلاعات مربوط به 8 پیکسل در یک بایت ذخیره میشه و برای نمایش دادنش نیاز به یکم برنامه نویسی داره.
برای نمایش دادن عکس بجای پیکسل های سیاه رنگ از رنگ سبز استفاده کردم.
برای صفحه شفاف هم از یه ترفند استفاده کردم ، فقط قسمتی از عکس رو با یه رنگ دیگه نمایش دادم.

mahdi8866
13-01-2013, 15:58
سلام چطوری میشه با نرم افزار gui builder وقتی که منوها رو باهاش میسازی وبه صورت کد c اماده ذخیرش میکنه رو در قسمت main task اجراش کرد ؟ من اون pdf که در اوایل تاپیک بود رو دیدم ولی همه اونکار را رو میکنم باز هم کیل error میده ,کسی بلده این کد c تولید شده با این نرم افزار رو با پروژه مچش کنه که کار کنه

mansoory
14-01-2013, 09:40
من دارم یه کارهایی می کنم.
بابرد LPC1768-mini-DK دارم کار می کنم که LCD اون SPI است. البته اوایل سرعتش خیلی پایین بود چون از درایوری که توی سی دی همراه برد بود استفاده می کردم. الان خوب شده.
اولین قدم اینه که تنظیمات LCD رو درست کنید. به فایلهای LCDConf.h و LCDConf.C مراجعه کنید. بعدش باید مثالهای EmWin رو اجرا کنید. درصورتیکه موفق شدید فقط کافیه که Application رو عوض کنید و برنامه خودتون رو توی MainTask قرار بدهید.

mansoory
16-01-2013, 10:16
بالاخره بورد lpc1788 وارد شد می تونیم با اون کار کنیم. من هرچی گشتم مثالی برای lpc1768 پیدا نکردم، فقط برای lpc1788 پیدا کردم

توی سایت nxp من پیدا کردم . emWin 5.14 که برای LPC1768 پورت شده. البته با LCD SPI.

roohlla
16-01-2013, 12:01
آقا کسی این pdf که گذاشتمو نگاه کرد ؟ به خدا تمام این لینکا و دستور العمل ها و مواردی که داره مطرح میشه توی اون هست

mansoory
17-01-2013, 10:09
لینکشو برای ما هم بزار:0013:

این لینکش. سایت LPCWARE که اشتباها گفته بودم nxp.عذرخواهی میکنم
emWin Graphics Library | You can see links before reply (You can see links before reply)

چند لینک دانلود در این لینک وجود داره. اونهایی که BSP هست بهتره چون خیلی کامله و پر از مثاله. ولی لینکهای بالا که precompile فقط شامل emwin است. من از نسخه BSP 5.18 که برای LPC1788 نوشته شده خیلی راحت برای LPC1768 استفاده کردم و هیچ مشکلی نبود. چون ال سی دی SPI استفاده شده

mansoory
17-01-2013, 11:46
من کتابخانه emWin رو دانلود کردم. یه با پسوند lib بود، چطوری باید اون رو اجرا کنیم؟

شما باید یک تابع به نام MainTask توی پروژه تون تعریف کنید و کار رو اونجا شروع کنید. تابع Main توی یک فایل به همین نام در فولدرsystem قرار داره که به اون کاری نداریم.

بهتره با راهنمای پی دی اف خودش جلو برید تا سر در گم نشید

kavir
23-01-2013, 12:34
سلام به همگی
دوستان emwin رو تا حالاتست نکرده بودن دیشب تست کردم و واقعا خوشم ازش
فقط نکته ای که هست رم و فلش بالاتری میخواد با 1788 برد فروشگاه تست کردم
You can see links before reply
You can see links before reply

You can see links before reply
فیلمش هم گرفتم تا ببینید
Dropbox - HY lpc1788.mp4 - Simplify your life (You can see links before reply)

mansoory
24-01-2013, 10:02
من هم چک کردم البته با برد LPC1768-Mini DK
با اینکه ال سی دی اون سریاله ولی خیلی عالی کار می کنه. من موفق شدم EmWin رو توی سیستم عامل RTX با تاچ اجرا کنم که همین مساله باعث شد 40 کیلوبایت حافظه رم مصرف بشه. البته حداقل از فلش فقط 60 کیلوبایت مصرف میشه.
این رو هم بگم که مجبور شدم از خیلی از قابلیتهای EmWin مثل Fading و Virtual Screen صرف نظر کنم.
اگه می خواهید از همه قابلیتهای اون استفاده کنید به رم بالا (حداقل96 کیلوبایت) نیاز دارید.

یک سوال دارم. از آقای زارعی: آیا شما GUI_SUPPORT_MEMDEV رو set کرده بودید؟(در فایل GuiConfig.h)

kavir
24-01-2013, 10:18
من هم چک کردم البته با برد LPC1768-Mini DK
با اینکه ال سی دی اون سریاله ولی خیلی عالی کار می کنه. من موفق شدم EmWin رو توی سیستم عامل RTX با تاچ اجرا کنم که همین مساله باعث شد 40 کیلوبایت حافظه رم مصرف بشه. البته حداقل از فلش فقط 60 کیلوبایت مصرف میشه.
این رو هم بگم که مجبور شدم از خیلی از قابلیتهای EmWin مثل Fading و Virtual Screen صرف نظر کنم.
اگه می خواهید از همه قابلیتهای اون استفاده کنید به رم بالا (حداقل96 کیلوبایت) نیاز دارید.

یک سوال دارم. از آقای زارعی: آیا شما GUI_SUPPORT_MEMDEV رو set کرده بودید؟(در فایل GuiConfig.h)
نه مثال کامل بود برای استفاده در السیدی های مختلف فقط باید GLCD.h رو ویرایش کنید
در ضمن تایمینگ السیدی 4.3 و 5 فرق داره که حتما باید لحاظ بشه البته سه خط کدش بیشتر نیست

mansoory
24-01-2013, 11:39
فیلم رو دیدم. پرش داره که.
احتمالا GUI_SUPPORT_MEMDEV صفره. کار این ماکرو اینه که به EmWin اعلام کنه که از حافظه مجازی استفاده کنه. در اینصورت بعد از محاسبات ابتدا مقدار پیسکلهای ناحیه ای که قراره رسم بشه، در حافظه رم میکرو قرار می گیرند و بعد با استفاده از دستور انتقال پی در پی، به ال سی دی منتقل میشوند. این قابلیت مخصوصا وقتیکه ال سی دی سریال باشه سرعت نمایش رو خیلی بالامیبره

pswin
24-01-2013, 11:58
همین مساله باعث شد 40 کیلوبایت حافظه رم مصرف بشه
مگه حافظه در دستري 1768، 32 كيلوبايت نيست؟


فقط نکته ای که هست رم و فلش بالاتری میخواد با 1788 برد فروشگاه تست کردم

مگه دروايور هايي مثل ssd1963 و ... خودشون رم ندارن. پس چرا رم بيشتر.

اگر با اين وضعي كه باشه كه ميگيد. كتابخونه خوبي نست ديگه هيچي رم براي كارهاي ديگه مثل برنامه ها و ... نمي مونه

roohlla
24-01-2013, 12:16
اگه میشه تجربه هاتون رو در کار کردن با این کتاب خونه این جا قرار بدید تا ما هم استفاده کنیم .
ممنون

mansoory
24-01-2013, 13:09
مگه حافظه در دستري 1768، 32 كيلوبايت نيست؟



مگه دروايور هايي مثل ssd1963 و ... خودشون رم ندارن. پس چرا رم بيشتر.

اگر با اين وضعي كه باشه كه ميگيد. كتابخونه خوبي نست ديگه هيچي رم براي كارهاي ديگه مثل برنامه ها و ... نمي مونه

حافظه 1768-64 کیلوبایته.
همه درایورها خودشون رم دارند. مثلا ili9320 حدود 177000بایت رم داره ولی مساله چیز دیگه ای است. فرض کنید یه پنجره نیاز به ترسیم مجدد داره. بجای اینکه پیکسل به پیکسل داده ها به ال سی دی منتقل بشه، اول ترسیم کامل در حافظه میکرو انجام میشه (همون منطقه ای که نیاز به ترسیم داره). بعد داده های پردازش شده اون ناحیه بصورت پی در پی به درایور منتقل میشه. در صورتیکه داده های هرپیکسل جداگونه منتقل بشه اون وقت برای هر پیکسل باید یکبار دستورSetPoint هم صادر بشه. ولی در حالتی که داده ها پی در پی ارسال بشه مثل EEPROM اول داده آدرس شروع GRAMارسال میشه و بعد یک ردیف داده پیکسلها دنبال هم فرستاده میشه تا انتهای خط. خط بعد هم به همین ترتیب... و اینطوری سرعت انتقال اطلاعات خیلی خیلی بالاتر میره.(فکر کنم حتی مختصات XوY نقاط هم حذف میشه )
این حالت در Emwin با یک کردن ماکروی GUI_SUPPORT_MEMDEV در فایل GuiConf.h فعال میشه

sigma-mx
24-01-2013, 14:27
درسته ، منظور ایشون استفاده از بافر گرافیکی هست که تو برنامه نویسی کامپیوتر هم استفاده میشه . درواقع موقع تغییر در یک ناحیه تصویر تو کامپیوتر از دستورات Get_Image یا Put_Image استفاده میکنیم ..

کتابخانه هایی مثل همین emWin و uCGUI و ... گرچه خیلی کامل هستند و سرعت برنامه نویسی رو بالا میبرند ولی نباید فراموش کرد که در ازای اون باید مقدار زیادی رام و مخصوصا رم رو فدا کرد . در میکرو های با ظرفیت پایین بهتره اشکال گرافیکی ساخته بشه تا جا برای برنامه اصلی هم باشه !

pswin
24-01-2013, 17:21
سلام


حافظه 1768-64 کیلوبایته.آره 64 كيلو بايت هست. منتها 32 تاي اون براي دستگاه هاي جانبي كنار گذاشته شده. حتي فرض هم كنيم كه 64 كيلو هم در دسترس باشه بازهم 40 كيلو فقط براي ui يه مقدار زياده. دوستان واقعا براي خود من هم ميزان خافظه در دسترس 1768 سوال شده.

من الان دارم روي يه پروژه كار ميكنم و تمام دنگ و فنگم شدن ميزان sram. اگر ايم ميزان 64 باشه كه عاليه. يعني بهتر از 32 ايي هست كه توي يوزر منوال گفته. خود من دارم يك كتابخونه طراحي ميكنم كه تا اينجاي كار حدود 10 كيلو رم مصرف ميكنه اما كار كردن با 1768 و ... هلو ميكنه. به زودي ( توي 4و5 ماه آينده خبرش رو ميدم)


همه درایورها خودشون رم دارند. مثلا ili9320 حدود 177000بایت رم داره ولی مساله چیز دیگه ای است. فرض کنید یه پنجره نیاز به ترسیم مجدد داره. بجای اینکه پیکسل به پیکسل داده ها به ال سی دی منتقل بشه، اول ترسیم کامل در حافظه میکرو انجام میشه (همون منطقه ای که نیاز به ترسیم داره). بعد داده های پردازش شده اون ناحیه بصورت پی در پی به درایور منتقل میشه. در صورتیکه داده های هرپیکسل جداگونه منتقل بشه اون وقت برای هر پیکسل باید یکبار دستورSetPoint هم صادر بشه. ولی در حالتی که داده ها پی در پی ارسال بشه مثل EEPROM اول داده آدرس شروع GRAMارسال میشه و بعد یک ردیف داده پیکسلها دنبال هم فرستاده میشه تا انتهای خط. خط بعد هم به همین ترتیب... و اینطوری سرعت انتقال اطلاعات خیلی خیلی بالاتر میره.(فکر کنم حتی مختصات XوY نقاط هم حذف میشه )
این حالت در Emwin با یک کردن ماکروی GUI_SUPPORT_MEMDEV در فایل GuiConf.h فعال میشه

کتابخانه هایی مثل همین emWin و uCGUI و ... گرچه خیلی کامل هستند و سرعت برنامه نویسی رو بالا میبرند ولی نباید فراموش کرد که در ازای اون باید مقدار زیادی رام و مخصوصا رم رو فدا کرد . در میکرو های با ظرفیت پایین بهتره اشکال گرافیکی ساخته بشه تا جا برای برنامه اصلی هم باشه ! خب بافر گرافيكي همون حافظه درايور هست ديگه كه توي PC بهش VRAM هم گفته ميشه. مساله اين نيست كه ديتا يهو يه جا بره يا تكه تكه. شما سه حالت ميتوني كار كني:

1. ناحيه شروع GRAM رو مشخص كني و داده رو انتقال بدي. حالا اين داده مي خواد محاسبه شه يا اينكه مستقيما توسط هرچيزي مثل DMA ارسال بشه. مساله اينه كه توي اين حالت شما يه ناحيه مستطيلي داري و بايد اون رو پر كني.

2. هر دفعه مختصاتي رو كه ميخواي بدي و داخلش بنويسي

3. حافظه VRAM رو بصورت يك حافظه اكسترنال تعريف كني. و استفاده كني.

و نتايج

1. روش اول براي ارسال عكس و نمايش تمام صفحه مناسب هست و خيلي سريعه. سرعت پردازنده شما حدود 100 مگ هست و سرعت انتقال حدود 40 مگ بس هر چه قدر هم پردازش انجام بديد مشكلي پيش نمياد. (البته نه هرچقدر)

2. اين روش كنده منتها مزيتش نسبت به روش اول اينه كه مي تونيد مواردي كه احتياج به شفافيت دارن مثل نمايش فونت رو به كمك نشون بديد.

3. اگر داريور اين روش رو ساپورت كنه كه هم ili ميكنه و هم ssd . مي تونيد به صورت يك رم خارجي نوشتن رو انجام بديد و مابقي كارها رو بسپريد به ميكرو. ( تا اونجا كه مي دونم ميكرو هاي stm ، دقيقا stmf103zet اين قابليت رو داره در مورد مدلهاي ديگه مثل 1768 و ... مطمئن نيستم.

من هر سه روش امتحان كردم و شخصا جواب هم گرفتم.

mansoory
26-01-2013, 10:03
سلام

آره 64 كيلو بايت هست. منتها 32 تاي اون براي دستگاه هاي جانبي كنار گذاشته شده. حتي فرض هم كنيم كه 64 كيلو هم در دسترس باشه بازهم 40 كيلو فقط براي ui يه مقدار زياده. دوستان واقعا براي خود من هم ميزان خافظه در دسترس 1768 سوال شده.


ممنون از توضیحاتتون
LCD که من استفاده می کنم سریاله _SPI__ به همین دلیل نمیشه باهاش مثل رم خارجی برخورد کرد.
توی دیتاشیت 1768 درباره RAM اینطوری توضیح داده:
1- 32KB of SRAM on the CPU with local code/data bus for high-performance CPU access
2- Two / One 16kB SRAM Blocks with separate Access path for higher throughput. TheseSRAM blocks maybe used for Ethernet, USB, and DMA memory, AS WELL AS FOR GENERAL PURPOSE CPU INSTRUCTION AND DATA STORAGE.
یعنی:
32 کیلوبایت از رم فقط توسط CPU قابل استفاده است و 2تا بلوک 16 کیلوبایتی میتونه توسط Ethernet, Usb و DMA و همچنین CPU استفاده بشه.
وقتی توسط Keil برنامه رو کامپایل کردم جمع سه بخش RO-data, RW-data و ZI-data حدود 40 کیلوبایت شد.(البته با درنظر گرفتن اینکه من از سیستم عامل RTX هم استفاده کردم که برخلاف انتظارم مقدار زیادی رم مصرف شد و شد این که ملاحظه می فرمایید وگرنه بدون RTX حدود 22 کیلوبایت مصرف میشه)
RO-data=12kB
RW-data=400byte
ZI-data=29kB
البته مفهوم این سه بخش رو نفهمیدم چیه و ممنون میشم اگه توضیح بدین.
----
من دوتا مثال روی برد اجرا کردم و باهم مقایسه کردم. اولی UCOS 2+UCGUI که توی سی دی همراه برد وجود داشت و دومی هم مثالی بود که با EmWin 5.14 برای LPC1768 نوشته شده بود با ال سی دی SPI.مشاهده کردم که UCGUI برای هر ترسیم از SetPoint استفاده می کرد و سرعتش خیلی خیلی پایین بود، به حدی که اجرای یک دستور GUI_Clear() حدود 2 ثانیه وقت میبرد. تصمیم داشتم که برد رو پس بدم ولی وقتی با EmWin تست کردم از سرعتش شگفت زده شدم. وقتی فایل LCD_SPI.c رو مطالعه کردم متوجه شدم که ili9320 درحالت سریال یک دستوری داره که میشه برای نوشتن پی در پی روی حافظش استفاده کرد و توی فایل از این قابلیت استفاده شده بود. وقتی که درفایل GUIConf.h ماکروی GUI_SUPPORT_MEMDEV یک باشه سرعت خیلی خیلی بیشتره بطوریکه که پرش تصاویر تقریبا حذف میشه.

pswin
26-01-2013, 19:59
۱۲ کیلو رم برای مصرف سیستم عامل خیلی خوبه. اون مزیتی رو که سیستم عامل فراهم میکنه ارزش ۱۲ کیلو رم رو داره.

mansoory
27-01-2013, 17:47
تا حالا کسی با emWin کار کرده؟ برای اجرا شدن به rtx نیاز داره؟

برای اجرا اگه RTX یا RTOS دیگه باشه بهتره. در غیر اینصورت خودش از وقفه Systick استفاده می کنه.

mansoory
30-01-2013, 11:27
سلام

آره 64 كيلو بايت هست. منتها 32 تاي اون براي دستگاه هاي جانبي كنار گذاشته شده. حتي فرض هم كنيم كه 64 كيلو هم در دسترس باشه بازهم 40 كيلو فقط براي ui يه مقدار زياده. دوستان واقعا براي خود من هم ميزان خافظه در دسترس 1768 سوال شده.


درباره مقدار رم LPC1768 که بهش میشه دسترسی داشت تحقیق کردم. 64 کیلوبایت درسته. 32 کیلوبایت اول بصورت مستقیم توسط CPU قابل استفاده است و 32 کیلوبایت دوم هم آدرس شروعش با 32 کیلوبایت اولی فرق داره ولی مشکلی نیست و توسط CPU قابل دسترسی است. در Keil با تنظیماتی که در تصاویر پیوست می بینید می توانید به 32 کیلوبایت دوم دسترسی پیدا کنید.

majidma3000
01-02-2013, 00:52
تو یوزرمنوال emWin نوشته برای استفاده از هرکدام از امکانات اون به چه مقدار رم نیاز داره.

mansoory
09-02-2013, 09:08
من یکم باهاش کار کردم و می تونم این مراحل رو توضیح بدم، ولی بهتره کسانی که مسلط هستند آموزش رو شروع کنند.
مواردی که من یاد گرفتم:
1-Config کردن LCD Spi و TouchScreen
2- تنظیمات اولیه
3- راه اندازی emwin در RTX(سیستم عاملی که در keil هست)
4- نحوه ترسیم پنجره ها و تنظیم خواص آنها. کار با GUI_MEMDEVICE
5- نحوه ترسیم و دسترسی به Widget ها(کنترل های Button , Text, labelو غیره) در emwin
6- نحوه کار با CallBack ها (رویدادهای window manager مثل Button_click وغیره)
این موارد رو با برد LPC1768-Mini-DK آزمایش کرده ام

roohlla
09-02-2013, 11:16
آقای منصوری شما هم شکسته نفسی میکنی ها ! خوب این چیزایی که کار کردید خیلی هم خوب و کامله و بقیه ی موارد دیگه در صورت راه اندازی اولیه کاری نداره . خیلی ممنون میشیم اینجا قدری ما رو هم فیض رسانی کنید .

mansoory
09-02-2013, 11:48
آقای منصوری شما هم شکسته نفسی میکنی ها ! خوب این چیزایی که کار کردید خیلی هم خوب و کامله و بقیه ی موارد دیگه در صورت راه اندازی اولیه کاری نداره . خیلی ممنون میشیم اینجا قدری ما رو هم فیض رسانی کنید .

نه عزیز، شکسته نفسی چیه.
تواین انجمن کسایی هستن که تسلط کافی روی emwinدارند و فن بیانشون هم خوبه. من از هرکدوم از بخشهایی که گفتم ، یه چیزایی درحد اینکه کار خودم راه بیافته فهمیدم. واقعا لازمه که دوستان دیگه ای که تسلط کافی دارند آموزش رو شروع کنند. اگه صلاح میدونید من هرچی یادگرفتم اینجا بگم ولی تضمین نمیکنم که 100 در100 درست باشه.

mansoory
09-02-2013, 12:19
باشه.
اولین قدم اینه که emwin رو دانلود کنید. ورژن آخرش 5.18 است که قابلیتهای زیادی داره و به همون نسبت به RAM بیشتری برای اجرای موفق نیاز داره.
شما باید ابتدا از سایت LPCWARE.com ورژن مورد نیازتون رو دانلود کنید. چیزی که من دانلود کردم ورژن 5.14 است (NXP_emWin514_MCB1700_BSP ). نسخه BSP خیلی بهتر از نسخه خام اونه چون شامل تنظیماتیه که ال سی دی رو برای emwin تعریف می کنه. خوشبختانه این ورژن 514 که دانلود شده برای LCD سریال بوده و من فقط زحمت معرفی پینها رو کشیدم.
اگر شما از مد سریال استفاده نمی کنید اصلا ناراحت نباشید. ورژن 518 BSP برای LPC1788 و ال سی دی 16 bit تنظیم شده. فقط یادتون باشه توابع دسترسی به السیدی در emwin بسیار بهینه و ردیف شده است. نیازی نیست که شما از فایل glcd.c که بعنوان درایور ال سی دی همراهش فروخته میشه استفاده کنید. درمورد ال سی دی های سریال این هشدار خیلی جدیه چون باعث کاهش شدید سرعت نمایش میشه.
امروز دفترم رو نیاوردم. انشالله 23 بهمن دفترم رو بیارم و چیزهایی که یادداشت کردم رو براتون بگم. این فایلها رو دانلود کنید. پیشنهاد می کنم هردو ورژن 518 و 514 رو دانلود کنید. دلیلش رو بعد عرض می کنم.
518:
emWin 5.18 board support package for EA1788 Board | You can see links before reply (You can see links before reply)


514:
NXP_emWin514_BSP | You can see links before reply (You can see links before reply)
توضیح:
ظاهرا این فایل در سایت تغییر کرده. الان که بازش کردم دیدم که برای LPC1788 تغییرش دادن.
برای LPC1768 از این لینک استفاده کنید :
You can see links before reply
موفق باشین

mansoory
11-02-2013, 10:24
سلام.
پس از دانلود فایلها باید اونها رو که دومرحله فشرده شده اند باز کنید. پس از باز کردن شاخه اصلی، مشاهده می کنید که یک فایل به نام Simulation وجود داره که می تونید از این فایل برای کد نویسی هاتون در Visual studio استفاده کنید (و البت شبیه سازی).

خب بریم سر اصل مطلب.
تنظیمات emwin چند مرحله داره که خیلی قشنگ توی راهنمای پی دی اف اون توضیح داده شده. این تنظیمات شامل مراحل زیر است
1- مقدار حافظه ای که شما دوست دارید به emwin ببخشید. (برای استفاده بعنوان بافر گرافیکی)هرچی بیشتر بهتر.
2- تنظیمات LCD
3- مشخص کردن کد رنگ
4- تابع init_controller
این تنظیمات در فایلهای زیر هستند: GUIConf.c, LCDConf.c , GUI_X.c. یک فایل به نامSimConf.c هم هست که من نگاهش نکردم.
تابعی به نام GUI_Init همه تنظیمات رو می خونه و اجرا میکنه. از LCD شروع کنیم.


-----------------
بخش اول LCD:
emwin به دو روش با LCD کار میکنه. روش مستقیم و غیر مستقیم. در روش مستقیم LCD مانند یک حافظه RAM می مونه که بصورت موازی بهش دسترسی پیدا می کنیم. صفحه های 7 اینچ و بزرگتر همچین قابلیتی دارند. Emwin توصیه می کنه که اگه به سرعت نمایش خیلی بالا نیاز دارید از این LCD ها استفاده کنید. روش دوم غیر مستقیمه که دومرحله تنظیمات دارد. LCD که در برد LPC1768-mini-DK استفاده شده ili9320 است که بصورت SPI قابل استفاده است. اگر از روش مستقیم استفاده می کنید پردازنده 1768 به دردتون نمیخوره و باید به سراغ 1788 بروید.(چون LPC1788 واحد کنترل حافظه خارجی یا EMC داره)
الان شما باید نوع صفحه نمایشتون رو باتوجه به توضیحاتی که دادم انتخاب کنید. به صفحه 909 Manual مراجعه کنید.درایور Ili9320 درشاخه GUI_FlexColor قرارداره.
خبر خوب اینه که emwin زحمت کشیده و مجموعه ای از فایلهای تنظیمات برای LCDهای مختلف فراهم کرده. باتوجه به نوع LCD می تونید فایل LCDConf.c مربوطه رو از شاخه Samples\LCDConf پیدا کنید. هنگام پیداکردن اون به رزولوشن و بیت بر بپیکسل صفحه نمایشتون دقت کنید. درباره ili9320 باید 320*240 و نوع 16 بیت از شاخه GUI_FlexColor انتخاب بشه(متاسفانه برای 18 بیت اون فقط درایور دسترسی مستقیم نوشته شده). به دیتاشیت LCDتون مراجعه کنید. فایل LCDConf.c رو به همراه فایل LCDConf.h در فولدر Config کپی کنید.
اگه از روش مستقیم استفاده می کنید، کار شما در این مرحله تقریبا تمومه و باید منتظر بشین تا بقیه تنظیمات رو خدمتتون عرض کنم.//////

---- دوستان هر اشکالی که از نظر فنی در مطالبی که من مینویسم مشاهده می کنید حتما بهم گوشزد کنید.ممنون میشم---

mansoory
11-02-2013, 12:49
فایل LCDConf.c رو باز کنید.
در این فایل یک مشت توابع و ماکروها رو ملاحظه می فرمایید. اگر فایل رو درست انتخاب کرده باشین، توابعی به نام _write_reg یا set_reg می بینید که داخل توابع دیگه استفاده شده اند ولیکن خودشون تعریف نشده اند.(درفایلهای مربوط به LCD بادسترسی مستقیم این توابع داخل همان فایل تعریف شده اند)
اصل ماجرا همین ها هستند.
درواقع اینها توابعی هستند که مربوط به ارسال و دریافت یک بایت، دو بایت، 4 بایت و یا زنجیره ای از بایتها هستند. لیست توابعی که باید تعریف شود در صفحه915 راهنما وجود داره. برای بعضی از ال سی دی ها،emwin فایلهایی رو آماده کرده که می تونید در فولدر Sample\LCDX اونها رو پیدا کنید. در اینجا شما به فایل GLCD.C که همراه ال سی دی فروخته میشه نیاز دارید. فایل رو باز کنید و توابع write_reg یا set_reg رو با توابعی که در فایل GLCD.C برای این منظور نوشته شده اند مقایسه کنید. اگه اختلافی ندیدید به سلامتی زدید به هدف وگرنه باید اصلاحاتی انجام بدید تا این توابع درست کار کنند. توابعی که در آخرشون M هست مثل _write_reg08M برای انتقال زنجیره ای از بایتها کاربرد دارند. دقت کنید که تمام توابعی که در LCDConf.c برای تبادل اطلاعات با LCD اومده رو باید تعریف کنید.برای ili9320 که در مود سریال کار میکنه، این فایل قبلا آماده شده و در شاخه System\Hardware قرار گرفته. در آخر پینها رو باهم مطابقت بدهید. نکته ای که ممکنه باعث سردرگمی بشه حرف A0 و A1 هست که جلوی این توابع نوشته شده. این درواقع یک جور آدرس دهی است که در این مود دو آدرس 0 و 1 داریم و برای هر آدرس هم یک دسته توابع Write باید وجود داشته باشه. آدرس صفر برای ارسال/دریافت فرمان و آدرس 1 برای ارسال/دریافت داده مورد استفاده قرار میگیره.
خب اگه همه موارد رو چک کردید به فایل LCDConf.C برگردید.

mansoory
11-02-2013, 14:08
درفایلLCDConf.C یکبار ماکروها رو باهم مرور می کنیم.
اولین چیزی که باید کنترل بشه LCD_BITSPERPIXEL است که باید درست باشه. ماکروهای بعد طول و عرض صفحه هستند. YSIZE_PHYSو XSIZE_PHYS. سپس کد رنگ مورد نظرتون رو باید ست کنید. این کد رنگ رو میتونید در صفحه263 انتخاب کنید. انتخاب اون باید باتوجه به دیتاشیت LCD تون انجام بشه.درموردili9320 ماکرو بصورت زیر تعریف میشه:


// Color conversion
//
#define COLOR_CONVERSION GUICC_666
که نشون میده ال سی دی در واقع 18 بیته (6بیت برای هر رنگ RGB).در خط بعدی باید نوع درایور رو تعریف بفرمایین که برای من GUI_FLEXCOLOR است.
ماکروی بعدی جهت ترسیم رو نشون میده که معمولا بعد از اولین راه اندازی موفق می تونید اون رو تنظیم کنید. من برای نمایش افقی این ماکرو رو فعال کردم:

#define DISPLAY_ORIENTATION (GUI_SWAP_XY)
دوتا تابع هم هست که باید یه نگاه سر سری بهش بندازید:Init_Controller و LCD_X_Config. دوباره فایل GLCD.C رو باز کنید و تابعی که LCD رو Initialize می کنه رو با تابع IniController مقایسه کنید. باید تقریبا باهم یکی باشند.
تابع LCD_X_Config رو هم ببینید. در قسمتی از اون میبینید که توابع write_reg توش تعریف شده اند(PortAPI). اینجا می تونید ببینید که دقیقا چه توابعی رو باید در فایلتون تعریف می کردید. ولسلام. تموم شد.
دیگه با فایل LCDConf.C کاری نداریم مگه اینکه مشکلی وجود داشته باشه. فایلی که درشاخه LCD_X پیدا کرده اید رو هم در شاخه Config کپی کنید.

خب حالا باید اولین تست رو انجام بدیم. ولی قبلش فایل GUIConf.C رو باز کنید. اینجا باید شما مقداری حافظه به emwin بدهید تا از اون بعنوان بافر استفاده کنه.
دوتا ماکرو هست که من برای پردازنده 1768 بصورت زیر تنظیمش کردم. ممکنه شما بیشتر یا کمترش کنید. برای 1788 بالای 12 مگابایت تنظیم کنید.



// Define the available number of bytes available for the GUI
//
#define GUI_NUMBYTES 1024 * 16 // x Byte

//
// Define the average block size
//
#define GUI_BLOCKSIZE 0x128

ماکروی اول که مشخصه ولی ماکروی دوم رو نمیدونم چی میگه.
خب این فایل رو ببندید و فایل GUIConf.h رو باز کنید. در این فایل چند تا ماکروی مهم هست که خودتون بخونید متوجهش میشوید. GUI_SUPPORT_MEMDEV رو باید یک کنید تا استفاده از حافظه ای که تخصیص دادید برای emwin امکانپذیر باشه.

خب الان اگه همه چیز درست باشه میتونیم اولین آزمایش رو انجام بدهیم.
در شاخه Application، یک فایل به نام GUI_Widget_GraphDemo.C هست که باید توی Keil اضافه شده باشه. کنترل کنید و اگه درسته پروژه رو کامپایل کنید و از نتیجه کار لذت ببرید. برای آزمایش، یکبار GUI_SUPPORT_MEMDEV رو صفر کنید و مجددا کامپایل کنید تا اختلاف سرعت نمایش رو درک کنید. فراموش نکنید که فایل درایور LowLevel مربوط به LCD که در اون توابع write_reg , وغیره رو تعریف کردید به پروژه keil اضافه کنید
آزمایش رو انجام بدهید و اگه مشکلی هست به من اطلاع بدهید. وگرنه بفرمایید تا ادامه داستان رو بریم

mansoory
12-02-2013, 09:56
.
کانفیگی برای اتصال به ssd1963 وجود داره؟ اگه بخواییم از درایور lpc1788 استفاده کنیم چی؟

متاسفانه درباره کنترلرLCD میکروی LPC1788 و همینطور SSD1963 اطلاعاتی ندارم. ولی در Manual emwin این صفحه نمایش جزو دسته GUI_FlexColor قرار گرفته. بنابراین درایورش در شاخه Sample\LCDConfباید وجود داشته باشه. به نظرم امکانش باشه که با کنترلر LCD میکرو هم به روش غیرمستقیم کار کرد.

mansoory
12-02-2013, 13:30
سلام. اگر موافقید تا دوشنبه30 بهمن منتظر بشم تا LCD رو راه اندازی کنید. انشالله که انجامش می دهید. چون برای ادامه کار، عملکرد صحیح LCD لازمه. بعد یک مثال ساده رو باهم آزمایش می کنیم و بعدش هم تنظیمات Touch Screen رو خدمتتون خواهم گفت.

titery
13-02-2013, 00:13
سلام
من lpc1788 رو خریدم اما داخلش emwine5.16 رو داره.5.16 چه فرقی با 5.18 داره؟
اگه بخواهم با کنترلر داخلی lpc1788 کار کنم ایا باید از پوشه GUIDRV_Lin استفاده کنم اما دستور write_reg در فایل LCDConf.h نبود اما در فایل LCDCoof.h که در پوشه
\Sample\LCDConf\GUIDRV_Lin\MPC5606_MultiLayer
بود ولی باز عبارت
#define DISPLAY_ORIENTATION (GUI_SWAP_XY)
یا
#define COLOR_CONVERSION GUICC_666
نیست
پس اینLCDConf.h فایل رو از چه مسیری باید باز کنم
ممنون

mansoory
13-02-2013, 09:48
سلام
من lpc1788 رو خریدم اما داخلش emwine5.16 رو داره.5.16 چه فرقی با 5.18 داره؟
اگه بخواهم با کنترلر داخلی lpc1788 کار کنم ایا باید از پوشه GUIDRV_Lin استفاده کنم اما دستور write_reg در فایل LCDConf.h نبود اما در فایل LCDCoof.h که در پوشه
\Sample\LCDConf\GUIDRV_Lin\MPC5606_MultiLayer
بود ولی باز عبارت
#define DISPLAY_ORIENTATION (GUI_SWAP_XY)
یا
#define COLOR_CONVERSION GUICC_666
نیست
پس اینLCDConf.h فایل رو از چه مسیری باید باز کنم
ممنون

درباره نسخه ای که شما دارید نمیتونم نظری بدهم. لطفا از لینکهایی که در صفحه 6 گذاشته ام استفاده کنید و نسخه های BSP رو دانلود کنید (5.14 و 5.18). احتمال میدم نسخه ای که شما دارید خام باشه. به هرحال برای هماهنگی بهتره شما هم از نسخه هایی که اعلام کردم استفاده کنید.
فایل GUIDRV_Lin\???\LCDConf.C رو باید باز کنید نه LCDConf.h. دوم اینکه در دسترسی مستقیم نیازی به معرفی توابع دسترسی به حافظه ندارید.
و در مورد ماکروها، اونها در فایل Config\GUIConf.h قرار گرفته اند.
متاسفانه من درباره کنترل داخلی LCD 1788 اطلاعاتی ندارم ولی چون peripheral میکرو هست بنابراین 100درصد به روش مستقیم بهش دسترسی دارید. اگه سی دی که همراه برد گرفتید، مثالی درباره نحوه کار با کنترلرLCD رو داره میتونید از اون کمک بگیرید و راهش بندازید. به نظرم بد نمیشه اگه اون مثال رو اینجا آپلود کنید تا دوستانی که تجربه بیشتری دارند راهنمایی کنند.
مطالعه این لینک شاید مفید باشه:
You can see links before reply

mansoory
14-02-2013, 11:19
سلام.
برای اینکه هم قابلیتهای emWin رو روی برد LPC1768-Mini-Dk ببینید که بیچاره رم خارجی هم نداره، پروژه معروف دموی emwin رو روی اون اجرا کردم و فیلم گرفتم. البته بعلت محدودیت رم، خیلی از مثالها رو نمیشد اجرا کرد. ولی شما میتونید سرعت اجرا رو روی ال سی دی SPI ببینید.
یک مثال دیگه هم بود که توانایی emwin رو در (RTOS (RTX KEILنشون میده. دوتاپنجره که از هم عبور میکنند. من دوتا تسک LED چشمک زن بافرکانسهای مختلف هم بهش اضافه کردم.
باشد که مقبول دوستان واقع شود....

لینک فیلمها :
Dropbox - MultiTasking_1.mp4 - Simplify your life (You can see links before reply)
Dropbox - MultiTasking_2.mp4 - Simplify your life (You can see links before reply)
Dropbox - MultiTasking_3.mp4 - Simplify your life (You can see links before reply)
Dropbox - SEGGER_DEMO.mp4 - Simplify your life (You can see links before reply)

titery
14-02-2013, 11:47
در pdf ها نوشته که برنامه تولیدی از emwine رو گفته بین user start و user end بگذاریم این تعویض رو باید در کدام فایل قرار بدهیم
بازم تشکر:hi:

mansoory
14-02-2013, 11:50
در pdf ها نوشته که برنامه تولیدی از emwine رو گفته بین user start و user end بگذاریم این تعویض رو باید در کدام فایل قرار بدهیم
بازم تشکر:hi:

من چنین چیزی ندیدم.
برنامه ای که می خواهید اجرا کنید باید در تابعی به نام MainTask قرار بدهید. شما اگه همون مثالی که کامپایل کردید رو ببینید می تونید این تابع رو پیدا کنید.

titery
14-02-2013, 22:45
بعد از یک روز ور رفتن با lpc1788 فهمیدم که هر قسمت اجرایی در سمپل یک بخش جداست و تمام این بخش ها در پوشه ی application هست.فراخوانی شدن این بخش ها توسط دو فایل GUIDEMO.c و GUIDEMO.h هست( در مثال پست 65).
حال نفهمیدم فایلی که توسط GUIBuilder.exe ایجاد کردم کجا قرار بدم.در همان پوشه application به جای یکی از فایل های موجود(GUIDEMO_BarGraph.c) قرار دادم ولی هنگام کامپایلر خطا می دهد.
طبق روشی در پست 71 فرمودید فایل ایجاد شده توسط GUIBuilder را باز کردم و دیفاین ها را اول برنامه،تعریف تابع ها را قبل تابع mainTask و بقیه را داخل MainTask،داخل حلقه while(1) قرار دادم اما بعد پروگرام کردن صفحه ال سی دی سفید بود(در سمپل emwin5.18(
مشکل از کجاست؟

ghmansoory
15-02-2013, 18:57
بعد از یک روز ور رفتن با lpc1788 فهمیدم که هر قسمت اجرایی در سمپل یک بخش جداست و تمام این بخش ها در پوشه ی application هست.فراخوانی شدن این بخش ها توسط دو فایل GUIDEMO.c و GUIDEMO.h هست( در مثال پست 65).
حال نفهمیدم فایلی که توسط GUIBuilder.exe ایجاد کردم کجا قرار بدم.در همان پوشه application به جای یکی از فایل های موجود(GUIDEMO_BarGraph.c) قرار دادم ولی هنگام کامپایلر خطا می دهد.
طبق روشی در پست 71 فرمودید فایل ایجاد شده توسط GUIBuilder را باز کردم و دیفاین ها را اول برنامه،تعریف تابع ها را قبل تابع mainTask و بقیه را داخل MainTask،داخل حلقه while(1) قرار دادم اما بعد پروگرام کردن صفحه ال سی دی سفید بود(در سمپل emwin5.18(
مشکل از کجاست؟

ابتدا از کارکرد LCD مطمئن شوید. اگه کار میکنه خواهشمندم که فایل LCDConf.C رو برای ما بفرستید.
برنامه GUIBuilder فایلی درست می کنه که توش یه تابع به نام CreateWindow هست. کافیه اون تابع رو در تابع MainTask و درست قبل از حلقه while فراخوانی کنید. موفق باشید

titery
15-02-2013, 20:56
من دوتا سمپل برای این برد دارم اولیش که با راهنمایی شما روی برد کار کرد و دموها را نمایش می دهد (داخل سی دی برد 1788 بود)همانی هست که در پست 65 آپ کردم و
دومین سمپل هم برنامه ی موجود در emwin518 بود که شما در پست 56 لینکش رو قرار دادید در این سمپل اول سایز ال سی دی(480*272) را برای 4.3 اینچ در LCDConf.C تنظیم کردم بعد کامپایل وبعد پروگرام کردم اما صفحه سفید هست
مشکل از کجاست؟
در حالت معمولی سمپلی که مال emwin5.18 هست،چیزی برای نمایش نداره؟

titery
16-02-2013, 01:19
روشی که شما فرمودید به صورت زیر انجام دادم
GUIBuilder.exe را باز کردم یک ویندوز ایجاد و دوتا باتوم گذاشتم و با اسم WindowDLG.c ذخیره کردم
NXP_emWin518_EA1788_Keil_CMSIS.uvproj را باز کردم و در فایل GUI_WIDGET_GraphXYDemo.c تابع maintask را پیدا کردم دقیقا قبل حلقه while تابع CreateWindow قرار دادم ولی موقع کامپایل خطا میداد کم کم برای رفع خطا تقریبا همه فایل اضافه شد ولی بازم صفحه سفید هست من هر دو فایل را آپ میکنم اگه میشه لطف کنید یک بررسی کنید.

mansoory
16-02-2013, 09:17
روشی که شما فرمودید به صورت زیر انجام دادم
GUIBuilder.exe را باز کردم یک ویندوز ایجاد و دوتا باتوم گذاشتم و با اسم WindowDLG.c ذخیره کردم
NXP_emWin518_EA1788_Keil_CMSIS.uvproj را باز کردم و در فایل GUI_WIDGET_GraphXYDemo.c تابع maintask را پیدا کردم دقیقا قبل حلقه while تابع CreateWindow قرار دادم ولی موقع کامپایل خطا میداد کم کم برای رفع خطا تقریبا همه فایل اضافه شد ولی بازم صفحه سفید هست من هر دو فایل را آپ میکنم اگه میشه لطف کنید یک بررسی کنید.

فایلها رو دیدم. فایل اولی که یکی از دموهای emWin است، خودش تابعی به نام CreateWindow دارد. بنابراین وقتی شما فایل دوم را به پروژه اضافه می کنید که آنهم دارای تابعی به همین نام است، خطای کامپایلر اتفاق می افتد.
شما فایل دمو را از شاخه Application حذف کنید و فایل WindowDLG.C را به جای آن قرار دهید.
سپس تابع MainTask را برای آن بنویسید.
من این کار را انجام داده ام. فایل ضمیمه را ببینید. (includeها را هم ببینید)

mansoory
16-02-2013, 09:20
من دوتا سمپل برای این برد دارم اولیش که با راهنمایی شما روی برد کار کرد و دموها را نمایش می دهد (داخل سی دی برد 1788 بود)همانی هست که در پست 65 آپ کردم و
دومین سمپل هم برنامه ی موجود در emwin518 بود که شما در پست 56 لینکش رو قرار دادید در این سمپل اول سایز ال سی دی(480*272) را برای 4.3 اینچ در lcdconf.c تنظیم کردم بعد کامپایل وبعد پروگرام کردم اما صفحه سفید هست
مشکل از کجاست؟
در حالت معمولی سمپلی که مال emwin5.18 هست،چیزی برای نمایش نداره؟

لطفا فایلهای glcd.h و glcd.c را هم بفرستید. متشکرم

agape
16-02-2013, 09:53
سلام به همه دوستان ، خیلی خوشحالم که دوستان دارن به این بحث ابراز علاقه میکنن ،
من چند وقتی بود که درگیر یه پروژه خیلی سنگین و پر پارامتر بودم ، تقریبا تمام تاپیک رو خودنم ، اونطوری که دوستان هم فرمودند نیست میشه مثلا این کتابخونه رو روی 10 کیلو رم هم به خوبی اجرا کرد ، همونطوری که من کردم ، من سورس این کتابخونه رو از کانالهایی به دست آوردم ، و اگر وقت شد کتابخونه اونو برای STM32 و LPC17xx با کمک آقای زارعی قرار میدیم که دوستان توی انتخاب میکرو محدودیت نداشته باشن ، من خودم این کتابخونه رو توی stm32f103ret6 اجرا کردم و بدون هیچ مشکل خاصی هم اجرا شد و الانم داره کار میکنه.
یا حق

mansoory
16-02-2013, 10:10
سلام به همه دوستان ، خیلی خوشحالم که دوستان دارن به این بحث ابراز علاقه میکنن ،
من چند وقتی بود که درگیر یه پروژه خیلی سنگین و پر پارامتر بودم ، تقریبا تمام تاپیک رو خودنم ، اونطوری که دوستان هم فرمودند نیست میشه مثلا این کتابخونه رو روی 10 کیلو رم هم به خوبی اجرا کرد ، همونطوری که من کردم ، من سورس این کتابخونه رو از کانالهایی به دست آوردم ، و اگر وقت شد کتابخونه اونو برای STM32 و LPC17xx با کمک آقای زارعی قرار میدیم که دوستان توی انتخاب میکرو محدودیت نداشته باشن ، من خودم این کتابخونه رو توی stm32f103ret6 اجرا کردم و بدون هیچ مشکل خاصی هم اجرا شد و الانم داره کار میکنه.
یا حق

سلام.
من خیلی سعی کردم ولی یک سری از مثالهای emwin رو نمیشه با LPC1768 اجرا کرد. نمونه: Fading, Speedometer, Transparent, washing machine, animated bargraph,...

اگه راهی باشه که رم مصرفی emwin کاهش پیدا کنه (و MEMDEV هم فعال باشه) خیلی خیلی عالی میشه

agape
16-02-2013, 20:53
درسته - کم داشتن رم دلیل اصلی اجرا نشدن مثال هاست ، و هیچ کاریش هم نمیشه کرد ، البته میشه memdev رو هم فعال کرد البته با حافظه کمتر ولی مثلا برای یه صفحه نمایش 240*320 نیاز به 150 کیلو رم هست که مسلما از عده این دسته میکرو ها خارجه
ولی برای برای میکروی اس تی ام میشه چرا که میشه حافظه خارجی بهش اتصال داد

titery
16-02-2013, 22:36
سلام.فایلی که شما زحمتش رو کشید فقط در سمپل دوم(سپل پست 56) با تغییر نام به GUI_WIDGET_GraphXYDemo.c بدون خطا کامپایل شد اما همچنان ال سی دی سفید سفید:(هست.
در سمپل اول (پست 65) هم با فایل SEGGERDEMO.c ترکیبش کردم ولی هیچ تغییر در نمایش روی ال سی دی ایجاد نشد(همان 13 نمونه قبل تغییر را نمایش می داد)
میشه زحمت یک تغییر در همان سمپل اول(پست 65) را بکشید؟:(
اینم SEGGERDEMO.c تغییر یافته شده.

titery
16-02-2013, 22:53
لطفا فایلهای glcd.h و glcd.c را هم بفرستید. متشکرم
این دو فایلی که شما فرمودید فقط در سمپل اول(پست65)بودو در سمپل دو وجود نداشت

mbntechco
17-02-2013, 00:45
سلام به عزیزانی که مثل من درگیر این پروژه هستند،به نظر من بهتره اول تعیین کنیم که قراره تغییرات مورد نظرمونو روی برنامه همراه برد اعمال کنیم یا روی برنامه سایت LPCWARE تغییراتو اعمال کنیم.البته برنامه داخل DVD به نظرم قابل فهم تره و واسه سایز اسکرین های مختلف قابل تغییره.ببخشید که نمیتونم کمکی بکنم چون کاملا گیج شدم:lol:

mansoory
17-02-2013, 09:11
دوستان واقعا ممنون میشم اگه اطلاعاتی دارید که فکر می کنید مفید هست(مثلا اساس کار،ایجاد یک برنامه emwine از پایه و...) پست بزنید:gop:

سلام. عجله نکنید. اگر همراه با هم جلو بریم به همه موارد میرسیم. فعلا من منتظرم که همه دوستان بتونند ال سی دی رو راه بیاندازند. فایل glcd.c شما رو هم دارم میخونم و بعد از بررسی نظرم رو بهتون میگم.

mansoory
17-02-2013, 09:34
سلام.فایلی که شما زحمتش رو کشید فقط در سمپل دوم(سپل پست 56) با تغییر نام به GUI_WIDGET_GraphXYDemo.c بدون خطا کامپایل شد اما همچنان ال سی دی سفید سفید:(هست.
در سمپل اول (پست 65) هم با فایل SEGGERDEMO.c ترکیبش کردم ولی هیچ تغییر در نمایش روی ال سی دی ایجاد نشد(همان 13 نمونه قبل تغییر را نمایش می داد)
میشه زحمت یک تغییر در همان سمپل اول(پست 65) را بکشید؟:(
اینم SEGGERDEMO.c تغییر یافته شده.

اگر این فایلSEGGER_DEMO در Keil اضافه شده (در شاخه Application احتمالا)، لطفا حذفش کنید. فایلی که من دادم باید در پروژه ای که گفتید کار می کنه(سمپل اول اگه اشتباه نکنم که توی دی وی دی بوده و مثالها رو اجرا میکنه)، قرار بگیره. متوجه نشدم چرا نام فایلی که من فرستادم رو به GUI_WIDGET_Graph.. تغییر دادید؟؟؟؟!!؟

اینکه گفتید صفحه سفیده یعنی دستور GUI_Init کار نکرده اون هم بعلت اینکه LCD درست کانفیگ نشده

titery
17-02-2013, 10:04
اگر این فایل در Keil اضافه شده (در شاخه Application احتمالا)، لطفا حذفش کنید. فایلی که من دادم باید در پروژه ای که گفتید کار می کنه، قرار بگیره. متوجه نشدم چرا نام فایلی که من فرستادم رو به GUI_WIDGET_Graph.. تغییر دادید؟؟؟؟!!؟
اگه یکی از فایل های application(سمپلی که کار میکنه) رو حذف کنم موقع کامپایل خطا میده و اگر فایل شما را به همان اسم خودش در این پوشه بزارم،اصلا کیل لودش نمیکنه برای همین با تغییر نام به یکی از فایل های معرفی شده میخواستم به برنامه اضافه اش کنم

mansoory
17-02-2013, 10:15
اگه یکی از فایل های application(سمپلی که کار میکنه) رو حذف کنم موقع کامپایل خطا میده و اگر فایل شما را به همان اسم خودش در این پوشه بزارم،اصلا کیل لودش نمیکنه برای همین با تغییر نام به یکی از فایل های معرفی شده میخواستم به برنامه اضافه اش کنم

همه Application ها رو حذف کنید(با انتخاب فایل در keil وزدن کلید del ).( از keil نه اینکه از هارد پاک کنید). بعد فایلی که من دادم رو اضافه کنید ( دوبار روی Application در Keil کلیک کنید و فایل رو بهش معرفی کنید)-
پیشنهاد می کنم مجله PMM 1 و 2 رو بخونید

titery
17-02-2013, 10:21
همه Application ها رو حذف کنید.( از keil نه اینکه از هارد پاک کنید). بعد فایلی که من دادم رو اضافه کنید ( دوبار روی Application در Keil کلیک کنید و فایل رو بهش معرفی کنید)
کاری که شما فرمودید انجام دادم این خطا رو میده
.\Output\LPC1788_EA_LPC1788_KEIL_CMSIS\Debug_FLASH \Obj\EMWIN516.axf: Error: L6218E: Undefined symbol main (referred from rtentry2.o).
Target not created

mansoory
17-02-2013, 10:26
سلام به عزیزانی که مثل من درگیر این پروژه هستند،به نظر من بهتره اول تعیین کنیم که قراره تغییرات مورد نظرمونو روی برنامه همراه برد اعمال کنیم یا روی برنامه سایت lpcware تغییراتو اعمال کنیم.البته برنامه داخل dvd به نظرم قابل فهم تره و واسه سایز اسکرین های مختلف قابل تغییره.ببخشید که نمیتونم کمکی بکنم چون کاملا گیج شدم:lol:

شما از کدوم برد استفاده می کنید و ال سی دی تون چیه؟


کاری که شما فرمودید انجام دادم این خطا رو میده
.\Output\LPC1788_EA_LPC1788_KEIL_CMSIS\Debug_FLASH \Obj\EMWIN516.axf: Error: L6218E: Undefined symbol main (referred from rtentry2.o).
Target not created
در شاخه System فایلی به نام Main.C حذف شده. (در Keil). اون شاخه رو ببینید و اگر نیست، در هارد دیسک در فولدر System قرار گرفته، به کیل اضافه کنید.

titery
17-02-2013, 10:32
شما از کدوم برد استفاده می کنید و ال سی دی تون چیه؟
برد lpc1788 سایت و ال سی دی 4.3 اینچ

در این برنامه فولدری به نام سیستم وجود نداره،من فقط از پوشه application حذف کردم و همین برنامه در صورت تغییر ندادنش خطایی نمیده

سلام
پروژه در حد نمایش یک اسلاید کار کرد:lol: خلاصه کار هایی که روی سمپل(پست 65) انجام دادم را در دو عکس زیر قرار دادم و در نهایت هم این سمپل را قرار می دهم الان سرعت کم هست خود سمپل رو بعدا آپ میکنم

حال چطور میتوانیم محل نمایش یک پنجره را جابجاکنیم و چطور یک سمپل از پیش ساخته شده رو (مثل کلیومتر) را نمایش دهیم؟؟

برای نمایش دو اسلاید،
دو اسلاید با guibuilder ذرست کردم و نام تابع های همنام موجود در این دو را به صورت دستی تغییر دادم(تا تکراری نباشند که keil خطا دهد)
با note pad یک فایل c. ایجاد و درون ان تابع main task ایجاد کردم و درون حلقه while نام دو تابع آخر موجود در اسلاید را فراخوانی کردم و این سه فایل را دز پوشه application قرار و فراحوانی کردم این دو اسلاید پشت سر هم در lcd نمایشداده میشه.
حال با guibuilder چطور میشود چند اسلاید تولید کرد که اسم تابع های ان ها تکراری نباشد؟

با تاچ در emwine چطور باید کار کرد مثلا ، زدن یک دکمه باعث رفتن به یک اسلاید دیگه شود؟
تاچ رو باید جدا گانه برنامه نویسی کرد؟

mansoory
17-02-2013, 10:54
اگر تابعMain یا فایل Main.c را پیدا نکردید می توانید این کد را به فایلتان اضافه کنید:


#ifndef _WINDOWS
#include "HWConf.h"
#endif

#ifdef __CROSSWORKS_ARM
extern void __low_level_init(); // hwconf.c
#endif

void MainTask(void); // Defined in SEGGERDEMO.c

/************************************************** *******************
*
* main
*/
void main(void) {
#ifdef __CROSSWORKS_ARM
__low_level_init();
#endif
#ifndef _WINDOWS
HW_X_Config(); // Initialization of Hardware
#endif
MainTask(); // emWin application
}


سلام.
کسی تونست lcd رو کانفیگ کنه؟
مشکلی نبود؟
بریم سر قسمت تاچ؟

Doloop
19-02-2013, 14:20
دوستان اگه فایل های EMwin پورت شده برای STM32 رو هم داشتید قرار بدید تا ماهم بیائیم تو کار :wink:

mbntechco
19-02-2013, 15:10
مهندس منصوری متاسفانه من موفق نشدم فایل خود segger رو اسفاده کنم چون ظاهرا اون برنامه واسه ال سی دی 4.3 هست ولی ال سی دی من 5 اینچ هست،تا این لحظه فقط برنامه تست داخل دی وی دی خود coreboard رو نصب کردم چون داخل فایل glcd.h تونستم ال سی دی 5 اینچیو انتخاب کنم

mansoory
19-02-2013, 15:23
مهندس منصوری متاسفانه من موفق نشدم فایل خود segger رو اسفاده کنم چون ظاهرا اون برنامه واسه ال سی دی 4.3 هست ولی ال سی دی من 5 اینچ هست،تا این لحظه فقط برنامه تست داخل دی وی دی خود coreboard رو نصب کردم چون داخل فایل glcd.h تونستم ال سی دی 5 اینچیو انتخاب کنم

یکی دو روز به من وقت بدید، برای LCD 1788 . درایور emwin رو آماده کنم. از titery فایلهاش رو گرفتم و بزودی ردیفش می کنم.
مثالی که توی دی وی دی شما هست همون emwin 5.16 است؟

mansoory
19-02-2013, 15:34
دوستان اگه فایل های EMwin پورت شده برای STM32 رو هم داشتید قرار بدید تا ماهم بیائیم تو کار :wink:

فکر نکنم کار خاصی لازم داشته باشه. چون برای Cortex-M4 و Cortex-M3 کتابخانه کامپایل شده توی فولدر Segger شاخه ای که keil نصب شده وجود داره و کاری که شما باید بکنید این دوتاست:

1- راه اندازیSystick برای استفاده emwin:
یه فایل به نام GUI_X.C در شاخه samples وجود داره. اونجا متغیری به نام Time_MS یا OS_Time_MS رو می بینید. باید کاری کنید که هر یک میلی ثانیه یک واحد به اون اضافه بشه. راه مناسب استفاده از systick است.

2- مشخص کردن LCD: باتوجه به توضیحات قبلی

مشکلی بود من درخدمتم

mbntechco
19-02-2013, 16:51
بله مهندس جان،ورژن 5.16 هست،تفاوت فایل همراه دی وی دی با فایلی که تو سایت segger یا LPCWARE هست زیاده،انگار یه جورایی برای COREBOARD تغییر داده شده،اگه دسترسی ندارید بفرمایید براتون بفرستم.ممنون از همکاریتون

pooriya
19-02-2013, 20:11
دوستان اگه فایل های EMwin پورت شده برای STM32 رو هم داشتید قرار بدید تا ماهم بیائیم تو کار :wink:

سلام
مهندس پورت این rtosر روی میکروهائی مثل 1768 و stm32f103 زیاد به صرفه نیست چون علاوه بر حافظه کم این میکرو ها برای استفاده از اکثر امکانات این سیستم عامل از نظر سرعت هم یه مقدار کم میارن،مخصوصا stm32f103 البته سرعت اجرا به عوامل زیادی بستگی داره.برای میکروهای ذکر شده در بالا بهترین همون ucgui3.98 یا ucgui 4 هستش.
ولی برای میکروهائی مثل 1788 و stm32f407 می شه به راحتی استفاده کرد.برای برد Discovery قبلا پورت شده emwin رو گذاشته بودم.
ایـــــــــران میـــــــکرو ™ - مشاهده یک موضوع - شروع کار با برد Discovery kit for STM32 F4 series - with STM32F407 MCU (You can see links before reply)

titery
19-02-2013, 21:01
دوستان اگه فایل های EMwin پورت شده برای STM32 رو هم داشتید قرار بدید تا ماهم بیائیم تو کار :wink:
سلام من یک کتابخونه های پورت شده برای stm دارم منتها مال stm32f407 هست حجمش حدود 30mb هست فکر کنم از فروم stm همین سایت دانلود کردم.اگر پیدا نکردید بگید تا آپ کنم؟

sadmonew
19-02-2013, 22:57
دوستان اگه فایل های EMwin پورت شده برای STM32 رو هم داشتید قرار بدید تا ماهم بیائیم تو کار :wink:
سلام
مهندس تو این مسیر پیداش کردم اما خودم باهاش کار نکردم!


C:\Keil4.53_ITD\ARM\Boards\Keil\MCBSTM32C\emWin

mansoory
20-02-2013, 10:29
سلام
مهندس تو این مسیر پیداش کردم اما خودم باهاش کار نکردم!


c:\keil4.53_itd\arm\boards\keil\mcbstm32c\emwin

دستت درد نکنه
واقعا عالی بود. فکر کنم با دیدن این مثالها،مشکل همه با lcd حل بشه.

mbntechco
20-02-2013, 23:05
از دوستان خبری نیست،ظاهرا مهندسین عزیز مشغول کشف emwin هستند،مارو بی نصیب نزارید،فقط اگه میشه از lpc1788 خارج نشید که ثواب داره.ممنون

mansoory
21-02-2013, 09:51
سلام.
انشالله که همگی ال سی دی رو راه انداخته باشند. امروز درباره راه اندازی تاچ توضیح میدم. فقط قبلش باید یه برنامه کوچک بنویسیم:

قبلا توضیح دادم که باید در تابع MainTask برنامه اصلی نوشته بشه. ولی این الزامی نیست.
در تابع Main هم میشه برنامه رو نوشت:


#include "LPC17xx.h"
#include "system_LPC17xx.h"
#include "HWConf.h"
#include "global.h" //Defines U8,U16,…

int main()
{
int i=0;
_low_level_init(); // Updating PLL Settings
HW_X_Config(); // Initializing Systick Interrupt..

//Main Program Starts HERE////
GUI_Init();
GUI_DispStringAt("Hello World!",10,10);
while(1)
{
GUI_DispDecAt(i,30,30);
i++;
if(i>9999) i=0;
}

}
Includeها رو ببینید. تابع main با اجرای دوتابع شروع میشه . اولی _low_level_init() هست که کارش فراخونی تابعی از CMSIS به نام SystemCoreClockUpdate است. تابع دوم هم کارش اینه که وقفه systick رو راه اندازی می کنه. این وقفه برای اجرای تابع GUI_Delay ضروریه.
اصل برنامه با راه اندازیGUI بوسیله دستور GUI_Init شروع میشه. این دستور به نوبه خودش توابع زیر رو فراخوانی میکنه:

1- GUI_X_Config()
2- LCD_X_Config()
3- LCD_X_DisplayDriver
درصورتیکه هرکدوم از این توابع درست تعریف نشده باشند خطای کامپایلر خواهیم داشت یا اینکه LCD کار نمیکنه.
تابع اول محلش در فایل GUIConf.c است و کارش اینه که حافظه مجازی رو برای emwin تنظیم می کنه. تابع دوم و سوم برای تعریف و کانفیگ کردن LCD است.
Emwin دستورات متنوعی برای نمایش متن و اعداد داره. پیشنهاد می کنم به فایل راهنما مراجعه کنید. از اینجا به بعد اگر با eclipse یا visual studio کار نکنید به مشکل می خورید. چون تنوع دستورات و شباهت اسامی در emwin خیلی زیاده و نمیشه توابع رو حفظ کرد.
دستور بعد همونطور که از اسمش پیداست برای ترسیم یک متن در مختصات مشخص شده بکار میره. ولی با فونتی که بصورت default در فایل GUIConf.h مشخص شده. خط بعد هم یک عدد صحیح رو درمختصات مشخص شده نشون میده.
اگه همه چیز درست باشه این برنامه باید کار کنه و شما سرعت نمایش اعداد رو خواهید دید.
در پست بعدی تنظیمات تاچ رو توضیح می دهم

mansoory
21-02-2013, 10:31
پیکربندی تاچ:
ابتدا باید خودتون تاچ اسکرین رو بصورت مجزا راه اندازی کرده باشید. اگه این مساله رو حل کردید به ادامه توضیحات توجه کنید.:
من از دو فایل Touchpanel.h و Touchpanel.c که در سی دی همراه برد بود استفاده کردم. ضمنا درایور تاچ هم ADS7846 است.
توابع زیر در این فایلها وجود داره:

void TP_Init(void);
Coordinate *Read_Ads7846(void);
void TouchPanel_Calibrate(void);
void DrawCross(uint16_t Xpos,uint16_t Ypos);
void TP_DrawPoint(uint16_t Xpos,uint16_t Ypos);
uint8_t setCalibrationMatrix( Coordinate * displayPtr,Coordinate * screenPtr,Matrix * matrixPtr);
uint8_t getDisplayPoint(Coordinate * displayPtr,Coordinate * screenPtr,Matrix * matrixPtr );
int Read_X(void);
int Read_Y(void);

توابع TP_Init و Read_X و Read_Y و Touchanel_Calibrate برای کانفیگ کردن تاچ استفاده می شود. ضمنا باید پایه ای از میکرو که اینتراپت ADS7846 بهش وصل شده رو هم بدونید. که خیلی مهمه.

برای تنظیم کردن تاچ، ابتدا در تابع LCD_X_DisplayDriver بعد از دستور _initController باید تاچ رو initialize کنید. می تونید داخل تابع _initController هم این کار رو انجام بدهید.به هرحال بعد از تعریف LCD باید اینکار انجام بشه.
سپس فایل GUI_X_Touch_StoreState.c رو باز کنید.
تابعی به نام TouchTask وجود داره که این تابع وظیفش کنترل دایم تاچ است که کاربر اون رو لمس کرده یا نه؟
بنابراین این تابع باید مرتب فراخوانی بشه. اگر از سیستم عامل استفاده می کنید. این تابع رو بصورت task تعریف کنید.والا باید از وقفه تایمر استفاده کنید و این تابع رو فراخوانی کنید.
داخل تابع بلافاصله پس از دستور while یک متغیر به نام Pressed می بینید که مقداری نداره. این متغیر باید طوری تعریف بشه که با فعال شدن پایه IRQ ADS7846 مقدارش ست بشه. من اینطوری انجامش دادم:


while(1)
{




Pressed=(LPC_GPIO2->FIOPIN)&(1<<TP_IRQ_PIN_NUM);
if(Pressed==0)
{
درصورتیکه کاربر تاچ رو لمس کنه پایه IRQ اون صفر میشه. بنابراینPressed=0 خواهد شد.
سپس دومتغیر x,y باید با مقادیر خروجی تاچ پر شوند:


if(Pressed==0)
{
x = Read_X();// TBD: Insert function which reads current x value
y = Read_Y();// TBD: Insert function which reads current y value

خب کار ما تقریبا تمومه. نکته ای که مهمه اینه که مختصات توسط دستور GUI_TOUCH_StoreState به emwin اعلام میشه. درصورتیکه کاربر تاچ رو لمس نکرده باشه مقدار -1 ارسال میشه. شما هر وقت به مقادیر Touch نیاز داشتید می تونید متغیری از نوع GUI_PID_State تعیریف کنید و با دستور GUI_TOUCH_GetState(&xxx( به مقادیر مختصات و اینکه کاربر تاچ رو لمس کرده یا نه دسترسی پیدا کنید...
اگر فکر میکنید کار تموم شده اشتباه می کنید. فوت کوزه گری مونده: حالا بایدفایل GUI_X_Touch_Analog.c رو باز کنید. Emwin هنوز نمیتونه با تاچ کار کنه. چون مختصات باید به قسمت PID منتقل بشه. این قسمت کارش کنترل و هماهنگی بین تاچ- ماوس و کیبرده و کلا ورودی های emwin است.
در فایل GUI_X_Touch_Analog.c بصورت زیر تغییراتی اعمال کنید:


#include "GUI.h"
#include "TouchPanel.h"
GUI_PID_STATE tc;
void GUI_TOUCH_X_ActivateX(void) {
// TP_Init();
}

void GUI_TOUCH_X_ActivateY(void) {
// TP_Init();

}

int GUI_TOUCH_X_MeasureX(void) {
// Read_X();
GUI_TOUCH_GetState(&tc);
return tc.x;
}

int GUI_TOUCH_X_MeasureY(void) {
GUI_TOUCH_GetState(&tc);
return tc.y ;
}
خب حالا دیگه حله.
در تابع Main پس از GUI_Init دستور GUI_CURSOR_Show() رو قراردهید. خب الان دیگه باید تاچ کار کنه...
برای کالیبره کردن هم یه فایل به نام TouchCalc.c آپ کردم که در واقع از UCGUI کش رفتم. این تابع_ExecCalibration(void) کالیبره رو بعد از GUI_Init بلافاصله فراخوانی کنید تا کالیبراسیون انجام بشه. اگه مقادیر کالیبراسیون رو دارید که کارتون ساده تر میشه وفقط کافیه که مقادیرتون رو توسط دستور GUI_TOUCH_Calibrate بهش اعلام کنید.
مشکلی بود درخدمتتون هستم.فایلهای مربوطه رو ضمیمه کرده ام.

mansoory
21-02-2013, 11:18
این هم برنامه ای که Multitasking رو در emwin نشون میده.
برنامه برای RTX KEIL نوشته شده. فایل MTMultitasking.c فایل اصلی برنامه است. و فایلهایی هم که در فولدر Config قرار گرفته باید در پوشه همنامش قرار بگیره. از پروژه اصلی تون یه کپی بگیرید و این فایلها رو توش قرار بدهید.
امیدوارم به دردتون بخوره

mansoory
23-02-2013, 12:19
سلام. من یه مساله ای رو در فایل GUI_X_Touch_StoreState.c مشاهده کردم.
درصورتیکه از تایمر برای فراخوانی متناوب تابع استفاده می کنیدحلقه while رو حذف کنید و دوره تناوب تایمر رو روی 20 میلی ثانیه تنظیم کنید. دستور GUI_Delay اخر تابع رو هم حذف کنید
این فایل برای کار در سیستم عامل آماده شده. به همین علت حلقه while ایجاد شده

hossein_tomari007
24-02-2013, 15:38
دوستان و مهندسین عزیز یه سوال
اینکه حتمآ باید ram جانبی برای اینکه بشه با emwin کار کرد استفاده بشه؟؟؟؟ البته با lpc1788 ؟؟؟؟

mansoory
24-02-2013, 15:45
دوستان و مهندسین عزیز یه سوال
اینکه حتمآ باید ram جانبی برای اینکه بشه با emwin کار کرد استفاده بشه؟؟؟؟ البته با lpc1788 ؟؟؟؟

نه. الزامی نیست. 1788 خودش 96 کیلوبایت رم داره که بیشترش قابل استفاده است.
اما درصورتیکه می خواهید از همه قابلیتهای emwin همزمان استفاده کنید و سیستم عامل و FS وغیره هم داشته باشید طبیعیه که رم بالاتری مورد نیازه. 1788 هم که میتونه از رم خارجی استفاده کنه چه بهتر که بهش وصل بشه.
غیر از اون، اگه ازکنترلر ال سی دی 1788 استفاده می کنید اون وقت دیگه رم خود میکرو جوابگو نیست.

at91sam7x256
27-02-2013, 20:23
سلام
دوستان
این emwin رو میشه روی برد 1768 فروشگاه پیادهسازی کرد lcd 3.2
کلا میکرو جوابگو هست

mansoory
28-02-2013, 09:04
سلام
دوستان
این emwin رو میشه روی برد 1768 فروشگاه پیادهسازی کرد lcd 3.2
کلا میکرو جوابگو هست

سلام.
بله به راحتی. من برد LPC1768-Mini-DK دارم که ال سی دی 2.8 داره و جالبه که سرعت ال سی دی اون با اینکه spi است برای اجرای دستورات emwin خوبه. /البته رم کمی که داره _64کیلوبایت که بیشترش قابل استفاده است_ باعث میشه بعضی ازامکانات رو نتونید استفاده کنید که اونا مربوط به transparent , skin و سایر تزیینات پنجره هاست. ولی اصل کار رو میتونید باهاش انجام بدهید.
فکر کنم در صفحه 7 چندتا کلیپ کوچیک گذاشتم که می تونید سرعت اجرای emwin رو توی این برد ببینید.
اگه به رم بالا نیاز دارین یا از فونتهای متنوع truetype استفاده خواهید کرد یااینکه سرعت نمایش بالا نیاز دارید(مثلا انیمیشن یاپخش فیلم) بهتره که از بردهای LPC1788 استفاده کنید

mansoory
02-03-2013, 10:40
سلام.
این فایل ها رو برای راه اندازی ال سی دی -lpc1788 بارم 16مگ آماده کرده ام. توجه کنید که این فایلها باید در مثالی که از lpcware دانلود کرده اید (ورژن 5.18)در فولدرهای همنامش کپی بشه. این فایلها برای مثالهای سی دی همراه برد قابل استفاده نیست.
در ادامه راه اندازی در rtx رو خواهم گفت

kamikazi
02-03-2013, 11:16
با سلام به دوستان یه سوال داشتم با توجه به این کور بردی که تو فروشگاه هست که دو نوع داره یه نوعش اس دی رم 32 بیتی داره و یه نوعش 16 بیتی که این مدل داخل فروشگاه فکر کنم نوع 16 بیتیشو داره حالا میخواستم بدونم استفاده از اس دی رم 16 بیتی فقط بخاطر رزولوشن پایین تر این ال سی دی 4.3 هستش ؟؟ مثلا اگه اس دی رم 32 بیتی بزاریم سرعت رفرش تصویرمون بالاتر میره ؟؟ این مورد رو برای ال سی دی 7 و 9 اینچ میپرسم که رزولوشن بالاتری داره و رم بالاتریو میطلبه

mansoory
02-03-2013, 12:36
با سلام به دوستان یه سوال داشتم با توجه به این کور بردی که تو فروشگاه هست که دو نوع داره یه نوعش اس دی رم 32 بیتی داره و یه نوعش 16 بیتی که این مدل داخل فروشگاه فکر کنم نوع 16 بیتیشو داره حالا میخواستم بدونم استفاده از اس دی رم 16 بیتی فقط بخاطر رزولوشن پایین تر این ال سی دی 4.3 هستش ؟؟ مثلا اگه اس دی رم 32 بیتی بزاریم سرعت رفرش تصویرمون بالاتر میره ؟؟ این مورد رو برای ال سی دی 7 و 9 اینچ میپرسم که رزولوشن بالاتری داره و رم بالاتریو میطلبه

اونطور که emwin در راهنماش گفته، مقدار رم خود ال سی دی (که در 1788 با رم میکرو مشترک شده) با این فرمول حساب میشه:

تعداد پیکسهای ستون * تعداد پیسکهای سطر * bpp
bit per pixel=bpp
نتیجه برحسب بیت است.
مثلا برای ال سی دی ili9320 رم ال سی دی بصورت زیر محاسبه میشود:
320*240*18=1382400 بیت یا 172800 بایت.


اگر شما رم بیشتری داشته باشید می تونید در فایل GUIConf.C فضای بیشتری به emwin اختصاص بدهید تا از اون برای MEMDEVICE استفاده کنه.
برای توضیح اینکه MEMEDEVICE چیه، فرض کنید که دوتا پنجره رسم کرده ایم. ویکی از پنجره ها را باید move کنیم. اگر بخواهیم اینها را مستقیما به ال سی دی بفرستیم، در هر ریفرش، اینطوری باید ترسیمات انجام بشه:
1- اول desktop که زمینه است باید ترسیم بشه
2- پنجره ای که ارتقاع پایین تری داره رسم بشه
3- پنجره ای که ارتفاع بالاتری داره رسم بشه.
مشاهده می کنیدکه سه سری اطلاعات باید به ال سی دی منتقل بشه. دراینصورت شما شاهد حرکت یکنواخت پنجره درحال حرکت نخواهید بود. در سرعتهای پایین تر حتی می توانید ترسیم پی در پی مراحل 1 تا 3 رو ببینید. این پر پر زدن تصویر رو در emwin گفته اند Flickering

حالا اگه از MEMDEVICE استفاده بشه، سی پی یو همه ترسیمات مرحله 1 تا 3 رو روی بلوکی از حافظه پیاده می کنه سپس نتیجه رو در یک مرحله به ال سی دی منتقل می کنه.
بنابراین پاسخ سوال شما بلی است. حتی اگر بعلت سرعت بالای ال سی دی ها شما متوجه پرپر زدن تصویر نشوید ...

kamikazi
02-03-2013, 13:48
خیلی عالی بود مهندس منصوری توضیحاتتون کامل و بی نقص بود من طراحی برد LPC1788 رو تموم کردم و بردشو دادم بزنن چون روی بردم مشکل فضا داشتم مجبور شدم یه SDRAM سیو دو بیتی بجای 2 تا SDRAM شانزده بیتی بزارم گفتم شاید مشکلی برای اون کسی که بخواد با رزولوشن های پایین کار کنه پیش بیاد که با توضیحات شما رفع شد برای تست برد هم هر دوتا کانکتور ال سی دی 4.3 و 7 رو گزاشتم

البته یه گله ای از دوستان دارم که خودمم همین مشکل رو دارم وقتی در مورد یه مطلبی چیزای زیادی میدونم خیلی سخت مطلبمو به دیگران میرسونم دلیلشم اینکه تصور میکنم دیگران هم مطالبی رو که من میدونم میدونن و کاملا روش مسلط هستن ولی واقعیتش اینکه خیلی از دوستان مطالبی رو که ما میدونیم نمیدونن و باید یکم سطح توضیحاتمون رو پایین بیاریم
البته ببخشیدا در مورد همین نرم افزار EMWIN من یه روز کمل داشتم باهاش ور میفرتم ببینم داستانش چیه و اینکه باهاش یه برنامه ای رو کامپایل کنی و چنتا پنجره بسازی و ..... چطور اجرا کنید رو یاد بگیرم
دوست داشتم مهندس منصوری شما که کاملا روی این نرم افزار تسلط دارید تو یه پست از اول تا اخر یه برنامه خیلی سادرو اموزش بدید که دوستان سردرگم نشن مطالب یکم بینندرو گیج میکنه مخصوصا ما بی تجربه هارو cry::

mansoory
02-03-2013, 14:02
خیلی عالی بود مهندس منصوری توضیحاتتون کامل و بی نقص بود من طراحی برد LPC1788 رو تموم کردم و بردشو دادم بزنن چون روی بردم مشکل فضا داشتم مجبور شدم یه SDRAM سیو دو بیتی بجای 2 تا SDRAM شانزده بیتی بزارم گفتم شاید مشکلی برای اون کسی که بخواد با رزولوشن های پایین کار کنه پیش بیاد که با توضیحات شما رفع شد برای تست برد هم هر دوتا کانکتور ال سی دی 4.3 و 7 رو گزاشتم

البته یه گله ای از دوستان دارم که خودمم همین مشکل رو دارم وقتی در مورد یه مطلبی چیزای زیادی میدونم خیلی سخت مطلبمو به دیگران میرسونم دلیلشم اینکه تصور میکنم دیگران هم مطالبی رو که من میدونم میدونن و کاملا روش مسلط هستن ولی واقعیتش اینکه خیلی از دوستان مطالبی رو که ما میدونیم نمیدونن و باید یکم سطح توضیحاتمون رو پایین بیاریم
البته ببخشیدا در مورد همین نرم افزار EMWIN من یه روز کمل داشتم باهاش ور میفرتم ببینم داستانش چیه و اینکه باهاش یه برنامه ای رو کامپایل کنی و چنتا پنجره بسازی و ..... چطور اجرا کنید رو یاد بگیرم
دوست داشتم مهندس منصوری شما که کاملا روی این نرم افزار تسلط دارید تو یه پست از اول تا اخر یه برنامه خیلی سادرو اموزش بدید که دوستان سردرگم نشن مطالب یکم بینندرو گیج میکنه مخصوصا ما بی تجربه هارو cry::

لطف داری. ما هنوز در مرحله راه اندازی emwin هستیم. واقعیتش این تجربه اول من در پست نوشتنه. دیگه باید ببخشید.
درباره تسلسل و ترتیب مطالب هم قصدم این بوده که اول بتونیم ال سی دی رو برای emwin درست تعریف کنیم و بعد تاچ و بعد از اون، emwin رو در RTOS راه بیاندازیم. بعدش آموزش اصلی emwin شروع بشه. ولی بحث خیلی به حاشیه میره و من هم از دوستان بازخورد زیادی نمی بینم. به همین دلیل مشخص نیست که موفق شدن که emwin رو راه بیاندازند یا نه؟برای ادامه کار هم اگه نتوانند ال سی دی رو راه اندازی کنند بقیه داستان به دردشون نمیخوره که

kamikazi
02-03-2013, 15:12
مهندس شما کاملا درست میفرمایید منم انشا الله تا اخر هفته قطعات دستم برسه شروع میکنم و بردو منتاژش میکنم بعید میدونم مشکلی داشته باشه ولی مهندس من تمام پستهاتون رو مو به مو دنبال میکردم ولی چون بردی برای تست نداشتم نمیتونستم بیام تو کار
متاسفانه این برنامه emwin با تمام برنامه هایی که کار میکردیم یکم متفاوته و اگه کسی خوب اونو یاد بگیره و بتونه اونو انتقالش بده به دیگران خیلی کار دوستان راه میافته اگر توجه کنید کار کردن باهاش یه نکات خیلی ریز رو میطلبه که افرادی که باهاش کار کرده باشن میتونن این نکاتو پیدا کنن به هر حال مهندس تا اینجارو خوب پیش رفتید و عالی دارید جلو میرید بی صبرانه منتظر رسیدن قطعات برای شروع هستم

mansoory
02-03-2013, 16:00
راه اندازی emwin در RTX:
یکی از قابلیتهای Emwin اینه که مدیرپنجره ی اون، می تونه در RTOS کار کنه. بنابراین ایجاد یک پنجره مجزا برای هر task در RTOS امکان پذیره.
من چون به RTX KEIL دسترسی داشتم، در اون محیط emwin رو راه اندازی کردم که البته خیلی ساده است. در فولدری که KEIL نصب شده، به شاخه زیر مراجعه کنید:
KEIL\ARM\SEGGER\EMWIN\SAMPLE\GUI_X
اونجا فایلی به نامGUI_X_RTX.c مشاهده می کنید که درواقع چند تا تابع مثل task lock- os-dly-wait و غیره رو برای emwin معرفی کرده. اون فایل رو به پروژه خودتون اضافه کنید.سپس در فایل GUICONF.H ماکروی GUI_OS رو برابر با یک قرار بدهید. ضمنا ماکروی GUI_MAXTASK حداکثر تسکهایی رو که با emwin سروکار دارند معرفی میکنه


__task void _mtask(void);
void _mtask(void)
{
while(1)
{
// GUI_Exec();
WM_Exec();
GUI_X_ExecIdle();

}

}

کاراین تسک اینه که به emwin فرصت اجرای دستورات رو میده. یعنی اگه شما دستور رسم پنجره روبدهید ولی GUI_Exec رو بعدش ننویسید اتفاقی نمی افته!
درصورتیکه از window manager استفاده نمی کنید بجای دستور WM_Exec از دستور GUI_Exec استفاده کنید.اولویت اینtask رو پایین بگیرید. نکته مهم و اساسی در این مورد اینه که این تسک با وجود اینکه 4تا خط بیشتر نیست ولی به stack بالایی نیاز داره. اگه emwin رو اجرا کردید و دیدید که نمیتونه پنجره رسم کنه اول از همه به مقدار stackی که بهش اختصاص دادید شک کنید. من به عدد 2000 بایت رسیدم. باتوجه به اینکه حافظه میکروهایی مثل 1768 محدودهف نمیشه از تنظیمات پیشفرض RTX در stack استفاده کرد (آنچه که در فایل RTX_Config.c تنظیم می کنید مناسب emwin نیست).
بنابراین این task را باید بصورت user تعریف کنید و حافظه مناسب رو بهش اختصاص بدهید:


OS_TID id_main,id_touch,id_ls,id_sim,id_sensors;
static U64 stk[2000/8],stk2[2000/8];

این هم تعریف تسک در برنامه:


id_main=os_tsk_create_user(_mtask,2,stk,sizeof(stk ));

یک تسک باstack کوچک حدود 200بایت برای تابع TouchTask __مستقر در فایل Touch_store_state.C__ درست کنید تا ارتباط با تاچ برقرار بشه (در انتهای حلقه while این تابع، از دستور GUI_X_Delay(20) استفاده کنید تا 20 میلی ثانیه تاخیر ایجاد بشه و ضمنا کنترل برنامه به تسک دیگه ای منتقل بشه.اولویت این تسک رو هم پایین قراربدهید. کل تابع TouchTask اینجا نشون داده میشه:


__task void TouchTask(void);

void TouchTask(void) {
static U16 xOld;
static U16 yOld;
static U8 PressedOld;
U16 x, y, xDiff, yDiff;
U32 Pressed;

while(1)
{




Pressed=(LPC_GPIO2->FIOPIN)&(1<<TP_IRQ_PIN_NUM);
if(Pressed==0)
{
x = Read_X();// TBD: Insert function which reads current x value
y = Read_Y();// TBD: Insert function which reads current y value
//
// The touch has already been pressed
//
if (PressedOld == 1)
{
//
// Calculate difference between new and old position
//
xDiff = (x > xOld) ? (x - xOld) : (xOld - x);
yDiff = (y > yOld) ? (y - yOld) : (yOld - y);
//
// Store state if new position differs significantly from old position
//
if (xDiff + yDiff > 2)
{
xOld = x;
yOld = y;
GUI_TOUCH_StoreState(x, y);
}
}
//
// The touch was previously released
// Store state regardless position
//
else
{
if ((x != 0) && (y != 0))
{
xOld = x;
yOld = y;
PressedOld = 1;
GUI_TOUCH_StoreState(x, y);
}
}

}

//
// Touch screen is not pressed
// Store state if it was released recently
//

else {
if (PressedOld == 1) {
PressedOld = 0;
GUI_TOUCH_StoreState(-1, -1);
}

}

//
// Make sure
//
GUI_TOUCH_Exec();
GUI_X_Delay(20);
} ;
}
میبینید که در انتهای حلقه while دستور GUI_X_Delay(20) بکار رفته.
نکته: انجام اینکار درصورتیکه با RTOS کار نکرده اید توصیه نمیشه. بهتره پس از تسلط روی RTX اینکار رو انجام بدهید. مدیر پنجره میتونه بدون RTOS هم کار کنه. خیلی نگران نباشید.

خب در پست بعدی انشالله کار با emwin رو شروع میکنم. اگه کسی از دوستان هنوز موفق به راه اندازی ال سی دی و تاچ نشده میتونه همینجا مطرح کنه تا با همفکری بتونیم بسرعت مشکل رو حلش کنیم.

titery
03-03-2013, 00:19
سلام به دوستان تو این مدت که نبودم داشتم رو تاچ کار میکردم و به کمک آقای منصوری جواب داد و فایل هایی که آقای منصوری زحمتش رو کشیدند رو برد فروشگاه کار میکنه:wink:

mbntechco
05-03-2013, 00:16
مهندس وثوق اگه امکان داره فایلایی رو که تا اینجا جواب گرفتینو قرار بدین تا بقیه دوستان هم استفاده کنن،البته اگه تمایلی دارید،یه سوالی هم دارم ؛ وقتی با gui_builder فایل مورد نظرو میسازیم شکل button که موقع ساخت میبینیم با اونیکه موقع کامپایل و دانلود روی lcd میبینیم تفاوت داره،اگه در این مورد هم راهنمایی بفرمایید ممنون میشم

mansoory
05-03-2013, 10:53
...یه سوالی هم دارم ؛ وقتی با gui_builder فایل مورد نظرو میسازیم شکل button که موقع ساخت میبینیم با اونیکه موقع کامپایل و دانلود روی lcd میبینیم تفاوت داره،اگه در این مورد هم راهنمایی بفرمایید ممنون میشم

احتمالا ماکروی مرتبط به SKIN در پروژه شما فعال است. به صفحه 764 راهنمای emwin مراجعه کنید. skin پیشفرض با حالت کلاسیک که در GUIBUILDER مشاهده می کنید تفاوت داره.

در فایل guiconf.h این ماکرو را قراردهید:


#define WIDGET_USE_FLEX_SKIN 1
مقدار 1 موجب استفاده از SKIN پیشفرض خواهد شد و مقدار صفر به معنای حالت کلاسیک است

titery
06-03-2013, 18:24
سلام بفرمایید اینم سمپل من Start5.18 picturfe&touch.rar (You can see links before reply)

mansoory
07-03-2013, 12:20
سلام
انشالله که دوستان همگی موفق به راه اندازی ال سی دی و تاچ شده باشند. این آخرین پست منه و درباره Window Manager توضیحاتی خدمتتون میگم:
Window Manager
مدیرپنجره های emwinکارش رسم پنجره ها و Widgetها، ریفرش اونها و همچنین تولید رویدادهای مربوط به آنهاست.
برای شروع کار باید هدرش رو include کنید:
#include “WM.h”
شروع تابع MainTask همیشه با GUI_Init است. همونطور که قبلا گفتم کارش راه اندازی ال سی دی و تاچه. برای راه اندازی مدیرپنجره دستور WM_Init رو بلافاصله پس از GUI_Init بنویسید.


void MainTask(void);
void MainTask(void){
GUI_Init();
WM_Init();
GUI_CURSOR_Show();
WM_SetDesktopColor(GUI_BLACK);
#if GUI_SUPPORT_MEMDEV
WM_SetCreateFlags(WM_CF_MEMDEV);
#endif

کدهایی که ملاحظه می کنید تقریبا در تمام برنامه ها باید نوشته بشه. خط سوم GUI_CURSOR_Show همونطور که از نامش پیداست برای اینه که ماوس نمایش داده بشه. اگه شما ماوس رو نمی بینید دلیلش اینه که تاچ درست کالیبره نشده. خط بعدی رنگ دستکاپ رو مشخص می کنه. و در خط بعد درصورتیکه در فایل GUI_Conf.h مقدار ماکروی GUI_SUPPORT_MEMDEVICE رو یک کرده باشید اجرا میشه و پرچم مربوطه رو ست می کنه تا WM از حافظه مجازی استفاده کنه.
در WM پنجره ها از نوع ساختاری به نامWM_HWIN هستند. پنجره ای به نام DESKTOP به محض این که WM_Init اجرا بشه ساخته میشه. این پنجره همیشه وجود داره و مثل دستکاپ ویندوز پایین ترین پنجره است. اگه با برنامه نویسی تحت ویندوز آشنایی دارید کار راحتی با emwin خواهید داشت. پنجره ها دارای خواصی مانند پنجره های ویندوز هستند. یکی از اون خواص ارتفاع پنجره هاست. Desktop پایین ترین پنجره است و همیشه اولین پنجره ای است که در فرایند WM_PAINT ترسیم میشه. هندل این پنجرهWM_HBKWIN است. هر پنجره می تونه Parent یا Child باشه. توجه کنید که همه Widget ها از نوع پنجره Child هستند. پس دستوراتی که در emwin مربوط به روابط فرزند و والد هست رو از راهنماش بخونید. پنجره های Parent دارای تابعی به نام Callback هستند که در واقع تمامی رویدادهای مربوط به اون پنجره و فرزندانش رو باید در تابع Callback مربوط به اون پنجره مدیریت بفرمایین.
برای اینکه آموزش روالی داشته باشه بیایید یکی از مثالهای emwin رو باهم مرور کنیم.
این کارهارو در keil انجام بدهید:
در شاخه Application اگر فایلی وجود داره حذفش کنید. در عوض فایل WM_Sample.C رو از مسیر Sample\Tutorial به شاخه Application اضافه کنید.
می تونید کامپایلش کنید و ببینید که چه کارهایی انجام میده.
خب شرح توضیحات رو از تابع MainTask شروع می کنیم.
در این تابع ابتدا GUI و WM راه اندازی میشه.


void MainTask(void) {
GUI_Init();
WM_Init();
GUI_SetBkColor(GUI_BLACK);
WM_SetCreateFlags(WM_CF_MEMDEV);
WM_EnableMemdev(WM_HBKWIN);
while (1) {
_DemoSetDesktopColor();
_DemoCreateWindow();
_DemoCreateWindowAsChild();
_DemoInvalidateWindow();
_DemoBringToTop();
_DemoMoveTo();
_DemoBringToBottom();
_DemoMoveWindow();
_DemoHideShowParent();
_DemoHideShowChild();
_DemoClipping();
_DemoRedrawing();
_DemoResizeWindow();
_DemoSetCallback();
_DemoDeleteWindow();
}
}

در تابع فوق پس از مقدار دهی های اولیه دستوری مشاهده می کنید که استفاده از حافظه مجازی رو برای پنجره Desktop مجاز می کنه. درواقع این مساله رو برای همه پنجره ها باید مشخص کنید. توابع حلقه while رو ببینید:


_DemoSetDesktopColor();
برای اینکه رنگ پنجره Desktop رو عوض کنه:
static void _DemoSetDesktopColor(void) {
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
_DrawInfoText("WM_SetDesktopColor()");
GUI_Delay(SPEED*3/2);
WM_SetDesktopColor(GUI_BLACK);
GUI_Delay(SPEED/2);
/* Set background color and invalidate desktop color.
This is needed for the later redrawing demo. */
GUI_SetBkColor(GUI_BLACK);
WM_SetDesktopColor(GUI_INVALID_COLOR);
}
دستورات کاملا گویا است. دو دستور GUI_SetBkColor وWM_SetDesktopColor باهم فرق می کنند. اولی رنگ پس زمینه و دومی رنگ پنجره Desktop است. داستان مربوط به رنگها رو باید خودتون از راهنما بخونید. خیلی ساده است. نکته جالب اینه که اگه برای دسکتاپ رنگ مشخص نکنید، اون نمیتونه خودش رو ریفرش کنه. بنابراین اثر سایر پنجره ها روش می مونه.
برای ایجاد تاخیر از دستور GUI_Delay یا GUI_X_Delay استفاده کنید.
دستور GUI_Clear وظیفه اش پاک کردن صفحه نمایش یا پنجره است. درصورتیکه پنجره ای Active باشه پاک میشه وگرنه دستکتاپ پاک خواهد شد. درصورتیکه WM استفاده نکنید این دستور صفحه رو پاک می کنه (با رنگBkColor پر می کنه)
خط بعد تابع _DrawInfoText("WM_SetDesktopColor()");رو فراخوانی کرده:


static void _DrawInfoText(char* pStr) {
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("WindowManager - Sample", 160, 5);
GUI_SetFont(&GUI_Font8x16);
GUI_DispStringAtCEOL(pStr, 5, 40);
}
در این تابع ابتدا رنگ قلم رو سفید معرفی کرده سپس فونت رو انتخاب کرده (فونت رو باید با ابزار FontConvertor که در فولدر tools هست بسازید وبه پروژه add کنید. دستور بعدی میگه که یک متنی رو در مختصات 160و5 بنویس با این شرط که از نظر افقی مختصات داده شده وسط متن بیافته. HCenter
سپس فونت عوض میشه و دستور بعدی هم متنی که ورودی تابع هست رو در مختصات 5و40 مینویسه البته طوری که هم بصورت افقی و هم عمودی در مرکز این مختصات قرار گرفته باشه . عبارت EOL یعنی بقیه خط رو با SPACE تا انتها پر کنه.
تابع بعدی که خیلی هم مهمه اینه. با یادگیری اون همه چیز درباره پنجره هاروشن میشه:


static void _DemoCreateWindow(void) {
/* Set callback for background window */
_cbBkWindowOld = WM_SetCallback(WM_HBKWIN, _cbBkWindow);
/* Create windows */
_ChangeInfoText("WM_CreateWindow()");
GUI_Delay(SPEED);
_hWindow1 = WM_CreateWindow( 50, 70, 165, 100, WM_CF_SHOW | WM_CF_MEMDEV, _cbWindow1, 0);
GUI_Delay(SPEED/3);
_hWindow2 = WM_CreateWindow(105, 125, 165, 100, WM_CF_SHOW | WM_CF_MEMDEV, _cbWindow2, 0);
GUI_Delay(SPEED);
}

گفتیم که هر پنجره باید دارای تابع Callback باشه. پنجره دستکتاپ مهمترین پنجره است و باید دارای تابع cb باشه. دستوری به نام WM_SetCallback کارش اینه که تابع cb یک پنجره رو مشخص می کنه. باید ID پنجره رو به همراه اشاره گر تابع مربوطه بهش معرفی کنید.تابع cb باید الگوی خاصی داشته باشه که بعدا خواهم گفت. دستوری که یک پنجره ایجاد میکنه اسمش WM_CreateWindow است:


_hWindow1 = WM_CreateWindow( 50, 70, 165, 100, WM_CF_SHOW | WM_CF_MEMDEV, _cbWindow1, 0);
صورت کلی اون به این صورته:


WM_HWIN WM_CreateWindow(int x0, int y0,
int width, int height,
U32 Style, WM_CALLBACK * cb
int NumExtraBytes);
ارگومانهای اول و دوم مختصات گوشه بالا سمت چپ پنجره است و دو آرگومان بعدی طول و عرض اون پنجره است. آرگومان بعد پرچمهایی است که باید ست کنید. لیست همه پرچمها رو درصفحه350 میتونید ببینید. مهمترینهاش ایناست:
WM_CF_MEMDEV: برای اینکه از حافظه مجازی استفاده شود (برای ریفرش)
WM_CF_SHOW: پنجره به محض ایجاد نمایش داده شود
WM_CF_STAYONTOP: بالاتر از سایرپنجره ها قرار گیرد
WM_CF_HIDE: در لحظه ایجاد نمایش داده نشود.
پرچمها رو با |درهم ادغام کنید.

آرگومان بعدی اشاره گری به تابع Callback این پنجره است که باید بهش معرفی کنید. و آخری هم آرگومان اختیاری است که معمولا صفر مقداردهی می شود.خروجی دستور باید در متغیری از نوع WM_HWIN قرار گیرد که بعوان ID یا Handle پنجره برای دسترسی به اون مورد استفاده قرار میگیره.

static WM_HWIN _hWindow1;
خب بریم سروقت مهمترین و آخرین چیزی که خدمتتون عرض میکنم:
CALLBACK ROUTINE
ابتدا Callback پنجره ِدستکتاب رو ببینیم. قبلا گفتم که این پنجره بلافاصله پس از initialize شدن WM ایجاد میشه و بصورت پیشفرض فاقد تابع callback است. با دستور WM_SetCallback تابع _cbBkWindow رو بعنوان Callback دستکتاپ بهش معرفی کرده ایم. این تابع رو ببینیم:

static void _cbBkWindow(WM_MESSAGE* pMsg) {
switch (pMsg->MsgId) {
case MSG_CHANGE_TEXT:
strcpy(_acInfoText, pMsg->Data.p);
case WM_PAINT:
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("WindowManager - Sample", 160, 5);
GUI_SetFont(&GUI_Font8x16);
GUI_DispStringAt(_acInfoText, 5, 40);
break;
default:{
WM_DefaultProc(pMsg);
break;}
}
}
الگوی توابع Callback باید بصورت زیر باشه:

static void _cbBkWindow(WM_MESSAGE* pMsg)
ساختارWM_MESSAGE پیامی است که از WM به این تابع ارسال میشه. این ساختار دارای عضوهای زیر است: Data,MsgId,hWin, hWinSrc
عضو MsgId پیام اصلی رو مشخص می کنه. مهمترین پیامی که به یک پنجره فرستاده میشه WM_PAINT است. هر وقت این پیام دریافت بشه پنجره باید خودش رو ترسیم کنه. بنابراین آنچه که میخواهید در پنجره دیده بشه رو باید اینجا بنویسید.(در case WM_PAINT)
در case WM_PAINT مراحل ترسیم رو مرور می کنیم:
دستور GUI_SetBkColor رنگ زمینه پنجره فعال (اینجا دستکتاپ) رو مشخص می کنه.
دستور GUI_Clear پنجره فعال رو پاک می کنه (بارنگی که در دستور قبل مشخص کرده ایم)
دستور GUI_SetColor رنگ قلم رو مشخص می کنه و دستورات بعدی متنهایی رو در این پنجره می نویسه. متن دوم رو ببینید...
کیس default بسیار مهمه و همیشه باید به اینصورت پر بشه:

default:{
WM_DefaultProc(pMsg);
break;}
اینکار موجب میشه که پیام WM جهت پردازش سایر پنجره ها (فرزندان) به WM برگردانده شود. این کیس رو برای همه توابع CallBack باید بنویسیم... پیامهای WM خیلی مهم هستند. لیست کامل اونها رو در صفحه335 ببینید. WM_NOTIFY_PARENT یکی از مهمترین پیامهاست و نشون میده که پیامی برای فرزند پنجره اصلی صادر شده است که محتویات آن در data قرارگرفته است.
خب اگه Callback های دیگه رو هم مطالعه کنید دستورات جالبی در اونها می بینید.
static void _cbWindow1(WM_MESSAGE* pMsg)
اجازه بدهید نحوه ساخت پنجره فرزند رو باهم ببینیم:

static void _DemoCreateWindowAsChild(void) {
/* Create windows */
_ChangeInfoText("WM_CreateWindowAsChild()");
GUI_Delay(SPEED);
_hChild = WM_CreateWindowAsChild(10, 50, 145, 40, _hWindow2, WM_CF_SHOW | WM_CF_MEMDEV, _cbChild, 0);
GUI_Delay(SPEED);
}

دستور WM_CreateWindowAsChild مثل دستور ساخت پنجره معمولیه با این تفاوت که در آرگومان پنجم باید هندل پنجره والد رو بهش معرفی کنید. ضمن اینکه مختصات هم نسبت به پنجره والد سنجیده شده است. Callback پنجره _hWindow2 باید چیز جالبی باشه. چون علاوه بر رویدادهای پنجره والد، باید رویدادهای پنجره فرزند رو هم هندل کنه. البته توی این مثال بهش پرداخته نشده ولی من در مثال دیگه ای خدمتتون خواهم گفت. خب WM بطور اتوماتیک پنجره هایی رو که حرکت یا تغییر دارند بهشون پیام WM_PAINT رو می فرسته. فرض کنید که متنی قراره در پنجره نمایش داده بشه که توی یک متغیر قرار گرفته. و ما محتوای متغیر رو خارج از تابع Callback تغییر بدهیم. حالا WM از کجا بفهمه که باید پنجره ترسیم مجدد بشه؟ با دستور WM_InvalidateWindow بهWM می فهمانیم که پنجره ای نیاز به ترسیم مجدد داره.WM میتونه کل پنجره یا قسمتی از اون که نیاز به ترسیم مجدد داره رو ریفرش کنه WM_CLIPPING رو بخونید.
اجازه بدهید برای توضیح callback پنجره های فرزند این تابع رو مطالعه کنیم (از فایلWindow_DLG.c)

static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
int Id, NCode;
// USER START (Optionally insert additional variables)
// USER END

switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
//
// Initialization of 'Window'
//
hItem = pMsg->hWin;
WINDOW_SetBkColor(hItem, 0x00000000);
// USER START (Optionally insert additional code for further widget initialization)
// USER END
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_0: // Notifications sent by 'Button'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
// USER START (Optionally insert additional code for further Ids)
// USER END
}
break;
// USER START (Optionally insert additional message handling)
// USER END
default:
WM_DefaultProc(pMsg);
break;
}
}
فرض کنید پنجره ای ساخته ایم و یک Button در آن قرار داده ایم. (توجه کنید که Button و همه widgetها از نوع پنجره فرزند هستند) و می خواهیم رویداد های اون رو پردازش کنیم. برای پردازش رویدادهای پنجره های فرزند باید از کیس WM_NOTIFY_PARTENT استفاده کنیم. برای اینکه بفهمیم رویداد مربوط به کدام فرزند است دو متغیر به نام Id و Ncode تعریف شده اند. اولی بادستورWM_GetId آی دی پنجره فرزند را استخراج می کنیم و کنترل می کنیم که چی است

switch(Id) {
case ID_BUTTON_0: // Notifications sent by 'Button'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
در این کیس می تونید آنچه را که باید درهنگام کلیک شدن Button_0 باید انجام شود را بنویسید.

WM پنجره رو می تونه بصورت Dialog هم نمایش بده. این حالتیه که فایل GUIBuilder تولید می کنه. خیلی سخت نیست. توضیح اینه که پنجره به همراه همه Widgetها همزمان تولید میشه. Widgetها دارای IDهایی هستند که در فایل GUI.h مشخص شده ولی شما می تونید اونها رو عوض هم بکنید. فقط مواظب باشید تداخلی پیش نیاد.

فکر کنم نتونستم اونطور که باید آموزش بدم .مطالب من خیلی پراکنده بوده . به هرحال تجربه اول من در نوشتن پست بوده. امیدوارم ببخشید.مطالب خیلی خیلی زیادی هم مونده .. بهتره agape یا یکی از دوستان که تسلط کافی داره و بیانش هم خوبه بحث رو ادامه بده.

موفق باشید.

mansoory
09-03-2013, 11:16
SIMULATION!!!!
سلام دوباره.
اینم پروژه Visual Studio که برای شبیه سازی Application های emwin است. همه نمونه های emwin که در
سایتش مشاهده می کنید که فایلهای اجرایی ویندوز هستند، با این پروژه درست شده اند(فکر کنم آقای رییسی دنبال این پروژه بود). انشالله که مفید باشه. فراموش نکنید که هیچ هدر، تابع یا ریفرنسی از میکروی خودتون، نباید در فایل شبیه سازی وجود داشته باشه چون میکرو و Peripheral های اون در این پروژه شبیه سازی نمیشه. این پروژه فقط و فقط برای شبیه سازی emwin است. در راهنمای emwin هم گفته که باید پروژه ها تون رو طوری بنویسید که اپلیکیشن emwin (یعنی فایلی که شامل MainTask است)،از سخت افزارتون مستقل باشه. می تونید هرجا که به سخت افزار اشاره می کنید قبلش این شرط رو قرار بدهید:

#ifndef _WINDOWS
یا

#ifndef WIN32
استفاده کنید و در انتها هم endif# رو قرار بدهید

ابعاد LCD مورد نظرتون رو در فایل LCDConf.C می تونید معرفی کنید.بصورت پیشفرض 320*240 است. درصورتیکه سایز بالاتری استفاده می کنید، فراموش نکنید که رم مورد نیاز رو هم در فایل GUIConf.C افزایش بدهید.

با توجه به توضیحات بالا، شما برای شبیه سازی برنامه خودتون، باید فایلتون رو که شامل تابع MainTask هست، در شاخه Application قرار بدهید (فایلهای دیگری که ممکن است در این شاخه موجود باشه رو حذف کنید). پس از کامپایل با Visual Studio ، خروجی در فولدر Exe قرار می گیرد. (درحال حاضر برنامه دموی emwin در این فولدر قراردارد)
این فایل رو براتون آپلود کردم (در گوگل درایو). (جهت دانلود-پس از باز شدن کامل صفحه و نمایش محتویات فایل زیپ شده توسط گوگل، از منوی فایل گزینه دانلود را انتخاب کنید)
SeggerEval_WIN32_MSVC_MinGW_GUI_V518.zip - Google Drive (You can see links before reply)

mbntechco
09-03-2013, 22:07
سلام مهندس منصوری،سپاس و باز هم سپاس بابت تلاشتون و بابت قرار دادن اطلاعات مفیدتون،خدا خیرتون بده،اینو از ته ته دل میگم.
یه سوالی دارم،ما روی coreboard یه دونه sdram داریم که تکلیفش معلومه،اما دوتا فلش هم داریم ،nand flash و nor flash ،اگه امکان داره توضیح بدین که این دوتا چه نقشی دارن،اگه فرضو بر این بزاریم که برای کد های بزرگتر از 512 کیلوبایت باید از یکی از این دوتا استفاده کرد اونی که استفاده میشه کدومه و اون یکی چی میشه؟ و اگه قراره برای کدهای بزرگتر از 512 کیلوبایت از فلش خارجی استفاده کنیم از چه تابع یا دستوری باید استفاده کرد.ممنونم از توجهتون

mansoory
10-03-2013, 09:52
[یه سوالی دارم،ما روی coreboard یه دونه sdram داریم که تکلیفش معلومه،اما دوتا فلش هم داریم ،nand flash و nor flash ،اگه امکان داره توضیح بدین که این دوتا چه نقشی دارن،اگه فرضو بر این بزاریم که برای کد های بزرگتر از 512 کیلوبایت باید از یکی از این دوتا استفاده کرد اونی که استفاده میشه کدومه و اون یکی چی میشه؟ و اگه قراره برای کدهای بزرگتر از 512 کیلوبایت از فلش خارجی استفاده کنیم از چه تابع یا دستوری باید استفاده کرد.

لطف دارید. البته سوال شما خارج از موضوع تایپکه. من هم اطلاعات خیلی دقیقی درباره اختلاف NAND FLASH و NOR FLASH ندارم. این لینک (You can see links before reply) تفاوت اونها رو توضیح داده:

1- آدرس دهی به حافظه:
NAND FLASH: فقط به بلوکهای 512 یا 2048 بایتی دسترسی دارید (برای خواندن یا نوشتن)
NOR FLASH: دسترسی تصادفی به کل حافظه (بایت به بایت)، به این نوع دسترسی Memory-mapped addresses گفته میشه.
از این اختلاف میشه نتیجه گرفت که NandFlash برای حافظه برنامه و NorFlash برای حافظه داده ماندگار(شبیه به کاربرد EEPROM) مناسبه.

2- دسترسی مستقیم برای نوشتن و خواندن: (شبیه به رم)
NandFlash: خیر
NorFlash: بله
3-برای دوباره نویسی حافظه باید اول حافظه erase شود؟
NandFlash: در نوع SLC بله و در نوع MLC خیر
NorFlash: خیر
3- معمولا حافظه های NAND در مقایسه قیمتی، حجم بیشتری دارند و بعنوان حافظه برنامه بکار میروند. ضمنا، دارای مکانیزمی برای رفع خطاهای احتمالی در نوشتن هم هستند.

اینکه چطوری میشه توی این حافظه برنامه نوشت رو نمیدونم؛ ولی برای اجرای برنامه حافظه NandFlash، در KEIL، با معرفی آدرس شروع و پایان حافظه در صفحه تنظیمات پروژه( در قسمت ROM1، ROM2 و ROM3 ) و انتخابش بعنوان Startup(درصورتیکه میخواهید اجرای برنامه از حافظه جانبی آغاز شود)، دسترسی بهش امکانپذیرمیشه.

akbh
12-03-2013, 21:38
با تشکر از همه مخصوصا مهندس منصوری
میشه بیشتر در مورد lpc1768 و stm32f103 توضیح بدید و از برنامه های سمپل خارج بشیم و خودمون یه حرکتی بکنیم

mansoory
13-03-2013, 10:00
...
میشه بیشتر در مورد lpc1768 و stm32f103 توضیح بدید و از برنامه های سمپل خارج بشیم و خودمون یه حرکتی بکنیم

سلام.
بحث درباره تفاوت میکروها خارج از این تایپکه. میتونید سرچ بزنید موارد مشابهی تو انجمن ها هست. برای emwin تفاوت نمیکنه که ST کار کنید یا LPC. کتابخانه ها برای CORTEX M0تا M4 در دسترسه.

درباره سمپل باشما موافق نیستم. emwin اینطوری نیست که با اضافه کردن یک کتابخونه به پروژه تون، کار کنه. همونطور که قبلا توضیح دادم. کارهایی باید انجام بشه که ال سی دی ، تاچ و RTOS هماهنگ بشه. این کارها بدون استفاده از سمپلهای کیل و emwin خیلی خیلی سخت است. ضمن اینکه یکجور اختراع مجدد چرخه. اگه همه کارهایی که صحبتش شده رو روی سمپل انجام بدهید، یک سیستم RTOS+GUI آماده برای کار خواهید داشت و میتونید applicationهای خودتون رو براش بنویسید.
موفق باشید.

akbh
13-03-2013, 19:03
با تشکر از فرمایشات شما منظور من اختراع مجدد چرخ نبود منظورم طراحی یه پروژه از اول (معرفی میکرو/پیکربندی میکرو و lcd/راه اندازی RTX و...) و در نهایت یه برنامه کامل وطنی برای کل دانش پژوهان بود شاید حتی با همکاری سایت بشه در آخر از این تاپیک یه کتاب جامع در بیاد
ولی من بعید میذونم با ادیت چند سطر و راه اندازی یه سمپل خیلی کاری از پیش ببریم البته منظورم این نیست که این کارا بی فایده است بلکه منظورم اینه که خوذمونو محدود نکنیم چون تو سایتهای ایرانی این تاپیک تنها تاپیک بدردخور تو این زمینه است پس باید بهترین هم باشه و با علم و تجربه ای که تا حالا شما نشون دادید دور از دسترس نیست.

mansoory
17-03-2013, 16:21
من یکم باهاش کار کردم و می تونم این مراحل رو توضیح بدم، ولی بهتره کسانی که مسلط هستند آموزش رو شروع کنند.
مواردی که من یاد گرفتم:
1-Config کردن LCD Spi و TouchScreen
2- تنظیمات اولیه
3- راه اندازی emwin در RTX(سیستم عاملی که در keil هست)
4- نحوه ترسیم پنجره ها و تنظیم خواص آنها. کار با GUI_MEMDEVICE
5- نحوه ترسیم و دسترسی به Widget ها(کنترل های Button , Text, labelو غیره) در emwin
6- نحوه کار با CallBack ها (رویدادهای window manager مثل Button_click وغیره)
این موارد رو با برد LPC1768-Mini-DK آزمایش کرده ام

اگه به مواردی که در صفحه 6 توضیح دادم توجه کنید، میبینید که مراحل مختلف پورت کردن emwin رو لیست کرده ام. کل کاری که برای راه اندازی emwin لازم دارید همین هاست. که به ترتیب همه رو توضیح داده ام و با اینکه از سمپل LPCWARE استفاده شده ولی برای میکرو های دیگه هم روال همینه. خیلی از ایراداتی که کاربران بهش برخورد میکنند ربطی به emwin نداره و مربوط به peripheralهای میکرو، keil، یا برنامه نویسی C میشه. به همین دلیل باید یه میکرو برای کار انتخاب میشد که اکثریت باهاش سروکار داشته باشند تا را راحتتر بتونیم ایرادات رو برطرف کنیم. مهم اینه که در آخر، شما یک سیستم RTOS+GUI آماده به کار داشته باشین. چه با استفاده از یک سمپل و چه نوشتن همه کد ها ازصفر

microprocesor_2002
17-03-2013, 16:34
سلام به دوستان عزیز ...
یه سوال ...
من میخوام EMWIN رو روی LPC1788 راه اندازی کنم ....
میخواستم بپرسم که میتونم ال سی دی بورد mini2440 رو به بورد 1788 که تو فروشگاه هستش وصل کنم ؟ ال سی دی اون مارک NEC هستش .... ممنون میشم اگه جواب بدین ...

mansoory
17-03-2013, 17:14
سلام به دوستان عزیز ...
یه سوال ...
من میخوام EMWIN رو روی LPC1788 راه اندازی کنم ....
میخواستم بپرسم که میتونم ال سی دی بورد mini2440 رو به بورد 1788 که تو فروشگاه هستش وصل کنم ؟ ال سی دی اون مارک NEC هستش .... ممنون میشم اگه جواب بدین ...

فایلهای GLCD.h و GLCD.c رو بفرستید بررسی کنم

microprocesor_2002
17-03-2013, 17:24
ممنون از جوابتون جناب منصوری ...
منظورم از لحاظ سخت افزاری بود .... چون این ال سی دی یه اینترفیس پارالل داره 41 پین....
اینم از لینک دیتا شیتش :
Download file - FriendlyARM (You can see links before reply)

ممنونم از جوابتون

mansoory
17-03-2013, 17:39
ممنون از جوابتون جناب منصوری ...
منظورم از لحاظ سخت افزاری بود .... چون این ال سی دی یه اینترفیس پارالل داره 41 پین....
اینم از لینک دیتا شیتش :
Download file - FriendlyARM (You can see links before reply)

ممنونم از جوابتون

emwin کاری به خود ال سی دی نداره، فقط کنترلر اون مهمه. لیست کنترلرهای ال سی دی که توسط emwin درایورش ساپورت شده در صفحه 910 فایل راهنما موجوده. شما چون میخواهید با LPC1788 کار کنید و اون هم خودش کنترلر LCD داره (از نوع GUI_DRV_LIN) احتمالا ازش استفاده کنید.

در همین تایپک درایورش قرار گرفته میتونید دانلود کنید و تست کنید. ابعاد ال سی دی رو در فایل GLCD.h کنترل کنید
موفق باشید.

mansoory
18-03-2013, 15:40
سلام.
از آنجا که دوستان به احتمال زیاد از Gui Builder (واقع در فولدر Tools) برای ساخت پنجره ها استفاده می کنند، فصل 18 فایل راهنمای emwin رو که مربوط به این برنامه است رو براتون ترجمه کردم.
امیدوارم به دردتون بخوره

سال نو بر همه شما مبارک باشه.

akbh
19-03-2013, 04:27
خسته نباشید من با header board lpc1768 وili9320 دارم کار میکنم وقتی برنامه پست 59 رو کامپایل میکنم از IOM16C ایراد میگیره و وقتی به 1768 (lpc17xx)تغییر میدم از تعریف پایه ها ایراد میگیره
میشه در موردش توضیح بذیذ که چیکار باید بکنم

#define Chip_30600
#include <IOM16C.H>

#define LCD_CLR_RESET() P7 &= ~(1<<0)
#define LCD_SET_RESET() P7 |= (1<<0)
#define LCD_CLR_A0() P8 &= ~(1<<0)
#define LCD_SET_A0() P8 |= (1<<0)
#define LCD_CLR_WR() P8 &= ~(1<<1)
#define LCD_SET_WR() P8 |= (1<<1)
#define LCD_CLR_RD() P8 &= ~(1<<2)
#define LCD_SET_RD() P8 |= (1<<2)
#define LCD_CLR_CS() P8 &= ~(1<<4)
#define LCD_SET_CS() P8 |= (1<<4)
#define LCD_DATA_IN_L P10
#define LCD_DATA_IN_H P1
#define LCD_DATA_OUT_L P10
#define LCD_DATA_OUT_H P1
#define LCD_SET_DIR_IN() P1D = 0; P10D = 0
#define LCD_SET_DIR_OUT() P1D = 0xff; P10D = 0xff


ضمنا میشه فایل سورس سمپل rtx که تو پست 68 بود رو شیر کنید تا استفاده کنیم

mansoory
19-03-2013, 08:21
خسته نباشید من با header board lpc1768 وili9320 دارم کار میکنم وقتی برنامه پست 59 رو کامپایل میکنم از IOM16C ایراد میگیره و وقتی به 1768 (lpc17xx)تغییر میدم از تعریف پایه ها ایراد میگیره
میشه در موردش توضیح بذیذ که چیکار باید بکنم

#define Chip_30600
#include <IOM16C.H>

#define LCD_CLR_RESET() P7 &= ~(1<<0)
#define LCD_SET_RESET() P7 |= (1<<0)
#define LCD_CLR_A0() P8 &= ~(1<<0)
#define LCD_SET_A0() P8 |= (1<<0)
#define LCD_CLR_WR() P8 &= ~(1<<1)
#define LCD_SET_WR() P8 |= (1<<1)
#define LCD_CLR_RD() P8 &= ~(1<<2)
#define LCD_SET_RD() P8 |= (1<<2)
#define LCD_CLR_CS() P8 &= ~(1<<4)
#define LCD_SET_CS() P8 |= (1<<4)
#define LCD_DATA_IN_L P10
#define LCD_DATA_IN_H P1
#define LCD_DATA_OUT_L P10
#define LCD_DATA_OUT_H P1
#define LCD_SET_DIR_IN() P1D = 0; P10D = 0
#define LCD_SET_DIR_OUT() P1D = 0xff; P10D = 0xff


ضمنا میشه فایل سورس سمپل rtx که تو پست 68 بود رو شیر کنید تا استفاده کنیم
فایلهای glcd.h,glcd.cروبفرستید بررسی کنم. اون پروژه شیرشده.توصفحات آخر بگردید.باتشکر

kamikazi
19-03-2013, 12:50
سلام مهندس منصوری من بردی رو که برای 1788 بود رو زدم و تقریب تمام قطعاتشو منتاژ کردم با این تفاوت که رم روی بردم 32 بیتی هستش میخواستم بدونم روی برنامه ای که برای این کور برده بود چه تغییراتی بدم تا برنامه کار کنه در ضمن بردم رو طوری طراحی کردم که ال سی دی 7 اینچی رو هم پشتیبانی میکنه اگه ممکنه در این مورد هم یه توضیحی بدید ممنون میشم

akbh
19-03-2013, 14:39
اینم کل پروژه
ظاهرا مشکل تو فایل 8080_16.c,.h هست
خیلی از لطفتون و زحماتی که میکشید متشکرم جناب منصوری:hi:

اینم اصل فایلهای 8080_16
امیدوارم تو تعطیلات بتونیم راحتتر کارکنیم و باسرعت بیشتری جلو بریم
پیشاپیش سال نو همگی مبارک امیدوارم همه سال خوب و پردانشی پیش رو داشته باشیم

mansoory
19-03-2013, 18:01
سلام مهندس منصوری من بردی رو که برای 1788 بود رو زدم و تقریب تمام قطعاتشو منتاژ کردم با این تفاوت که رم روی بردم 32 بیتی هستش میخواستم بدونم روی برنامه ای که برای این کور برده بود چه تغییراتی بدم تا برنامه کار کنه در ضمن بردم رو طوری طراحی کردم که ال سی دی 7 اینچی رو هم پشتیبانی میکنه اگه ممکنه در این مورد هم یه توضیحی بدید ممنون میشم

به سلامتی.
هیچی، فقط آدرس شروع رم 32 مگ رو با پروژه ای Titery برای کور برد اپ کرده تطبیق بدهید.
ضمنا آدرس شروع حافظه تخصیص یافته به lcd رو هم کنترل کنید.
موفق باشید

kamikazi
20-03-2013, 02:15
:hi:
ممنون مهندس با عرض تبریک عید به همه دوستان
من فایل هگز داخل پروژه رو روی بردم ریختم یه ال ای دی روی یکی از پایه ها وصل کرده بودم که همون پایه led کور برد هستش شروع کرد به چشمک زدن و با توجه به اینکه این پروژه برای رم 16 بیتی هستش نباید توقع داشته باشم روی ال سی دی چیزی نشون بده البته اینم بگم هنوز قسمت pcb مربوط به ال سی دی رو به بردم متصل نکردم چون باید از تمام قسمتهای این برد جانبی مطمعن بشم بعد وصلش کنم خدارو شکر برده خوبی از اب دراومده و مشکلی نداره خیلی عالیه شده فقط یه وقت ازاد گیر بیارم این قسمت پی سی بی ال سی در رو هم چک کنم تا مشکلی نداشته باشه بعدش وصلش کنم به برد و خوبی این برد ال سی دی اینکه بصورت همزمان از همه ال سی دی های 4.3 و 5 و 7 و 9 و 8 پشتیبانی میکنه

mansoory
20-03-2013, 09:34
اینم اصل فایلهای 8080_16
امیدوارم تو تعطیلات بتونیم راحتتر کارکنیم و باسرعت بیشتری جلو بریم
پیشاپیش سال نو همگی مبارک امیدوارم همه سال خوب و پردانشی پیش رو داشته باشیم

پروژه ای که آپ کردید ناقصه. ال سی دی ili9320 رو به چه صورت استفاده میکنید.سریال یا پارالل16بیت؟
تاچ رو چطور به هدربرد وصل کردید؟

mansoory
20-03-2013, 09:49
:hi:
ممنون مهندس با عرض تبریک عید به همه دوستان
من فایل هگز داخل پروژه رو روی بردم ریختم یه ال ای دی روی یکی از پایه ها وصل کرده بودم که همون پایه led کور برد هستش شروع کرد به چشمک زدن و با توجه به اینکه این پروژه برای رم 16 بیتی هستش نباید توقع داشته باشم روی ال سی دی چیزی نشون بده البته اینم بگم هنوز قسمت pcb مربوط به ال سی دی رو به بردم متصل نکردم چون باید از تمام قسمتهای این برد جانبی مطمعن بشم بعد وصلش کنم خدارو شکر برده خوبی از اب دراومده و مشکلی نداره خیلی عالیه شده فقط یه وقت ازاد گیر بیارم این قسمت پی سی بی ال سی در رو هم چک کنم تا مشکلی نداشته باشه بعدش وصلش کنم به برد و خوبی این برد ال سی دی اینکه بصورت همزمان از همه ال سی دی های 4.3 و 5 و 7 و 9 و 8 پشتیبانی میکنه

مبارک باشه.
فکر نکنم خیلی فرق کنه (رم16و32بیت). فایلهای درایورش تفاوت زیادی رو نشون نمیده.
موفق باشید

titery
20-03-2013, 11:21
سلام دوستان اینم آخرین پست سال 91 هست که تابع کالیبریشن هم کار کرد و خلاصه موس هم راه افتاد ولی هنوز به RTX نرسیدم لطفا دوستانی که به جاهایی رسیدن یا چیزی فهمیدند اطلاع رسانی کنند که یکم سرعت بیشتر بشه.
تغییراتی که اعمال کردم به شرح زیر هست
در فایل Touch_Cal.cبه جای

ax_Phys[0] =GUI_TOUCH_GetxPhys();//State.x;// GUI_TOUCH_GetxPhys();
ay_Phys[0] =GUI_TOUCH_GetyPhys();//State.y;// GUI_TOUCH_GetyPhys();
باید گذاشت

ax_Phys[0]= Read_X();
ay_Phys[0]= Read_Y();
و همچنین به جای

if (State.Pressed) {من از این استفاده کردم

IRQ_touch=((FIO_ReadValue(2))&(1<<11));
if (IRQ_touch==0) {و در فایل main هم توابع رو به صورت زیر فراخوانی کردم


__low_level_init(); // Updating PLL Settings
HW_X_Config(); // Initializing Systick Interrupt..
GUI_Init();
TP_Init();
_ExecCalibration();
c_entry_timer(); // enable IRQ_Timer 0 every 20ms for call <TouchTask();>
GUI_CURSOR_Show();
WM_SetDesktopColor(GUI_BLACK);

akbh
20-03-2013, 16:34
پروژه ای که آپ کردید ناقصه. ال سی دی ili9320 رو به چه صورت استفاده میکنید.سریال یا پارالل16بیت؟
تاچ رو چطور به هدربرد وصل کردید؟

اینم اولین پست سال92
ال سی دی رو به صورت پارالل 16بیت و تاچ رو هم فعلا وصل نکردم
اینم شماتیک اتصالات

kamikazi
21-03-2013, 16:58
سلام مهندس منصوری من فایل هگزو ریختم رو برد همون دمو رو داره نشون میده ولی دوتا سایه اطراف تصویر هستش که نمیدونم از چیه ممکنه از منتاژ باشه؟؟
در ضمن شما یادم از تغییر ادرس شروع اس دی رم صحبت کردید برای 32 بیتی کجای پروژه رو باید تغییر بدم من فقط تابع
/* Init SDRAM */
SDRAM_32M_16BIT_Init();
رو به
/* Init SDRAM */
SDRAM_32M_32BIT_Init();
تغییر دادم که در حالت اول سرعت تصویر معولی ولی وقتی 32 بیتی پروگرمش میکنم سرعتش خیلی طیاد میشه من شکم روی منتاژه و یا شاید ادرس شروع sdram

ez1362
22-03-2013, 12:40
با سلام و عرض احترام و تبریک سال نو به همه دوستان
ممنون از مباحث مطرح شده درمورد emwin . من با فایل های غیر BSP یک پروژه واسه at91sam7x256 برای برد فروشگاه نوشتم . تمام مراحلی که دوستان متذکر شده بودند رو رعایت کردم و همچنین موارد داخل manual . ومی هنوز LCD 2.8 همچنان سفیده . ممنون می شم راهنمایی کنید .

microprocesor_2002
23-03-2013, 14:51
سلام به همه ...
مشکل من الان رو قسمت تاچ هستش ... ال سی دی من 4.3 هستش که از فروشگاه گرفتم ... رو emwin کار نمی کنه ... موقع کانفیگ تاچ تو یکی از حلقه ها گیر میکنه ...
چیکارش کنم ....

amirtebyan
24-03-2013, 16:32
سلام
من این برد رو دارم ال سی دی اون ssd1289 و 3.2" هست ولی ارتباط با ال سی دی به صورت 16بیتی هست. و تو مثال های emwin فقط برای ارتباط spi داره. 3 روزه درگیرشم هنوز نتونستم lcd رو راه بندازم:cry:
You can see links before reply

titery
24-03-2013, 23:29
سلام به همه ...
مشکل من الان رو قسمت تاچ هستش ... ال سی دی من 4.3 هستش که از فروشگاه گرفتم ... رو emwin کار نمی کنه ... موقع کانفیگ تاچ تو یکی از حلقه ها گیر میکنه ...
چیکارش کنم ....
سلام کلا سه تا حلقه داره اولی:تاچ نقطه اول-دومی:برداشتن انگشت-سومی:تاچ نقطه دوم .که این سه حلقه را مطابق پست قبلی که زدم تغییر بدهید

mbntechco
26-03-2013, 14:20
سلام خدمت دوستان عزیز،ضمن عرض تبریک سال نو،یه مشکلی با GUI_Delay دارم،و مشکل اینه که برنامه وقتی به این تابع میرسه گیر میکنه و دستورات بعدی اجرا نمیشه،اگرم حذفش کنم تابع MAINTASK اجرا نمیشه،لطفا راهنمایی بفرمایید،ممنونم

mori64
26-03-2013, 17:09
درود
من یه برد دارم که 1788 و sdram داره
کد ewin رو طبق مشخصات lcd و sdram تغییر دادم .
یه عکس هم با کانورتور ی که داخل فولدر tools به bitmap تغییر دادم و داخل آدرسی که
به LCD داده بودم ریختم و تصویر بدون مشکل روی LCD نشون داده شد .
این کار رو داخل تایع _EnableLcdController انجام دادم.
که عکس بدون مشکل و درست روی lcd نمایش داده میشه.
برای تست آخر این تابع while(1) گزاشتم تا تصویر رو ببینم.
ولی وقتی while 1 رو از انتهای تابع برمیدارم تابع GUI_Init کامل انجام نمیشه
و اساسا دیگه از این تابع بیرون نمیاد !
مشکل کجاست ؟ اساتید راهنمایی بفرمایی

titery
26-03-2013, 22:42
سلام این سمپلی که من آپ کردم را تست کنید این هیچ مشکلی نداره و تاچ با تابع کانفیگش کامل کار میکنه فقط اگه مشکل رو فهمیدید اعلام کنید
Start5.18 mouse1.rar (You can see links before reply)

mansoory
27-03-2013, 10:18
سلام خدمت دوستان عزیز،ضمن عرض تبریک سال نو،یه مشکلی با GUI_Delay دارم،و مشکل اینه که برنامه وقتی به این تابع میرسه گیر میکنه و دستورات بعدی اجرا نمیشه،اگرم حذفش کنم تابع MAINTASK اجرا نمیشه،لطفا راهنمایی بفرمایید،ممنونم
سلام
من مسافرت بودم و اینترنت نداشتم. سال نو برهمه مبارک.

درباره سوال شما. شمابه احتمال زیاد ماکرویGUI_OSرو یک کرده اید. دراینصورت GUI_Delayکارنمیکنه و اگهRTOSرو راه انداخته اید از GUI_X_Delayبجاش استفاده کنید.درغیراینصورت ماکرو رو صفرکنید واز GUI_Delayاستفاده کنید

mansoory
27-03-2013, 10:25
درود
من یه برد دارم که 1788 و sdram داره
کد ewin رو طبق مشخصات lcd و sdram تغییر دادم .
یه عکس هم با کانورتور ی که داخل فولدر tools به bitmap تغییر دادم و داخل آدرسی که
به LCD داده بودم ریختم و تصویر بدون مشکل روی LCD نشون داده شد .
این کار رو داخل تایع _EnableLcdController انجام دادم.
که عکس بدون مشکل و درست روی lcd نمایش داده میشه.
برای تست آخر این تابع while(1) گزاشتم تا تصویر رو ببینم.
ولی وقتی while 1 رو از انتهای تابع برمیدارم تابع GUI_Init کامل انجام نمیشه
و اساسا دیگه از این تابع بیرون نمیاد !
مشکل کجاست ؟ اساتید راهنمایی بفرمایی

emwin برای اجرای دستوراتش باید تابع GUI_Delayرومدام اجراکنه. به همین علت توی حلقه whileقرار گرفته.

mori64
27-03-2013, 11:43
emwin برای اجرای دستوراتش باید تابع GUI_Delayرومدام اجراکنه. به همین علت توی حلقه whileقرار گرفته.

تشکر از پاسختون چون واقعا کارم گیر راه انداختن این پروژست

متاسفانه درست متوجه منظور شما نشدم یعنی چه کاری باید انجام بدم ؟

من فقط قسمت کانفیک lcd , sdram را تغییر دادم .

یعنی داخل GUI_init دائم تابع Delay فراخونی میشه ؟!

ez1362
27-03-2013, 12:50
سلام .... lcd 2.8 فروشگاه مدام سفیده . امکان شوختنش هست ؟ اگر "driver code read " را خوندیم و چیزی بر نگشت ، یعنی سوخته ؟

microprocesor_2002
27-03-2013, 12:50
سلام این سمپلی که من آپ کردم را تست کنید این هیچ مشکلی نداره و تاچ با تابع کانفیگش کامل کار میکنه فقط اگه مشکل رو فهمیدید اعلام کنید
Start5.18 mouse1.rar (You can see links before reply)
سلام به دوستان عزیز ...
ممنون از جناب titery عزیز ...
من این پروژه رو تست کردم خیلی خوب کار کرد ولی یه چیزی این پروژه فکر کنم از فلش داخلی میکرو استفاده میکنه ... چون وقتی یه عکس BMP با رزولوشن 240x320 رو میخوام نشون بدم فکر کنم پیغام کمبود فضا میده
اینم از Error:
".\Output\LPC1788_EA_LPC1788_KEIL_CMSIS\Debug_FLASH \Obj\Start_LPC1788_EA_LPC1788_KEIL_CMSIS.axf: Error: L6406E: No space in execution regions with .ANY selector matching form1dlg.o(.data)."

".\Output\LPC1788_EA_LPC1788_KEIL_CMSIS\Debug_FLASH \Obj\Start_LPC1788_EA_LPC1788_KEIL_CMSIS.axf: Error: L6407E: Sections of aggregate size 0x25848 bytes could not fit into .ANY selector(s)."
میخواستم بپرسم که شما به این مشکل بر خوردین یا نه ... و اینکه چیکار کنم که درست بشه ...

mahanjoon
27-03-2013, 21:48
سلام, من تازه دارم کار با emWin رو شروع میکنم, لینک لایبرری emWinتو پست 5کار نمیکنه میشه کسی منو راهنمایی کنه,ممنون

mansoory
28-03-2013, 02:00
با سلام و عرض احترام و تبریک سال نو به همه دوستان
ممنون از مباحث مطرح شده درمورد emwin . من با فایل های غیر BSP یک پروژه واسه at91sam7x256 برای برد فروشگاه نوشتم . تمام مراحلی که دوستان متذکر شده بودند رو رعایت کردم و همچنین موارد داخل manual . ومی هنوز LCD 2.8 همچنان سفیده . ممنون می شم راهنمایی کنید .
درتابعinitcontrollerآخرش guiClearرو حذف کنید.نتیجه رو اطلاع بدهید.مرسی


سلام, من تازه دارم کار با emwin رو شروع میکنم, لینک لایبرری emwinتو پست 5کار نمیکنه میشه کسی منو راهنمایی کنه,ممنون

درپست6صفحه دولینک هست که برای lpc آماده شده. اونهارو دانلودکنید (سایتlpcware.com)


سلام مهندس جان،امیدوارم که سفر خوش گذشته باشه ،دست راست شما رو سر ما،جان من بگو این اطلعاتو از کجا میاری که ما مزاحمت نشیم و سوالایی نپرسیم آبرومون بره،خدایی من هرجا گیر کردم شما جوابشو داشتی،خدا خیرت بده که اینقدر آقایی.

لطف دارید.من این اطلاعات رو از راهنمای enmwin و همینطور سمپلهای اون که واقعا عالیه بدست آوردم. مطالعه و اجرای خط به خط سمپلها رو توصیه میکنم.
موفق باشید


اینم اولین پست سال92
ال سی دی رو به صورت پارالل 16بیت و تاچ رو هم فعلا وصل نکردم
اینم شماتیک اتصالات
بیزحمت فایلهای مربوط به ال سی دی روهم بفرستید.
آیا دیتاشیت السیدی رو خوندید؟
باید توابعی برای موارد زیر داشته باشید:
1- خواندن 16بیت رجیستر
2-نوشتن 16بیت رجیستر
3-نوشتن 16بیت رجیستر بصورت متوالی

4- خواندن 18/16بیت داده
5- نوشتن 16/18بیت داده
6-نوشتن 16/18بیت داده متوالی

اگرنتوانستید این توابع را بسازید، فایلهایی مربوطه راکه با سی دی همراه السیدی گرفته اید بفرستید

microprocesor_2002
28-03-2013, 02:45
سلام به دوستان عزیز ...
ممنون از جناب titery و باقی دوستان ...
من این پروژه رو تست کردم خیلی خوب کار کرد ولی یه چیزی این پروژه فکر کنم از فلش داخلی میکرو استفاده میکنه ... چون وقتی یه عکس BMP با رزولوشن 240x320 رو میخوام نشون بدم فکر کنم پیغام کمبود فضا میده
اینم از Error:
".\Output\LPC1788_EA_LPC1788_KEIL_CMSIS\Debug_FLAS H\Obj\Start_LPC1788_EA_LPC1788_KEIL_CMSIS.axf: Error: L6406E: No space in execution regions with .ANY selector matching form1dlg.o(.data)."

".\Output\LPC1788_EA_LPC1788_KEIL_CMSIS\Debug_FLAS H\Obj\Start_LPC1788_EA_LPC1788_KEIL_CMSIS.axf: Error: L6407E: Sections of aggregate size 0x25848 bytes could not fit into .ANY selector(s)."
میخواستم بپرسم که شما به این مشکل بر خوردین یا نه ... و اینکه چیکار کنم که درست بشه ...

titery
29-03-2013, 11:39
سلام به دوستان عزیز ...
ممنون از جناب titery و باقی دوستان ...
من این پروژه رو تست کردم خیلی خوب کار کرد ولی یه چیزی این پروژه فکر کنم از فلش داخلی میکرو استفاده میکنه ... چون وقتی یه عکس bmp با رزولوشن 240x320 رو میخوام نشون بدم فکر کنم پیغام کمبود فضا میده
اینم از error:
".\output\lpc1788_ea_lpc1788_keil_cmsis\debug_flas h\obj\start_lpc1788_ea_lpc1788_keil_cmsis.axf: Error: L6406e: No space in execution regions with .any selector matching form1dlg.o(.data)."

".\output\lpc1788_ea_lpc1788_keil_cmsis\debug_flas h\obj\start_lpc1788_ea_lpc1788_keil_cmsis.axf: Error: L6407e: Sections of aggregate size 0x25848 bytes could not fit into .any selector(s)."
میخواستم بپرسم که شما به این مشکل بر خوردین یا نه ... و اینکه چیکار کنم که درست بشه ...
سلام من یک عکس رو ال سی دی نمایش دادم وچنین خطایی نداد فقط یک مشکل بزرگ وجود داره اینه که حدود 2 ثانیه طول میکشه(حتی وقفه تاچ رو هم از کار انداختم) که عکس لود بشه ولی با سمپل خود سی دی این عکس در جا لود می شد .علت چی میتونه باشه؟
اینم عکسی که لود کردم.

microprocesor_2002
29-03-2013, 18:22
سلام من یک عکس رو ال سی دی نمایش دادم وچنین خطایی نداد فقط یک مشکل بزرگ وجود داره اینه که حدود 2 ثانیه طول میکشه(حتی وقفه تاچ رو هم از کار انداختم) که عکس لود بشه ولی با سمپل خود سی دی این عکس در جا لود می شد .علت چی میتونه باشه؟
اینم عکسی که لود کردم.

سلام به همه ...
من منظورم عکس با ابعاد بزرگتر بود...
یه سوال اساسی اصلا می خوام بدونم که این میکرو اصلا با nandی که روش هست میتونه
مثل فلش داخلی باهاش کار کنه ... یعنی اینکه بجای استفاده از فلش داخلی از nandی که رو
بورد نصب هست کار کنه ... ؟؟؟؟

mori64
29-03-2013, 21:08
سلام این سمپلی که من آپ کردم را تست کنید این هیچ مشکلی نداره و تاچ با تابع کانفیگش کامل کار میکنه فقط اگه مشکل رو فهمیدید اعلام کنید
Start5.18 mouse1.rar (You can see links before reply)

درود

تشکر برنامه شما با اندکی دسکاری برای lcd خودم بالا امد :o

چند تا سوال دارم :
چرا وقتی برنامه های دمورو به برنامه اضافه میکنم اجرا نمیشن ؟
وقتی با guibuilder دو تا پیج میسازم قبل از اینکه بره به دومی مدت زیادی صفحه کامل مشکی میشه ؟
من تاچ رو مستقیم به adc وصل کردم چطور کرسر رو به آنالوگم ارتباط بدم؟

akbh
30-03-2013, 04:01
با سلام خدمت استاد منصوری امیدوارم که تعطیلات خوش گذشته باشه
من از ال سی دی "2.8 معروف به n96ینی که تو سایت eca موجود هست استفاده کردم و سی دی یا فایلی هم ندارم (glcd.h,.c)
اینم عکس lcd

titery
30-03-2013, 18:33
درود

تشکر برنامه شما با اندکی دسکاری برای lcd خودم بالا امد :o

چند تا سوال دارم :
چرا وقتی برنامه های دمورو به برنامه اضافه میکنم اجرا نمیشن ؟
وقتی با guibuilder دو تا پیج میسازم قبل از اینکه بره به دومی مدت زیادی صفحه کامل مشکی میشه ؟
من تاچ رو مستقیم به adc وصل کردم چطور کرسر رو به آنالوگم ارتباط بدم؟
بعضی از دمو ها هم برای من کامپایل نشد و بعضی ها هم چیزی نشان نمی داد اما 50 درصدشون کار کرد
برای تاچ کافی هست مختصات 12 بیتی رو در دو زیر برنامه های

int Read_Y(void)و
int Read_X(void) رو برگردانید که این دو تابع در Touchpanel.c هست

mansoory
31-03-2013, 00:05
با سلام خدمت استاد منصوری امیدوارم که تعطیلات خوش گذشته باشه
من از ال سی دی "2.8 معروف به n96ینی که تو سایت eca موجود هست استفاده کردم و سی دی یا فایلی هم ندارم (glcd.h,.c)
اینم عکس lcd

با السیدی N96کار نکرده ام. اگه برنامه نمونه ای از این السیدی دارید بیزحمت بفرستید تابررسی کنیم وتوابع PortAPIرو برای emwinآماده کنیم


درود

تشکر برنامه شما با اندکی دسکاری برای lcd خودم بالا امد :o

چند تا سوال دارم :
چرا وقتی برنامه های دمورو به برنامه اضافه میکنم اجرا نمیشن ؟
وقتی با guibuilder دو تا پیج میسازم قبل از اینکه بره به دومی مدت زیادی صفحه کامل مشکی میشه ؟
من تاچ رو مستقیم به adc وصل کردم چطور کرسر رو به آنالوگم ارتباط بدم؟


با Coreboardباید همه دموها اجرابشه(ماکروها رو درفایل GUI_Demo.hکنترل کنید

akbh
31-03-2013, 01:05
جناب منصوری خیلی متشکرم این یه نمونه برنامه از lcd N96
اگه لطف کنید و یه نمونه برنامه emwin رو این برد و ال سی دی راه اندازی کنید ممنون میشم از بس به این ال سی دی ور رفتم دیگه کلافه شدم

ez1362
31-03-2013, 10:58
سلام به همه
من از visual studio و یا eclipse برای emwin استفاده نکردم و داخل uVision4 نوشتمش . مشکلی که الان دارم اینکه فارسی تو uVision نمیشه تایپ کرد . با نرم افزار font converter for emwin5.18 ، فونت فارسی ساختم ولی به دلیل این مشکلی که عرض کردم نمیشه بهش دسترسی داشت و لطفا راهنمایی بفرمایید .

ez1362
31-03-2013, 11:48
خودم متوجه شدم و برای ساخت و استفاده از فونت فارسی صفحه 889 به بعد به همراه قسمت font converter را بخوانید .

mansoory
31-03-2013, 12:35
اینم اصل فایلهای 8080_16
امیدوارم تو تعطیلات بتونیم راحتتر کارکنیم و باسرعت بیشتری جلو بریم
پیشاپیش سال نو همگی مبارک امیدوارم همه سال خوب و پردانشی پیش رو داشته باشیم

این فایلهایی که فرستاده اید ظاهرا با ili9320 همخوانی ندارد.
فکر کنم بهترباشه N96 را هم بیخیال بشین. البته من فایل درایورش رو دقیق میخونم ولی با نگاه اول به نظرنمیاد بشه ردیفش کرد. همونili9320 رو کار کنید بهتره. درایورش رو براتون میفرستم


استاد ظاهرا ili9325 هست و به صورت i80 16bit interface راه اندازی شده

این فایل رو تست کنید و نتیجه رو خبر بدین. اگر کار نکرد در تعاریف پورت داده، بجای 15، 16 رو امتحان کنید. موفق باشید

microprocesor_2002
01-04-2013, 01:31
سلام به همه ...
آقا ما یه سوال داریم ... کسی نیست جواب بده ...؟
چطوری این بورد 1788 رو با حافظه های خارجی راه اندازی کنم ...

kavir
01-04-2013, 01:56
سلام به همگی مخصوصا مهندس منصوری عزیز که زحمت زیادی کشیدن
دوستان برای ili9320 و... من داریورهاش دارم دقیقا چه مدلی دارین؟
من خودم ili9320 به صورت 8 بیت با Ucgui پورتش کردم ولی emwinزیر تست نبردم ببینم چطور هست

akbh
01-04-2013, 05:42
سلام به همگی مخصوصا مهندس منصوری عزیز که زحمت زیادی کشیدن
دوستان برای ili9320 و... من داریورهاش دارم دقیقا چه مدلی دارین؟
من خودم ili9320 به صورت 8 بیت با ucgui پورتش کردم ولی emwinزیر تست نبردم ببینم چطور هست

میشه لطف کنید 16بیتی راه اندازیش کنید

akbh
01-04-2013, 05:54
استاد ضمن خسته نباشید میشه لطف کنید یه پروزه کامل (شماتیک و برنامه با تمامی فایلهای h , .c. و... مورد نیاز) بفرستید شاید بالاخره بعد از 20 روز تلاش یه نتیجه بگیریم. خیلی متشکرم

mansoory
01-04-2013, 11:24
اینم پروژه نمونه باشماتیک. وقتی که موفق شدید السیدی رو خارج از emwinراه اندازی کنید اطلاع بدهید. من هم درایور16بیت روبراتون آماده میکنم نگران نباشید

mansoory
01-04-2013, 12:18
اصلاحیه:کار با تاچ

سلام.
مدتی بود باتاچ مشکل پیداکرده بودم و فهمیدم که تاچ رو اشتباه راه اندازی کرده ام! لطفا به توضیحات زیرتوجه کنید:
دو روش برای راه اندازی تاچ درemwin ارایه شده. روش اول استفاده از فایل GUI_X_TouchStoreState.Cبود که قبلا توضیح دادم. یه اشتباهی رخ داده اونجا که خدمتتون شرح میدم:
چندتا خطا وجود داره:
1- تاچ خیلی دقیق کارنمیکنه و اشاره گر موس پرشهایی داره
2- اگه یه باتون ایجاد کنید و اون رو لمس کنید، با اینکه دستتون رو از باتون برنداشته اید ولی باتون مدام کلیک و آزاد میشه...
----------------
برای مشکل اول، بجای استفاده از دستورات ReadXو ReadY از دستور Read_ADS7846 استفاده کنید.خروجی این دستور از نوع Coordinate است که درواقع یک استراکچر با دوعضو XوY است. این تابع 9بار از تاچ نمونه گیری میکنه و میانگین رو درخروجی قرار میده. به این ترتیب پرش ها ازبین میره.


#include <RTL.h>
#include "TouchPanel.h"
#include "Global.h"
#include "includes.h"
#include "GUI.h"




void TouchTask(void) {
static U16 xOld;
static U16 yOld;
static U8 PressedOld;
U16 x, y, xDiff, yDiff,Diff;
U32 res;

while(1)
{
res=(LPC_GPIO2->FIOPIN)&(1<<TP_IRQ_PIN_NUM);

GUI_PID_STATE State;

if(res==0)
{
Coordinate *scr=Read_Ads7846();

if (scr==(void*)NULL) continue;
State.x = scr->x;// TBD: Insert function which reads current x value
State.y = scr->y;// TBD: Insert function which reads current y value
State.Layer=0;
State.Pressed=1;

// The touch has already been pressed
//
if (PressedOld == 1)
{

//
// Calculate difference between new and old position
//
xDiff = (State.x > xOld) ? (State.x - xOld) : (xOld - State.x);
yDiff = (State.y > yOld) ? (State.y - yOld) : (yOld - State.y);
//
// Store state if new position differs significantly from old position
//
Diff=xDiff+yDiff;
if (Diff> 20)
{
xOld = State.x;
yOld = State.y;
GUI_TOUCH_StoreStateEx(&State);
}
}
//
// The touch was previously released
// Store state regardless position
//
else
{
if ((State.x > 0) && (State.y > 0))
{
xOld = State.x;
yOld = State.y;
PressedOld = 1;
GUI_TOUCH_StoreStateEx(&State);
}
}

}

//
// Touch screen is not pressed
// Store state if it was released recently
//

else {
if (PressedOld == 1) {
PressedOld = 0;
State.Pressed=0;
State.x=-1;
State.y=-1;
GUI_TOUCH_StoreStateEx(&State); //RELEASED!
}

}

//
// Make sure
//
// GUI_TOUCH_Exec();
GUI_X_Delay(10);
};
}
به جزییات تابع دقت کنید. تغییرات کوچکی داده ام.
اما مشکل دوم که خیلی مهمتره. من کلا نا امید شده بودم. بالاخره بعد از خوندن مجدد راهنما متوجه شدم که من از هر دوروش همزمان استفاده کرده ام.اگه دقت کنید در انتهای تابع دستوری به نامGUI_TouchExecرو حذف کردم.
این دستور مربوط به روش دومه.
نکته دیگه اینه که در دستور GUI_Touch_StoreState(x,y)، آرگومانها باید مقادیرکالیبره شده مختصات باشند. یعنی مقادیر اونها باید در محدوده سایز صفحه نمایش باشه. پس اینجا که من مستقیما مقادیر A/D تاچ رو به این تابع فرستادم اشتباه بوده و منجر به این میشه که اشاره گر موس از صفحه ناپدید بشه (چون مختصاتی که بهش داده میشه خارج از صفحه نمایشه)...
احساس کردم اگه مقادیر رو کالیبره کنم و بعد به دستور وارد کنم یه جورایی دارم دوباره کاری میکنم.چون emwin دستوری برای کالیبره کردن تاچ داره که اینطوری بی استفاده می مونه.. این شد که رفتم سراغ روش دوم...

mansoory
01-04-2013, 13:04
روش دوم راه اندازی تاچ:
در این روش ازدو تابعGUI_Touch_MeasureXوGUI_Touch_MeasureY برای ارسال خروجی کالیبره نشده تاچ بهemwin استفاده می کنیم.دوتابع دیگه به نامهایGUI_Touch_Activate_XوGUI_Touch_Activa te_Yهم هستند که در اخر توضیح میدهم.

در این روش، یک تابع به نام TouchTask میسازیم که محتویات آن باید هر 10 تا 20 میلی ثانیه یکبار فراخوانی شود.

Void TouchTask()
{
GUI_Touch_Exec();
}تمام. این تابع رو مثلا در روال وقفه تایمر قرار بدهید یا اگر از سیستم عامل استفاده می کنید بصورت زیر تابع رو بنویسید:

void TouchTask()
{
while(1)
{

GUI_TOUCH_Exec();
GUI_X_Delay(10);

}
}خب. حالا باید دوتا تابع زیر رو هم ایجاد کنید:

int GUI_TOUCH_X_MeasureX(void) {
return Read_X();

}

int GUI_TOUCH_X_MeasureY(void) {
return Read_Y();
}
توضیح اینکه این دوتابع در فایل GUI_Touch_Analog.C وجود دارند.

تمام شد. emwin بقیه کارها رو انجام میده. دستورGUI_Touch_Execخودش این دوتا تابع رو فراخوانی می کنه و مقادیر خونده شده رو کالیبره کرده و با دستور GUI_Touch_StoreState وارد PID میکنه. نکته جالب اینه که ظاهرا چندبار نمونه گیری هم انجام میده چون خروجی کار بسیار باثبات و بدون پرش است.

دوتا تابع به نامهایGUI_Touch_ActivateXو GUI_Touch_ActivateYهم وجود دارند. این دوتا برای زمانی است که واحد A/D ما (در اینجا آی سی ADS7846) نیاز به Enable شدن داشته باشه (برای اعمال ولتاژ به صفحه تاچ). این توابع قبل از توابع اندازه گیری اجرا میشوند... در اینجا ما به اونها نیاز نداریم چون آی سی همیشه فعاله.

خب دیگه به فایل GUI_Touch_StoreState.C نیازی نیست. میتونید از پروژه خارجش کنید.
آزمایش کنید و لذت ببرید...

mori64
01-04-2013, 13:05
با Coreboardباید همه دموها اجرابشه(ماکروها رو درفایل GUI_Demo.hکنترل کنید

کدوم ماکرو؟ یا باید ماکرو اضافه کرد ؟

یه سوال دیگه دارم چرا وقتی کلاک sdram رو با cpu برابر میکنم سیستم بالا نمیاد ؟

titery
01-04-2013, 15:00
سلام بالاخره حالت felx قسمت های مختلف راه افتاد :D2 برای فعال سازی لازم هست توابع زیر فراخوانی شود من توابع را در اول maintask فراخوانی کردم

CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
SPINBOX_SetDefaultSkin( SPINBOX_SKIN_FLEX);
BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
اینم یک نمونه اجرا شده

titery
01-04-2013, 17:05
دستورGUI_Touch_Execخودش این دوتا تابع رو فراخوانی می کنه و مقادیر خونده شده رو کالیبره کرده و با دستور GUI_Touch_StoreState وارد PID میکنه. نکته جالب اینه که ظاهرا چندبار نمونه گیری هم انجام میده چون خروجی کار بسیار باثبات و بدون پرش است.

دوتا تابع به نامهایGUI_Touch_ActivateXو GUI_Touch_ActivateYهم وجود دارند. این دوتا برای زمانی است که واحد A/D ما (در اینجا آی سی ADS7846) نیاز به Enable شدن داشته باشه (برای اعمال ولتاژ به صفحه تاچ). این توابع قبل از توابع اندازه گیری اجرا میشوند... در اینجا ما به اونها نیاز نداریم چون آی سی همیشه فعاله.

خب دیگه به فایل GUI_Touch_StoreState.C نیازی نیست. میتونید از پروژه خارجش کنید.
آزمایش کنید و لذت ببرید...
من روش دوم رو استفاده کردم ولی در صورتی کار میکند که از
_ExecCalibration();
استفاده کنم وگرنه موس در صفحه نیست؟

mansoory
01-04-2013, 17:30
من روش دوم رو استفاده کردم ولی در صورتی کار میکند که از
_ExecCalibration();
استفاده کنم وگرنه موس در صفحه نیست؟

بله
_ExecCalibrationرو باید اجرا کنید تا مقادیر کالیبراسیون تاچ رو محاسبه و به emwin ارسال کنه.

microprocesor_2002
01-04-2013, 17:54
بله
_ExecCalibrationرو باید اجرا کنید تا مقادیر کالیبراسیون تاچ رو محاسبه و به emwin ارسال کنه.

یه کاری هم میشه انجام داد ....
مقدار x , y رو یکبار بخونیم و یک فلگ رو تو E2PROM بورد ذخیره کنیم که هر بار ریست شد نیازی به کالیبره کردن نباشه ....

mori64
01-04-2013, 20:02
سلام بالاخره حالت felx قسمت های مختلف راه افتاد :d2 برای فعال سازی لازم هست توابع زیر فراخوانی شود من توابع را در اول maintask فراخوانی کردم

checkbox_setdefaultskin(checkbox_skin_flex);
dropdown_setdefaultskin(dropdown_skin_flex);
header_setdefaultskin(header_skin_flex);
radio_setdefaultskin(radio_skin_flex);
scrollbar_setdefaultskin(scrollbar_skin_flex);
slider_setdefaultskin(slider_skin_flex);
spinbox_setdefaultskin( spinbox_skin_flex);
button_setdefaultskin(button_skin_flex);
framewin_setdefaultskin(framewin_skin_flex);
progbar_setdefaultskin(progbar_skin_flex);
اینم یک نمونه اجرا شده

من گزاشتم جواب نداد !

mansoory
01-04-2013, 20:35
یه کاری هم میشه انجام داد ....
مقدار x , y رو یکبار بخونیم و یک فلگ رو تو E2PROM بورد ذخیره کنیم که هر بار ریست شد نیازی به کالیبره کردن نباشه ....

دقیقا.
من کاری شبیه با این کردم.
برای السیدی 320*240. مقادیر خروجی ADS7846رو برای 0,0و 319,239 بدست آوردم. و با این تابع تاچ رو کالیبره کردم:


#define TOUCH_AD_LEFT 3756
#define TOUCH_AD_RIGHT 185
#define TOUCH_AD_TOP 248
#define TOUCH_AD_BOTTOM 3884

void Touch_Calibrate()
{
GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 319, TOUCH_AD_LEFT, TOUCH_AD_RIGHT);
GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 239, TOUCH_AD_TOP, TOUCH_AD_BOTTOM);
}

دیگه نیازی به تابع Exec_Calibrateو کالیبراسیون دستی نیست.

kavir
01-04-2013, 20:35
سلام به همگی
فقط یه موردی اقای منصوری این تاچ من اوکی کردم مونده فقط گوشه چپ و راست رو اشتباه میگیره
یعنی کالیبره میگیره دو گوشه چپ و راست ولی جا بجا کار میکنه مثلا موس گوشه چپ بالا میزنی کوشه راست پایین کار میکنه
چطوری موقعیت تاچ تعیین میشه؟

mansoory
01-04-2013, 20:49
سلام به همگی
فقط یه موردی اقای منصوری این تاچ من اوکی کردم مونده فقط گوشه چپ و راست رو اشتباه میگیره
یعنی کالیبره میگیره دو گوشه چپ و راست ولی جا بجا کار میکنه مثلا موس گوشه چپ بالا میزنی کوشه راست پایین کار میکنه
چطوری موقعیت تاچ تعیین میشه؟

دستوری به نام GUI_Touch_SetOrientation هست که برای این منظور بکارمیره:

void GUI_Touch_SetOientation(unsigned int Orientation)Orientation میتونه ترکیبی از فلگهای زیر باشه:
GUI_MIRROR_X
GUI_MIRROR_Y
GUI_SWAP_XY
مورد شما فکر کنم این دستور ردیف بشه:

GUI_Touch_SetOrientation(GUI_MIRROR_X|GUI_MIRROR_Y );این دستور رو بعد ازکالیبراسیون قرار بدهید.
موفق باشید

titery
01-04-2013, 21:39
سلام به همگی
فقط یه موردی اقای منصوری این تاچ من اوکی کردم مونده فقط گوشه چپ و راست رو اشتباه میگیره
یعنی کالیبره میگیره دو گوشه چپ و راست ولی جا بجا کار میکنه مثلا موس گوشه چپ بالا میزنی کوشه راست پایین کار میکنه
چطوری موقعیت تاچ تعیین میشه؟
سلام منم همین مشکل رو داشتم برای حلش فقط اسم دو زیر برنامه X , Y را با هم جا به جا نمودم به صورت زیر


int Read_Y(void)
{
int i;
TP_CS_LOW();
DelayUS(1);
WR_CMD(CHX); // ja be ja X
DelayUS(1);
i=RD_AD();
TP_CS_HIGH();
return i;
}


int Read_X(void)
{
int i;
TP_CS_LOW();
DelayUS(1);
WR_CMD(CHY); // ja be ja Y
DelayUS(1);
i=RD_AD();
TP_CS_HIGH();
return i;
}

titery
01-04-2013, 21:44
من گزاشتم جواب نداد !
لازمه استفاده از هر کدام این هست که در همان برنامه از مورد خودش استفاده کنی
مثلا وقتی می توانی از


button_setdefaultskin(button_skin_flex);

استفاده کنی که حتما باتوم را استفاده کرده باشید.

akbh
02-04-2013, 22:40
جناب منصوری خیلی ممنونم ولی با پروژه ای که فرستادید هم نتیجه ای حاصل نشد
من چه بورد و ال سی دی بگیرم که هم ارزون باشه هم کارم راه بیفته؟

mansoory
03-04-2013, 08:42
جناب منصوری خیلی ممنونم ولی با پروژه ای که فرستادید هم نتیجه ای حاصل نشد
من چه بورد و ال سی دی بگیرم که هم ارزون باشه هم کارم راه بیفته؟

چطور نتیجه نگرفتید؟
با هدربردتون چه کارهایی رو تونستید انجام بدید؟ چرا میخواهید بردتون روعوض کنید؟
یکم بیشتر تلاش کنید. چندبار اتصالات روکنترل کنید. اینقدر زود ناامید نشید. یادتون باشه که آخرش تنها خودتون میتونید به خودتون کمک کنید. راهنمایی های دیگران بدون تلاشهای خودتون بی ثمرخواهد بود.
موفق باشید

akbh
03-04-2013, 12:10
از لطفتون ممنون من دقیقا مدار رو بستم و چک کردم (p2.0-7,p0.15-22,p2.8,p1.27-29)
با تستی که انجام دادم نرم افزار کنترلر رو درست شناسایی میکنه (ili9325) ولی چیزی رو صفحه نمایش داده نمیشه و صفحه سفیده در صورتی که طبق برنامه باید صفحه قرمز و دو جمله در مختصاتهای داده شده درج بشه
عذر میخوام استاد چطور میتونم جواب سوالاتمو زودتر ازتون بگیرم؟

mansoory
03-04-2013, 14:01
از لطفتون ممنون من دقیقا مدار رو بستم و چک کردم (p2.0-7,p1.15-22,p2.8,p1.27-29)
با تستی که انجام دادم نرم افزار کنترلر رو درست شناسایی میکنه (ili9325) ولی چیزی رو صفحه نمایش داده نمیشه و صفحه سفیده در صورتی که طبق برنامه باید صفحه قرمز و دو جمله در مختصاتهای داده شده درج بشه
عذر میخوام استاد چطور میتونم جواب سوالاتمو زودتر ازتون بگیرم؟

این شماره پورتها چیه؟دقیقتر توضیح بدید
باید اینطوری باشه:
پورت داده:
P2.0 -p2.7: مربوط به d0-d7 یا 8بیت کم ارزش
p0.15-p0.22:مربوط به d8-d15یا 8 بیت پرارزش
p1.26:بک لایت

rs(یاa):
P1.27

wr:
P1.28

rd:
P1.29

جزییات تغذیه خودتون چک کنید.

akbh
03-04-2013, 16:51
این شماره پورتها چیه؟دقیقتر توضیح بدید
باید اینطوری باشه:
پورت داده:
P2.0 -p2.7: مربوط به d0-d7 یا 8بیت کم ارزش
p0.15-p0.22:مربوط به d8-d15یا 8 بیت پرارزش
p1.26:بک لایت

rs(یاa):
P1.27

wr:
P1.28

rd:
P1.29

جزییات تغذیه خودتون چک کنید.
همین کارو کردم ضمن اینکه p2.8 رو هم به CS وصل کردم
البته باید بگم رو ال سی دی من پایه ها از D1~D8 , D10~D17 هست

mansoory
03-04-2013, 17:01
همین کارو کردم ضمن اینکه p2.8 رو هم به cs وصل کردم
البته باید بگم رو ال سی دئی من پایه ها از d1~d8 , d10~d17 هست
خط بخط دیباگش کردین؟
اگرهمه اتصالات درست باشه نباید مشکلی وجود داشته باشه. خودهدربرد و السیدی سالمند؟

akbh
03-04-2013, 17:07
بله هدر بورد و ال سی دی سالمه چون نمونه برنامه ای که براتون فرستادم روش اجرا میشه و همه مراحل برنامه شما رو هم اجرا میکنه و وقتی وارد حلقه while میشه من یک led رو روشن و خاموش میکنم که این قسمت هم اجرا میشه
من که دیگه عقلم به جایی قد نمیده

s_mirbagheri
03-04-2013, 21:15
ببخشید دوستان میشه توضیح بدید که چطوری میشه emwin را همراه با rtx راه اندازی کرد.

titery
03-04-2013, 23:01
سلام اگه بشه به عنوان یک پروژه یک کیبورد فارسی درست کنیم به این صورت که در یک صفحه یک فیلد خالی باشد و با کلیک بر دکمه کنار فیلد یک کیبورد شبیه به عکس ضمیمه شده باز و عبارتی را تایپ و با زدن send متن تایپ شده به فیلد انتقال یابد
غیر از آقایان microprocesor_2002 (You can see links before reply) و ez1362 (You can see links before reply) دوست دیگری تمایل به همکاری در این برنامه ندارد؟
از آقای منصوری خواهش میکنم که اگر برایشان مقدور هست یکسری جهت دهی های بنمایند و برای ساختش قسمت های لازم برای این برنامه را بفرماینند بعد هر کدام از دوستان روی یک بخشی کار کنیم.

ez1362
03-04-2013, 23:21
سلام و خسته نباشید دوستان
من تازه میخوام کار با emwin شروع کنم ولی یه مشکلی هست!!! سایتش از دسترس خارج شده و نمیتونم برنامه emwin را دانلود کنم.
یه نگاه بندازید به سایتش : Welcome to LPCware.com! | You can see links before reply (You can see links before reply)

نسخه اصلیش در
\keil\arm\segger
هست . ولی اگر BSP می خواید باید از ادرسی تو پستای قبلی دانلود کنید . من با همین نسخه مولود در keil را انداختم .

mansoory
04-04-2013, 10:14
سلام و خسته نباشید دوستان
من تازه میخوام کار با emwin شروع کنم ولی یه مشکلی هست!!! سایتش از دسترس خارج شده و نمیتونم برنامه emwin را دانلود کنم.
یه نگاه بندازید به سایتش : Welcome to LPCware.com! | You can see links before reply (You can see links before reply)

با .xxxxxشکن باید بازش کنید. برای ایران مسدود شده متاسفانه!
یا اینکه از نسخه 5.16 که با keil 4.6 به بعد اومده استفاده کنید

سلام اگه بشه به عنوان یک پروژه یک کیبورد فارسی درست کنیم به این صورت که در یک صفحه یک فیلد خالی باشد و با کلیک بر دکمه کنار فیلد یک کیبورد شبیه به عکس ضمیمه شده باز و عبارتی را تایپ و با زدن send متن تایپ شده به فیلد انتقال یابد
غیر از آقایان microprocesor_2002 (You can see links before reply) و ez1362 (You can see links before reply) دوست دیگری تمایل به همکاری در این برنامه ندارد؟
از آقای منصوری خواهش میکنم که اگر برایشان مقدور هست یکسری جهت دهی های بنمایند و برای ساختش قسمت های لازم برای این برنامه را بفرماینند بعد هر کدام از دوستان روی یک بخشی کار کنیم.

ایده جالبی است.
پنجره را بصورت Dialog تعریف کنید و از GUI Builder برای ساختنش استفاده کنید. پنجره دو سایز عادی و مینیمایز داشته باشه و از پیغام WM_MOUSEOVER یا پیامهای مشابه برای بالا آوردن اون (بادستورGUI_MEMDEV_MoveInWindow)استفا ه کنید.یا یک Widget از نوع image (با ابعاد کوچک در و تصویری که نمایانگر صفحه کلید باشد)برای پنجره Desktop بسازید و از پیام WM_CLICKED اون برای فراخوانی صفحه کلید استفاده کنید. میتونید از خاصیت TRANSPARENT استفاده کنید و صفحه کلید رو شیشه ای طراحی کنید تا پشت اون دیده بشه....

اما یک نکته... چطوری میخواهید صفحه کلید رو استفاده کنید؟ پست بعدی رو ببینید

mansoory
04-04-2013, 12:54
کار با صفحه کلید مجازی:
فصل 24 راهنما درباره کیبرد و نحوه ارتباط اون با emwin است.
صفحه کلید مجازی چیست؟
وقتی میخواهید از کیبرد استفاده کنید، باید توابع زیادی رو بسازید که کارهای ویرایش متن رو انجام بده. چون وارد کردن یک رشته یا عدد، همه ماجرا نیست. باید بتوانید اونها رو ویرایش هم بکنید. اگه زبان فارسی استفاده می کنید که دردسر بیشتری پیش رو دارید و باید کلمات رو شناسایی کرده و در ابتدای هر کلمه حروف اول وبعد از هر Space حروف آخر رو اصلاح کنید .
اگر فقط قصد استفاده از صفحه کلید انگلیسی رو دارید، emwin با صفحه کلید مجازی کار شما رو راحت کرده.
این صفحه کلید دارای بافری به اندازه 10 کاراکتر است که می توانید اندازه آنرا در فایل GUI.h تغییر دهید.

در ادامه ترجمه این فصل رو باهم مرور می کنیم:
Virtual Keyboard
صفحه کلید مجازی EMWIN
رابطهای کیبرد از استاندارد ASCII برای تشخیص کاراکترها استفاده می نمایند.
کلیدهای تعریف شده در EMWIN
به جز کاراکترهای ASCII،emwin کاراکترهای پیش تعریف شده ای برای ویرایش متنها دارد. این کاراکترها در فایل GUI.H تعریف شده اند (ماکرو هستند) به همین دلیل،کاراکترها در emwin از نوع Extended ASCII است.
کلیدهای کنترلی تعریف شده در emwin بصورت زیر است:

GUI_KEY_BACKSPACE Backspace key.
GUI_KEY_TAB Tab key.
GUI_KEY_ENTER Enter/return key.
GUI_KEY_LEFT Left arrow key.
GUI_KEY_UP Up arrow key.
GUI_KEY_RIGHT Right arrow key.
GUI_KEY_DOWN Down arrow key.
GUI_KEY_HOME Home key (move to beginning of current line).
GUI_KEY_END End key (move to end of current line).
GUI_KEY_SHIFT Shift key.
GUI_KEY_CONTROL Control key.
GUI_KEY_ESCAPE Escape key.
GUI_KEY_INSERT Insert key.
GUI_KEY_DELETE Delete key.

لایه درایور
لایه کیبرد وظیفه انتقال پیامهای کیبرد را برعهده دارد. توابع آن، Window Manager یا WM را هنگامی که کلیدی فشرده یا آزاد شود مطلع می کنند. سپس WM کاراکتر دریافتی را به CallBack پنجره یا Widget فعال (دارای Focus) ارسال می کند. این لایه شامل دو دستور GUI_StoreKeyMsg و GUI_SendKeyMsg میباشد.


GUI_StoreKeyMsg(Key, Pressed):
این دستور دارای دو آرگومان بوده که یک استراکچر به نام Message Data با عضوهایی به نامهای Key,Pressed را در بافر صفحه کلید ذخیره می کند. شرح آرگومانها:
Key: یک کاراکتر در محدوده کدهای 0x20 الی 0xff یا یکی از کلیدهای کنترلی
Pressed: وضعیت کلید فوق (1: فشرده- 0: رها شده)
نکته: این تابع را میتوانید در وقفه مربوط به صفحه کلید استفاده کنید. مدیر داده های ورودی کیبرد در emwin دارای یک بافر FIFO است که میتواند حداکثر 10 کاراکتر را ذخیره نماید.


GUI_SendKeyMsg(Key, Pressed):
این دستور برای شبیه سازی کیبرد استفاده می شود. و وظیفه آن اجبار WM به ارسال کاراکتری خاص به پنجره فعال است-- درصورتیکه پنجره ای فعال باشد پیام کیبرد به آن ارسال میشود و درغیر اینصورت بوسیله دستور GUI_StoreKeyMsg در بافر ذخیره میشود---. آرگومانهای آن دقیقا شبیه دستور قبلی است.
نکته: این دستور نباید در روال وقفه سخت افزاری کیبرد مورد استفاده قرار گیرد (از دستور GUI_StoreKeyMsg استفاده شود).

لایه کاربری کیبرد
پس از اینکه کاراکترها با موفقیت به WM ارسال شدند، از دستورات زیر برای دسترسی به آنها در برنامه خود استفاده کنید:

GUI_ClearKeyBuffer() Clear the key buffer.
GUI_GetKey() Return the contents of the key buffer.
GUI_GetKeyState() Returns the current key state.
GUI_StoreKey() Store a key in the buffer.
GUI_WaitKey() Wait for a key to be pressed.


Void GUI_ClearKeyBuffer(void):
این دستور برای پاک کردن محتویات بافر کیبرد استفاده میشود. و فاقد مقدار برگشتی است.



Void GUI_GetKey(void):
آخرین داده موجود در بافر کیبرد را برمیگرداند. درصورتیکه بافر خالی باشد مقدار صفر را برمیگرداند.

GUI_GetKeyState( GUI_KEY_STATE *pstate)
این دستور مقدار آخرین وضعیت صفحه کلید رو در استراکچر GUI_KEY_STATE برمیگرداند. ( آخرین کلیدی که فشرده شده چیست و الان در چه وضعیتی است-فشرده یا رها شده)

GUI_StoreKey(int Key)
این دستور برای نوشتن یک کاراکتر در بافر کیبرد استفاده میشود
نکته: این دستور معمولا بوسیله توابع لایه درایور مورد استفاده قرار میگیرد و در لایه کاربری مورد استفاده ندارد.



Int GUI_WaitKey (void)
این دستور یک حلقه است که منتظر وارد شدن یک کاراکتر در بافر میماند (درصورتیکه بافر مقداری داشته باشد آنرا برگردانده و از حلقه خارج میشود)


پیشنهاد میکنم یکی از سمپلهای emwin به نامSkinngin Notepad رو مطالعه بفرمایید. من هم آمادگی دارم که این در این پروژه همکاری کنم( صفحه کلید فارسی/انگلیسی + صفحه ورود اعداد فارسی و انگلیسی)
موفق باشید.

mansoory
05-04-2013, 08:50
جناب منصوری من احساس میکنم خیلی دارم عقب میمونم لطفا یه پیشنهاد اساسی برای حل مشکل من بدید
پیشنهاد من اینه که هرچه زودتر السیدی رو راه بیاندازید.ناامید نباشید. در فرومها سرچ کنید. انشالله راه حل مشکلتون روپیداخواهید کرد.باعوض کردن برد احتمالا مشکلتون مقطعی رفع میشه ولی اگه بتونید باهمین برد کارکنید، تجربه ارزشمندی بدست خواهید آورد.
هروقت ال سی دی راه افتاد برگردید اینجا و هرمشکلی داشتید درخدمتتونم

ببخشید دوستان میشه توضیح بدید که چطوری میشه emwin را همراه با rtx راه اندازی کرد.
درهمین تایپک توضیح داده شده

ez1362
06-04-2013, 00:29
سلام
اگر با یک LCD 2.8 یا هر سایز دیگه کار می کنید و درایور ADS7843 یا ADS7846 وظیفه خواندن touch را دارد ، درایور نرم افزاری در emWin موجود است ولی توابع آن آرگومان های پیچیدهای دارد . پیشنهاد می کنم از یرایور موجود در بردهای فروشگاه استفاده کنید و طبق روش دومی که آقای منصوری اشاره کردند (GUI_X_Touch_Analog()a) استفاده کنید ولی نکته قابل ذکر اینکه طبق فرمایش آقای منصوری درست است که pointer ثبات داره ولی بدون تاچ . اگر با مداد به یک نقطه ثابت اشاره شود یکم لرزش مشاهده می شود . برای رفع این مشکل از داخل فایل درایوری که اشهره اردم ، تابع ADS7843_GetPosition2 (&x, &y);a را به کار ببرید . ماکروی READ_TIMES با حداقل 12 برای شما یک moving-avarage-filter را خواهد ساخت (همان میانگین گیر) که ثبات بسیار خوبی به PID می دهد . هر دو فایل رو آپلود می کنم واستون .

yraeisi
07-04-2013, 15:32
The Code Completion and Dynamic Syntax Checking feature does not appear to work and the new text completion settings Edit — Configuration — Text Completion — Show Code Completion List is missing.
RESOLUTION

To correct this, do the following:


Close all instances of µVision on your PC.
Extract the attached files into your [installation_path]\UV4\ folder. The default [installation_path] is C:\Keil.
Restart µVision.

Code Completion and Dynamic Syntax check should work now.
MORE INFORMATION



Refer to Code Completion (You can see links before reply) in the µVision4 User's Guide.
Refer to Dynamic Syntax Checking (You can see links before reply) in the µVision4 User's Guide.

ATTACHED FILES
Request the files attached (You can see links before reply) to this knowledgebase article.
You can see links before reply :از اینجا دانلود کنید

microprocesor_2002
07-04-2013, 17:57
سلام به دوستان EMWIN کار ....
من سوالی داشتم ...
اگه بخوایم مثلا هر 1 ثانیه مقدار یک Text box یا هر چیز دیگه ای رو تغییر بدیم چطوریه ؟؟؟
حالا 1 ثانیه مهم نیست ولی تو تغییر دادن مقدار به مشکل بر خوردم .
ممنون میشم اگر کسی میدونه بهم بگه ....

s_mirbagheri
07-04-2013, 18:38
سلام
جناب مهندس منصوری
من برای راه اندازی rtx کارهای زیر را انجام دادم
1 - ماکرو GUI_OS را یک کردم .
2 - ماکرو GUI_MAXTASK را 5 گذاشتم.
3 - در قسمت option for target/target گزینه operating system را به RTX kernal تغییر دادم
4 - فایل GUI_X.c را حذف کرده و به جای ان GUI_X_RTX را اضافه کردم.
در این حالت کیل خطای زیر را میده
.\Output\LPC1788_EA_LPC1788_KEIL_CMSIS\Debug_FLASH \Obj\Start_LPC1788_EA_LPC1788_KEIL_CMSIS.axf: Error: L6200E: Symbol SysTick_Handler multiply defined (by hal_cm3.o and hwconf.o).
لطفا راهنمایی کنید .

akbh
08-04-2013, 01:14
باسلام خدمت دوستان بالاخره تونستم یه درایور حسابی و کامل emwin برای lcd n96چینی یا همون ELT240320 بنویسم :o :o :o
ووقتی جواب داد از ذوقم یک درایور هم برای ucgui با همین ال سی دی نوشتم که این هم کار کرد
فقط یه مشکل کوچیک داره که وقتی سمپلها رو run میکنم بعضی از قسمتها درست کار نمیکنه (اکثرا مربوط به wm مثل dialogbox,tree view,transparent) ولی قسمتهای دیگه نظیر color bars و متنها درست نمایش داده میشه
به نظر شما مشکل از هدر فایله یا از برنامه guidemo یا از lpc1768 یا ...؟

microprocesor_2002
08-04-2013, 12:34
سلام به همه ...
اقایون عزیز ... کسی نتونسته فلش خارجی این بورد رو راه بندازه ؟
میخوام بجای فلش داخلی با NAND Flash خارجی کار کنه .....

titery
08-04-2013, 16:17
سلام چرا در شبیه ساز فقط بعضی از فایل ها جواب وبقیه این خطا را می دهد

Unhandled exception at 0x0044958a in Simulation.exe: 0xC0000005: Access violation reading location 0x00000000. در صورتی که در فایلی که در پوشه application شبیه ساز فراخوانی میکنم هیچ کانفیگ سخت افزاری انجام نمیدم مثل فایل زیر .علت چی میتونه باشه؟

mansoory
08-04-2013, 20:22
باسلام خدمت دوستان بالاخره تونستم یه درایور حسابی و کامل emwin برای lcd n96چینی یا همون ELT240320 بنویسم :o :o :o
ووقتی جواب داد از ذوقم یک درایور هم برای ucgui با همین ال سی دی نوشتم که این هم کار کرد
فقط یه مشکل کوچیک داره که وقتی سمپلها رو run میکنم بعضی از قسمتها درست کار نمیکنه (اکثرا مربوط به wm مثل dialogbox,tree view,transparent) ولی قسمتهای دیگه نظیر color bars و متنها درست نمایش داده میشه
به نظر شما مشکل از هدر فایله یا از برنامه guidemo یا از lpc1768 یا ...؟

بسیارعالی است. خوشحال شدم.
علتش کمبود رم 1768 است.از32 کیلوبایت بالای رم هم استفاده کنید و درGUIConf.hرم بیشتری به emwinبدهید. بعضی سمپلهای دیگه ممکنه اجرابشه

mansoory
08-04-2013, 20:26
سلام
جناب مهندس منصوری
من برای راه اندازی rtx کارهای زیر را انجام دادم
1 - ماکرو GUI_OS را یک کردم .
2 - ماکرو GUI_MAXTASK را 5 گذاشتم.
3 - در قسمت option for target/target گزینه operating system را به RTX kernal تغییر دادم
4 - فایل GUI_X.c را حذف کرده و به جای ان GUI_X_RTX را اضافه کردم.
در این حالت کیل خطای زیر را میده
.\Output\LPC1788_EA_LPC1788_KEIL_CMSIS\Debug_FLASH \Obj\Start_LPC1788_EA_LPC1788_KEIL_CMSIS.axf: Error: L6200E: Symbol SysTick_Handler multiply defined (by hal_cm3.o and hwconf.o).
لطفا راهنمایی کنید .

درفایلHWConf.cتابعی به تام SystickHandlerهست که وقتی سیستم عامل ندارید برای emwinتولید وقفه میکرده.اون رو حدف کنید


سلام به دوستان EMWIN کار ....
من سوالی داشتم ...
اگه بخوایم مثلا هر 1 ثانیه مقدار یک Text box یا هر چیز دیگه ای رو تغییر بدیم چطوریه ؟؟؟
حالا 1 ثانیه مهم نیست ولی تو تغییر دادن مقدار به مشکل بر خوردم .
ممنون میشم اگر کسی میدونه بهم بگه ....

دستور
Edit_SetText)EDIT_Handle hwin,char* text); برای این منظوره

akbh
08-04-2013, 22:47
بسیارعالی است. خوشحال شدم.
علتش کمبود رم 1768 است.از32 کیلوبایت بالای رم هم استفاده کنید و درGUIConf.hرم بیشتری به emwinبدهید. بعضی سمپلهای دیگه ممکنه اجرابشه

با تشکر از راهنمایی هاتون
من 32k رم به emwin دادم و اجازه استفاده رو در برنامه فعال کردم قسمت دوم رم هم استفاده میشه با این حال مشکلاتی که در فیلم پیوست میبینید وجود داره
اگه ممکنه بررسی بفرمایید


You can see links before reply

ضمنا کیفیت پایین فیلم بخاطر کم کردن حجمه و روی ال سی دی متن ها کاملا شفاف هستند

microprocesor_2002
09-04-2013, 10:15
دستور
Edit_SetText)EDIT_Handle hwin,char* text); برای این منظوره

سلام جناب منصوری

من این خط کد رو تو کدوم قسمت برنامه باید بنویسم ... مثل پایین نوشتم جواب نداد هنگ میکنه :


WM_HWIN CreateFramewin(void);
WM_HWIN CreateFramewin(void) {
WM_HWIN hWin;
WM_MESSAGE * pMsg;
WM_HWIN hItem;

hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbDialog, WM_HBKWIN, 0, 0);

hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
EDIT_SetText(hItem, "omid");

return hWin;
}

mansoory
09-04-2013, 10:24
سلام جناب منصوری

من این خط کد رو تو کدوم قسمت برنامه باید بنویسم ... مثل پایین نوشتم جواب نداد هنگ میکنه :


wm_hwin createframewin(void);
wm_hwin createframewin(void) {
wm_hwin hwin;
wm_message * pmsg;
wm_hwin hitem;

hwin = gui_createdialogbox(_adialogcreate, gui_countof(_adialogcreate), &_cbdialog, wm_hbkwin, 0, 0);

hitem = wm_getdialogitem(pmsg->hwin, id_edit_0);
edit_settext(hitem, "omid");

return hwin;
}


این pmsg چیه؟؟
همون hwin -آدرس پنجره - که در خط بالایی بدستش آوردید کافیه. باید کار کنه
بعد از تغییر خواص یک widget باید دستور WM_Invalidate به emwin اطلاع بدهید که پنجره مربوطه رو ترسیم مجدد کنه.

mansoory
09-04-2013, 10:55
با تشکر از راهنمایی هاتون
من 32k رم به emwin دادم و اجازه استفاده رو در برنامه فعال کردم قسمت دوم رم هم استفاده میشه با این حال مشکلاتی که در فیلم پیوست میبینید وجود داره
اگه ممکنه بررسی بفرمایید


You can see links before reply

ضمنا کیفیت پایین فیلم بخاطر کم کردن حجمه و روی ال سی دی متن ها کاملا شفاف هستند

خیلی عجیب بود. به نظرم خطایی هنگام استفاده از MEMDEVICE داره اتقاف میافته. در GUIConf.h مقدار SUPPORT_MEMDEV رو صفر/یا یک کرده و تست کنید

akbh
09-04-2013, 11:36
خیلی عجیب بود. به نظرم خطایی هنگام استفاده از memdevice داره اتقاف میافته. در guiconf.h مقدار support_memdev رو صفر/یا یک کرده و تست کنید
صفر و یک کردم هیچ تغییری نکرد.
در عمل با این تغییر چه اتفاقی باید بیافته؟

mansoory
09-04-2013, 12:07
صفر و یک کردم هیچ تغییری نکرد.
در عمل با این تغییر چه اتفاقی باید بیافته؟
پیشنهاد دیگه اینکه درایور رو عوض کنید(درفایل LCDConf.c). احتمالا GUI_FLEX_DRV رو استفاده کردید. چند تا مدل بیشتر نیست که می تونید در راهنما ببینید. اونها رو هم آزمایش کنید.

صفر و یک کردم هیچ تغییری نکرد.
در عمل با این تغییر چه اتفاقی باید بیافته؟
ترسیم متن معمولا بدون نیاز به memdevice انجام میشه ولی گرافیکهایی که به پردازش بیشتری نیاز دارند با کمک memdeveice انجام میشوند. شرح اون در همین تایپک توضیح داده شده .

سلام چرا در شبیه ساز فقط بعضی از فایل ها جواب وبقیه این خطا را می دهد

unhandled exception at 0x0044958a in simulation.exe: 0xc0000005: Access violation reading location 0x00000000. در صورتی که در فایلی که در پوشه application شبیه ساز فراخوانی میکنم هیچ کانفیگ سخت افزاری انجام نمیدم مثل فایل زیر .علت چی میتونه باشه؟
دیباگ کنید منبع خطا معلوم میشه

s_mirbagheri
10-04-2013, 14:25
با سلام و خسته نباشید
ببخشید آقای منصوری من نمیتونم emwin را با RTX راه اندازی کنم
اگه میشه یکی از پروژههاتون که با RTX کار میکنه را به صورت کامل اینجا بذارید. مرسی از لطفتون

microprocesor_2002
10-04-2013, 14:28
این pmsg چیه؟؟
همون hwin -آدرس پنجره - که در خط بالایی بدستش آوردید کافیه. باید کار کنه
بعد از تغییر خواص یک widget باید دستور wm_invalidate به emwin اطلاع بدهید که پنجره مربوطه رو ترسیم مجدد کنه.

آقا دمت گرم ... درست شد ..... خیلی لطف کردی .....

mansoory
10-04-2013, 15:09
با سلام و خسته نباشید
ببخشید آقای منصوری من نمیتونم emwin را با RTX راه اندازی کنم
اگه میشه یکی از پروژههاتون که با RTX کار میکنه را به صورت کامل اینجا بذارید. مرسی از لطفتون

در همین تایپک
ایـــــــــران میـــــــکرو ™ - مشاهده یک موضوع - آموزش emWin (You can see links before reply)
برنامه کاملش هست.
ضمن اینکه فیلمش هم فکر کنم صفحه 6 الی 8 پیداش کنید.

این پروژه برای LPC1768 با ال سی دی spi است.
ضمنا میتونید پروژه خودتون رو بفرستید یه نگاه بهش بندازم

Dr.ROOSTA
10-04-2013, 16:40
سلام . من ورژن 5.20 رو گرفتم . اگه دقت کرده باشین فایلایی که تو منوالش هست یکمی به emwin 5.18 یا 14 فرق می کنه . ولی این یکی دقیقا خودشه . تمامی فایلایی که میخواد رو دارد . اینم ادرسش که چون سرعتم اینجا کمه نتونستم اپ کنم . نامو ایمیل بهش بدین و دانلود کنیدش.....

SEGGER Microcontroller - Embedded Software Solutions (You can see links before reply)

Dr.ROOSTA
10-04-2013, 16:47
سلام همگی . من چند وقت بود که دیگه از کامپایل کردن های متوالی خسته شده بودم و حالم گرفته میشد که بخوام برای دیدن نتیجه هر تابع کلی وقت برای ریختن تو برد هدر بدم . اگه کسی مشکل با سیمولینک داره من درخدمتم .

microprocesor_2002
10-04-2013, 17:04
سلام به همه ....
آقا من بورد 1788 رو دارم ... می خوام بدونم که emwin از رم و فلش خارجی استفاده میکنه یا داخلی ...
و اینکه اگه داخلیه ، چطوری میشه کاری کرد که از رم و فلش خارجی استفاده کنه .؟؟؟؟
ممنون اگه جواب میدین .....

mansoory
10-04-2013, 17:54
سلام به همه ....
آقا من بورد 1788 رو دارم ... می خوام بدونم که emwin از رم و فلش خارجی استفاده میکنه یا داخلی ...
و اینکه اگه داخلیه ، چطوری میشه کاری کرد که از رم و فلش خارجی استفاده کنه .؟؟؟؟
ممنون اگه جواب میدین .....
emwin کاری به این مسایل نداره.
شما باید در تنظیمات پروژه keil مشخص کنید که کدوم رم ها و فلش ها رو میخواهید استفاده کنید و آدرس شروع و پایانش کجاست

microprocesor_2002
12-04-2013, 02:05
emwin کاری به این مسایل نداره.
شما باید در تنظیمات پروژه keil مشخص کنید که کدوم رم ها و فلش ها رو میخواهید استفاده کنید و آدرس شروع و پایانش کجاست

سلام جناب منصوری ممنون از جوابتون ...
منظور من این بود که چطوری کاری کنم که میکرو از فلش و رم خارجی استفاده کنه ... چون یه سری تنظیمات توی startup.c هستش که یه سری تنظیمات اونجا داره ... من میخام از هر دو استفاده کنه ....
ممنون که جواب میدی ....

mansoory
12-04-2013, 08:36
سلام جناب منصوری ممنون از جوابتون ...
منظور من این بود که چطوری کاری کنم که میکرو از فلش و رم خارجی استفاده کنه ... چون یه سری تنظیمات توی startup.c هستش که یه سری تنظیمات اونجا داره ... من میخام از هر دو استفاده کنه ....
ممنون که جواب میدی ....


توی همین تایپک جواب سوالتون هست: menu: Project-> Options for target...(

ایـــــــــران میـــــــکرو ™ - مشاهده یک موضوع - آموزش emWin (You can see links before reply)

microprocesor_2002
12-04-2013, 19:24
توی همین تایپک جواب سوالتون هست: menu: Project-> Options for target...(

ایـــــــــران میـــــــکرو ™ - مشاهده یک موضوع - آموزش emWin (You can see links before reply)

سلام جناب منصوری ...
آقا من همون کار رو کردم .. ولی حواسم نبود 2 تا تیک ROM1 و RAM1 زده بود ... طبق شکل ... الان دیگه تو هیچ حالتی پروگرام نمیشه ... این پیغام رو مبده :
"No Cortex-M Device found in jtag chain, please check the jtag cable and the connected device "
به نظر شما چیکار کنم .... lov: :(

mansoory
13-04-2013, 10:04
سلام جناب منصوری ...
آقا من همون کار رو کردم .. ولی حواسم نبود 2 تا تیک ROM1 و RAM1 زده بود ... طبق شکل ... الان دیگه تو هیچ حالتی پروگرام نمیشه ... این پیغام رو مبده :
"No Cortex-M Device found in jtag chain, please check the jtag cable and the connected device "
به نظر شما چیکار کنم .... lov: :(

خطای سخت افزاریه.
1-پایه ای به نام VDDA دارید که به 3.3 وصل نباشه؟؟)�ی��� no cortex-m device found in the jtag chain (You can see links before reply()

2-این لینک خطاها مال ULINK است:ULINK2 User's Guide: Error Messages (You can see links before reply)

3-پیشنهاد سوم هم اینه که یکبار از روش سریال میکرو تون رو پروگرام کنید(با FLASH MAJIC)
4-اگر نشد توی اینترنت بگردید انشالله راه حل روپیدا خواهید کرد. به ماهم اطلاع بدید

kamikazi
13-04-2013, 10:14
مهندس من با یه همچین مشکلی روبرو شدم احتمالا تو برنامتون ادرس شروع رو پیدا نمیکنه یا به عبارتی ممکنه میکروتون قفل شده باشه و جی تگتون قفل شده باشه من با مبدل usb به سریال میکرو رو ارایز کردم درست شد شما هم همینکارو بکنید

mansoory
13-04-2013, 10:28
مهندس من با یه همچین مشکلی روبرو شدم احتمالا تو برنامتون ادرس شروع رو پیدا نمیکنه یا به عبارتی ممکنه میکروتون قفل شده باشه و جی تگتون قفل شده باشه من با مبدل usb به سریال میکرو رو ارایز کردم درست شد شما هم همینکارو بکنید

در اینصورت احتمال داره که CRP در فایل Startup.s تغییر کرده باشه و دیگه با JTAGپروگرام نشه. دراینصورت اگر بعد از Erase کردن میکرو، دوباره همین پروژه رو بریزید، مجددا JTAG غیرفعال میشه.
این لینک رو ببینید:
فیوزبیت lpc1768? - ایـــــــــران میـــــــکرو ™ (You can see links before reply)

kamikazi
13-04-2013, 10:45
بله مهندس دقیقا درسته منم یه پروژه ای بود که برای 1788 بود نگو ناقلا ها اومده بودن crp رو فعال کرده بودن میکرو رو پروگرم کردمو دیگه پروگرم نشد که نشد منم ذهنم این بود که میکرو سوخته چون هیچ عکس العملی ازش نمیدیم و برنامه هم کار نکرد منوال 1788 رو که خوندم به همین crp رسیدم و میکرو با مبدل cp2104 ارایز کردم و درست شد با cp2102 هم میتونید مدارشو درست کنید 3 تا مقاموت و 2 تا خازن میخواد همین یا میتونید از فروشگاه بگیرید خیلی خوب جواب میده اگرم میخواید با پورت سریال کامپیوتر و برنامه فلش مجیک ارایزش کنید یه مکس 3232 بزار تنگش و خروجیشو بده به بیس یه ترانزیستور npn و از کلکتورش با یه مقاومت پول اپ بده به tx و rx چون مبدل cp2102 خودش بصورت داخلی پالسهارو ریورز میکنه نیازی به این کار نداره مستقیم بده به 1788 ولی برای دیگر مبدلها باید خروجی rs232 رو لو کنید یعنی یه نات باید روی مدار اعمال کنید امیدوارم منظورمو خوب رسونده باشم

Dr.ROOSTA
13-04-2013, 15:36
سلام به همه دوستان .......
ببینید دوستان قبل اینکه سیمولینک رو شروع کنم باید بگم که درکل شبیه سازی خوبه ولی نباید بهش اعتماد کرد .
در کل سراغ دستورات خود سمولینک نرین و فقط برنامه هاتونو باهش تست کنید و ببینید که دستوراتتون چطوری اجرا میشه . دیگه براتون بگم یه خوبی دیگه ای که هم داره بهتون میگه که برنامتون نیاز به چ مقدار رم داره . فقط دوسه تا ازدستوراتی که فک میکنم شاید لازم باشه بررسی میکنم .....

Dr.ROOSTA
13-04-2013, 16:06
خوب این فایل توش نوشته باید چکار کنید .:hi:

majidma3000
13-04-2013, 22:39
کسی تونسته فونت ttf رو لود کنه؟ من هر کاری کردم نشد.من از هدر بورد lpc1788 استفاده می کنم. چطوری میشه عکس رو از حافظه رم خارجی نمایش بدم؟

kamikazi
14-04-2013, 22:54
مهندس منظورتون کدوم حافظه خارجی بهتره از sdcard باشه منظورتون همینه؟

Dr.ROOSTA
14-04-2013, 23:01
سلام بچه ها . من فونت نستعلیغو کانورت کردم ولی نمی دونم چطوری باید از کد cای که تولید کرده استفاده کنم . اومده همه ی حروفو مثل زیر گذاشته :
________,________,
______XX,________,
______X_,________,
________,________,
________,__XX____,
________,_X_X____,
________,XXX_____,
_______X,XX______,
_X_____X,________,
X______X,________,
X______X,________,
X_____X_,________,
X_____X_,________,
XXXXXX__,________,
_XXXX___,________};

بعدش هم یه عالمه چیز دیگه . اینارو چزوری استفاده کنم ؟ برنامه FONT_Arabic.c چطوری کار می کنه ؟ فقط با دو تابع اخرش داره ترجمه می کنه ؟ به دادم برسین !!! گیج شدم :unh::unh::unh:

mansoory
15-04-2013, 10:03
کسی تونسته فونت ttf رو لود کنه؟ من هر کاری کردم نشد.

نمونه اش توی سمپلهای emwin هست.


سلام بچه ها . من فونت نستعلیغو کانورت کردم ولی نمی دونم چطوری باید از کد cای که تولید کرده استفاده کنم . اومده همه ی حروفو مثل زیر گذاشته :
________,________,
______xx,________,
______x_,________,
________,________,
________,__xx____,
________,_x_x____,
________,xxx_____,
_______x,xx______,
_x_____x,________,
x______x,________,
x______x,________,
x_____x_,________,
x_____x_,________,
xxxxxx__,________,
_xxxx___,________};

بعدش هم یه عالمه چیز دیگه . اینارو چزوری استفاده کنم ؟ برنامه font_arabic.c چطوری کار می کنه ؟ فقط با دو تابع اخرش داره ترجمه می کنه ؟ به دادم برسین !!! گیج شدم :unh::unh::unh:





فایلش رو که تبدیل کردین بفرستید. من هم تصمیم دارم کار کنم


من از هدر بورد lpc1788 استفاده می کنم. چطوری میشه عکس رو از حافظه رم خارجی نمایش بدم؟

آیا دلیل خاصی داره که بدونیم متغیرمون توی فلش میکروست یا خارجی؟ عکسها بصورت آرایه توی برنامه استفاده میشه و چون از نوع const هست، توی ROM ذخیره میشه. ولی keil حین کامپایل خودش اون رو توی فلش داخلی یا خارجی قرار میده.
ولی اگه منظورتون خوندن از SDCard است که داستانش فرق میکنه.

microprocesor_2002
15-04-2013, 14:14
سلام به همه دوستان
آقا کی رو بورد 1788 تونسته nand flash و sdram خارجی رو راه اندازی کنه .... آخه تعداد عکس هایی که تو پروژه دارم یکم زیاده تو فلش داخلی جا نمیشه :(

kamikazi
15-04-2013, 15:24
مهندس بهترین گزینه همون sdcard هستش مثال براش زیاده ولی برای نند فلش من که مثالی برای لود عکس از روی نند فلش ندیدم کسیم تا حالا بهش اشاره نکرده خیلی خوبه اگه کسی در این ضمینه کار کرده به دیگران و به من هم تجربیاتشو یاد بده

mansoory
15-04-2013, 15:50
مهندس بهترین گزینه همون sdcard هستش مثال براش زیاده ولی برای نند فلش من که مثالی برای لود عکس از روی نند فلش ندیدم کسیم تا حالا بهش اشاره نکرده خیلی خوبه اگه کسی در این ضمینه کار کرده به دیگران و به من هم تجربیاتشو یاد بده

من هنوز آزمایشش نکردم. ولی حین اینکه fs رو rl_arm می خوندم فهمیدم که با اون میشه قسمتی از فلش داخلی/خارجی میکرو رو بصورت یک درایو فرمت کرده و استفاده کنیم

kamikazi
15-04-2013, 18:49
مهندس اینطور که من متوجه شدم میشه با دیوایس usb otg با نند فلشه ارتباط برقرار کرد و پروگرمش کرد و توی برنامه مثلا بگید از ادرس فلان تا فلان نند رو بخون بریز روی مثلا dma فکر میکنم به این صورت باشه اگه اشتباه نکنم

Dr.ROOSTA
15-04-2013, 20:19
سلام جناب اقای منصوری . این فایل تبدیل شده نستعلیغه :

titery
16-04-2013, 00:11
سلام چرا در شبیه ساز فقط بعضی از فایل ها جواب وبقیه این خطا را می دهد

Unhandled exception at 0x0044958a in Simulation.exe: 0xC0000005: Access violation reading location 0x00000000. در صورتی که در فایلی که در پوشه application شبیه ساز فراخوانی میکنم هیچ کانفیگ سخت افزاری انجام نمیدم مثل فایل زیر .علت چی میتونه باشه؟
مشکل از این بود که حتما باید در maintask تابع GUI_Init(); رو فراخوانی کنی من این کار رو در تابع main کرده بودم از این رو برنامه در عمل جواب میداد ولی در شبیه ساز نه.
دومین مشکل که بعضی از وقت بیخودی ارور میده و من از منوی build گزینه ی build solution رو میزنم وبعد run میکنم مشکل بر طرف میشود

mansoory
16-04-2013, 09:54
مشکل از این بود که حتما باید در maintask تابع GUI_Init(); رو فراخوانی کنی من این کار رو در تابع main کرده بودم از این رو برنامه در عمل جواب میداد ولی در شبیه ساز نه.
دومین مشکل که بعضی از وقت بیخودی ارور میده و من از منوی build گزینه ی build solution رو میزنم وبعد run میکنم مشکل بر طرف میشود

ضمن اینکه GuiInit نباید بیش از یکبار فراخوانی بشه. چه در شبیه سازی و چه در برنامه اصلی.

titery
17-04-2013, 23:54
سلام
من یکسری مواردی تو این روزها یاد گرفتم و تا الان تونستم یک سری چیزهای کوچیک را راه بندازم
نمونه برنامم رو میذارم همانطور که قرار شد برنامه در راستای کیبورد باشد من هم چیزهایی روش کار کردم که بدرد این پروژه بخورد اول یک سری توضحیات قرار می دهم
BUTTON_SetBitmapEx()

این دستور قابلیت اضاف کردن عکس به کلید درحال خورده بودن یا نبودن را دارد که با هندل باتون کار میکند دکمه هایی که ما به صورت تکی تعریف میکنیم هندل دارد ولی زیر برنامه مبنی بر چک اتومات آن ندارد و باید به صورت دستی چک شود که هندل آن را به جای hItemمیگذاریم

ولی اگر باتون در دیالوگ تعریف شود دیگر هندل ندارد پس ما باید به صورت دستی این هندل رو ایجاد کنیم




WM_HWIN hWin;



static void _cbWindow1(WM_MESSAGE* pMsg) {
GUI_RECT Rect;
int x, y;
hWin = pMsg->hWin;//************************************************** ****
switch (pMsg->MsgId) {
case WM_PAINT:
WM_GetInsideRect(&Rect);
GUI_SetBkColor(_WindowColor1);
GUI_SetColor(_FrameColor1);
GUI_ClearRectEx(&Rect);
GUI_DrawRectEx(&Rect);
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
x = WM_GetWindowSizeX(pMsg->hWin);
y = WM_GetWindowSizeY(pMsg->hWin);
GUI_DispStringHCenterAt("Window 1", x / 2, (y / 2) - 12);
break;
default:
WM_DefaultProc(pMsg);
}
}





void MainTask(void) {
WM_HWIN hItem;
GUI_Init();
GUI_SetBkColor(GUI_BLACK);
WM_SetCreateFlags(WM_CF_MEMDEV);
WM_EnableMemdev(WM_HBKWIN);

BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);

_DemoCreateWindow();
Createbehroozbot();
hItem = WM_GetDialogItem(hWin,ID_BUTTON_0);
BUTTON_SetBitmapEx(hItem, 0, &bmbestkeybord, 2, 2);
BUTTON_SetBitmapEx(hItem, 1, &bmbestkeybord, 4, 4);
while (1) {



bmbestkeybordهم زیر برنامه عکس ایجاد شده توسط bitmap convertor می باشد

titery
17-04-2013, 23:56
ToolTips

اگر در جایی بخواهیم یک پیغام گذرا به عنوان اطلاع رسانی در مورد یک پنجره یا دکمه خاص استفاده میکنیم به صورتی که وقتی موس بالای ان میرود برای زمان مشخصی به نمایش می آیید(زمان ها قابل تنظیم)




#include <stddef.h>
#include "WM.h"

static WM_HWIN hParent;//id windows
static WM_HWIN hTool;
static WM_HWIN hToolTip;

static void _cbParent(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_DispString("Parent window");
break;
}
}
static void _cbTool(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_DispString("Tool window");
break;
}
}
void MainTask(void) {
WM_HWIN hTool, hParent;
WM_TOOLTIP_HANDLE hToolTip;
GUI_Init();
WM_SetDesktopColor(GUI_BLACK);
hParent = WM_CreateWindow(0, 0, 200, 100, WM_CF_SHOW, _cbParent, 0);
hTool = WM_CreateWindowAsChild(20, 20, 100, 50, hParent, WM_CF_SHOW, _cbTool, 0);
hToolTip = WM_TOOLTIP_Create(hParent, NULL, 0);
WM_TOOLTIP_AddTool(hToolTip, hTool, "I am a ToolTip");
while (1) {
GUI_Delay(100);
}
}





TOOLTIP فقط برای ویندوز و چیزی که(مثل دکمه) در پنجره دیالوگش وجود دارد کا میکند و
مثال برای دکمه



#include "DIALOG.h"
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Framewin", 0, 0, 0, 320, 240, 0, 0, 0 },
{ BUTTON_CreateIndirect, "Button 0", ID_BUTTON_0, 5, 5, 80, 20, 0, 0, 0 },
{ BUTTON_CreateIndirect, "Button 1", ID_BUTTON_1, 5, 30, 80, 20, 0, 0, 0 },
};
static const TOOLTIP_INFO _aInfo[] = {
{ ID_BUTTON_0, "I am Button 0" },
{ ID_BUTTON_1, "I am Button 1" },
};
static void _ShowDialog(void) {
WM_HWIN hWin;
WM_TOOLTIP_HANDLE hInfo;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), 0, WM_HBKWIN, 0, 0);
hInfo = WM_TOOLTIP_Create(hWin, _aInfo, GUI_COUNTOF(_aInfo));
while (1) {
GUI_Delay(100);
}
}

titery
18-04-2013, 00:09
اینم کد برنامه ای که نوشتم یک ویندوز با child کال بک دار که با فشردن یک دکمه ای که عکس دار شده یک child دیگه باز میشه



#include <string.h>
#include "GUI.h"
#include "WM.h"
#include "DIALOG.h"
#ifndef GUI_CONST_STORAGE
#define GUI_CONST_STORAGE const
#endif

#define SPEED 1250


static GUI_COLOR _WindowColor1 = GUI_GREEN;
static GUI_COLOR _FrameColor1 = GUI_BLUE;

WM_HWIN hWin;
static WM_HWIN _hWindow1;//id windows
static WM_HWIN hTool;
static WM_HWIN hwindowstext;
static WM_HWIN hToolTip;
static WM_HWIN hFrame;
static WM_HWIN hMulti;
static HEADER_Handle _hHeader;
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)


extern GUI_CONST_STORAGE GUI_BITMAP bmkeyboard20020Orange;
static GUI_CONST_STORAGE unsigned long _ackeyboard20020Orange[] = {
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF949494, 0xFF5C6F7C, 0xFF5C6F7C, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F,
0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F,
0xFF7F7F7F, 0xFC383838, 0xE52D3236, 0xF02B2B2B, 0xFF555555, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF7F7F7F, 0xFF68757D,
0xFFBDCAD2, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFEB8B8B8, 0xA61A3141, 0x0868B8EB, 0x274596C8, 0xF14E4E4F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9DEF9,
0xFFB9DEF9, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xEC3A3B3C, 0x1D71ABD2, 0x0087C9F4, 0x0153B4EF, 0xE43A3D40, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9DEF8,
0xFFB9DEF8, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFEBFBFBF,
0x95284051, 0x0090CCF4, 0x006ABEF1, 0x204096CC, 0xF15C5C5C, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9DDF8,
0xFFB9DDF8, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF1F1F1, 0xE726282A,
0x216FA6CE, 0x0070BEF2, 0x0042AFEE, 0x75204E6D, 0xFDA3A3A3, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9DDF8,
0xFFB9DDF8, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFCDCDCD, 0xFB8E8E8E, 0xF46A6A6A, 0xEF555555, 0xF1555555, 0xF67F7F7F, 0xFC9C9C9C, 0xFFCDCDCD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFEAEAEA, 0xF2404041, 0x534A7696,
0x0062B7F0, 0x0036AAEE, 0x1E2C8ECB, 0xE225292C, 0xFFF8F8F8, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9DCF7,
0xFFB9DCF7, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFEB8B8B8, 0xEB2C2E2F,
0x94253E51, 0x4A57809F, 0x2175A7CC, 0x1281B8E2, 0x187DB2DA, 0x2B709FC1, 0x50567B97, 0x86364E61, 0xCB232C33, 0xF35C5C5C, 0xFC9C9C9C, 0xFFDBDBDB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDBDBDB, 0xFB868686, 0xD51F2529, 0x46507FA2, 0x0056B2EF,
0x003AA9ED, 0x082A9EE3, 0xB00A1F2F, 0xFEBFBFBF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9DCF7,
0xFFB9DCF7, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFA717171, 0xA8182C3D, 0x1E6BA4CF,
0x0093C9F4, 0x008EC7F3, 0x0080C1F2, 0x0076BEF1, 0x0073BCF1, 0x0077BEF1, 0x007EC1F1, 0x0087C4F2, 0x018BC6F2, 0x2272A5CC, 0x584E718D, 0x89334A5D, 0xAC1F303D, 0xBC3E4952, 0xB11B2B38, 0x902E4557, 0x52507694, 0x0A6FB3E5, 0x004AACEE, 0x0036A5EC,
0x0533A0E6, 0x94113047, 0xFB949494, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9DBF7,
0xFFB9DBF7, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF96A6A6A, 0x8624435C, 0x0379BAEE, 0x0082C0F1,
0x0067B6EF, 0x0054AEEE, 0x0050ACED, 0x004DAAED, 0x004DAAED, 0x004AABED, 0x0045A9EC, 0x0046A9EC, 0x004DACED, 0x0059B0ED, 0x0065B5EF, 0x006FB8EF, 0x0076BBF0, 0x0078BCF0, 0x0071B9F0, 0x0061B3EE, 0x0049A9ED, 0x0035A2EB, 0x0032A1EB, 0x0F3695D9,
0x9D0F293D, 0xFA787878, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9DAF7,
0xFFB9DAF7, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFDA3A3A3, 0x991A344A, 0x026AB3ED, 0x0070B7EF, 0x0051ABED,
0x154796D2, 0x761F4360, 0xC01C2731, 0xDA393A3B, 0xC429333C, 0x9B122A3E, 0x66224E71, 0x343073A6, 0x0D3D97DA, 0x003FA3EB, 0x0039A2EA, 0x0036A1EA, 0x0034A0EA, 0x00339FEA, 0x00319FEA, 0x00309EEA, 0x002F9EE9, 0x04349CE6, 0x47256392, 0xCA131D24,
0xFDA3A3A3, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9D9F6,
0xFFB9D9F6, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF1F1F1, 0xD4141D24, 0x0F509EDC, 0x0067B1ED, 0x004AA6EA, 0x313B7CB0,
0xD3191F24, 0xFDAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF1F1F1, 0xFEB8B8B8, 0xF67F7F7F, 0xE3474747, 0xB7172633, 0x84183954, 0x5921547D, 0x3A28699C, 0x2C2975B0, 0x312871AA, 0x47235F8E, 0x79193F5E, 0xC71A242C, 0xF6717171, 0xFFE2E2E2,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9D9F6,
0xFFB9D9F6, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFB7F7F7F, 0x592C5E89, 0x0053A7EA, 0x0048A3E9, 0x203684C3, 0xDB171C21,
0xFFD4D4D4, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDBDBDB, 0xFDB1B1B1, 0xF9959595, 0xF37F7F7F, 0xF57F7F7F, 0xFCA3A3A3, 0xFFC6C6C6, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9D7F5,
0xFFB9D7F5, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xDF262B2F, 0x094598DE, 0x0062ABEB, 0x013299E6, 0xA80C2236, 0xFEC6C6C6,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9D7F5,
0xFFB9D7F5, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFE2E2E2, 0x9A16304A, 0x004DA0E7, 0x0051A2E8, 0x2E2170B1, 0xF2555555, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9D6F5,
0xFFB9D6F5, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFDB8B8B8, 0x66224E79, 0x003293E4, 0x00198CE2, 0x7116436D, 0xFEB8B8B8, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9D5F4,
0xFFB9D5F4, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFBAAAAAA, 0x4A265D93, 0x001687E1, 0x000F85E0, 0x9B102A45, 0xFFF1F1F1, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFB9D4F4,
0xFFB9D4F4, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFFFFFFFF, 0xFFE2E2E2, 0xFC959595, 0xF4717171, 0xEE555555, 0xEB555555, 0xE9393939, 0x3D205C96, 0x00087FDF, 0x000D80DF, 0xA00B213B, 0xF0555555, 0xF0555555,
0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555,
0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF0555555, 0xF1555555, 0xF37F7F7F, 0xF57F7F7F, 0xF87F7F7F, 0xFDAAAAAA, 0xFF9DB7D7,
0xFFB9D3F3, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFD9C9C9C, 0xC116212E, 0x563D608A, 0x25497DBB, 0x123480D1, 0x0A2E82D8, 0x0F2B7DD2, 0x061E7ED7, 0x00037ADD, 0x000379DD, 0x0F1B76CD, 0x172776CA, 0x172776CA,
0x162A79CB, 0x154688D0, 0x155691D3, 0x155992D3, 0x155791D3, 0x155690D3, 0x155590D2, 0x155590D2, 0x155690D2, 0x155791D3, 0x15528CD1, 0x154782CE, 0x164581CD, 0x164480CD, 0x164480CD, 0x164480CD, 0x164581CE, 0x164681CE, 0x164681CE, 0x164581CD,
0x164480CD, 0x164480CD, 0x164480CD, 0x164581CD, 0x164681CE, 0x164681CE, 0x164581CD, 0x164480CD, 0x164480CD, 0x164480CD, 0x164581CD, 0x164682CE, 0x164782CE, 0x164782CE, 0x184780C9, 0x1E477ABC, 0x254D7DB9, 0x384872A8, 0x5B385984, 0xA1172A42,
0xF61D2022, 0xFF2A2A2A, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xD1141C27, 0x0B4889D7, 0x004F93E2, 0x163176C4, 0x31235FA1, 0x4021558E, 0x481F5088, 0x4A174B84, 0x4A114884, 0x4A114884, 0x4A184B85, 0x4A1D4D85, 0x4A1D4D85,
0x4A1D4D85, 0x4A1D4D85, 0x4A1D4D85, 0x4A1D4D85, 0x4A1D4D85, 0x4A1D4D85, 0x4A1D4D85, 0x4A1D4D85, 0x4A1C4D85, 0x4B1B4B84, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381,
0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x4B144381, 0x44144587, 0x381A4E93, 0x222962B0, 0x043D7FD9, 0x003C80DC,
0x7C113361, 0xFD000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE7F7F7F, 0x7C1A3962, 0x003483DE, 0x85172F4E, 0xE84E4E4E, 0xF57F7F7F, 0xFBAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA,
0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA,
0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xFCAAAAAA, 0xF88E8E8E, 0xEE6A6A6A, 0xC1121923, 0x172967BF,
0x271856AF, 0xF4000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFC7F7F7F, 0x4E1F4E8B, 0x112971CA, 0xEB404041, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFCA3A3A3, 0x5D153C77,
0x061961D0, 0xE7000103, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF87F7F7F, 0x372259A2, 0x2E205BAA, 0xF67F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFD4D4D4, 0x840F2A57,
0x00165DD1, 0xD1050C18, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF57F7F7F, 0x291F5CAE, 0x40114992, 0xF9949494, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFEB8B8B8, 0xCA0F192A, 0xB0182437, 0xB01C2639, 0xB81B2538, 0xFA717171, 0xFFFFFFFF,
0xFFE2E2E2, 0xD71B212B, 0xB11C2639, 0xB01C2639, 0xB21A2538, 0xEB303238, 0xFFFFFFFF, 0xFFFFFFFF, 0xE624272E, 0xB21A2538, 0xB01A2538, 0xB11A2538, 0xDC191F28, 0xFFE2E2E2, 0xFFFFFFFF, 0xF657585A, 0xB41A2539, 0xB01A2538, 0xB01A2538, 0xD0161E2B,
0xFFBFBFBF, 0xFFFFFFFF, 0xFB7F7F7F, 0xBC172134, 0xB01A2538, 0xB01A2538, 0xC4141D2D, 0xFD9B9B9B, 0xFFFFFFFF, 0xFEB8B8B8, 0xCA19202D, 0xB01A2538, 0xB1182437, 0xB80B1A33, 0xFA717171, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x970A1E42,
0x000D53CE, 0xC2071020, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF47F7F7F, 0x231758B0, 0x4712458B, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFAAAAAAA, 0x421F4B90, 0x00568ADE, 0x00749DE4, 0x0B7298DC, 0xED555555, 0xFFFFFFFF,
0xFED4D4D4, 0x70364A6E, 0x00709AE2, 0x00608CDE, 0x005C89DD, 0xB6151F32, 0xFFFFFFFF, 0xFFFFFFFF, 0xA31D2A42, 0x005C89DD, 0x005C89DD, 0x005B89DD, 0x812A3E63, 0xFFD4D4D4, 0xFFFFFFFF, 0xDE31353B, 0x005E8BDD, 0x005C89DD, 0x005C89DD, 0x58395487,
0xFDAAAAAA, 0xFFFFFFFF, 0xF2555555, 0x1A547CC5, 0x005C89DD, 0x005C89DD, 0x30486BAE, 0xF87F7F7F, 0xFFFFFFFF, 0xFBAAAAAA, 0x45425E93, 0x005C89DD, 0x004A7CD9, 0x091C59C9, 0xEB555555, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA0091B3E,
0x00094DCB, 0xBB071124, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x211454AF, 0x4A134289, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFAAAAAAA, 0x411E498F, 0x002E70D6, 0x006993E0, 0x0A7196DA, 0xEB555555, 0xFFFFFFFF,
0xFED4D4D4, 0x6E384B6E, 0x005C87DB, 0x005985DA, 0x005C87DB, 0xB5182132, 0xFFFFFFFF, 0xFFFFFFFF, 0xA1202B43, 0x005B86DA, 0x005985DA, 0x005985DA, 0x7F2F4063, 0xFFD4D4D4, 0xFFFFFFFF, 0xDC32353C, 0x005F89DC, 0x005985DA, 0x005985DA, 0x563D5687,
0xFCAAAAAA, 0xFFFFFFFF, 0xF1555555, 0x19567BC4, 0x005985DA, 0x005985DA, 0x2F4D6DAD, 0xF77F7F7F, 0xFFFFFFFF, 0xFAAAAAAA, 0x44415C92, 0x005380D9, 0x00245DCF, 0x091954C6, 0xEA555555, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA3091A3C,
0x000849C9, 0xB8081328, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x211250AE, 0x4A134088, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFAAAAAAA, 0x411E468E, 0x001D63D3, 0x00356FD6, 0x0A668CD8, 0xE8393939, 0xFBAAAAAA,
0xFA8D8D8D, 0x6D32446B, 0x00567FD9, 0x00547ED8, 0x005A83DA, 0xB2182032, 0xFBAAAAAA, 0xFBAAAAAA, 0x9F202B43, 0x005881D9, 0x00547ED8, 0x005680D9, 0x7D2E3F63, 0xFB8D8D8D, 0xFBAAAAAA, 0xD924272D, 0x005E86DB, 0x00557FD9, 0x005680D9, 0x553D5587,
0xF8717171, 0xFBAAAAAA, 0xED393939, 0x195578C3, 0x00557FD9, 0x00567FD9, 0x2F4C6BAD, 0xF3555555, 0xFBAAAAAA, 0xF6717171, 0x433B5590, 0x00295DCE, 0x000F4AC9, 0x091950C5, 0xEB555555, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA309193C,
0x000845C8, 0xB8071128, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x21114CAC, 0x4A133E87, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFDAAAAAA, 0x95102042, 0x6B193262, 0x6B193262, 0x5C2A4172, 0x43405991, 0x46435B91,
0x4639528E, 0x49364E85, 0x6A273A64, 0x6B253864, 0x66293B65, 0x3F3B5593, 0x4639538D, 0x4639528D, 0x4338528D, 0x68273A64, 0x6B253864, 0x69273A64, 0x47374F86, 0x4639528D, 0x463A538D, 0x3F3A5492, 0x632B3E68, 0x6B263964, 0x6A273A64, 0x4E354C80,
0x4639528D, 0x463A538E, 0x4438518D, 0x58304575, 0x6B263964, 0x6B273A64, 0x5333497A, 0x4538528D, 0x463A538E, 0x46344E8C, 0x51263F79, 0x6C11295E, 0x6C11295E, 0x7512295D, 0xF4555555, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA309183B,
0x000841C6, 0xB8061128, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x211149AB, 0x4A133B86, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF8F8F8, 0xFFD4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xC72A3140, 0x003667D3, 0x002D5CCE,
0x002A59CD, 0x55203B7F, 0xFB8E8E8E, 0xFED4D4D4, 0xEF474747, 0x152C56BD, 0x002B59CD, 0x002A59CD, 0x28274BA6, 0xF46A6A6A, 0xFED4D4D4, 0xFA8E8E8E, 0x46223F87, 0x002A59CD, 0x002B5ACD, 0x002F5DCE, 0xE2252629, 0xFED4D4D4, 0xFDB1B1B1, 0x701B3064,
0x002A59CD, 0x002C5ACD, 0x002C5BCD, 0xB50C162D, 0xFED4D4D4, 0xFED4D4D4, 0x99132042, 0x002B59CD, 0x002C5ACD, 0x002252CB, 0x83122557, 0xFEB1B1B1, 0xFED4D4D4, 0xFFD4D4D4, 0xFFEAEAEA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30A183B,
0x00083EC4, 0xB8061027, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x211145AA, 0x4A133986, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xC8313747, 0x001848C7, 0x000F40C5,
0x000F40C5, 0x56132F7A, 0xFCAAAAAA, 0xFFFFFFFF, 0xF0555555, 0x161742B6, 0x000F40C5, 0x000F40C5, 0x29163BA0, 0xF57F7F7F, 0xFFFFFFFF, 0xFBAAAAAA, 0x47133183, 0x000F40C5, 0x000F40C5, 0x001847C7, 0xE32B2D30, 0xFFFFFFFF, 0xFED4D4D4, 0x70112661,
0x000F40C5, 0x000F40C5, 0x001444C6, 0xB608122C, 0xFFFFFFFF, 0xFFFFFFFF, 0x9A0D1B40, 0x001041C5, 0x000F40C5, 0x000F40C5, 0x83112356, 0xFFD4D4D4, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30A173B,
0x00083AC3, 0xB8060F27, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x211142A8, 0x4A133685, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFCDCDCD, 0xF1555555, 0xE8565656, 0xE8565656, 0xBA131929, 0x001B47C6, 0x001642C5,
0x001642C5, 0x51152E7A, 0xE6393939, 0xE8555555, 0xDC1C1C1C, 0x151B42B5, 0x001642C5, 0x001642C5, 0x27193BA0, 0xE02A2A2A, 0xE8555555, 0xE5393939, 0x43153182, 0x001642C5, 0x001642C5, 0x001D48C6, 0xD20F1013, 0xE8555555, 0xE7474747, 0x69122660,
0x001642C5, 0x001642C5, 0x001A45C6, 0xA808112B, 0xE8555555, 0xE8555555, 0x8F0D1A3F, 0x001743C5, 0x001642C5, 0x001642C5, 0x7A112255, 0xE8474747, 0xE8555555, 0xEC555555, 0xFD959595, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30A163A,
0x000836C1, 0xB8060E27, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x21113FA8, 0x4A133484, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFBAAAAAA, 0x481E3A87, 0x052553C9, 0x051C45C3, 0x0F1D42BB, 0xB5121727, 0xC02F3444,
0xBF282D3C, 0x5B14286B, 0x051840C1, 0x051840C1, 0x051B42C1, 0x8E0B173D, 0xC02F3444, 0xC02F3444, 0x810F1D4B, 0x051941C1, 0x051840C1, 0x051840C1, 0x68132663, 0xC0282D3C, 0xC02F3444, 0xAB0D142B, 0x051D45C2, 0x051840C1, 0x051840C1, 0x4A162F7F,
0xBE212635, 0xC02F3444, 0xB8121727, 0x1A1B3EAE, 0x051840C1, 0x051840C1, 0x2C1A389C, 0xBB191E2E, 0xC02F3444, 0xBD212635, 0x3B173289, 0x051840C1, 0x051840C1, 0x0F1E44BE, 0xED555555, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30A153A,
0x000833C0, 0xB8060E27, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x21113BA6, 0x4A133183, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFAAAAAAA, 0x411D3988, 0x001441C5, 0x000F36C0, 0x0C183CBA, 0xEC555555, 0xFFFFFFFF,
0xFED4D4D4, 0x7011225F, 0x000F36C0, 0x000F36C0, 0x00143AC1, 0xB608102B, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30C163A, 0x001138C1, 0x000F36C0, 0x000F36C0, 0x81112056, 0xFFD4D4D4, 0xFFFFFFFF, 0xDD2C2F37, 0x00183DC2, 0x000F36C0, 0x000F36C0, 0x58132976,
0xFCAAAAAA, 0xFFFFFFFF, 0xF1555555, 0x1A1738AC, 0x000F36C0, 0x000F36C0, 0x31163298, 0xF77F7F7F, 0xFFFFFFFF, 0xFAAAAAAA, 0x45132B81, 0x000F36C0, 0x000F36C0, 0x09193DBD, 0xEA555555, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30A1439,
0x00082FBE, 0xB8060D26, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x211038A5, 0x4A122F82, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFAAAAAAA, 0x41183085, 0x000F33BF, 0x000F33BF, 0x0C1839B9, 0xEC555555, 0xFFFFFFFF,
0xFED4D4D4, 0x7011205E, 0x000F33BF, 0x000F33BF, 0x001437C0, 0xB6080F2B, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30C1539, 0x001135C0, 0x001034BF, 0x000F33BF, 0x81111F56, 0xFFD4D4D4, 0xFFFFFFFF, 0xDD2C2F37, 0x00183BC1, 0x001034BF, 0x000F34BF, 0x58132776,
0xFCAAAAAA, 0xFFFFFFFF, 0xF1555555, 0x1A1736AB, 0x000F33BF, 0x000F33BF, 0x31163097, 0xF77F7F7F, 0xFFFFFFFF, 0xFAAAAAAA, 0x45132980, 0x000F33BF, 0x000F33BF, 0x09193ABC, 0xEA555555, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30A1339,
0x00082DBD, 0xB8060D26, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x211035A4, 0x4A122D81, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFCAAAAAA, 0x73101E55, 0x3E14287E, 0x3E14287E, 0x4B16297B, 0xF2555555, 0xFFFFFFFF,
0xFFD4D4D4, 0x970C163E, 0x3E14287E, 0x3E14287E, 0x3F172A7F, 0xCA14192B, 0xFFFFFFFF, 0xFFFFFFFF, 0xBD0A0F27, 0x3E1E3181, 0x3D1E3181, 0x3E1D3081, 0xA30E173A, 0xFFD4D4D4, 0xFFFFFFFF, 0xE734353C, 0x401F3282, 0x3D1F3281, 0x3D1E3181, 0x84141F50,
0xFEAAAAAA, 0xFFFFFFFF, 0xF5636363, 0x54162872, 0x3E14287E, 0x3E14287E, 0x66122264, 0xFA7F7F7F, 0xFFFFFFFF, 0xFCAAAAAA, 0x76101D54, 0x3E14287E, 0x3E14287E, 0x48172A7C, 0xF0555555, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30A1339,
0x00082ABB, 0xB8060C26, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x211032A3, 0x4A122B81, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFEAEAEA, 0xFCAAAAAA, 0xFBAAAAAA, 0xFBAAAAAA, 0xFCAAAAAA, 0xFFCDCDCD, 0xFFFFFFFF,
0xFFF8F8F8, 0xFDAAAAAA, 0xFBAAAAAA, 0xFBAAAAAA, 0xFBAAAAAA, 0xFEBFBFBF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFEB1B1B1, 0xFBAAAAAA, 0xFBAAAAAA, 0xFBAAAAAA, 0xFDAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFECDCDCD, 0xFBAAAAAA, 0xFBAAAAAA, 0xFBAAAAAA, 0xFDAAAAAA,
0xFFF1F1F1, 0xFFFFFFFF, 0xFFDBDBDB, 0xFCAAAAAA, 0xFBAAAAAA, 0xFBAAAAAA, 0xFCAAAAAA, 0xFFE3E3E3, 0xFFFFFFFF, 0xFFEAEAEA, 0xFCAAAAAA, 0xFBAAAAAA, 0xFBAAAAAA, 0xFCAAAAAA, 0xFFCDCDCD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30A1238,
0x000827BA, 0xB8060C26, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x21102FA1, 0x4A12287F, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFE2E2E2, 0xE12D2F39, 0xC32F3347, 0xC2323548, 0xC2383B4B, 0xC23B3D4B, 0xC23B3D4B, 0xC23B3D4B, 0xC23B3D4B, 0xC2393C4B, 0xC2393C4B, 0xC2393C4B, 0xC23A3D4B, 0xC23B3D4B, 0xC23B3D4B, 0xC23B3D4B, 0xC2393C4B, 0xC2393C4B, 0xC2393C4B, 0xC23A3D4B,
0xC23B3D4B, 0xC23B3D4B, 0xC23B3D4B, 0xC2393C4B, 0xC2333749, 0xC32F3347, 0xD22E3142, 0xFDA3A3A3, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30A1138,
0x000823B8, 0xB8060B25, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x21102CA1, 0x4A12267E, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFED4D4D4, 0x720D175B, 0x00061FB7, 0x000A22B8, 0x002138BE, 0x004154C7, 0x004A5CCA, 0x004A5CCA, 0x004356C8, 0x003549C4, 0x003348C4, 0x003549C4, 0x004255C8, 0x004A5CCA, 0x004B5DCA, 0x00475AC9, 0x00374BC5, 0x003448C4, 0x003549C4, 0x003F52C7,
0x004A5CCA, 0x004B5DCB, 0x004658C9, 0x00293EC1, 0x000D25B8, 0x00061FB7, 0x330F2291, 0xF87F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30A1037,
0x000821B7, 0xB8060B25, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF37F7F7F, 0x2110299F, 0x4A12247E, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFED4D4D4, 0x7010195B, 0x000A21B6, 0x000A21B6, 0x000A21B6, 0x000F25B7, 0x001127B8, 0x001127B8, 0x000F25B8, 0x000B21B6, 0x000A21B6, 0x000B21B6, 0x000E24B7, 0x001127B8, 0x001127B8, 0x001026B8, 0x000B21B7, 0x000A21B6, 0x000B21B6, 0x000D24B7,
0x001127B8, 0x001127B8, 0x001026B8, 0x000B21B7, 0x000A21B6, 0x000A21B6, 0x31142491, 0xF77F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA30A0F37,
0x00081EB6, 0xB8060A25, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF47F7F7F, 0x23162B9E, 0x4916247E, 0xFBAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFED4D4D4, 0x70121A5B, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7,
0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x000F22B7, 0x31172591, 0xF77F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA20A0F38,
0x001023B7, 0xBA050921, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF57F7F7F, 0x2818299B, 0x43212C82, 0xFAA3A3A3, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFD4D4D4, 0xB10A0D2B, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957,
0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x6C111957, 0x8C0F1545, 0xFB868686, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x9C0F143B,
0x001828B9, 0xC005071D, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF87F7F7F, 0x37101F8D, 0x351B2790, 0xF87F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFD4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4,
0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFED4D4D4, 0xFFD4D4D4, 0xFFF8F8F8, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFE2E2E2, 0x8C131747,
0x000C1AB4, 0xCD040517, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFC7F7F7F, 0x50101A76, 0x1C1422A4, 0xF1555555, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFEBFBFBF, 0x6D10165C,
0x030A17B1, 0xE3010105, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0x800F1450, 0x010E1BB6, 0xC00D0E21, 0xFC9C9C9C, 0xFFD4D4D4, 0xFFF8F8F8, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDBDBDB, 0xFEBFBFBF, 0xEE383838, 0x31131A8B,
0x210C1597, 0xF2000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xD206071C, 0x0B1119AA, 0x15181FA3, 0x5C181C69, 0x811F2254, 0x971F2142, 0x9E20223F, 0xA51E203C, 0xA71E1F3B, 0xA71E1F3B, 0xA71E1F3B, 0xA71E1F3B, 0xA71E1F3B,
0xA71E1F3B, 0xA71E1F3B, 0xA71C1E3B, 0xA71A1B39, 0xA7181939, 0xA8161838, 0xA8151738, 0xA8151738, 0xA8151738, 0xA8151738, 0xA8151738, 0xA8151738, 0xA8151738, 0xA8151738, 0xA8151738, 0xA8151738, 0xA8151738, 0xA8151738, 0xA8151738, 0xA8151738,
0xA8151738, 0xA8151738, 0xA8161838, 0xA7171939, 0xA7191B39, 0xA71C1D3A, 0xA71E1F3B, 0xA71E1F3B, 0xA71E1F3B, 0xA71E1F3B, 0xA71E1F3B, 0xA71E1F3B, 0xA71E1F3B, 0xA71E1F3B, 0xA020213F, 0x9B1F2140, 0x8B1E204B, 0x6E191C5D, 0x32171D8B, 0x000F17B2,
0x670C105E, 0xFC000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFC171B71, 0xAE080925, 0x3C161A7C, 0x0E181FA7, 0x00171EB4, 0x001A20B5, 0x002229B7, 0x00272EB9, 0x00292FBA, 0x00292FBA, 0x002930BA, 0x00282FB9, 0x00272DB9,
0x00252BB8, 0x002128B7, 0x001D24B6, 0x001A21B5, 0x001920B5, 0x00181FB4, 0x00181FB4, 0x00181EB4, 0x00181EB4, 0x00181EB4, 0x00181EB4, 0x00181EB4, 0x00181EB4, 0x00181EB4, 0x00181EB4, 0x00181EB4, 0x00181EB4, 0x00181EB4, 0x00181EB4, 0x00181EB4,
0x00181EB4, 0x00181EB4, 0x00181FB4, 0x001920B4, 0x001A21B5, 0x001D23B6, 0x002127B7, 0x00242BB8, 0x00272DB9, 0x00282FB9, 0x00292FBA, 0x002930BA, 0x00292FBA, 0x00282EB9, 0x00242BB8, 0x001B22B5, 0x00161DB4, 0x02181FB3, 0x1B181D9B, 0x5E111560,
0xE4010106, 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7F7F7F, 0xFF12155C, 0xFF0B0C3D, 0xF7070707, 0xE4000000, 0xCD03040E, 0xBA06071B, 0xB407081E, 0xA9090A28, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B,
0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B,
0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA60A0B2B, 0xA70A0B2B, 0xB0080921, 0xB707071D, 0xC0050617, 0xD8010105, 0xEB000000, 0xFB090911,
0xFFADAEBE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
};

GUI_CONST_STORAGE GUI_BITMAP bmkeyboard20020Orange = {
70, // xSize
70, // ySize
280, // BytesPerLine
32, // BitsPerPixel
(unsigned char *)_ackeyboard20020Orange, // Pointer to picture data
NULL, // Pointer to palette
GUI_DRAW_BMP8888
};

/************************************************** *****************
*
* _cbWindow1
*/

/************************************************** *******************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ WINDOW_CreateIndirect, "behrooz", ID_WINDOW_0, 10, 30, 70, 70, 0, 0, 0 },
{ BUTTON_CreateIndirect, 0, ID_BUTTON_0, 0, 0, 70, 70, 0, 0, 0 },
// USER START (Optionally insert additional widgets)
// USER END
};

static const TOOLTIP_INFO _aInfo[] = {
{ ID_BUTTON_0, "press for open keyboard" },
//{ ID_BUTTON_1, "I am Button 1" },
};
static void _cbWindow1(WM_MESSAGE* pMsg) {
GUI_RECT Rect;
int x, y;
hWin = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_PAINT:
WM_GetInsideRect(&Rect);
GUI_SetBkColor(_WindowColor1);
GUI_SetColor(_FrameColor1);
GUI_ClearRectEx(&Rect);
GUI_DrawRectEx(&Rect);
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
x = WM_GetWindowSizeX(pMsg->hWin);
y = WM_GetWindowSizeY(pMsg->hWin);
GUI_DispStringHCenterAt("Window 1", x / 2, (y / 2) - 12);
break;
default:
WM_DefaultProc(pMsg);
}
}



/************************************************** *****************
*
* _cbDemoCallback1
*/
static void _cbDemoCallback1(WM_MESSAGE* pMsg) {
int x, y;
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetBkColor(GUI_GREEN);
GUI_Clear();
GUI_SetColor(GUI_RED);
GUI_SetFont(&GUI_FontComic18B_1);
x = WM_GetWindowSizeX(pMsg->hWin);
y = WM_GetWindowSizeY(pMsg->hWin);
GUI_DispStringHCenterAt("Window 1\nanother Callback", x / 2, (y / 2) - 18);
break;
default:
WM_DefaultProc(pMsg);
}
}

static void _cbTool(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_DispString("new window");
break;
}
}

/************************************************** *****************
*
* _DemoCreateWindow

Demonstrates the use of WM_CreateWindow
*/
static void _DemoCreateWindow(void) {
/* Set callback for background window */

/* Create windows */

GUI_Delay(SPEED);

_hWindow1 = WM_CreateWindow( 10, 10, 250, 250, WM_CF_SHOW | WM_CF_MEMDEV, _cbWindow1, 0);

hTool = WM_CreateWindowAsChild(170, 170, 50, 50, _hWindow1, WM_CF_SHOW, _cbTool, 0);
hToolTip = WM_TOOLTIP_Create(_hWindow1, NULL, 0);
WM_TOOLTIP_AddTool(hToolTip, hTool, "I am a ToolTip");
GUI_Delay(SPEED/3);

GUI_Delay(SPEED);
}



/************************************************** *****************
*
* _DemoInvalidateWindow

Demonstrates the use of WM_InvalidateWindow
*/
static void _DemoInvalidateWindow(void) {
//_ChangeInfoText("WM_InvalidateWindow()");
_WindowColor1 = GUI_BLUE;
_FrameColor1 = GUI_GREEN;
GUI_Delay(SPEED);
WM_InvalidateWindow(_hWindow1);
GUI_Delay(SPEED);
}


/************************************************** *****************
*
* _DemoSetCallback

Demonstrates the use of WM_SetCallback
*/
static void _DemoSetCallback(void) {
// _ChangeInfoText("WM_SetCallback()");
GUI_Delay(SPEED);
WM_SetCallback(_hWindow1, _cbDemoCallback1);
// WM_SetCallback(ID_WINDOW_0, _cbDemoCallback1);

//WM_InvalidateWindow(_hWindow1);
GUI_Delay(SPEED/2);

GUI_Delay(SPEED*3);
WM_SetCallback(_hWindow1, _cbWindow1);
//WM_SetCallback(ID_WINDOW_0, _cbWindow1);
// WM_InvalidateWindow(_hWindow1);
GUI_Delay(SPEED);
WM_SetCallback(_hWindow1, _cbDemoCallback1);
// WM_SetCallback(ID_WINDOW_0, _cbDemoCallback1);
GUI_Delay(SPEED);
}



/************************************************** *******************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
WM_HWIN hEdit2 ;
int Id, NCode;
// USER START (Optionally insert additional variables)
// USER END

switch (pMsg->MsgId) {
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_0: // Notifications sent by 'Button'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END

break;
case WM_NOTIFICATION_RELEASED:

hwindowstext = WM_CreateWindowAsChild(60, 180, 90, 50, _hWindow1, WM_CF_SHOW, _cbTool, 0);
hEdit2 = EDIT_CreateEx (10, 15, 70, 25, hwindowstext, WM_CF_SHOW | WM_CF_HASTRANS, 0, 0, 40);
EDIT_SetText(hEdit2, "Please edit me...");
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
// USER START (Optionally insert additional code for further Ids)
// USER END
}
break;
// USER START (Optionally insert additional message handling)
// USER END
default:
WM_DefaultProc(pMsg);
break;
}
}



WM_HWIN Createbehroozbot(void);
WM_HWIN Createbehroozbot(void) {
WM_HWIN hWin;
WM_TOOLTIP_HANDLE hInfo;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbDialog, _hWindow1, 0, 0);
hInfo = WM_TOOLTIP_Create(hWin, _aInfo, GUI_COUNTOF(_aInfo));
return hWin;
}

void MainTask(void) {
WM_HWIN hButton, hEdit, hItem ;
GUI_Init();
GUI_SetBkColor(GUI_BLACK);
WM_SetCreateFlags(WM_CF_MEMDEV);
WM_EnableMemdev(WM_HBKWIN);

BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
_DemoCreateWindow();
Createbehroozbot();
hItem = WM_GetDialogItem(hWin,ID_BUTTON_0);
BUTTON_SetBitmapEx(hItem, 0, &bmkeyboard20020Orange, 0, 0);
BUTTON_SetBitmapEx(hItem, 1, &bmkeyboard20020Orange, 1, 1);
hEdit = EDIT_CreateEx (95, 30, 110, 70, _hWindow1, WM_CF_SHOW | WM_CF_HASTRANS, 0, 0, 40);
EDIT_SetText(hEdit, "Please edit me...");

while (1) {
_DemoInvalidateWindow();
_DemoSetCallback();

}
}

اگر قسمتی رو ابهام داشتیید بگید تا توضیح بدم
یک خواهش هم از دوستان دارم آنم اینه که اگه چیزی رو خودشون یاد میگیرن ولو اینکه ساده هست اینجا بگن چون ما نمی دونیم چه چیز هایی و امکاناتی وجود داره و همچنین دوستان دیگر هم ترغیب می کند تا آن ها هم نکاتی که می دانند اینجا اعلام کنند
یک خواهشی دیگه که داشتم دوستانی که برایشان مقدور هست در راستای همین برنامه کیبورد گام بردارند که وقتی یک برنامه کامل شد دوستان چیزهای زیادی یاد گرفته باشند

titery
18-04-2013, 00:48
دوستان عزیز.
من با اجازتون باید برم دنبال fpga. احتمالا دیگه فرصت نمیشه اینجا سر بزنم . ولی اگر سوالی داشتید میتونید به من ایمیل بزنید
ghmansoory@gmail.com
mansoory@rocketmail.com
موفق و پیروز باشید.
سلام آقای منصوری اینطور که خیلی بد میشه
اگه وقتتون پر هست خواهش میکنم به عنوان ناظر یک نظارتی داشته باشید و جهت دهی های لازمه( مثلا فلان چیزهایی وجود داره و به درد این کار میخوره ) را بفرمایید
ممنون میشم اگه....

majidma3000
19-04-2013, 13:49
منم یه مدتی هست که رفتم سراغ fpga در حال حاظر هم می خوام fpga رو با متلب پیاده سازی کنم.

majidma3000
19-04-2013, 13:54
سلام به همه دوستان
آقا کی رو بورد 1788 تونسته nand flash و sdram خارجی رو راه اندازی کنه .... آخه تعداد عکس هایی که تو پروژه دارم یکم زیاده تو فلش داخلی جا نمیشه
fat رو میشه روی nandflash پیاده کرد، بعد باید عکس ها رو از nandflash روی رم لود کنید و بعد نمایش بدی. اگه بشه عکس ها رو از طریق رم خارجی نمایش داد عالی میشه.

microprocesor_2002
24-04-2013, 23:59
سلام به همه ...
می خواستم بدونم کسی نتونسته emwin رو با nand flash خارجی راه اندازی کنه ؟

titery
25-04-2013, 11:24
سلام به همه ...
می خواستم بدونم کسی نتونسته emwin رو با nand flash خارجی راه اندازی کنه ؟
سلام من که نتونستم

mori64
25-04-2013, 11:25
درود
من تاچ رو بصورت مستقیم به adc وصل کردم.
و توابع

Read_X();,Read_Y();

رو تغییر دادم و مختصات رو بدرستی میخونم .
و همونطور که مهندس منصوری گفته بودند توایع


int GUI_TOUCH_X_MeasureX(void) {
return Read_X();
}

int GUI_TOUCH_X_MeasureY(void) {
return Read_Y();
}
و تابع


void TouchTask()
{
GUI_TOUCH_Exec();
}
ایجاد کردم
و فرا خونی تابع TouchTask رو داخل while(1) قرار دادم ولی
کرسر هیچ تغییری نمیکنه !

microprocesor_2002
28-04-2013, 15:14
سلام خدمت دوستان،آیا کسی تونسته از emwin استفاده کاربردی داشته باشه؟من که از هر راحی رفتم به در بسته خوردم،اگه کسی کامل راه انداخته کمک کنه که دیگران هم استفاده کنن؛ثواب داره.ممنون

من میتونم تا حدی باهاش کار کنم ... ولی یه مشکلی دارم که نمیتونم از حافظه خارجی بورد 1788 استفاده کنم ... خیلی هم باهاش ور رفتم ...

titery
28-04-2013, 21:40
درود
من تاچ رو بصورت مستقیم به adc وصل کردم.
و توابع

Read_X();,Read_Y();رو تغییر دادم و مختصات رو بدرستی میخونم .
و همونطور که مهندس منصوری گفته بودند توایع


int GUI_TOUCH_X_MeasureX(void) {
return Read_X();
}

int GUI_TOUCH_X_MeasureY(void) {
return Read_Y();
}و تابع


void TouchTask()
{
GUI_TOUCH_Exec();
}ایجاد کردم
و فرا خونی تابع TouchTask رو داخل while(1) قرار دادم ولی
کرسر هیچ تغییری نمیکنه !
تابع TouchTask رو توسط یک وقفه هر بیست میلی ثانیه بخوان و در while(1) تابع GUI_Delay(10); رو قرار بده ببین مشکلت بر طرف نمیشه در ضمن قبلش تاچت رو باید حتما با emwin کالیبره کرده باشی.این کار رو انجام دادید؟اگه درست شد بی زحمت خبر بدهید

mansoory
29-04-2013, 17:30
سلام به همه.
پروژه صفحه کلید به کجا رسیده؟ انشالله که رها نشده باشه.

mansoory
29-04-2013, 17:38
متاسفانه با میکروی LPC1768 مشکل پیداکردم وتا الان راه حلی براش پیدا نکردم. خطایی به نام Hard Fault Handler موجب هنگ کردن برنامه میشه و نمیدونم اشکال کار در emwin است یا چیز دیگه.
قسمت Error Reporting در دیباگر KEIL خطا رو USAGE FAULT تشخیص داده. مقداری درباره انواع خطا مطالعه کردم ولی راستش نفهمیدم چطوری میشه برطرفش کرد. از اونجا که پروژه ای که باید آماده کنم اصلا شوخی بردار نیست وباید 24 ساعته کار کنه به نظرم اومد که قید میکرو و emwin رو بزنم و برم سراغ FPGA. ولی ساخت رابط گرافیکی در اون کار حضرت فیله. کلا بدجوری گیرکردم. اگر اطلاعاتی دارید که به دردم بخوره بفرستید که شدیدا نیازمند کمکتون هستم.

متشکرم
منصوری

kamikazi
29-04-2013, 17:40
مهندس سلام با اماده شدن بردم منم میخوام روی این emwin کار کنم فقط یه سوالی داشتم برنامه هایی که با این نرم افزار میشه نوشت استیبل هست و هنگ کردن تو کارش نیست این خیلی برام مهمه ؟

mansoory
29-04-2013, 17:48
مهندس سلام با اماده شدن بردم منم میخوام روی این emwin کار کنم فقط یه سوالی داشتم برنامه هایی که با این نرم افزار میشه نوشت استیبل هست و هنگ کردن تو کارش نیست این خیلی برام مهمه ؟

واللا نمیدونم. منم فعلا درگیرشم. البته من وقفه خارجی رو هم فعال کردم. درحالیکه وقفه غیرفعاله هنگ نمیکنه. ولی به محض فعال کردن وقفه، بصورت تصادفی وارد یه روال به نام Hard Fault Handler میشه و اونجا توی یه حلقه می مونه

sigma-mx
29-04-2013, 18:42
مهندس Hard Fault Handler یه تابع از پیش تعریف شده هست که وقتی خطای سخت افزاری رخ بده تعیین شده که برنامه به اونجا پرش کنه و محتویات اون رو اجرا کنه که میتونه نوشتن کد خطا مثلا تو ارتباط سریال باشه یا حتی یک لوپ بینهایت ، تا برنامه همینجا گیر کنه ...

منظور از اشکال سخت افزاری هم خیلی موارد میشه . مثلا تداخل آدرسهای وقفه یا اشتباه بودن کانفیگ یک واحد سخت افزاری که در اجرا مشکل بوجود میاره ... همچنین اگه از RTOS استفاده میکنید ، تداخل قسمتی از برنامه شما با روتین های RTOS ... یا گیر کردن برنامه در یک قسمت که باعث هنگ کردن تسک یا تسک ها میشه ( این مورد زیاد اتفاق میوفته ) .
در کل پیدا کردن عامل اصلی ممکنه سخت باشه و شما یک راهش اینه که با دیباگ بخش به بخش محل دقیق خطا و لحظه پرش به Hard Fault رو پیدا کنی ..
امیدوارم این اطلاعات ناچیز بدردت خورده باشه ...

Dr.ROOSTA
30-04-2013, 19:53
سلام به همه.
پروژه صفحه کلید به کجا رسیده؟ انشالله که رها نشده باشه.

سلام اقای منصوری،انشا... خدا بهتون توفیق افزون بده.....
دارم رو فونتای arabic - sample کار میکنم وبه جاهای خوبی رسیدم . مثلا یچیزش که خیلی باحال بود اینه ک نیاز به برنامه نویسی جدا برا تعیین حرف چسبان ؛ غیر چسبان و ازین دردسرا نداره و فقط شما با دو کد xd8 و xd9 میتونید فارسی بنویسید .
انشا... شماره کدای فارسی رو میزارم تا چن وقت دیگه.....
برای مثال : \n\n\xd8\xb9\xd9\x84\xd9\x89
n یعنی یه خط بیا پایین
xd8 میره کلمه مربوط به حرف زیر جدول خودش رو میاره
xb9 حرف ع هستش
xd9 میره کلمه مربوط به حرف زیر جدول خودش رو میاره
x84 حرف ل
x89 حرف ی
و در نهایت میشه : علی

و این میشه : فاطمه الزهرا
xd9\x81\xd8\xa7\xd8\xb7\xd9\x85\xd9\x87 \xd8\xa7\xd9\x84\xd8\xb2\xd9\x87\xd8\xb1\xd8\xa7

میلاد دخت پیمبر - همسر حیدر - بانوی دو عالم مبارک

mori64
01-05-2013, 14:14
تابع TouchTask رو توسط یک وقفه هر بیست میلی ثانیه بخوان و در while(1) تابع GUI_Delay(10); رو قرار بده ببین مشکلت بر طرف نمیشه در ضمن قبلش تاچت رو باید حتما با emwin کالیبره کرده باشی.این کار رو انجام دادید؟اگه درست شد بی زحمت خبر بدهید

تشکر از پاسخ شما و آقای منصوری:hi:
با راهنمایی شما و جناب منصوری تاچ بکار افتاد ولی یه مقداری مشکل داره
که باید روش کار کنم .
من از تابع
GUI_TOUCH_StoreStateEx(&State); استفاده کردم.

و تابع TouchTask رو بصورت زیر تغییر دادم.


State.x = Read_X();//scr->x;// TBD: Insert function which reads current x value
State.y = Read_Y();//scr->y;// TBD: Insert function which reads current y value
State.Layer=0;

if (PressedOld == 1)
{

xDiff = (State.x > xOld) ? (State.x - xOld) : (xOld - State.x);
yDiff = (State.y > yOld) ? (State.y - yOld) : (yOld - State.y);

Diff=xDiff+yDiff;
if (Diff> 150)
{
State1->Pressed=1;
State.Pressed=1;
xOld = State.x;
yOld = State.y;
GUI_TOUCH_StoreStateEx(&State);
}
else{
PressedOld = 0;
State1->Pressed=0;
State.Pressed=0;
State.x=-1;
State.y=-1;
}
}
else if(PressedOld == 0)
{
if ((State.x > 0) && (State.y > 0))
{
xOld = State.x;
yOld = State.y;
PressedOld = 1;
}
}

فکر میکنم تابع بالا یه تغییراتی لازم داره .
ولی یه سوال اساسی برام ایجاد شد اساسا چرا باید از تابع GUI_Delay استفاده
کرد ؟
اگر همیشه باید این تابع call بشه پس پروسه اصلی ما (application) چی میشه ؟
باید بزاریمش تو انتراپت تایمر ؟ اینکه نمیشه !

titery
02-05-2013, 12:31
تشکر از پاسخ شما و آقای منصوری:hi:
با راهنمایی شما و جناب منصوری تاچ بکار افتاد ولی یه مقداری مشکل داره
که باید روش کار کنم .
من از تابع
GUI_TOUCH_StoreStateEx(&State); استفاده کردم.

و تابع TouchTask رو بصورت زیر تغییر دادم.


State.x = Read_X();//scr->x;// TBD: Insert function which reads current x value
State.y = Read_Y();//scr->y;// TBD: Insert function which reads current y value
State.Layer=0;

if (PressedOld == 1)
{

xDiff = (State.x > xOld) ? (State.x - xOld) : (xOld - State.x);
yDiff = (State.y > yOld) ? (State.y - yOld) : (yOld - State.y);

Diff=xDiff+yDiff;
if (Diff> 150)
{
State1->Pressed=1;
State.Pressed=1;
xOld = State.x;
yOld = State.y;
GUI_TOUCH_StoreStateEx(&State);
}
else{
PressedOld = 0;
State1->Pressed=0;
State.Pressed=0;
State.x=-1;
State.y=-1;
}
}
else if(PressedOld == 0)
{
if ((State.x > 0) && (State.y > 0))
{
xOld = State.x;
yOld = State.y;
PressedOld = 1;
}
}
فکر میکنم تابع بالا یه تغییراتی لازم داره .
ولی یه سوال اساسی برام ایجاد شد اساسا چرا باید از تابع GUI_Delay استفاده
کرد ؟
اگر همیشه باید این تابع call بشه پس پروسه اصلی ما (application) چی میشه ؟
باید بزاریمش تو انتراپت تایمر ؟ اینکه نمیشه !
این دستور در واقع یک جورایی مال آپدیت صفحه هست مثلا شما دستور رسم سه ویندوز رو میدی و شما با استفاده از GUI_delay یکباره در یک اسکن ال سی دی به نمایش در میاد وگرنه اگر میخواست هرکدام را جدا جدا رسم کنه سه بار اسکن ال سی دی لازم بود

Dr.ROOSTA
02-05-2013, 17:01
سلام . اینم قولی ک داده بودم...
فقط دوستان بگن چطوری این خودش چسبان و غیر چسبانو تشخیص میده و دقیقا چطور کارمیکنه که اگه خواستیم حرفی رو اضافه کنیم یا تغییرش بدیم چکارش باید کرد؟؟؟؟؟؟؟؟؟؟

iranabad
03-05-2013, 12:04
من تازه با emwin اشنا شدم.
چند تا سوال از دوستان داشتم، ممنون میشم راهنماییم کنید.
سخت افزارهای من lpc1768، ssd1963 و lcd7"
هدف من ساختن یک gui برای پروژه خودمه.
1. اینطور که من فهمیدم خروجی های emwin تنها برای برنامه های آزمایشی. یعنی مثلا در تمام guiهایی که درست می کنیم ارم segger هست. درسته؟ (اگه درسته ایا تنها راه برای ساخت gui برای پروژه خریدن این نرم افزاره؟)
2. من فقط می خوام چندتا icon رو ال سی دی بزارم و یک scroll bar که باز بشه و چندتا اسم نشون بده تا بشه یکیشونو انتخاب کنم. بجز استفاده از emwin چه راهی وجود داره؟
3. ایا بدون استفاده از emwin میشم یک عکس نشون داد و روی عکس زوم کرد؟
پیشاپیش ممنون از راهنماییتون

mori64
03-05-2013, 18:07
این دستور در واقع یک جورایی مال آپدیت صفحه هست مثلا شما دستور رسم سه ویندوز رو میدی و شما با استفاده از gui_delay یکباره در یک اسکن ال سی دی به نمایش در میاد وگرنه اگر میخواست هرکدام را جدا جدا رسم کنه سه بار اسکن ال سی دی لازم بود

خب حالا راهی هست که از این تابع استفاده نشه ؟
چون واقعا هیچ کار دیگه ای نمیشه کرد ! میکرو تو این تابع میمونه .

iranabad
04-05-2013, 01:03
سلام
دوستان من چهار تا package از emwin دانلود کردم.
کسی می تونه راهنمایی کنه هر کدوم از این packageها چه فرقی دارند؟

1. NXP_emWin514_MCB1700_BSP
2. NXP_emWin520_EA1788_BSP.exe__0
3. SeggerEval_LPC1768_KEIL_MCB1760_CM3_KEIL_MDK_FS_GU I_IP_OS_USB_USBH_120424
4. SeggerEval_WIN32_MSVC_MinGW_GUI_V520

سخت افزار من lpc1768 با ssd1963 و lcd7.
با توجه به این سخت افزارها بنظرتون از کدوم استفاده کنم؟
متشکر از راهنماییتون

titery
04-05-2013, 19:16
خب حالا راهی هست که از این تابع استفاده نشه ؟
چون واقعا هیچ کار دیگه ای نمیشه کرد ! میکرو تو این تابع میمونه .
برای چی استفاده نکنید؟؟روال برنامه اینه که شما از یکسری از توابع استفاده میکنی و در مجموع یکسری تغییرات میدهد با استفاده از ای دستور emwin فرصت انجام کارهای جدید و کارهای دیگه خودش مثل چک کردن باتون ها ،در صورت استفاده از progbar ،آن را کم یا زیاد،جابه جا کردن پنجره ها در صورتی که پنجره مورد نظر خاصیت movelable داشته باشه(درست مثل ویندوز کامپیوتر) و ..

titery
04-05-2013, 19:20
سلام
دوستان من چهار تا package از emwin دانلود کردم.
کسی می تونه راهنمایی کنه هر کدوم از این packageها چه فرقی دارند؟

1. NXP_emWin514_MCB1700_BSP
2. NXP_emWin520_EA1788_BSP.exe__0
3. SeggerEval_LPC1768_KEIL_MCB1760_CM3_KEIL_MDK_FS_GU I_IP_OS_USB_USBH_120424
4. SeggerEval_WIN32_MSVC_MinGW_GUI_V520

سخت افزار من lpc1768 با ssd1963 و lcd7.
با توجه به این سخت افزارها بنظرتون از کدوم استفاده کنم؟
متشکر از راهنماییتون
تا جایی که من میدونم مهندس منصوری گفته برای 1768 از emwin514 استفاده کنید که در پست های اول لینکش هست و همین کافیه

titery
04-05-2013, 19:26
من تازه با emwin اشنا شدم.
چند تا سوال از دوستان داشتم، ممنون میشم راهنماییم کنید.
سخت افزارهای من lpc1768، ssd1963 و lcd7"
هدف من ساختن یک gui برای پروژه خودمه.
1. اینطور که من فهمیدم خروجی های emwin تنها برای برنامه های آزمایشی. یعنی مثلا در تمام guiهایی که درست می کنیم ارم segger هست. درسته؟ (اگه درسته ایا تنها راه برای ساخت gui برای پروژه خریدن این نرم افزاره؟)
2. من فقط می خوام چندتا icon رو ال سی دی بزارم و یک scroll bar که باز بشه و چندتا اسم نشون بده تا بشه یکیشونو انتخاب کنم. بجز استفاده از emwin چه راهی وجود داره؟
3. ایا بدون استفاده از emwin میشم یک عکس نشون داد و روی عکس زوم کرد؟
پیشاپیش ممنون از راهنماییتون
emwin یک پکیجی میباشد که برای میکروهای فیلیپس کاملا رایگان و کامل بوده پس ارم segger در سمپل هایی وجود دارد که جهت آموزش میباشد و تمام این سمپل ها قابل اصلاح و استفاده از قسمت های لازم در پروژه های خودمان میباشد البته segger یک pdf آموزشی هم با هر ورژن ارایه کرده هست

titery
04-05-2013, 19:35
سلام . اینم قولی ک داده بودم...
فقط دوستان بگن چطوری این خودش چسبان و غیر چسبانو تشخیص میده و دقیقا چطور کارمیکنه که اگه خواستیم حرفی رو اضافه کنیم یا تغییرش بدیم چکارش باید کرد؟؟؟؟؟؟؟؟؟؟
ما اینجا داریم فقط از توابع استفاده میکنیم و درون توابع هر کاری قابل انجام هست پس این چیز عجیبی نیست که خودش اتومات میفهمد کاراکتر غیر آخر یا آخر را استفاده میکند.برای اضافه یا تغییر کاراکتر کافی هست کد 16 بیتی هگز رو در آرایه مربوطه جایگزین کنید برای اضافه هم کاراکتر ها رو شیفت و در جای خالی ایجاد شده حرف مورد نظرمان را بزاریم

iranabad
04-05-2013, 20:03
تا جایی که من میدونم مهندس منصوری گفته برای 1768 از emwin514 استفاده کنید که در پست های اول لینکش هست و همین کافیه

سلام
در مورد emwin514 شما درست می فرمایید، اما بنظرم اون زمان هنوز مدل زیر ارائه نشده بود:
SeggerEval_LPC1768_KEIL_MCB1760_CM3_KEIL_MDK_FS_GU I_IP_OS_USB_USBH_120424
خواستم ببینم ایا کسی از دوستان تجربه ای در کار کردن با lpc1768 از طریق emwin دارند؟
و ایا بهتر است از از این ورژن جدید استفاده کنم یا اینکه همون emwin514 کافیه. و البته ایا اصلا فرق اساسی با هم دارند؟
چون من در اینده می خواهم به کمک lpc1768 از طریق usb پرینتر را درایو کنم.

titery
04-05-2013, 23:17
سلام فایل BSP درست هست من emwin520 دانلود کردم واقعا جالب هست به GUI_BUILDER کلی امکانات اضاف شده واقعا عالیه
You can see links before reply

iranabad
05-05-2013, 16:15
سلام
ایا emwin520 برای lpc1768 هم میشه استفاده کرد؟

mansoory
06-05-2013, 09:59
سلام
ایا emwin520 برای lpc1768 هم میشه استفاده کرد؟

بله مشکلی نیست. از BSP یا نسخه precompile شده میتونید استفاده کنید. میکرویی که من تست کردم LPC1768 بوده با السیدی ili9320 که بصورت spi وصل شده.