# Native Code > برنامه نویسی با C > برنامه نویسی با MFC و ++Visual C >  من میخوام با دستگاههای جانبی کار کنم ..

## kiosksoft

سلام به همه

من میخوام با دستگاههای جانبی کار کنم ..

چه منبعی سراغ دارید ؟ خیلی دستگاههای جانبی به راحتی با سی کنترل میشوند اما چطور ؟ همان توابع api ؟ یا کلاسهای خاص ارائه شده به توی سی ؟

سوال دیگه اینکه آیا از دوستان کسی هست با کارت ریدرهای اعتباری کار کرده باشد ؟

با تشکر

----------


## Nima_NF

معمولا سازندگان این دستگاه ها( از جمله POS یا همان کار خوان های بانک ها) SDK  و یا حتی محیط IDE خود را برای برنامه نویسی آن ها ارائه می کنند، SDK برخی به صورت تکنولوژی COM هست تا همه زبان های برنامه نویسی که COM را پشتیبانی می کنند از آن بهره ببرند (++C و VB و ... ). برخی نیز تماما java . (در کل اکثرا ++C هست)
پس باید به سایت سازنده آن مراجعه کرد و ابزار ها و SDK را دریافت کرد، اما معمولا باید خرید داشته باشید تا اجازه این کار داده شود و ابزار در اختیارتان قرار گیرد.

از روی مدل هر دستگاه می توانید به سایت آن مراجعه کنید(البته اگر معروفیت جهانی داشته باشند که اکثرا ندارند)، مثلا دستگاه POS بانک پارسیان Bitel ، بانک صادرات Magic 6100 ، بانک سامان sagem monetel و ...

----------


## kiosksoft

ممنون دوست عزیز

من میدونم که اکثرا sdk دارند اما بعضی یه سری سورس سی ارائه میدن مثل کارت ریدر های اعتباری magtek ... الان دوستام میخوان سیستم عامل pos بنویسند...  یعنی شما میفرمائید که من همیشه منتظر بمونم تا تولید کننده دستگاه یه کام بهم بده و از اون استفاده کنم ... خودم هیچ اقدامی نکنم , آخه با این سورس های خود کارخونه رو چکار کنم ؟ راهی یا کتابی یا نوعی کدنویسی برای کار مسقیم با دستگاههای جانبی وجود نداره ؟ میشه بیشتر کمک کنید ؟ میخوام با کارتهای اعتباری بانکها کار کنم ,این شرایط رو برام فراهم میکنن ... حالا میخوام توی حافظه کارت ها بنویسم یا بخونم . اگه امکانش هست بیشتر کمک کنید.

با تشکر مرادی.

----------


## kiosksoft

لطفا کمک کنید

----------


## Nima_NF

والا من خودم با کارت خوان ها کار نکردم، تا جایی که به نرم افزار مریوط می شود و اطلاع دارم، SDK های ارائه شده برای آن است که شما درگیر معماری سخت افزاری آن نشوید و مستقیم با command ها و غیره برنامه ریزی ها را انجام دهید. که کار کردن با آن ها، انقدر ها هم سخت نیست.

در بعد معماری و برنامه ریزی سخت افزاری، بیشتر باید دنبال مهندسان الکترونیک بود. چون در document های شرکت های سازنده چارت ها و جداول معماری آن دستگاه ها آمده است تا افراد بتوانند در صورتی که SDK نیازشان را بر آورده نمی کند به سراغ آن بروند. که دانش من در این زمینه سخت افزاری زیاد نیست و تنها نحوه خواندن از پورت های COM و امثال آن را می دانم که برایتان ارسال کردم.

منظور شما ازجملات زیر چه هست ؟ نمونه مثال ها و سورس کدهای کار با SDK یا چیز دیگری ؟



> آخه با این سورس های خود کارخونه رو چکار کنم ؟
> یه سری سورس سی ارائه میدن

----------


## kiosksoft

دوست من

من یه کارت ریدر دارم که خود کارخونه یه مثال vc همراش فرستاده, این مثال یه توابع خاص توش تعریف شده , که بیشتر شبیه توابع api هستش اما ,ظاهرا خودش یه سری توابع تعریف و پیاده سازی کرده با vc البته که خروجیش یه dll که در زبانهای دیگه مثل سی شارپ استفاده میشه ,این dll ناقص هست,یعنی اون چیزی که من میخوام رو بهم نمیده, میخوام سورس اون رو بررسی کنم, بخاطر همین بیشتر دنبال برنامه نویسی تقریبا سطح پایین هستم , که خودم حداقل از سورس این نمونه برنامه استفاده و توسعه شون بدم. به هر حال اونها هم با برنامه نویسی با دستگاه ارتباط برقرار میکنن,درسته؟یا مثلا برنامه نویسی GPS یا نمیدونم نحوه کار و کدنویسی اینجور دستگاه ها , که البته شما فرمودید که اکثرا خودشون یه سری ابزار کا با دستگاه در اختیار مشتری میذارن.

با تشکر

----------


## Nima_NF

تا من کدی را نبینم که نمی توانم هیچ نظر دقیقی بدهم یا بگویم با چه شیوه ای نوشته شده است *!؟*
پس حداقل چند خط کد آن را (یا یک تابع پیاده سازی شده را) اینجا قرار دهید تا بهتر بتوانم کمک کنم.

در هر حال این موردی که شما گفتید به نظر همان SDK است البته در صورتی که به dll یا lib دیگری متصل نباشد.

خودتان می دانید که ارتباطات با دستگاه انواع گوناگون دارد، اگر پورت USP هست با آن، اگر Com با آن، اگر ethernet با آن و ... 
هر کدام API ها خود را برای ارتباط با سخت افزار دارند، مثلا اگر به بخش documents ها یا features آن کارت ریدر بروید معمولا توضیح می دهند که از فلان تکنولوژی ارتباطی با سخت افزار استفاده کرده اند، به این شکل می توان فهمید ارتباط به چه نحو است و باید دنبال چه چیزی باشید.  

مطمئن باشید اگر در ویندوز است باید از API ها استفاده کنند.
اگر می خواهید متوجه شوید که تابعی جز API ها است یا نه، آن را در MSDN چک کنید.
برای شروع از کتاب Programming Windows Fifth Edition برای API ویندوز استفاده کنید.

----------


## kiosksoft

چشم , خودش چند فایل .h درست کرده و بیشتر از اونا استفاده کرده , اما من مهم ترین قسمت رو اینجا میزارم ,ملاحظه فرمایید .
در مورد توضیحات دستگاه هم بله , چند فایل pdf داره (manual) که در مورد دستگاه توضیحاتی رو ارائه داده,بیشتر به جزئیات الکترونیکی دستگاه اشاره کرده ,اما نحوه ارتباط با دستگاه رو هم توضیح داده ,من سورسش رو متوجه نمیشم.

2 فایل مهم از این برنامه رو گذاشتم. ملاحظه فرمائید

با تشکر

----------


## Nima_NF

این دو فایل دقیقا بخشی از SDK هست نه یک sample.
شما اصلا نیاز نیست به نحوه پیاده سازی آن ها توجه کنید، فقط باید یاد بگیرید که در کجا و چه وقت از API های آن (همان توابعش) در برنامه خود برای ارتباط با device استفاده کنید.
باید این فایل ها در کنار فایل های پروژه برنامه اصلی خود داشته باشند تا بتوانند فراخوانی شوند.

(در این دو فایلی که قرار دادید تنها از توابع استاندارد C استفاده شده است و خبری از API ها ویندوز نبوده است، وابستگی کامل به فایل های دیگری داشته است)

مثلا تابع MAP_uwOpen مقدار دهی اولیه برای ایجاد یک کانال ارتباطی هست و همیشه قبل از هر کاری باید فراخوانی شود، تا ارتباط آغاز شود.

تابع MAP_uwCmd برای ارسال command (دستور) به دستگاه است (برای کنترل قسمت های مختلف یا ارسال و دریافت داده ها).
 لیست تمامی command ها به همراه ID ، مشخصات آن ها و نحوه عملشان در دفترچه ها و document های دستگاه شما وجود دارد. باید اسامی را از آن جا مطالعه کنید و به عنوان پارامتر تابع به کار ببرید. هزاران command برای این دستگاه ها وجود دارد.

تابع MAP_uwGet برای دریافت مشخصات از دستگاه است. ID ها یا همان ubPrpID باید از دفترچه کمکی دستگاه پیدا شودکه برای چه چیزی هستند و سپس استفاده شود؛ مقدار مورد نظر از طریق یکی از پارامتر ها که با out مشخص شده است برگردانده می شود.

و به همین شکل ...

تنها راه، مطالعه دفترچه های همراه آن است.
 حداقل باید یک نمونه مثال (sample project یا demo) به شما داده شده باشد. از آن باید شروع به مطالعه و یادگیری کنید.
مثلا یک مثال ببینید که چگونه command ای ارسال کنید و سپس خودتان با توجه به دفترچه command مورد نظر برای انجام کار خود را ارسال کنید.
اگر مثالی وجود دارد، بررسی کنید که MFC هست، Console هست یا ... و سپس به سراغ  یادگیری آن بروید.

----------


## kiosksoft

مثال هم دارد , از این سورسی که مطالعه فرمودید یک dll ساخته شده که ,در vb نحوه استفاده از آن را گفته (sample) .

سعی میکنم که بیشتر روی sample کار کنم ....

حالا میخوام یاد بگیرم همین توابع C از کجا اومدن, آیا منبعی برای یادگیری سراغ دارید.ضمنا اون کتابی که معرفی کردید رو گرفتم دارم میخونم.

----------


## Nima_NF

معمولا توابع استاندارد به طور کامل در کتاب ها آموزش داده نمی شود، به هرحال نیازمند داشتن کتابی برای زبان C هستید :
 C How to Program - Deitel & Deitel نسخه فارسی هم هست (چگونه با C برنامه بنویسیم)
و یا کتاب زبان C کتاب جعفرنژاد  و ...

بهترین مکان برای مشاهده و دیدن مثال های کتابخانه های استاندارد C همان MSDN هست:
http://msdn.microsoft.com/en-us/library/2aza74he(VS.80).aspx

----------


## kiosksoft

سلام

دوست من

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

مثلا فعلا یه بورد ساده که فقط یه صفر و یک میفرسته به کامپیوتر!

چطور با سی برنامه شو بنویسم؟ چه کتابخانه ای یا چه نسخه ای؟ آیا میشه با vs2008 , در سی++ اونو نوشت یا vs6 رو پیشنهاد میکنید؟

با تشکر

----------


## Nima_NF

هر کاری که در  VC++‎6 هم قابل انجام بود در VC++‎2008 نیز می توانید انجام دهید با قابلیت های بیشتر.

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

----------


## A_Salimi

> مثلا فعلا یه بورد ساده که فقط یه صفر و یک میفرسته به کامپیوتر!


همونطوری که اشاره شد براي اين طور كارها بهتر است به سمت برنامه نويسي هاي میکروهای Avr بروید كه به راحتی در محیطی مثل bascome avr  می توانید برنامه نویسی نمایید .

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

برای مطالعه یکی از بهترین کتابها میکروکنترلرهای AVR مهندس علی کاهه است که روش بستن یک پروگرامر(از نوع STK) خیلی ساده که با آی سی بافر 74244 را بیان میکند.من با این پروگرامر کار کردم و خودم بستمش .

البته این بحثها در قسمت *برنامه نویسی سیستم های Embedded* صورت می گیرند.

----------


## deopen

چگونه باید از SDK استفاده کرد؟ من یک SDK برای گوشیهای سیمین دانلود کردم ولی طرز استفاده از SDK را در VC++‎ 2008 بلد نیستم...

----------


## Nima_NF

> چگونه باید از SDK استفاده کرد؟ من یک SDK برای گوشیهای سیمین دانلود کردم ولی طرز استفاده از SDK را در VC++‎ 2008 بلد نیستم...


1- هر SDK برای خودش یکسری اسناد کمکی دارد و در ان کامپایلر مورد پشتیبانی ذکر شده است. معمولا در حالت معمول symbian ابزارهایی مثل ++Carbide.c را نیاز دارد و بدون plugin کامپایلر ++VC پشتیبانی نمی شود. پس مطالب را از همان سایتی که SDK را دانلود کردید مطالعه کنید.

----------


## Yousha

سلام،
در وبسایتهای الکترونیک جستجو کنید تا منابع قوی پیدا کنید.

----------


## deopen

بله در سایت هم carbide.C++‎ 2 پیشنهاد شده بود , استفاده از یک پروجه مثال در SDK و ایجاد تغییر در آن هم پیشنهاد شده, سعی میکنم این برنامه را دانلود کنم البته از خود سایت نوکیا در ایران امکان دانلود  وجود ندارد,مرسی.

----------

