سلام!
پروژه اي را شروع نموديم ، براي برطرف كردن نياز خودمان

و همچنين تصميم گرفتيم تا ان را عمومي و به صورت اپن سورس منتشر كنيم تا شايد بدرد بقيه هم بخوره .
هدف : فارسي نويسي Native در Graphic LCD
پلاتفورم : AVR
زبان برنامه نويسي : C و تحت استاندارد GNU99
كامپايلر : AVR-GCC
برنامه نويس : ابراهيم جهاندار
سعي ميكنم يكسري توضيحات و نكات رو درباره استفاده از اين كتابخونه بنويسم ، اگر سوالي داشتيد كه توضيح ندادم بگيد .
توضيحات و نكات : توسط اين كتابخانه شما ميتونيد مستقيما در برنامه تون فارسي بنويسيد و اونو نمايش بديد . براي اينكار كافيه فقط كتابخونه + موارد مورد نياز ديگر را در سورس C تو Include كنين .
اين كتابخونه در حال حاضر فقط قادر به تشخيص كركتر هاي UNICODE دوبايتي مي باشد .
درحال حاظر براي اين كتابخونه يك فونت كامل بيشتر طراحي نشده و اون هم كوچكترين فونت قابل استفاده يعني فونت 8*8 هست . البطه دو فونت ديگر هم طراحي شده كه در حقيقت نمونه فونت Zar و Zeylan هست و با سايز 38pt و 18ptكه در حال حاضر فقط اعداد رو در بر ميگيره .
2 الگوريتم رندر در اين كتابخونه وجود داره ، يكي الگوريتم چپ به راست معمولي ( فونتي كه توسط نرم افزار LFG توليد ميشود ، هر 8 نقطه عمودي يک بايت ) و ديگري الگوريتم بيتي بالا به پايين ( فونتي كه توسط نرم افزار FontGen توليد ميشود ، هر 8 نقطه افقي يک بايت ) . اگر شما از فونتي استفاده كنيد كه فقط از يكي از اين الگوريتم ها استفاده كنه الگوريتم ديگر بطور خودكار حذف ميشه و ججم كتابخونه رو كمتر ميكنه .
شما براي استفاده از فونت ها بايد اول اونها را در برنامه include کنيد ، اينکار بايد قبل از include کردن فايل هدر کتابخانه صورت بگيره ، اگر شما هيچ فونتي را include نکرده باشيد ، با خطاي "you have to include at least one font" روبرو ميشيد .
اگر شما از چيپ KS0108 استفاده نميكنيد يا اينكه دوست داريد از درايور خودتون استفاده كنيد ميتونيد خيلي راحت توابع درايور خودتون را با توابع درايور پيشفرض عوض كنيد . كافيه در فايل هدر اونها را عوض كنيد .
شما ميتونيد فونت هاي با هر سايز دلخواه ( مضرب 8 ) را براي خودتون با يكي از دو نرم افزار ي كه بالا گفتم طراحي كنيد و با استفاده از الگويي در فونت پيشفرض موجود فايل هدر مربوط به فونت خودتون را بسازيد . كافيه نوع رندر ، سايز طول و عرض و ... مشخص كنيد .
اين كتابخونه قابليت سويچ بين فونت ها را دارا مي باشد . يعني فونت را عوض كنيد و با فونت جديد چيز ديگري در LCD بنويسيد .
براي نوشتن توسط كتابخانه شما بايد متن مورد نظر را از طريق stream تايين شده به كتابخونه تزريق كنيد . اينكار دلايلي داره ، فعلانه بخاطر وجود يك سري محدوديت ها امکانش نيست كه به صورت دايركت متن را بنوسين .
وقتي شما متني را از طريق vprintf به استريم تزريق ميكنيد ، بعد از انجام جايگزيني هاي لازم و كلا تغييرات بر روي رشته ، استريم كركتر ها رو دونه دونه به كتابخونه ميفرسته ، و از اونجايي كه يونيكد دو بايتي هست ما در هر دوبار كه استريم وارپر تابع را صدا ميزنه 1 كركتر را تشخيص ميديم و اونو چاپ ميكنيم .
لازم به ذكر است شما ميتوانيد با تابع gpprintf ( در حقيقت ماكرو ) همانند printf و sprintf و كلا اعضاي اين خانواده رفتار كنيد !
مثلا براي اينكه توي GLCD بنويسيم " امروز پنجشنبه 1 دي 1386 " اينطور مينويسيم :
gpprintf("امروز %s %i %s %i","پنجشنبه",1,"دي",1386);
بعد از نوشتن عدد ها در صورتي كه بعد از اونها هيچ چيز ديگري در GLCD نمي نويسيد حتما تابع flushBufferedNumbers را صدا بزنيد تا اعداد بافر شده نمايش داده بشن .
بعد از نوشتن کلمات در صورتي که بعد از اونها هيچ کرکتر ديگري در GLCD نمي نويسيد حتما تابع ( ماکرو ) closeWord را صدا بزنيد تا اخرين کرکتر بسته شود .
با استفاده از تابع SetFont مي توانيد فونت را تغيير بديد ، اولين ارگيومنت اين تابع مشخص كننده فونت مورد نظر هست ، كه بايد بجاي اون ارگيومنت نام struct اون فونت را قرار بديد . مثال ها را ببنيد متوجه ميشيد .
بدليل استفاده از يك سري قابليت هاي AVR-LIBC فعلانه نميشه اونو براي كدويژن تبديل كرد
مشكلات :
- بزرگترين اشكال اين كتابخونه اينه كه نميتونه كلمات شكسته رو بياره به خط بعدي ! مثلا اگر من بخوام متن " كتابخانه فارسي نويسي " رو چاپ كنم ، " كتابخانه فارسي نو " رو در خط اول و " ويسي" رو در خط دوم نشون ميده . در صورتي كه اگر اين مشكل برطرف بشه كلمه نويسي به خط بعد انتقال پيدا ميكنه . براي رفع اين مشكل بايد الگوريتم اصلي برنامه يكم تغيير بكنه و يك بافر براي كركتر ها هم اضافه بشه . ( البطه با استفاده از روش هاي غير اصولي ميشه اين مشكل رو برطرف كرد ولي من از ماست مالي خوشم نمياد ! ).
ايراد بعدي كه به اين كتابخونه وارده اينه كه ، اگر شما يك متني رو چاپ كنيد ، و اگر بعد از اون هيچ متن ديگه اي رو چاپ نكنيد ، كتابخونه اخرين حرف رو به اصتلاح نميبنده مثلا كلمه فارسي به صورت
فارسيـ در مياد ، براي رفع اين مشكل شما ميتونيد يه فاصله بعد از متنتون بزاريد .
اين مشكل هم در اينده حل خواهد شد ، برنامه به اصتلاح End of line يا End of File رو نميتونه تشخيص بده .
و چندين مشکل ديگر در رابطه با ويژگي هاي زبان فارسي .
از اين به بعد تمامي اپديت ها در پست اول قرار ميگيرند + يك پست براي بالا امدن تاپيك .
دریافت نسخه 0.3 :
http://www.jahandar.ir/tools/plib_0_3.rarاخرين تغييرات : 6 فروردین 1387