2009-08-20 11 views
5

हम किसी मौजूदा पॉइंट ऑफ सेल एप्लिकेशन के साथ एप्लिकेशन को एकीकृत करने के लिए पीओएस कीबोर्ड का अनुकरण करने की कोशिश कर रहे हैं।सी # सीरियलपोर्ट - एम्यूलेट पॉज़ कीबोर्ड

हम इस सॉफ्टवेयर भर में भाग गया: Virtual Serial Port Kit

यह मूल रूप से एक आभासी सीरियल पोर्ट जोड़ी बनाता है ताकि डाटा COM1 लिए भेज COM4 से बाहर आते हैं और इसके विपरीत कर सकते हैं। यह हमारे आवेदन को पीओएस एप्लिकेशन में दिखाई देने के लिए COM4 के माध्यम से डेटा भेजने की अनुमति देता है जो यह COM1 पर कीबोर्ड से बात कर रहा है।

सुंदर सरल, लेकिन ऐसा लगता है कि हमें नेट System.IO.Ports.SerialPort वर्ग के साथ दोहराने के लिए सक्षम नहीं हैं पर जा रहा संकेत के कुछ प्रकार है ...

हम क्या से बता सकते हैं सीरियल पोर्ट निगरानी कार्यक्रम, यह है कैसे स्टार्टअप अनुक्रम काम करता है:

  1. 8 बाइट कमान कुंजीपटल के लिए भेजा
  2. कीबोर्ड बीप
  3. संकेत के कुछ प्रकार कीबोर्ड से भेजा गया है
  4. दूसरा 8 बाइट आदेश कुंजीपटल को भेजा जाता है संकेत
  5. कीबोर्ड के साथ डिवाइस और संस्करण जानकारी उत्तर से शुरू हो रहा,

हमारे आभासी सीरियल पोर्ट का उपयोग करते समय, हम समझ नहीं संकेत से भेजे गए दोहराने के लिए कैसे कुंजीपटल। हम सभी डेटा ठीक से आ रहे हैं, इसलिए हम मानते हैं कि हमारी सीरियलपोर्ट ऑब्जेक्ट की सेटिंग्स सही हैं।

_port.BaudRate= 9600; 
_port.Parity = Parity.None; 
_port.DataBits = 8; 
_port.StopBits = StopBits.One; 
_port.DtrEnable = true; 
_port.RtsEnable = true; 

हम भी portmon का उपयोग कर हम एक GET_MODEM_STATUS अनुरोध है कि क्या स्थिति आवेदन दूसरा आदेश भेजने से पहले पर इंतज़ार कर रहा है देखने से देखा: यहाँ हमारे serialport सेटिंग्स का एक टुकड़ा है।

इसका निदान कैसे करें इस पर कोई विचार? चूंकि हम .NET का उपयोग कर रहे हैं, इसलिए यह पूरी स्थिति थोड़ा अधिक निम्न स्तर है जिसका उपयोग हम करते हैं।

अद्यतन: मैं यह भी ध्यान रखना चाहता हूं कि हमने यहां एसडीके की कोशिश की: Franson Serial Tools लेकिन हम इस एसडीके का उपयोग करते समय डेटा भी प्राप्त नहीं कर पाए।

अपडेट: हमने किसी भी प्रकार के वर्चुअल सीरियल पोर्ट का उपयोग करके बाहर फेंक दिया है। हमें पीओएस पीसी से दूसरे में चलाने के लिए एक केबल मिला है और कीबोर्ड को अनुकरण करने के लिए डेटा आ रहा है। अब हमारी समस्या यह है कि हम यह नहीं समझ सकते कि कुंजीपटल डेटा को प्राप्त करने के लिए तैयार है, क्योंकि शीर्ष उत्तर का उल्लेख है। ऐसा प्रतीत होता है कि पीओएस एप्लिकेशन बीप को कमांड भेजता है जो सिग्नल की प्रतीक्षा में 3 सेकंड तक इंतजार कर रहा है। तो हमारे आवेदन से बात करते समय यह समय समाप्त होता है, लेकिन असली कीबोर्ड से बात करते समय

हम इसे सीरियलपोर्ट श्रेणी के साथ कैसे कर सकते हैं? हम पहले से ही सत्य और आरटीएस को सही करने के लिए सेट कर चुके हैं, क्या हमें कुछ और सेट करने की आवश्यकता है? या क्या हमें इसे पूरा करने के लिए निचले स्तर के सीरियल पोर्ट पी/आवेषण का उपयोग करना है?

समाधान:

_port.RtsEnabled = false; 
Thread.Sleep(1000); 
_port.RtsEnabled = true; 

यह बनाता है पीओएस आवेदन लगता कुंजीपटल में खामियों को दूर किया जाता है, जो समझ में आता है। मैं # 1 उत्तर को उत्तर के रूप में चिह्नित करूंगा क्योंकि बहुत हमें समाधान खोजने में मदद करता है।

+0

वास्तव में जो स्थिति कीबोर्ड आप उपयोग कर रहे हैं? –

+0

यह एक फुजीत्सू सीएल 9 2 आर है, ऐसा लगता है कि पीओएस एप्लिकेशन को पीसीपीएस मदरबोर्ड के साथ एक पीसी पर चलाना है।हम इस विशिष्ट और स्वामित्व फुजीत्सु हार्डवेयर के बिना पीसी पर एप्लिकेशन चलाने में सक्षम नहीं हैं। – jonathanpeppers

+0

आपका समाधान तार्किक लगता है। मैंने नीचे सुझाव दिया कि पीओएस अधिक डेटा भेजने से पहले रीसेट को पूरा करने की प्रतीक्षा करेगा। ऐसा करने का एक तरीका है कि मैंने नीचे सुझाए गए कॉन्फ़िगर करने योग्य अंतराल (3000ms कहें) का इंतजार करना है। मुझे संदेह है कि आपका पीओएस ऐप वास्तव में आरटीएस को नीचे जाने के लिए इंतजार कर रहा है (रीसेट शुरू हुआ) फिर बैक अप लें (रीसेट पूर्ण हो गया)। – Joe

उत्तर

4

कुंजीपटल सिमुलेट करने के दृष्टिकोण से अधिक परिप्रेक्ष्य देने के लिए संपादित किया गया।

जैसा कि होता है, मैंने दूर के अतीत में 92 आर कीबोर्ड के लिए निम्न-स्तरीय ड्राइवर लिखे हैं।

आपको वास्तव में इसे करने के लिए मालिकाना प्रोटोकॉल के लिए प्रलेखन की आवश्यकता है - उदाहरण के लिए कीबोर्ड पर भेजे गए आदेशों में अनुक्रम संख्या और एक चेकसम होता है। मैं फुजीत्सु से संपर्क करने और इस दस्तावेज को पकड़ने का प्रयास करने की सिफारिश करता हूं।

आप क्या वर्णन किया है से:

  • पहले 8-बाइट आदेश आप भेजा शायद एक रीसेट आदेश (के रूप में यह वजह से कुंजीपटल बीप करने) था। कुंजीपटल कमांड को स्वीकार करने के लिए प्रतिक्रिया भेजता है, फिर खुद को रीसेट करता है।

  • रीसेट कमांड भेजने के बाद, पीओएस ऐप को कीबोर्ड को रीसेट करने की प्रतीक्षा करने की आवश्यकता है (मुझे 3000ms के बारे में लगता है) अन्य कमांड भेजने से पहले।

  • ऐसा लगता है कि दूसरा प्रेषण फ़र्मवेयर संस्करण का अनुरोध करने का आदेश है।

  • पीओएस ऐप को कीबोर्ड को वास्तव में कीस्ट्रोक भेजने से पहले "ऑटोइनपूट" सक्षम करने के लिए एक आदेश भेजने की आवश्यकता होगी।

  • कीलॉक स्थिति का अनुरोध करने के लिए आदेश भी उपलब्ध हैं, स्वर जनरेटर को ध्वनि दें, एमएसआर को सक्षम/अक्षम करें, और वैकल्पिक एम्बेडेड 2-लाइन डिस्प्ले को लिखें। इसलिए आपके सिम्युलेटर को इन आदेशों के जवाबों को पुन: उत्पन्न करने में सक्षम होना आवश्यक होगा।

  • एक बार जब पीओएस ऐप ने "ऑटोइनपूट" सक्षम किया है तो कुंजीपटल दबाए गए कीस्ट्रोक (या कीलॉक स्थिति में बदलाव, या एमएसआर इनपुट) के साथ अनचाहे संदेश भेजेगा। आईआईआरसी इन संदेशों में अनुक्रम संख्या और चेकसम भी है जो आपको अपने सिम्युलेटर में पुन: पेश करने की आवश्यकता होगी।

केवल संकेतन मैं के बारे में पता है कि कुंजीपटल सीटीएस को जन्म देती है, जब यह डेटा प्राप्त करने के लिए तैयार है। यदि आप किसी पीसी पर दो बंदरगाहों को जोड़ते हैं, तो आपको एक विशेष नल मॉडेम केबल (नीचे देखें) की आवश्यकता होती है ताकि जब आपका सिम्युलेटर COM4 पर आरटीएस बढ़ाएगा तो इसे दूसरे बंदरगाह पर सीटीएस के रूप में देखा जाएगा।

टीमपॉस मदरबोर्ड पर COM पोर्ट कीबोर्ड पर पावर प्रदान करते हैं। आप शायद अपने COM4 बंदरगाह के लिए इन पिनों कनेक्ट करने के लिए नहीं करना चाहते हैं, तो मैं एक अशक्त मॉडेम केबल केवल निम्न पिन जोड़ता है का उपयोग करते हुए सुझाव है:

2 (टीएक्स डेटा) - 3 (आरएक्स डेटा)

3 (आरएक्स डेटा) - 2 (टीएक्स डेटा)

7 (आरटीएस) - 8 (सीटीएस)

8 (सीटीएस) - 7 (आरटीएस)

+0

उत्कृष्ट उत्तर। हम पहले से ही चेकसम को इंजीनियर कर चुके हैं और अधिकांश आदेश - यह ऐसा कुछ है जिसे हम करने के लिए उपयोग करते हैं। हालांकि, हमें पहले सीरियल बंदरगाहों पर सिग्नलिंग के साथ गड़बड़ नहीं करना पड़ा - यह कुछ ऐसा होना चाहिए जो नॉट के सीरियलपोर्ट क्लास में होंड या कुछ पुराने डिवाइस का उपयोग करें। यह पता चला है कि हम जिस वर्चुअल COM पोर्ट का उपयोग कर रहे हैं वह सीटीएस या आरटीएस पर सिग्नलिंग का समर्थन नहीं करता है, और शायद यह हमारी समस्या है। हम आपके द्वारा उल्लिखित उचित केबल का शोध करेंगे और आपको हमारे परिणामों को बताने देंगे। – jonathanpeppers

+0

ठीक है, हम आपकी केबल बनाने में सक्षम थे। हमने नर कनवर्टर से मादा को एक नल मॉडेम केबल लगाया और उन सभी पिनों को तोड़ दिया जिनकी जरूरत नहीं थी। लेकिन अब हम मूल रूप से उसी बिंदु पर हैं जहां हम आभासी बंदरगाह के साथ थे। हमें यकीन नहीं है कि कुंजीपटल को भेजना सिग्नल कैसे भेजना है। नेट, मैं अपना प्रश्न अपडेट करूंगा। – jonathanpeppers

+0

एक त्वरित सवाल था, हर अब और फिर कीबोर्ड चालक (FjrKbdPO.exe) हमारे एम्यूटेड कीबोर्ड से बात करने में सक्षम होने से रोकता है, हालांकि संचार के माध्यम से संचार पूरी तरह सामान्य दिखता है। कंप्यूटर को पुनरारंभ करना इस समस्या को हल करता है। क्या हो सकता है पर कोई विचार? – jonathanpeppers

0

मैंने वर्षों से सीरियल पोर्ट विकास नहीं किया है, लेकिन जब मैंने हमेशा Crossover Cable और विंडोज पीसी हाइपरटामिनल का उपयोग करने वाला दूसरा पीसी इस्तेमाल किया।

+0

हम इसे आजमाएंगे और आपको हमारे परिणामों को बताने देंगे, यह अच्छा होगा क्योंकि हमें किसी तृतीय पक्ष धारावाहिक कार्यक्रम पर भरोसा नहीं करना है। हम सिर्फ केबल को एक अलग पीसी से जोड़ सकते हैं। – jonathanpeppers

+0

काम नहीं कर रहा था, पीसी के पास इस कीबोर्ड के लिए मादा अंत है जबकि एक सामान्य आरएस 232 पोर्ट पुरुष है। तो हमने पीओएस पीसी से दूसरे में जाने के लिए एक मानक आरएस 232 केबल (पुरुष एक अंत, दूसरी महिला) की कोशिश की, लेकिन कोई डेटा नहीं आया। क्या हमें यह देखने के लिए एक विशेष केबल की आवश्यकता है? आपके लिंक में एक नल मॉडेम केबल की एक तस्वीर थी जो दोनों सिरों पर महिला है, जो इस डिवाइस के लिए काम नहीं करेगी। – jonathanpeppers

+0

आपके पीसी पर एक नर पोर्ट ?! वह डरावना है। यदि आप वास्तव में आरएस -223 पर हार्ड-कोर जाना चाहते हैं तो आपको इस तरह एक ब्रेक आउट बॉक्स की आवश्यकता है http://uk.rs-online.com/web/search/searchBrowseAction.html?method=getProduct&R=4100457 –