আমি একটি বাহ্যিক সিরিয়াল ডিভাইসটির ছদ্মবেশ তৈরি করতে সোকাট ব্যবহার করার চেষ্টা করছি। আমি যদি এক টার্মিনালে এটি করি:
sudo socat -ddd -ddd PTY,raw,link=/dev/ttyS32,echo=0 READLINE
এবং আমার পাইথন সিরিয়াল ইন্টারফেস ক্লায়েন্টের এই সরলীকৃত সংস্করণটি অন্যটিতে চালান:
import serial
s = serial.Serial('/dev/ttyS32',baudrate=9600,timeout=1)
while True:
s.write("query\n")
resp = s.read()
if resp: print(resp)
এটি প্রত্যাশার মতো কাজ করে: রিডলাইন সাক্ট টার্মিনাল প্রতি সেকেন্ডে একটি প্রাপ্ত 'ক্যোয়ারী' প্রিন্ট করে এবং আমি সেখানে যা লিখি তা ক্লায়েন্টের কাছে প্রেরণ করা হয় এবং মুদ্রিত হয়।
এখন আমার কাছে পাইথন প্রোগ্রাম রয়েছে যা সিরিয়াল ডিভাইসকে অনুকরণ করে:
#echo.py
n=0
while True:
s = raw_input()
if 'query' in s:
print n
n+=1
কমান্ড লাইন থেকে চালানোর সময় এটি উদ্দেশ্য হিসাবে কাজ করে: যখন আমি 'ক্যোয়ারী' টাইপ করি তখন এটি একটি কাউন্টার ছাপায়।
যখন আমি উভয় পক্ষকে এই কমন্ডের সাথে সংযুক্ত করার চেষ্টা করি তখন কাজ হয় না:
sudo socat -ddd -ddd PTY,raw,link=/dev/ttyS32,echo=0 EXEC:"python echo.py"
এই ক্ষেত্রে পাইথন ক্লায়েন্ট বা সোকাট উইন্ডো কোনও ডেটা দেখায় না।
আমি কি ভুল করছি? আমি কীভাবে ইকো.পিসির স্ট্ডিন এবং পেসুডো টিটির সাথে স্টডআউট লিঙ্ক করব যাতে আমি এটি সিরিয়াল ডিভাইসের মতো পড়তে / লিখতে পারি?
(যদিও আমি উদাহরণটিতে পাইথন ব্যবহার করছি, সি-তে লেখা এমুলেটর নিয়ে আমারও একই সমস্যা রয়েছে)