c - Reading from an Arduino tty with FILE* -


जहाँ तक मैं देख सकता हूं, / Dev / serial / by-id / * arduino * dev नोड यह लिंक है:

हालांकि, उसका serialport_read_until संदिग्ध बदबू आ रही है serialport_read_until (fd, buf, '\ n') वैसे ही fgets (buf, bufsize, fptr) जैसा नहीं है? दूसरे शब्दों में, मुझे FILE * fptr प्राप्त करने के लिए फ़ाइल डिस्क्रिप्टर पर fdopen का उपयोग करने से रोकना है, और फिर fgets / का उपयोग करके Fscanf / fgetc ?

मैंने इस दृष्टिकोण की कोशिश की है fputc काम की तरह कॉलिंग कॉल, लेकिन errno = 0

के साथ पढ़ने की कॉल विफल हो गई है: init code:

  devfd = open (dev, O_RDWR | O_NOCTTY | O_NDELAY); Int devfl = fcntl (devfd, F_GETFL); // सीरियल / टर्मिनल विकल्प टर्मॉइस टॉर्पेट्स; अगर (टीसीगेट्टर (डेवफड, और टाईपॉप्ट्स)) थ्रो; // कोई समानता नहीं; कोई प्रवाह नियंत्रण नहीं; एक स्टॉप बिट // 8 डेटा बिट चुनें / स्थानीय स्वामित्व; सक्षम wordopts.c_cflag = CS8 | क्लासिक | CREAD; // कोई विहित विशेषताएं; कच्चा मोड; No गूंज termopts.c_lflag = 0; // कोई इनपुट प्रोसेसिंग फीचर्स नहीं; कच्चे मोड termopts.c_iflag = 0; // कोई आउटपुट प्रोसेसिंग फीचर्स नहीं; कच्चा मोड termopts.c_oflag = 0; अगर (cfsetispeed (और शब्दशः, B115200)) / 115200 बॉड फेंक में; अगर (cfsetospeed (और शब्दशः, B115200)) / 115200 बॉड बाहर फेंक; // पढ़ें टाइमआउट शब्द टाइप करें- c_cc [VTIME] = 10; // 1s termopts.c_cc के बाद का समय समाप्त [VMIN] = 0; // प्रत्येक चरित्र की प्रतीक्षा करें अगर (टीसीसेटएटट्रेटर (डीफ़्फ़डी, टीसीएसएएनएओ, और टाईपॉप्ट्स)) फेंक; Devf = fdopen (devfd, "r +"); अगर (! Devf) फेंक;   

कार्य लेखन और पढ़ना:

  शून्य dputc (char comm) {if (fputc (comm, devf) == EOF) फेंक; अगर (फ्ल्फ़ुस (डीएफएफ)) फेंक दिया; } शून्य dputs (const char * str) {if (fputs (str, devf) & lt; 0) थ्रो; अगर (फ्ल्फ़ुस (डीएफएफ)) फेंक दिया; } शून्य dprintf (const char * str ...) {va_list एपी; Va_start (एपी, एआरआर); Int n = vfprintf (devf, str, एपी); va_end (एपी); यदि (n & lt; 1) फेंक; अगर (फ्ल्फ़ुस (डीएफएफ)) फेंक दिया; }   

रीडिंग कोड:

  अहस्ताक्षरित छोटा एफ; यदि (fscanf (devf, "% hu", & amp; एफ) & lt; 1) फेंक;   

कोई भी विचार क्यों पढ़ना असफल हो सकता है?

धन्यवाद।

मैंने इसे हल किया। कई समस्याएं थीं:

  • ओपनस्यूज 11.2 पर, / var / lock के लिए समूह गलत है यह रूट पर सेट है जब यह ताला होना चाहिए।
  • मैं न तो लॉक और डायलआउट का हिस्सा था समूह।
  • हर बार जब स्वचालित रूप से / dev / ttyACM * पीछे एक नया फ़ाइल संभाल देखता है, तो Arduino स्वतः रिबूट करता है इस Arduino Uno को काफी समय लगता है क्योंकि संभाल सुलभ (& gt; 1 एस) के लिए खुला है यह निश्चित है कि Arduino से एक बूट संदेश भेजकर और फ़ाइल संभाल खोलने के बाद लिनक्स क्लाइंट में इसके लिए प्रतीक्षा कर रहे हैं।
  • FILE * फ़ंक्शंस काम हालांकि, यह पढ़ने के साथ खुश नहीं है और उसी संभाल पर लिखता है; यह चाहता है screws ऊपर मुझे दो अलग-अलग वर्णलेखकों और दो अलग-अलग FILE * s। था
  • मुझे O_NONBLOCK को अक्षम करना पड़ा। < P> Arduino ड्राइवर प्रोग्रामर को चेतावनी दी गई है!

Comments

Popular posts from this blog

mysql - BLOB/TEXT column 'value' used in key specification without a key length -

c# - Using Vici cool Storage with monodroid -

python - referencing a variable in another function? -