স্পর্শ ডিভাইস

অ্যান্ড্রয়েড স্টাইলাস-ভিত্তিক ডিজিটাইজার ট্যাবলেট সহ বিভিন্ন টাচ স্ক্রিন এবং টাচ প্যাড সমর্থন করে।

টাচ স্ক্রিন হল টাচ ডিভাইস যা একটি ডিসপ্লের সাথে যুক্ত থাকে যাতে ব্যবহারকারীর স্ক্রিনে আইটেমগুলিকে সরাসরি ম্যানিপুলেট করার ছাপ থাকে।

টাচ প্যাড হল এমন টাচ ডিভাইস যা ডিসপ্লের সাথে যুক্ত নয়, যেমন ডিজিটাইজার ট্যাবলেট। টাচ প্যাডগুলি সাধারণত নির্দেশ করার জন্য বা পরোক্ষ পজিশনিং বা একটি ব্যবহারকারী ইন্টারফেসের অঙ্গভঙ্গি-ভিত্তিক নিয়ন্ত্রণের জন্য ব্যবহৃত হয়।

টাচ ডিভাইসে এমন বোতাম থাকতে পারে যার কার্যকারিতা মাউস বোতামের মতো।

স্পর্শ ডিভাইসগুলি মাঝে মাঝে অন্তর্নিহিত স্পর্শ সেন্সর প্রযুক্তির উপর নির্ভর করে আঙুল বা স্টাইলাসের মতো বিভিন্ন সরঞ্জাম ব্যবহার করে ম্যানিপুলেট করা যেতে পারে।

টাচ ডিভাইসগুলি কখনও কখনও ভার্চুয়াল কীগুলি প্রয়োগ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, কিছু অ্যান্ড্রয়েড ডিভাইসে, টাচ স্ক্রিন সেন্সর এলাকাটি ডিসপ্লের প্রান্তের বাইরে প্রসারিত হয় এবং একটি স্পর্শ সংবেদনশীল কী প্যাডের অংশ হিসাবে দ্বৈত উদ্দেশ্য পরিবেশন করে।

টাচ ডিভাইসের বিশাল বৈচিত্র্যের কারণে, অ্যান্ড্রয়েড প্রতিটি ডিভাইসের বৈশিষ্ট্য এবং পছন্দসই আচরণ বর্ণনা করতে প্রচুর সংখ্যক কনফিগারেশন বৈশিষ্ট্যের উপর নির্ভর করে।

স্পর্শ ডিভাইস শ্রেণীবিভাগ

একটি ইনপুট ডিভাইস একটি মাল্টি-টাচ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয় যদি নিম্নলিখিত দুটি শর্ত থাকে:

  • ইনপুট ডিভাইস ABS_MT_POSITION_X এবং ABS_MT_POSITION_Y পরম অক্ষের উপস্থিতি রিপোর্ট করে।
  • ইনপুট ডিভাইসে কোনো গেমপ্যাড বোতাম নেই। এই শর্তটি নির্দিষ্ট গেমপ্যাডগুলির সাথে একটি অস্পষ্টতার সমাধান করে যা MT অক্ষগুলিকে ওভারল্যাপ করে এমন কোডগুলির সাথে অক্ষগুলি রিপোর্ট করে৷

একটি ইনপুট ডিভাইস একটি একক-স্পর্শ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয় যদি নিম্নলিখিত দুটি শর্ত থাকে:

  • ইনপুট ডিভাইস একটি মাল্টি-টাচ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয় না. একটি ইনপুট ডিভাইস হয় একক-টাচ ডিভাইস বা মাল্টি-টাচ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয়, উভয়ই নয়।
  • ইনপুট ডিভাইসটি ABS_X এবং ABS_Y পরম অক্ষের উপস্থিতি এবং BTN_TOUCH কী কোডের উপস্থিতি রিপোর্ট করে।

যখন একটি ইনপুট ডিভাইস একটি স্পর্শ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয়, ভার্চুয়াল কীগুলির উপস্থিতি ডিভাইসের জন্য ভার্চুয়াল কী মানচিত্র ফাইল লোড করার চেষ্টা করে নির্ধারিত হয়। যদি একটি ভার্চুয়াল কী মানচিত্র উপলব্ধ থাকে, তাহলে ডিভাইসের জন্য কী বিন্যাস ফাইলটিও লোড করা হয়। এই ফাইলগুলির অবস্থান এবং বিন্যাস সম্পর্কে তথ্যের জন্য [ভার্চুয়াল কী মানচিত্র ফাইল] (#ভার্চুয়াল-কী-ম্যাপ-ফাইলস) দেখুন।

এরপরে, সিস্টেম টাচ ডিভাইসের জন্য ইনপুট ডিভাইস কনফিগারেশন ফাইল লোড করে।

সমস্ত বিল্ট-ইন টাচ ডিভাইসে ইনপুট ডিভাইস কনফিগারেশন ফাইল থাকা উচিত। যদি কোনও ইনপুট ডিভাইস কনফিগারেশন ফাইল উপস্থিত না থাকে, তবে সিস্টেমটি একটি ডিফল্ট কনফিগারেশন বেছে নেয় যা সাধারণ-উদ্দেশ্যের টাচ পেরিফেরাল যেমন এক্সটার্নাল ইউএসবি বা ব্লুটুথ HID টাচ স্ক্রিন বা টাচ প্যাডগুলির জন্য উপযুক্ত। এই ডিফল্টগুলি বিল্ট-ইন টাচ স্ক্রিনের জন্য ডিজাইন করা হয়নি এবং এর ফলে ভুল আচরণ হতে পারে।

ইনপুট ডিভাইস কনফিগারেশন লোড হওয়ার পরে, সিস্টেম ইনপুট ডিভাইসটিকে একটি টাচ স্ক্রিন , টাচ প্যাড বা পয়েন্টার ডিভাইস হিসাবে শ্রেণীবদ্ধ করে।

  • একটি টাচ স্ক্রিন ডিভাইস পর্দায় বস্তুর সরাসরি ম্যানিপুলেশন জন্য ব্যবহার করা হয়. ব্যবহারকারী সরাসরি স্ক্রীন স্পর্শ করে, তাই বস্তুগুলিকে ম্যানিপুলেট করা হচ্ছে তা নির্দেশ করার জন্য সিস্টেমের কোন অতিরিক্ত সুবিধার প্রয়োজন হয় না।
  • একটি টাচ প্যাড ডিভাইস একটি প্রদত্ত সেন্সর এলাকায় স্পর্শ সম্পর্কে একটি অ্যাপে নিখুঁত অবস্থানের তথ্য প্রদান করতে ব্যবহৃত হয়। এটি ডিজিটাইজার ট্যাবলেটের জন্য উপযোগী হতে পারে।
  • একটি পয়েন্টার ডিভাইস একটি কার্সার ব্যবহার করে পর্দায় বস্তুর পরোক্ষ ম্যানিপুলেশন জন্য ব্যবহার করা হয়. আঙ্গুলগুলিকে মাল্টি-টাচ পয়েন্টার অঙ্গভঙ্গি হিসাবে ব্যাখ্যা করা হয়। অন্যান্য সরঞ্জাম, যেমন স্টাইলাস, পরম অবস্থান ব্যবহার করে ব্যাখ্যা করা হয়। আরও তথ্যের জন্য পরোক্ষ মাল্টি-টাচ পয়েন্টার অঙ্গভঙ্গি দেখুন।

নিম্নলিখিত নিয়মগুলি ইনপুট ডিভাইসটিকে একটি টাচ স্ক্রিন, টাচ প্যাড বা পয়েন্টার ডিভাইস হিসাবে শ্রেণীবদ্ধ করতে ব্যবহৃত হয়।

  • যদি touch.deviceType প্রপার্টি সেট করা থাকে, তাহলে ডিভাইসের ধরনটি নির্দেশিত হিসাবে সেট করা হয়।
  • যদি ইনপুট ডিভাইসটি INPUT_PROP_DIRECT ইনপুট বৈশিষ্ট্যের উপস্থিতি রিপোর্ট করে ( EVIOCGPROP ioctl এর মাধ্যমে), তাহলে ডিভাইসের ধরনটি স্পর্শ পর্দায় সেট করা হয়। এই শর্তটি অনুমান করে যে সরাসরি ইনপুট টাচ ডিভাইসগুলি একটি ডিসপ্লেতে সংযুক্ত রয়েছে যা সংযুক্ত রয়েছে।
  • যদি ইনপুট ডিভাইসটি INPUT_PROP_POINTER ইনপুট বৈশিষ্ট্যের উপস্থিতি রিপোর্ট করে ( EVIOCGPROP ioctl এর মাধ্যমে), তাহলে ডিভাইসের ধরন পয়েন্টারে সেট করা হয়।
  • যদি ইনপুট ডিভাইসটি REL_X বা REL_Y আপেক্ষিক অক্ষের উপস্থিতি রিপোর্ট করে, তাহলে ডিভাইসের ধরনটি স্পর্শ প্যাডে সেট করা হয়। এই অবস্থাটি ইনপুট ডিভাইসগুলির জন্য একটি অস্পষ্টতার সমাধান করে যাতে একটি মাউস এবং একটি টাচ প্যাড উভয়ই থাকে। এই ক্ষেত্রে, টাচ প্যাড পয়েন্টার নিয়ন্ত্রণ করতে ব্যবহার করা হয় না কারণ মাউস ইতিমধ্যে এটি নিয়ন্ত্রণ করে।
  • অন্যথায়, ডিভাইসের ধরন পয়েন্টারে সেট করা আছে। এই ডিফল্ট নিশ্চিত করে যে টাচ প্যাড যা অন্য কোন বিশেষ উদ্দেশ্যে মনোনীত করা হয়নি পয়েন্টার নিয়ন্ত্রণ করে।

বোতাম

বোতামগুলি হল ঐচ্ছিক নিয়ন্ত্রণ যা অ্যাপগুলি অতিরিক্ত ফাংশন সম্পাদন করতে ব্যবহার করতে পারে৷ টাচ ডিভাইসের বোতামগুলি মাউস বোতামের মতোই আচরণ করে এবং প্রধানত পয়েন্টার টাইপ টাচ ডিভাইস বা স্টাইলাসের সাথে ব্যবহার করা হয়।

নিম্নলিখিত বোতামগুলি সমর্থিত:

  • BTN_LEFT : MotionEvent.BUTTON_PRIMARY এ ম্যাপ করা হয়েছে৷BUTTON_PRIMARY৷
  • BTN_RIGHT : MotionEvent.BUTTON_SECONDARY এ ম্যাপ করা হয়েছে৷BUTTON_SECONDARY৷
  • BTN_MIDDLE : MotionEvent.BUTTON_MIDDLE এ ম্যাপ করা হয়েছে৷BUTTON_MIDDLE৷
  • BTN_BACK এবং BTN_SIDE : MotionEvent.BUTTON_BACK এ ম্যাপ করা হয়েছে৷BUTTON_BACK৷ এই বোতাম টিপলে কী কোড KeyEvent.KEYCODE_BACK এর সাথে একটি কী প্রেসও সংশ্লেষিত হয়।
  • BTN_FORWARD এবং BTN_EXTRA : MotionEvent.BUTTON_FORWARD এ ম্যাপ করা হয়েছে৷BUTTON_FORWARD৷ এই বোতাম টিপলে কী কোড KeyEvent.KEYCODE_FORWARD সহ একটি কী প্রেসও সংশ্লেষিত হয়।
  • BTN_STYLUS : MotionEvent.BUTTON_SECONDARY এ ম্যাপ করা হয়েছে৷BUTTON_SECONDARY৷
  • BTN_STYLUS2 : MotionEvent.BUTTON_TERTIARY এ ম্যাপ করা হয়েছে৷BUTTON_TERTIARY৷

টুল এবং টুলের ধরন

একটি টুল হল একটি আঙুল, লেখনী বা অন্যান্য যন্ত্রপাতি যা স্পর্শ ডিভাইসের সাথে যোগাযোগ করতে ব্যবহৃত হয়। কিছু স্পর্শ ডিভাইস বিভিন্ন ধরনের টুলের মধ্যে পার্থক্য করতে পারে।

Android এর অন্য কোথাও, MotionEvent API-এর মতো, একটি টুলকে প্রায়ই একটি পয়েন্টার হিসাবে উল্লেখ করা হয়।

নিম্নলিখিত সরঞ্জাম প্রকারগুলি সমর্থিত:

  • BTN_TOOL_FINGER এবং MT_TOOL_FINGER : MotionEvent.TOOL_TYPE_FINGER এ ম্যাপ করা হয়েছে।
  • BTN_TOOL_PEN এবং MT_TOOL_PEN : MotionEvent.TOOL_TYPE_STYLUS এ ম্যাপ করা হয়েছে।
  • BTN_TOOL_RUBBER : MotionEvent.TOOL_TYPE_ERASER এ ম্যাপ করা হয়েছে।
  • BTN_TOOL_BRUSH : MotionEvent.TOOL_TYPE_STYLUS এ ম্যাপ করা হয়েছে।
  • BTN_TOOL_PENCIL : MotionEvent.TOOL_TYPE_STYLUS এ ম্যাপ করা হয়েছে।
  • BTN_TOOL_AIRBRUSH : MotionEvent.TOOL_TYPE_STYLUS এ ম্যাপ করা হয়েছে।
  • BTN_TOOL_MOUSE : MotionEvent.TOOL_TYPE_MOUSE এ ম্যাপ করা হয়েছে।
  • BTN_TOOL_LENS : MotionEvent.TOOL_TYPE_MOUSE এ ম্যাপ করা হয়েছে।
  • BTN_TOOL_DOUBLETAP , BTN_TOOL_TRIPLETAP , এবং BTN_TOOL_QUADTAP : MotionEvent.TOOL_TYPE_FINGER এ ম্যাপ করা হয়েছে।

হভারিং বনাম স্পর্শ সরঞ্জাম

টুলগুলি হয় স্পর্শ ডিভাইসের সংস্পর্শে বা পরিসরে এবং এটির উপরে ঘোরাফেরা করতে পারে। সমস্ত স্পর্শ ডিভাইস স্পর্শ ডিভাইসের উপরে ঘোরাফেরা করা একটি টুলের উপস্থিতি অনুভব করতে পারে না। যেগুলি করে, যেমন RF-ভিত্তিক স্টাইলাস ডিজিটাইজার, প্রায়শই সনাক্ত করতে পারে যখন টুলটি ডিজিটাইজারের সীমিত পরিসরের মধ্যে থাকে।

InputReader কম্পোনেন্ট টাচিং টুলকে হোভারিং টুল থেকে আলাদা করে। একইভাবে, স্পর্শ করার সরঞ্জাম এবং হোভারিং সরঞ্জামগুলি বিভিন্ন উপায়ে অ্যাপগুলিতে রিপোর্ট করা হয়।

MotionEvent.ACTION_DOWN , MotionEvent.ACTION_MOVE , MotionEvent.ACTION_DOWN , MotionEvent.ACTION_POINTER_DOWN এবং MotionEvent.ACTION_POINTER_UP ব্যবহার করে স্পর্শ করার সরঞ্জামগুলিকে স্পর্শ ইভেন্ট হিসাবে অ্যাপগুলিতে রিপোর্ট করা হয়।

MotionEvent.ACTION_HOVER_ENTER , MotionEvent.ACTION_HOVER_MOVE , এবং MotionEvent.ACTION_HOVER_EXIT ব্যবহার করে হোভারিং সরঞ্জামগুলিকে জেনেরিক মোশন ইভেন্ট হিসাবে অ্যাপগুলিতে রিপোর্ট করা হয়৷

স্পর্শ ডিভাইস ড্রাইভার প্রয়োজনীয়তা

  • টাচ ডিভাইস ড্রাইভারদের শুধুমাত্র অক্ষ এবং বোতামগুলির জন্য অক্ষ এবং কী কোড নিবন্ধন করা উচিত যা তারা সমর্থন করে। অসমর্থিত অক্ষ বা কী কোড নিবন্ধন করা ডিভাইসের শ্রেণিবিন্যাস অ্যালগরিদমকে বিভ্রান্ত করতে পারে বা সিস্টেমটিকে ভুলভাবে ডিভাইসের ক্ষমতা সনাক্ত করতে পারে। উদাহরণস্বরূপ, যদি ডিভাইসটি BTN_TOUCH কী কোড রিপোর্ট করে, তাহলে সিস্টেমটি অনুমান করে যে BTN_TOUCH সর্বদা ব্যবহৃত হয় তা নির্দেশ করতে যে টুলটি স্ক্রীন স্পর্শ করছে কিনা। অতএব, BTN_TOUCH ব্যবহার করা উচিত নয় যে টুলটি শুধুমাত্র পরিসরে এবং ঘোরাফেরা করছে।
  • একক-টাচ ডিভাইসগুলি নিম্নলিখিত লিনাক্স ইনপুট ইভেন্টগুলি ব্যবহার করে:
    • ABS_X : (প্রয়োজনীয়) টুলের X স্থানাঙ্ক রিপোর্ট করে।
    • ABS_Y : (প্রয়োজনীয়) টুলের Y স্থানাঙ্ক রিপোর্ট করে।
    • ABS_PRESSURE : (ঐচ্ছিক) টুলের ডগায় প্রয়োগ করা শারীরিক চাপ বা স্পর্শ যোগাযোগের সংকেত শক্তির প্রতিবেদন করে।
    • ABS_TOOL_WIDTH : (ঐচ্ছিক) স্পর্শ যোগাযোগের ক্রস-বিভাগীয় এলাকা বা প্রস্থ বা টুলের নিজেই রিপোর্ট করে।
    • ABS_DISTANCE : (ঐচ্ছিক) স্পর্শ ডিভাইসের পৃষ্ঠ থেকে টুলের দূরত্ব রিপোর্ট করে।
    • ABS_TILT_X : (ঐচ্ছিক) X অক্ষ বরাবর স্পর্শ ডিভাইসের পৃষ্ঠ থেকে টুলের কাত রিপোর্ট করে।
    • ABS_TILT_Y : (ঐচ্ছিক) Y অক্ষ বরাবর স্পর্শ ডিভাইসের পৃষ্ঠ থেকে টুলের কাত রিপোর্ট করে।
    • BTN_TOUCH : (প্রয়োজনীয়) সরঞ্জামটি ডিভাইসটিকে স্পর্শ করছে কিনা তা নির্দেশ করে৷
    • BTN_LEFT , BTN_RIGHT , BTN_MIDDLE , BTN_BACK , BTN_SIDE , BTN_FORWARD , BTN_EXTRA , BTN_STYLUS , BTN_STYLUS2 : (ঐচ্ছিক) রিপোর্ট বোতামের অবস্থা।
    • BTN_TOOL_FINGER , BTN_TOOL_PEN , BTN_TOOL_RUBBER , BTN_TOOL_BRUSH , BTN_TOOL_PENCIL , BTN_TOOL_AIRBRUSH , BTN_TOOL_MOUSE , BTN_TOOL_LENS , BTN_TOOL_DOUBLETAP , BTN_TOOL_TRIPLETAP : (ঐচ্ছিক) টুল টাইপ রিপোর্ট করে BTN_TOOL_QUADTAP
  • মাল্টি-টাচ ডিভাইসগুলি নিম্নলিখিত লিনাক্স ইনপুট ইভেন্টগুলি ব্যবহার করে:
    • ABS_MT_POSITION_X : (প্রয়োজনীয়) টুলের X স্থানাঙ্ক রিপোর্ট করে।
    • ABS_MT_POSITION_Y : (প্রয়োজনীয়) টুলের Y স্থানাঙ্ক রিপোর্ট করে।
    • ABS_MT_PRESSURE : (ঐচ্ছিক) টুলের ডগায় প্রয়োগ করা শারীরিক চাপ বা স্পর্শ যোগাযোগের সংকেত শক্তি রিপোর্ট করে।
    • ABS_MT_TOUCH_MAJOR : (ঐচ্ছিক) স্পর্শ যোগাযোগের ক্রস-বিভাগীয় এলাকা বা স্পর্শ পরিচিতির দীর্ঘ মাত্রার দৈর্ঘ্য রিপোর্ট করে।
    • ABS_MT_TOUCH_MINOR : (ঐচ্ছিক) স্পর্শ যোগাযোগের ছোট মাত্রার দৈর্ঘ্য রিপোর্ট করে। যদি ABS_MT_TOUCH_MAJOR একটি এলাকা পরিমাপের প্রতিবেদন করে তাহলে এই অক্ষটি ব্যবহার করা উচিত নয়৷
    • ABS_MT_WIDTH_MAJOR : (ঐচ্ছিক) নিজেই টুলের ক্রস-বিভাগীয় এলাকা, বা টুলেরই লম্বা মাত্রার দৈর্ঘ্য রিপোর্ট করে। এই অক্ষটি ব্যবহার করবেন না যদি না আপনি নিজেই টুলটির মাত্রা জানেন।
    • ABS_MT_WIDTH_MINOR : (ঐচ্ছিক) টুলের ছোট মাত্রার দৈর্ঘ্য রিপোর্ট করে। এই অক্ষটি ব্যবহার করা উচিত নয় যদি ABS_MT_WIDTH_MAJOR একটি এলাকা পরিমাপের প্রতিবেদন করে বা যদি টুলের মাত্রা নিজেই অজানা থাকে।
    • ABS_MT_ORIENTATION : (ঐচ্ছিক) টুলের ওরিয়েন্টেশন রিপোর্ট করে।
    • ABS_MT_DISTANCE : (ঐচ্ছিক) স্পর্শ ডিভাইসের পৃষ্ঠ থেকে টুলের দূরত্ব রিপোর্ট করে।
    • ABS_MT_TOOL_TYPE : (ঐচ্ছিক) টুলের প্রকারকে MT_TOOL_FINGER বা MT_TOOL_PEN হিসাবে রিপোর্ট করে।
    • ABS_MT_TRACKING_ID : (ঐচ্ছিক) টুলের ট্র্যাকিং আইডি রিপোর্ট করে। ট্র্যাকিং আইডি হল একটি নির্বিচারে অ-নেতিবাচক পূর্ণসংখ্যা যা একাধিক টুল সক্রিয় থাকাকালীন প্রতিটি টুলকে স্বাধীনভাবে সনাক্ত করতে এবং ট্র্যাক করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, যখন একাধিক আঙুল ডিভাইসটিকে স্পর্শ করে, তখন প্রতিটি আঙুলকে একটি স্বতন্ত্র ট্র্যাকিং আইডি বরাদ্দ করা উচিত যা যতক্ষণ আঙুলটি যোগাযোগে থাকে ততক্ষণ ব্যবহার করা হয়। ট্র্যাকিং আইডিগুলি পুনরায় ব্যবহার করা যেতে পারে যখন তাদের সম্পর্কিত সরঞ্জামগুলি পরিসীমার বাইরে চলে যায়।
    • ABS_MT_SLOT : (ঐচ্ছিক) লিনাক্স মাল্টি-টাচ প্রোটোকল 'B' ব্যবহার করার সময় টুলের স্লট আইডি রিপোর্ট করে। আরো বিস্তারিত জানার জন্য Linux মাল্টি-টাচ প্রোটোকল ডকুমেন্টেশন পড়ুন।
    • BTN_TOUCH : (প্রয়োজনীয়) সরঞ্জামটি ডিভাইসটিকে স্পর্শ করছে কিনা তা নির্দেশ করে৷
    • BTN_LEFT , BTN_RIGHT , BTN_MIDDLE , BTN_BACK , BTN_SIDE , BTN_FORWARD , BTN_EXTRA , BTN_STYLUS , BTN_STYLUS2 : (ঐচ্ছিক) রিপোর্ট বোতামের অবস্থা।
    • BTN_TOOL_FINGER , BTN_TOOL_PEN , BTN_TOOL_RUBBER , BTN_TOOL_BRUSH , BTN_TOOL_PENCIL , BTN_TOOL_AIRBRUSH , BTN_TOOL_MOUSE , BTN_TOOL_LENS , BTN_TOOL_DOUBLETAP , BTN_TOOL_TRIPLETAP : (ঐচ্ছিক) টুল টাইপ রিপোর্ট করে BTN_TOOL_QUADTAP
  • যদি একক-টাচ এবং মাল্টি-টাচ প্রোটোকল উভয়ের জন্য অক্ষগুলি সংজ্ঞায়িত করা হয়, তবে শুধুমাত্র মাল্টি-টাচ অক্ষগুলি ব্যবহার করা হয় এবং একক-স্পর্শ অক্ষগুলিকে উপেক্ষা করা হয়।
  • ABS_X , ABS_Y , ABS_MT_POSITION_X , এবং ABS_MT_POSITION_Y অক্ষগুলির সর্বনিম্ন এবং সর্বোচ্চ মানগুলি ডিভাইস-নির্দিষ্ট পৃষ্ঠের ইউনিটগুলিতে ডিভাইসের সক্রিয় এলাকার সীমানা নির্ধারণ করে৷ একটি টাচ স্ক্রিনের ক্ষেত্রে, সক্রিয় এলাকা টাচ ডিভাইসের অংশ বর্ণনা করে যা আসলে ডিসপ্লেকে কভার করে।

    একটি টাচ স্ক্রিনের জন্য, সিস্টেমটি স্বয়ংক্রিয়ভাবে নিম্নোক্ত গণনা অনুসারে ডিসপ্লে পিক্সেলে টাচ পজিশন পেতে পৃষ্ঠের ইউনিটগুলিতে রিপোর্ট করা স্পর্শ অবস্থানগুলিকে ইন্টারপোলেট করে:

        displayX = (x - minX) * displayWidth / (maxX - minX + 1)
        displayY = (y - minY) * displayHeight / (maxY - minY + 1)
        

    একটি টাচ স্ক্রিন রিপোর্ট করা সক্রিয় এলাকার বাইরে স্পর্শের রিপোর্ট করতে পারে।

    সক্রিয় এলাকার বাইরে শুরু করা স্পর্শগুলি অ্যাপগুলিতে বিতরণ করা হয় না তবে ভার্চুয়াল কীগুলির জন্য ব্যবহার করা যেতে পারে৷

    যে স্পর্শগুলি সক্রিয় এলাকার ভিতরে শুরু হয়, অথবা যেগুলি ডিসপ্লে এলাকায় প্রবেশ করে এবং প্রস্থান করে তা অ্যাপগুলিতে বিতরণ করা হয়। ফলস্বরূপ, যদি একটি স্পর্শ একটি অ্যাপের সীমানার মধ্যে শুরু হয় এবং তারপরে সক্রিয় এলাকার বাইরে চলে যায়, তাহলে অ্যাপটি নেতিবাচক বা প্রদর্শনের সীমার বাইরে ডিসপ্লে স্থানাঙ্ক সহ স্পর্শ ইভেন্টগুলি পেতে পারে। এটি প্রত্যাশিত আচরণ।

    একটি স্পর্শ ডিভাইস সক্রিয় এলাকার সীমানায় স্পর্শ স্থানাঙ্ক ক্ল্যাম্প করা উচিত নয়। যদি একটি স্পর্শ সক্রিয় এলাকা থেকে প্রস্থান করে, তাহলে এটি সক্রিয় এলাকার বাইরে বলে রিপোর্ট করা উচিত, বা এটি মোটেও রিপোর্ট করা উচিত নয়।

    উদাহরণস্বরূপ, যদি ব্যবহারকারীর আঙুল টাচ স্ক্রিনের উপরের-বাম কোণে স্পর্শ করে, তাহলে এটি (minX, minY) এর একটি স্থানাঙ্ক রিপোর্ট করতে পারে। যদি আঙুলটি সক্রিয় এলাকার বাইরে আরও সরতে থাকে, তাহলে টাচ স্ক্রীনটি হয় minX এবং minY-এর চেয়ে কম উপাদানগুলির সাথে স্থানাঙ্ক রিপোর্ট করা শুরু করবে, যেমন (minX - 2, minY - 3), অথবা এটি সম্পূর্ণভাবে স্পর্শের প্রতিবেদন করা বন্ধ করে দেবে৷ অন্য কথায়, যখন ব্যবহারকারীর আঙুল সক্রিয় এলাকার বাইরে সত্যিই স্পর্শ করে তখন টাচ স্ক্রীন রিপোর্টিং করা উচিত নয় (minX, minY)।

    ডিসপ্লে প্রান্তে ক্ল্যাম্পিং টাচ কোঅর্ডিনেট স্ক্রিনের প্রান্তের চারপাশে একটি কৃত্রিম হার্ড বাউন্ডারি তৈরি করে যা ডিসপ্লে এলাকার সীমানায় প্রবেশ বা প্রস্থান করার গতিগুলিকে মসৃণভাবে ট্র্যাক করা থেকে সিস্টেমকে বাধা দেয়।

  • ABS_PRESSURE বা ABS_MT_PRESSURE দ্বারা রিপোর্ট করা মানগুলি, যদি সেগুলি একেবারেই রিপোর্ট করা হয়, টুলটি যখন ডিভাইসটিকে স্পর্শ করে তখন অবশ্যই শূন্য হতে হবে এবং অন্যথায় সরঞ্জামটি ঘোরাফেরা করছে তা নির্দেশ করতে শূন্য হতে হবে।

    চাপের তথ্য প্রতিবেদন করা ঐচ্ছিক কিন্তু দৃঢ়ভাবে সুপারিশ করা হয়। অ্যাপ্লিকেশানগুলি চাপ-সংবেদনশীল অঙ্কন এবং অন্যান্য প্রভাবগুলি প্রয়োগ করতে চাপের তথ্য ব্যবহার করতে পারে৷

  • ABS_TOOL_WIDTH , ABS_MT_TOUCH_MAJOR , ABS_MT_TOUCH_MINOR , ABS_MT_WIDTH_MAJOR , বা ABS_MT_WIDTH_MINOR দ্বারা রিপোর্ট করা মানগুলি যখন টুলটি ডিভাইসটিকে স্পর্শ করে তখন শূন্য হওয়া উচিত এবং অন্যথায় শূন্য হওয়া উচিত, তবে এটির প্রয়োজন নেই৷ উদাহরণস্বরূপ, স্পর্শ ডিভাইসটি আঙুলের স্পর্শ পরিচিতির আকার পরিমাপ করতে সক্ষম হতে পারে কিন্তু স্টাইলাস স্পর্শ পরিচিতি নয়৷

    রিপোর্টিং আকার তথ্য ঐচ্ছিক কিন্তু দৃঢ়ভাবে সুপারিশ করা হয়. অ্যাপ্লিকেশানগুলি আকার-সংবেদনশীল অঙ্কন এবং অন্যান্য প্রভাবগুলি প্রয়োগ করতে চাপের তথ্য ব্যবহার করতে পারে৷

  • যখন টুলটি ডিভাইসটিকে স্পর্শ করে তখন ABS_DISTANCE বা ABS_MT_DISTANCE দ্বারা রিপোর্ট করা মানগুলি শূন্যের কাছাকাছি হওয়া উচিত৷ টুলটি সরাসরি যোগাযোগে থাকলেও দূরত্ব শূন্য থেকে যেতে পারে। রিপোর্ট করা সঠিক মানগুলি হার্ডওয়্যার যেভাবে দূরত্ব পরিমাপ করে তার উপর নির্ভর করে।

    দূরত্বের তথ্য প্রতিবেদন করা ঐচ্ছিক কিন্তু স্টাইলাস ডিভাইসের জন্য সুপারিশ করা হয়।

  • ABS_TILT_X এবং ABS_TILT_Y দ্বারা রিপোর্ট করা মানগুলি শূন্য হওয়া উচিত যখন টুলটি ডিভাইসে লম্ব হয়৷ একটি নন-জিরো টিল্ট নির্দেশ করে যে টুলটি একটি ঢোকে রাখা হয়েছে।

    X এবং Y অক্ষ বরাবর কাত কোণগুলি লম্ব থেকে ডিগ্রীতে নির্দিষ্ট করা হয়েছে বলে ধরে নেওয়া হয়। কেন্দ্র বিন্দু (পুরোপুরি লম্ব) প্রতিটি অক্ষের জন্য (max + min) / 2 দ্বারা দেওয়া হয়। কেন্দ্র বিন্দুর চেয়ে ছোট মানগুলি উপরে বা বামে একটি কাত প্রতিনিধিত্ব করে, কেন্দ্র বিন্দুর চেয়ে বড় মানগুলি নীচে বা ডানদিকে একটি কাত উপস্থাপন করে।

    InputReader X এবং Y টিল্ট উপাদানগুলিকে 0 থেকে PI / 2 রেডিয়ান পর্যন্ত একটি লম্ব কাত কোণে এবং -PI থেকে PI রেডিয়ান পর্যন্ত একটি প্ল্যানার ওরিয়েন্টেশন কোণে রূপান্তরিত করে। এই প্রতিনিধিত্বের ফলে আঙ্গুলের স্পর্শ বর্ণনা করার জন্য যা ব্যবহৃত হয় তার সাথে সামঞ্জস্যপূর্ণ ওরিয়েন্টেশনের বর্ণনা।

    রিপোর্টিং টিল্ট তথ্য ঐচ্ছিক কিন্তু স্টাইলাস ডিভাইসের জন্য সুপারিশ করা হয়।

  • যদি টুলের ধরনটি ABS_MT_TOOL_TYPE দ্বারা রিপোর্ট করা হয়, তাহলে এটি BTN_TOOL_* দ্বারা রিপোর্ট করা যেকোনও টুল টাইপ তথ্যকে ছাড়িয়ে যায়। কোনো টুল টাইপ তথ্য পাওয়া না গেলে, টুলের ধরনটি MotionEvent.TOOL_TYPE_FINGER এ ডিফল্ট হয়।

  • নিম্নলিখিত শর্তগুলির উপর ভিত্তি করে একটি টুল সক্রিয় হতে নির্ধারিত হয়:

    • একক-টাচ প্রোটোকল ব্যবহার করার সময়, BTN_TOUCH বা BTN_TOOL_* 1 হলে টুলটি সক্রিয় থাকে।

      এই শর্তটি বোঝায় যে InputReader টুলের প্রকৃতি সম্পর্কে অন্তত কিছু তথ্য থাকতে হবে, হয় এটি স্পর্শ করছে কিনা বা অন্ততপক্ষে এর টুলের ধরন। যদি কোন তথ্য পাওয়া না যায়, তাহলে টুলটি নিষ্ক্রিয় (পরিসীমার বাইরে) বলে ধরে নেওয়া হয়।

    • মাল্টি-টাচ প্রোটোকল 'A' ব্যবহার করার সময়, টুলটি সক্রিয় থাকে যখনই এটি সাম্প্রতিক সিঙ্ক রিপোর্টে প্রদর্শিত হয়। যখন টুলটি সিঙ্ক রিপোর্টে উপস্থিত হওয়া বন্ধ করে, তখন এটির অস্তিত্ব বন্ধ হয়ে যায়।
    • মাল্টি-টাচ প্রোটোকল 'B' ব্যবহার করার সময়, টুলটি সক্রিয় থাকে যতক্ষণ না এটির একটি সক্রিয় স্লট থাকে। স্লটটি সাফ হয়ে গেলে, টুলটির অস্তিত্ব বন্ধ হয়ে যায়।
  • একটি টুল নিম্নোক্ত অবস্থার উপর ভিত্তি করে ঘোরাফেরা করার জন্য নির্ধারিত হয়:
    • যদি টুলটি BTN_TOOL_MOUSE বা BTN_TOOL_LENS হয়, তাহলে টুলটি ঘোরাফেরা করছে না, এমনকি যদি নিম্নলিখিত শর্তগুলির মধ্যে একটি সত্য হয়।
    • যদি টুলটি সক্রিয় থাকে এবং ড্রাইভার চাপের তথ্য জানায় এবং রিপোর্ট করা চাপ শূন্য হয়, তাহলে টুলটি ঘোরাফেরা করছে।
    • যদি টুলটি সক্রিয় থাকে এবং ড্রাইভার BTN_TOUCH কী কোড সমর্থন করে এবং BTN_TOUCH এর মান শূন্য থাকে, তাহলে টুলটি ঘোরাফেরা করছে।
  • InputReader মাল্টি-টাচ প্রোটোকল 'A' এবং 'B' উভয়কেই সমর্থন করে। নতুন ড্রাইভারদের 'বি' প্রোটোকল ব্যবহার করা উচিত কিন্তু হয় কাজ করে।
  • অ্যান্ড্রয়েড 4.0 অনুযায়ী, লিনাক্স ইনপুট প্রোটোকল স্পেসিফিকেশন মেনে চলতে টাচ স্ক্রিন ড্রাইভার পরিবর্তন করতে হতে পারে।

    নিম্নলিখিত পরিবর্তন প্রয়োজন হতে পারে:

    • যখন একটি টুল নিষ্ক্রিয় হয়ে যায় (আঙুল "উপরে" যায়), এটি পরবর্তী মাল্টি-টাচ সিঙ্ক রিপোর্টে উপস্থিত হওয়া বন্ধ করা উচিত। যখন সমস্ত সরঞ্জাম নিষ্ক্রিয় হয়ে যায় (সমস্ত আঙ্গুল "উপরে" যায়), ড্রাইভারকে একটি খালি সিঙ্ক রিপোর্ট প্যাকেট পাঠাতে হবে, যেমন SYN_MT_REPORT এর পরে SYN_REPORT

      অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলি প্রত্যাশিত "আপ" ইভেন্টগুলি 0 এর একটি চাপ মান পাঠিয়ে রিপোর্ট করা হবে৷ পুরানো আচরণটি Linux ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে বেমানান ছিল এবং এটি আর সমর্থিত নয়৷

    • শারীরিক চাপ বা সংকেত শক্তির তথ্য ABS_MT_PRESSURE ব্যবহার করে রিপোর্ট করা উচিত।

      Android এর পূর্ববর্তী সংস্করণগুলি ABS_MT_TOUCH_MAJOR থেকে চাপের তথ্য পুনরুদ্ধার করেছে। পুরানো আচরণ লিনাক্স ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে বেমানান ছিল এবং এটি আর সমর্থিত নয়।

    • স্পর্শ আকারের তথ্য ABS_MT_TOUCH_MAJOR ব্যবহার করে রিপোর্ট করা উচিত।

      Android এর পূর্ববর্তী সংস্করণগুলি ABS_MT_TOOL_MAJOR থেকে আকারের তথ্য পুনরুদ্ধার করেছে৷ পুরানো আচরণ লিনাক্স ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে বেমানান ছিল এবং এটি আর সমর্থিত নয়।

    টাচ ডিভাইস ড্রাইভারদের আর অ্যান্ড্রয়েড-নির্দিষ্ট কাস্টমাইজেশনের প্রয়োজন নেই। স্ট্যান্ডার্ড লিনাক্স ইনপুট প্রোটোকলের উপর নির্ভর করে, অ্যান্ড্রয়েড অপরিবর্তিত ড্রাইভার ব্যবহার করে বাহ্যিক HID মাল্টি-টাচ টাচ স্ক্রিনগুলির মতো বিস্তৃত বিভিন্ন ধরণের টাচ পেরিফেরালকে সমর্থন করতে পারে।

টাচ ডিভাইস অপারেশন

নীচে Android এ টাচ ডিভাইস অপারেশনের একটি সংক্ষিপ্ত সারসংক্ষেপ।

  1. EventHub evdev ড্রাইভারের কাছ থেকে কাঁচা ঘটনা পড়ে।
  2. InputReader কাঁচা ঘটনা গ্রহণ করে এবং প্রতিটি টুলের অবস্থান এবং অন্যান্য বৈশিষ্ট্য সম্পর্কে অভ্যন্তরীণ অবস্থা আপডেট করে। এটি বোতামের অবস্থাও ট্র্যাক করে।
  3. যদি BACK বা FORWARD চাপানো হয় বা ছেড়ে দেওয়া হয়, InputReader InputDispatcher কী ইভেন্ট সম্পর্কে অবহিত করে।
  4. একটি ভার্চুয়াল কী প্রেস হয়েছে কিনা তা InputReader নির্ধারণ করে। যদি তাই হয়, এটি কী ইভেন্ট সম্পর্কে InputDispatcher অবহিত করে।
  5. InputReader নির্ধারণ করে যে স্পর্শটি প্রদর্শনের সীমানার মধ্যে শুরু হয়েছিল কিনা। যদি তাই হয়, এটি স্পর্শ ইভেন্ট সম্পর্কে InputDispatcher অবহিত করে।
  6. যদি কোনও স্পর্শ করার সরঞ্জাম না থাকে তবে কমপক্ষে একটি হোভারিং টুল থাকে, InputReader হোভার ইভেন্ট সম্পর্কে InputDispatcher অবহিত করে।
  7. যদি টাচ ডিভাইসের ধরনটি পয়েন্টার হয়, তাহলে InputReader পয়েন্টার জেসচার সনাক্তকরণ সঞ্চালন করে, সেই অনুযায়ী পয়েন্টার এবং দাগগুলিকে সরিয়ে দেয় এবং InputDispatcher পয়েন্টার ইভেন্ট সম্পর্কে অবহিত করে।
  8. ইভেন্টগুলি প্রেরণ করা উচিত কিনা এবং সেগুলি ডিভাইসটিকে জাগানো উচিত কিনা তা নির্ধারণ করতে InputDispatcher WindowManagerPolicy ব্যবহার করে৷ তারপর, InputDispatcher উপযুক্ত অ্যাপগুলিতে ইভেন্টগুলি সরবরাহ করে।

স্পর্শ ডিভাইস কনফিগারেশন

টাচ ডিভাইসের আচরণ ডিভাইসের অক্ষ, বোতাম, ইনপুট বৈশিষ্ট্য, ইনপুট ডিভাইস কনফিগারেশন, ভার্চুয়াল কী মানচিত্র এবং কী লেআউট দ্বারা নির্ধারিত হয়।

কীবোর্ড কনফিগারেশনে অংশগ্রহণকারী ফাইলগুলি সম্পর্কে আরও বিশদ বিবরণের জন্য নিম্নলিখিত বিভাগগুলি পড়ুন:

বৈশিষ্ট্য

টাচ ডিভাইসের আচরণ কনফিগার এবং ক্যালিব্রেট করতে সিস্টেমটি অনেক ইনপুট ডিভাইস কনফিগারেশন বৈশিষ্ট্যের উপর নির্ভর করে।

এর একটি কারণ হল টাচ ডিভাইসের জন্য ডিভাইস ড্রাইভার প্রায়ই ডিভাইস-নির্দিষ্ট ইউনিট ব্যবহার করে স্পর্শের বৈশিষ্ট্যগুলি রিপোর্ট করে।

উদাহরণস্বরূপ, অনেক স্পর্শ ডিভাইস একটি অভ্যন্তরীণ ডিভাইস-নির্দিষ্ট স্কেল ব্যবহার করে স্পর্শ যোগাযোগ এলাকা পরিমাপ করে, যেমন স্পর্শ দ্বারা ট্রিগার হওয়া সেন্সর নোডের মোট সংখ্যা। এই কাঁচা আকারের মানটি অ্যাপগুলির জন্য অর্থবহ হবে না কারণ তাদের স্পর্শ ডিভাইস সেন্সর নোডগুলির শারীরিক আকার এবং অন্যান্য বৈশিষ্ট্যগুলি সম্পর্কে জানতে হবে৷

সিস্টেমটি ইনপুট ডিভাইস কনফিগারেশন ফাইলগুলিতে এনকোড করা ক্রমাঙ্কন পরামিতিগুলি ব্যবহার করে স্পর্শ ডিভাইস দ্বারা রিপোর্ট করা মানগুলিকে ডিকোড, রূপান্তর এবং স্বাভাবিক করার জন্য একটি সহজ আদর্শ উপস্থাপনা যা অ্যাপগুলি বুঝতে পারে৷

ডকুমেন্টেশন কনভেনশন

ডকুমেন্টেশনের উদ্দেশ্যে, আমরা ক্রমাঙ্কন প্রক্রিয়া চলাকালীন সিস্টেম দ্বারা ব্যবহৃত মানগুলি বর্ণনা করতে নিম্নলিখিত নিয়মগুলি ব্যবহার করি।

কাঁচা অক্ষ মান

নিম্নলিখিত অভিব্যক্তিগুলি স্পর্শ ডিভাইস ড্রাইভার দ্বারা রিপোর্ট করা কাঁচা মানগুলিকে EV_ABS ইভেন্ট হিসাবে নির্দেশ করে৷

raw.x
ABS_X বা ABS_MT_POSITION_X অক্ষের মান।
raw.y
ABS_Y বা ABS_MT_POSITION_Y অক্ষের মান।
raw.pressure
ABS_PRESSURE বা ABS_MT_PRESSURE অক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়।
raw.touchMajor
ABS_MT_TOUCH_MAJOR অক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়।
raw.touchMinor
ABS_MT_TOUCH_MINOR অক্ষের মান, অথবা raw.touchMajor উপলব্ধ না হলে।
raw.toolMajor
ABS_TOOL_WIDTH বা ABS_MT_WIDTH_MAJOR অক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়।
raw.toolMinor
ABS_MT_WIDTH_MINOR অক্ষের মান, অথবা raw.toolMajor উপলব্ধ না হলে।
raw.orientation
ABS_MT_ORIENTATION অক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়।
raw.distance
ABS_DISTANCE বা ABS_MT_DISTANCE অক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়।
raw.tiltX
ABS_TILT_X অক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়।
raw.tiltY
ABS_TILT_Y অক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়।

কাঁচা অক্ষ রেঞ্জ

নিম্নলিখিত অভিব্যক্তিগুলি কাঁচা মানগুলির সীমা নির্দেশ করে৷ প্রতিটি অক্ষের জন্য EVIOCGABS ioctl কল করে সেগুলি পাওয়া যায়।

raw.*.min
কাঁচা অক্ষের অন্তর্ভুক্ত সর্বনিম্ন মান।
raw.*.max
কাঁচা অক্ষের অন্তর্ভুক্ত সর্বোচ্চ মান।
raw.*.range
raw.*.max - raw.*.min
raw.*.fuzz
কাঁচা অক্ষের নির্ভুলতা। যেমন fuzz = 1 বোঝায় মান +/- 1 ইউনিটে সঠিক।
raw.width
স্পর্শ এলাকার অন্তর্ভুক্ত প্রস্থ, raw.x.range + 1 এর সমতুল্য।
raw.height
স্পর্শ এলাকার সমন্বিত উচ্চতা, raw.y.range + 1 এর সমতুল্য।

আউটপুট রেঞ্জ

নিম্নলিখিত অভিব্যক্তিগুলি আউটপুট স্থানাঙ্ক সিস্টেমের বৈশিষ্ট্যগুলি নির্দেশ করে। ডিসপ্লে পিক্সেলের মতো অ্যাপগুলিতে রিপোর্ট করা আউটপুট ইউনিটগুলিতে স্পর্শ ডিভাইস দ্বারা ব্যবহৃত পৃষ্ঠের ইউনিটগুলি থেকে স্পর্শ অবস্থানের তথ্য অনুবাদ করতে সিস্টেমটি রৈখিক ইন্টারপোলেশন ব্যবহার করে।

output.width
আউটপুট প্রস্থ। টাচ স্ক্রিনের জন্য (একটি ডিসপ্লের সাথে যুক্ত), এটি পিক্সেলে প্রদর্শনের প্রস্থ। টাচ প্যাডের জন্য (একটি ডিসপ্লের সাথে সম্পর্কিত নয়), আউটপুট প্রস্থ raw.width এর সমান, যা নির্দেশ করে যে কোন ইন্টারপোলেশন সঞ্চালিত হয় না।
output.height
আউটপুট উচ্চতা। টাচ স্ক্রিনের জন্য (একটি ডিসপ্লের সাথে যুক্ত), এটি পিক্সেলে প্রদর্শনের উচ্চতা। টাচ প্যাডের জন্য (একটি ডিসপ্লের সাথে যুক্ত নয়), আউটপুট উচ্চতা raw.height এর সমান, যা নির্দেশ করে যে কোন ইন্টারপোলেশন সঞ্চালিত হয় না।
output.diag
আউটপুট স্থানাঙ্ক সিস্টেমের তির্যক দৈর্ঘ্য, sqrt(output.width ^2 + output.height ^2) এর সমতুল্য।

মৌলিক কনফিগারেশন

স্পর্শ ইনপুট ম্যাপার ক্যালিব্রেশন মান নির্দিষ্ট করতে ইনপুট ডিভাইস কনফিগারেশন ফাইলে অনেক কনফিগারেশন বৈশিষ্ট্য ব্যবহার করে। নিম্নলিখিত সারণী কিছু সাধারণ উদ্দেশ্য কনফিগারেশন বৈশিষ্ট্য বর্ণনা করে। অন্যান্য সমস্ত বৈশিষ্ট্যগুলি নিম্নোক্ত বিভাগে বর্ণনা করা হয়েছে এবং সেগুলি ক্রমাঙ্কন করতে ব্যবহৃত ক্ষেত্রগুলির সাথে।

touch.deviceType

সংজ্ঞা: touch.deviceType = touchScreen | touchPad | pointer | default

স্পর্শ ডিভাইসের ধরন নির্দিষ্ট করে।

  • যদি মান touchScreen হয়, টাচ ডিভাইসটি একটি ডিসপ্লের সাথে যুক্ত একটি টাচ স্ক্রিন।

  • মানটি touchPad হলে, টাচ ডিভাইসটি একটি টাচ প্যাড যা ডিসপ্লের সাথে যুক্ত নয়।

  • যদি মানটি pointer হয়, তাহলে টাচ ডিভাইসটি একটি টাচ প্যাড যা একটি প্রদর্শনের সাথে যুক্ত নয় এবং এর গতিগুলি পরোক্ষ মাল্টি-টাচ পয়েন্টার অঙ্গভঙ্গির জন্য ব্যবহৃত হয়।

  • মান default হলে, সিস্টেম স্বয়ংক্রিয়ভাবে শ্রেণীবিভাগ অ্যালগরিদম অনুযায়ী ডিভাইসের ধরন সনাক্ত করে।

ডিভাইসের ধরন কীভাবে স্পর্শ ডিভাইসের আচরণকে প্রভাবিত করে সে সম্পর্কে আরও বিশদ বিবরণের জন্য শ্রেণিবিন্যাস বিভাগটি পড়ুন।

অ্যান্ড্রয়েড 3 এবং তার চেয়ে কম সময়ে, সমস্ত টাচ ডিভাইসকে টাচ স্ক্রিন বলে ধরে নেওয়া হয়েছিল।

touch.orientationAware

সংজ্ঞা: touch.orientationAware = 0 | 1

স্পর্শ ডিভাইসের অভিযোজন পরিবর্তনগুলি প্রদর্শন করা উচিত কিনা তা নির্দিষ্ট করে৷

  • মান 1 হলে, যখনই ডিসপ্লে ওরিয়েন্টেশন পরিবর্তন হয় তখন টাচ ডিভাইস দ্বারা রিপোর্ট করা টাচ পজিশন ঘোরানো হয়।

  • মান 0 হলে, স্পর্শ ডিভাইস দ্বারা রিপোর্ট করা স্পর্শ অবস্থানগুলি অভিযোজন পরিবর্তনগুলি প্রদর্শন করতে অনাক্রম্য।

ডিভাইসটি টাচ স্ক্রিন হলে ডিফল্ট মান 1 , অন্যথায় 0

সিস্টেমটি অভ্যন্তরীণ এবং বাহ্যিক টাচ স্ক্রিন এবং প্রদর্শনের মধ্যে পার্থক্য করে। অভ্যন্তরীণ ডিসপ্লের ওরিয়েন্টেশনের উপর ভিত্তি করে একটি ওরিয়েন্টেশন সচেতন অভ্যন্তরীণ টাচ স্ক্রিন ঘোরানো হয়। বাহ্যিক প্রদর্শনের অভিযোজনের উপর ভিত্তি করে একটি ওরিয়েন্টেশন সচেতন বাহ্যিক টাচ স্ক্রিন ঘোরানো হয়।

ওরিয়েন্টেশন সচেতনতা নেক্সাস ওয়ানের মতো ডিভাইসে টাচ স্ক্রিনের ঘূর্ণন সমর্থন করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, যখন ডিভাইসটিকে ঘড়ির কাঁটার দিকে ঘোরানো হয় তার স্বাভাবিক স্থিতি থেকে 90 ডিগ্রি, স্পর্শের পরম অবস্থানগুলি এমনভাবে পুনরায় তৈরি করা হয় যে টাচ স্ক্রিনের পরম স্থানাঙ্ক সিস্টেমের উপরের-বাম কোণে একটি স্পর্শ উপরের-বাম দিকে একটি স্পর্শ হিসাবে রিপোর্ট করা হয় ডিসপ্লের ঘোরানো স্থানাঙ্ক সিস্টেমের কোণে। এটি করা হয় যাতে স্পর্শগুলি একই স্থানাঙ্ক সিস্টেমের সাথে রিপোর্ট করা হয় যা অ্যাপগুলি তাদের ভিজ্যুয়াল উপাদানগুলি আঁকতে ব্যবহার করে।

মধুচক্রের আগে, সমস্ত স্পর্শ ডিভাইসকে অভিযোজন সচেতন বলে ধরে নেওয়া হয়েছিল।

touch.gestureMode

সংজ্ঞা: touch.gestureMode = pointer | spots | default

পয়েন্টার অঙ্গভঙ্গির জন্য উপস্থাপনা মোড নির্দিষ্ট করে। এই কনফিগারেশন বৈশিষ্ট্যটি তখনই প্রাসঙ্গিক যখন স্পর্শ ডিভাইসটি টাইপ পয়েন্টার

  • যদি মানটি pointer হয়, টাচ প্যাড অঙ্গভঙ্গিগুলি মাউস পয়েন্টারের মতো কার্সারের মাধ্যমে উপস্থাপন করা হয়।

  • যদি মানটি spots হয়, তাহলে স্পর্শ প্যাড অঙ্গভঙ্গিগুলি একটি অ্যাঙ্কর দ্বারা উপস্থাপিত হয় যা অঙ্গভঙ্গির কেন্দ্রিক এবং বৃত্তাকার দাগের একটি সেট যা পৃথক আঙ্গুলের অবস্থানকে প্রতিনিধিত্ব করে।

INPUT_PROP_SEMI_MT ইনপুট বৈশিষ্ট্য সেট করা হলে ডিফল্ট মান pointer হয়, অথবা অন্যথায় spots

X এবং Y ক্ষেত্র

X এবং Y ক্ষেত্র যোগাযোগ এলাকার কেন্দ্রের জন্য অবস্থানগত তথ্য প্রদান করে।

হিসাব

গণনাটি সহজবোধ্য: টাচ ড্রাইভার থেকে অবস্থানগত তথ্য আউটপুট সমন্বয় সিস্টেমে রৈখিকভাবে ইন্টারপোলেট করা হয়।

xScale = output.width / raw.width
yScale = output.height / raw.height

If not orientation aware or screen rotation is 0 degrees:
output.x = (raw.x - raw.x.min) * xScale
output.y = (raw.y - raw.y.min) * yScale
Else If rotation is 90 degrees:
    output.x = (raw.y - raw.y.min) * yScale
    output.y = (raw.x.max - raw.x) * xScale
Else If rotation is 180 degrees:
    output.x = (raw.x.max - raw.x) * xScale
    output.y = (raw.y.max - raw.y) * yScale
Else If rotation is 270 degrees:
    output.x = (raw.y.max - raw.y) * yScale
    output.y = (raw.x - raw.x.min) * xScale
End If

touchMajor, touchMinor, toolMajor, toolMinor, সাইজ ফিল্ড

touchMajor এবং touchMinor ক্ষেত্রগুলি আউটপুট ইউনিটে (পিক্সেল) যোগাযোগ এলাকার আনুমানিক মাত্রা বর্ণনা করে।

toolMajor এবং toolMinor ক্ষেত্রগুলি আউটপুট ইউনিটে (পিক্সেল) টুলের আনুমানিক মাত্রা বর্ণনা করে।

size ক্ষেত্রটি স্পর্শ ডিভাইসটি উপলব্ধি করতে পারে এমন বৃহত্তম সম্ভাব্য স্পর্শের তুলনায় স্পর্শের স্বাভাবিক আকারের বর্ণনা করে। সবচেয়ে ছোট সম্ভাব্য স্বাভাবিক আকার হল 0.0 (কোন যোগাযোগ নেই, বা এটি পরিমাপযোগ্য নয়), এবং সবচেয়ে বড় সম্ভাব্য স্বাভাবিক আকার হল 1.0 (সেন্সর এলাকা সম্পৃক্ত)।

যখন আনুমানিক দৈর্ঘ্য এবং প্রস্থ উভয়ই পরিমাপ করা যায়, তখন touchMajor ক্ষেত্রটি দীর্ঘ মাত্রা নির্দিষ্ট করে এবং touchMinor ক্ষেত্রটি যোগাযোগ এলাকার ছোট মাত্রা নির্দিষ্ট করে। যখন শুধুমাত্র যোগাযোগ এলাকার আনুমানিক ব্যাস পরিমাপ করা যায়, তখন touchMajor এবং touchMinor ক্ষেত্রগুলি সমান হয়।

একইভাবে, toolMajor ক্ষেত্রটি দীর্ঘ মাত্রা নির্দিষ্ট করে এবং toolMinor ক্ষেত্রটি টুলের ক্রস-বিভাগীয় এলাকার ছোট মাত্রা নির্দিষ্ট করে।

যদি স্পর্শের আকার অনুপলব্ধ হয় কিন্তু টুলের আকার পাওয়া যায়, তাহলে টুলের আকার স্পর্শ আকারের সমান সেট করা হয়। বিপরীতভাবে, যদি টুলের আকার অনুপলব্ধ হয় কিন্তু স্পর্শের আকার উপলব্ধ থাকে, তাহলে স্পর্শের আকারটি টুল আকারের সমান সেট করা হয়।

টাচ ডিভাইসগুলি বিভিন্ন উপায়ে স্পর্শের আকার এবং টুলের আকার পরিমাপ করে বা রিপোর্ট করে। বর্তমান বাস্তবায়ন তিনটি ভিন্ন ধরণের পরিমাপ সমর্থন করে: ব্যাস, ক্ষেত্রফল এবং পৃষ্ঠের এককগুলিতে জ্যামিতিক বাউন্ডিং বক্স।

সংজ্ঞা: touch.size.calibration = none | geometric | diameter | area | default

টাচ সাইজ এবং টুল সাইজ রিপোর্ট করতে টাচ ড্রাইভার দ্বারা ব্যবহৃত পরিমাপের ধরন নির্দিষ্ট করে।

  • মান none হলে, আকার শূন্য সেট করা হয়.

  • মানটি geometric হলে, আকারটি অবস্থানের মতো একই পৃষ্ঠের এককগুলিতে নির্দিষ্ট করা হয়েছে বলে ধরে নেওয়া হয়, তাই এটি একই পদ্ধতিতে মাপানো হয়।

  • মানটি diameter হলে, আকারটি স্পর্শ বা টুলের ব্যাসের (প্রস্থ) সমানুপাতিক বলে ধরে নেওয়া হয়।

  • যদি মানটি area হয় তবে আকারটি স্পর্শ বা সরঞ্জামের ক্ষেত্রফলের সমানুপাতিক বলে ধরে নেওয়া হয়।

  • মানটি default হলে, সিস্টেমটি geometric ক্রমাঙ্কন ব্যবহার করে যদি raw.touchMajor বা raw.toolMajor অক্ষ উপলব্ধ থাকে, অন্যথায় এটি none ক্রমাঙ্কন ব্যবহার করে না।

touch.size.scale

সংজ্ঞা: touch.size.scale = <a non-negative floating point number>

ক্রমাঙ্কনে ব্যবহৃত একটি ধ্রুবক স্কেল ফ্যাক্টর নির্দিষ্ট করে।

ডিফল্ট মান হল 1.0

touch.size.bias

সংজ্ঞা: touch.size.bias = <একটি অ-নেতিবাচক ভাসমান বিন্দু সংখ্যা>

ক্রমাঙ্কনে ব্যবহৃত একটি ধ্রুবক পক্ষপাত মান নির্দিষ্ট করে।

ডিফল্ট মান হল 0.0

touch.size.issummed

সংজ্ঞা: touch.size.isSummed = 0 | 1

আকারটি সমস্ত সক্রিয় পরিচিতির আকারের যোগফল হিসাবে রিপোর্ট করা হয়েছে বা প্রতিটি পরিচিতির জন্য পৃথকভাবে রিপোর্ট করা হয়েছে কিনা তা নির্দিষ্ট করে৷

  • মান 1 হলে, রিপোর্ট করা আকার ব্যবহারের পূর্বে পরিচিতির সংখ্যা দ্বারা ভাগ করা হয়।

  • মান 0 হলে, রিপোর্ট করা আকার হিসাবে ব্যবহার করা হয়।

ডিফল্ট মান হল 0

কিছু স্পর্শ ডিভাইস, বিশেষ করে "সেমি-এমটি" ডিভাইসগুলি একাধিক পরিচিতির পৃথক মাত্রাগুলিকে আলাদা করতে পারে না তাই তারা একটি আকার পরিমাপের রিপোর্ট করে যা তাদের মোট এলাকা বা প্রস্থকে প্রতিনিধিত্ব করে। এই ধরনের ডিভাইসের জন্য এই সম্পত্তি শুধুমাত্র 1 সেট করা উচিত। সন্দেহ হলে, এই মানটি 0 এ সেট করুন।

হিসাব

touchMajor , touchMinor , toolMajor , toolMinor , এবং size ক্ষেত্রগুলির গণনা নির্দিষ্ট ক্রমাঙ্কন পরামিতির উপর নির্ভর করে৷

If raw.touchMajor and raw.toolMajor are available:
    touchMajor = raw.touchMajor
    touchMinor = raw.touchMinor
    toolMajor = raw.toolMajor
    toolMinor = raw.toolMinor
Else If raw.touchMajor is available:
    toolMajor = touchMajor = raw.touchMajor
    toolMinor = touchMinor = raw.touchMinor
Else If raw.toolMajor is available:
    touchMajor = toolMajor = raw.toolMajor
    touchMinor = toolMinor = raw.toolMinor
Else
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
End If

size = avg(touchMajor, touchMinor)

If touch.size.isSummed == 1:
    touchMajor = touchMajor / numberOfActiveContacts
    touchMinor = touchMinor / numberOfActiveContacts
    toolMajor = toolMajor / numberOfActiveContacts
    toolMinor = toolMinor / numberOfActiveContacts
    size = size / numberOfActiveContacts
End If

If touch.size.calibration == "none":
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
Else If touch.size.calibration == "geometric":
    outputScale = average(output.width / raw.width, output.height / raw.height)
    touchMajor = touchMajor * outputScale
    touchMinor = touchMinor * outputScale
    toolMajor = toolMajor * outputScale
    toolMinor = toolMinor * outputScale
Else If touch.size.calibration == "area":
    touchMajor = sqrt(touchMajor)
    touchMinor = touchMajor
    toolMajor = sqrt(toolMajor)
    toolMinor = toolMajor
Else If touch.size.calibration == "diameter":
    touchMinor = touchMajor
    toolMinor = toolMajor
End If

If touchMajor != 0:
    output.touchMajor = touchMajor * touch.size.scale + touch.size.bias
Else
    output.touchMajor = 0
End If

If touchMinor != 0:
    output.touchMinor = touchMinor * touch.size.scale + touch.size.bias
Else
    output.touchMinor = 0
End If

If toolMajor != 0:
    output.toolMajor = toolMajor * touch.size.scale + touch.size.bias
Else
    output.toolMajor = 0
End If

If toolMinor != 0:
    output.toolMinor = toolMinor * touch.size.scale + touch.size.bias
Else
    output.toolMinor = 0
End If

output.size = size

চাপ ক্ষেত্র

pressure ক্ষেত্রটি স্পর্শ ডিভাইসে প্রয়োগ করা আনুমানিক শারীরিক চাপকে 0.0 (কোন স্পর্শ নয়) এবং 1.0 (সাধারণ চাপ) এর মধ্যে একটি স্বাভাবিক মান হিসাবে বর্ণনা করে।

একটি শূন্য চাপ নির্দেশ করে যে টুলটি ঘোরাফেরা করছে।

touch.pressure.calibration

সংজ্ঞা: touch.pressure.calibration = none | physical | amplitude | default

চাপ রিপোর্ট করতে স্পর্শ ড্রাইভার দ্বারা ব্যবহৃত পরিমাপ ধরনের নির্দিষ্ট করে।

  • যদি মান none হয়, চাপটি অজানা তাই এটি স্পর্শ করার সময় 1.0 এবং ঘোরানোর সময় 0.0 সেট করা হয়।

  • যদি মানটি physical হয়, তাহলে চাপের অক্ষটি স্পর্শ প্যাডে প্রয়োগ করা চাপের প্রকৃত শারীরিক তীব্রতা পরিমাপ করার জন্য ধরে নেওয়া হয়।

  • যদি মানটি amplitude হয়, তাহলে চাপের অক্ষকে সংকেত প্রশস্ততা পরিমাপ করার জন্য ধরে নেওয়া হয়, যা যোগাযোগের আকার এবং প্রয়োগ করা চাপের সাথে সম্পর্কিত।

  • মানটি default হলে, চাপের অক্ষ উপলব্ধ থাকলে সিস্টেমটি physical ক্রমাঙ্কন ব্যবহার করে, অন্যথায় none ব্যবহার করে না।

স্পর্শ.চাপ.স্কেল

সংজ্ঞা: touch.pressure.scale = <একটি অ-নেতিবাচক ভাসমান বিন্দু সংখ্যা>

ক্রমাঙ্কনটিতে ব্যবহৃত একটি ধ্রুবক স্কেল ফ্যাক্টর নির্দিষ্ট করে।

ডিফল্ট মানটি 1.0 / raw.pressure.max

হিসাব

pressure ক্ষেত্রের গণনা নির্দিষ্ট ক্রমাঙ্কন পরামিতিগুলির উপর নির্ভর করে।

If touch.pressure.calibration == "physical" or "amplitude":
    output.pressure = raw.pressure * touch.pressure.scale
Else
    If hovering:
        output.pressure = 0
    Else
        output.pressure = 1
    End If
End If

ওরিয়েন্টেশন এবং টিল্ট ক্ষেত্র

orientation ক্ষেত্রটি কৌণিক পরিমাপ হিসাবে স্পর্শ এবং সরঞ্জামের ওরিয়েন্টেশন বর্ণনা করে। 0 এর একটি ওরিয়েন্টেশন ইঙ্গিত দেয় যে প্রধান অক্ষটি উল্লম্বভাবে ওরিয়েন্টেড হয়, -PI/2 ইঙ্গিত দেয় যে প্রধান অক্ষটি বাম দিকে ওরিয়েন্টেড, PI/2 ইঙ্গিত দেয় যে প্রধান অক্ষটি ডানদিকে ওরিয়েন্টেড। যখন কোনও স্টাইলাস সরঞ্জাম উপস্থিত থাকে, তখন ওরিয়েন্টেশন রেঞ্জটি -PI বা PI থেকে একটি সম্পূর্ণ বৃত্তের পরিসরে বর্ণনা করা যেতে পারে।

tilt ক্ষেত্রটি কৌণিক পরিমাপ হিসাবে সরঞ্জামটির প্রবণতা বর্ণনা করে। 0 এর একটি টিল্ট ইঙ্গিত দেয় যে সরঞ্জামটি পৃষ্ঠের জন্য লম্ব। PI/2 এর একটি কাতরা ইঙ্গিত দেয় যে সরঞ্জামটি পৃষ্ঠের সমতল।

স্পর্শ.অরিয়েন্টেশন.ক্যালিব্রেশন

সংজ্ঞা: touch.orientation.calibration = none | interpolated | vector | default

ওরিয়েন্টেশনটি প্রতিবেদন করার জন্য টাচ ড্রাইভার দ্বারা ব্যবহৃত ধরণের পরিমাপ নির্দিষ্ট করে।

  • যদি মানটি none হয় তবে ওরিয়েন্টেশন অজানা তাই এটি 0 এ সেট করা আছে।
  • যদি মানটি interpolated হয় তবে ওরিয়েন্টেশনটি রৈখিকভাবে ইন্টারপোল্ট করা হয় যাতে raw.orientation.min মানচিত্র -PI/2 এর একটি কাঁচা মান এবং PI/2 থেকে raw.orientation.max মানচিত্রের একটি কাঁচা মান। (raw.orientation.min + raw.orientation.max) / 2 মানচিত্র 0 এর কেন্দ্রের মান।
  • যদি মানটি vector হয় তবে ওরিয়েন্টেশনটি দুটি স্বাক্ষরিত 4-বিট ক্ষেত্রের সমন্বিত একটি প্যাকড ভেক্টর হিসাবে ব্যাখ্যা করা হয়। এই প্রতিনিধিত্ব আতমেল অবজেক্ট ভিত্তিক প্রোটোকল অংশগুলিতে ব্যবহৃত হয়। যখন ডিকোড করা হয়, ভেক্টর একটি ওরিয়েন্টেশন কোণ এবং আত্মবিশ্বাসের পরিমাণ দেয়। আত্মবিশ্বাসের পরিমাণটি আকারের তথ্য স্কেল করতে ব্যবহৃত হয়, যদি না এটি জ্যামিতিক হয়।
  • যদি মানটি default হয় তবে ওরিয়েন্টেশন অক্ষটি পাওয়া গেলে সিস্টেমটি interpolated ক্রমাঙ্কন ব্যবহার করে, অন্যথায় none ব্যবহার করে না।

হিসাব

orientation এবং tilt ক্ষেত্রগুলির গণনা নির্দিষ্ট ক্রমাঙ্কন পরামিতি এবং উপলব্ধ ইনপুট উপর নির্ভর করে।

If touch.tiltX and touch.tiltY are available:
    tiltXCenter = average(raw.tiltX.min, raw.tiltX.max)
    tiltYCenter = average(raw.tiltY.min, raw.tiltY.max)
    tiltXAngle = (raw.tiltX - tiltXCenter) * PI / 180
    tiltYAngle = (raw.tiltY - tiltYCenter) * PI / 180
    output.orientation = atan2(-sin(tiltXAngle), sinf(tiltYAngle))
    output.tilt = acos(cos(tiltXAngle) * cos(tiltYAngle))
Else If touch.orientation.calibration == "interpolated":
    center = average(raw.orientation.min, raw.orientation.max)
    output.orientation = PI / (raw.orientation.max - raw.orientation.min)
    output.tilt = 0
Else If touch.orientation.calibration == "vector":
    c1 = (raw.orientation & 0xF0) >> 4
    c2 = raw.orientation & 0x0F

    If c1 != 0 or c2 != 0:
        If c1 >= 8 Then c1 = c1 - 16
        If c2 >= 8 Then c2 = c2 - 16
        angle = atan2(c1, c2) / 2
        confidence = sqrt(c1*c1 + c2*c2)

        output.orientation = angle

        If touch.size.calibration == "diameter" or "area":
            scale = 1.0 + confidence / 16
            output.touchMajor *= scale
            output.touchMinor /= scale
            output.toolMajor *= scale
            output.toolMinor /= scale
        End If
    Else
        output.orientation = 0
    End If
    output.tilt = 0
Else
    output.orientation = 0
    output.tilt = 0
End If

If orientation aware:
    If screen rotation is 90 degrees:
        output.orientation = output.orientation - PI / 2
    Else If screen rotation is 270 degrees:
        output.orientation = output.orientation + PI / 2
    End If
End If

দূরত্ব ক্ষেত্র

distance ক্ষেত্রটি সরঞ্জাম এবং স্পর্শ ডিভাইসের পৃষ্ঠের মধ্যে দূরত্ব বর্ণনা করে। 0.0 এর একটি মান সরাসরি যোগাযোগকে নির্দেশ করে এবং বৃহত্তর মানগুলি পৃষ্ঠ থেকে ক্রমবর্ধমান দূরত্বকে নির্দেশ করে।

টাচ.ডিস্টেন্স.ক্যালিব্রেশন

সংজ্ঞা: touch.distance.calibration = none | scaled | default

দূরত্বের প্রতিবেদন করার জন্য টাচ ড্রাইভার দ্বারা ব্যবহৃত ধরণের পরিমাপ নির্দিষ্ট করে।

  • যদি মানটি none হয় তবে দূরত্বটি অজানা তাই এটি 0 এ সেট করা আছে।

  • যদি মানটি scaled হয় তবে রিপোর্ট করা দূরত্বটি একটি ধ্রুবক স্কেল ফ্যাক্টর দ্বারা গুণিত হয়।

  • যদি মানটি default হয় তবে দূরত্বের অক্ষ উপলব্ধ থাকলে সিস্টেমটি scaled ক্যালিব্রেশন ব্যবহার করে, অন্যথায় none ব্যবহার করে না।

টাচ.ডিস্ট্যান্স.স্কেল

সংজ্ঞা: touch.distance.scale = <a অ নেতিবাচক ভাসমান পয়েন্ট নম্বর>

ক্রমাঙ্কনটিতে ব্যবহৃত একটি ধ্রুবক স্কেল ফ্যাক্টর নির্দিষ্ট করে।

ডিফল্ট মান 1.0

হিসাব

distance ক্ষেত্রের গণনা নির্দিষ্ট ক্রমাঙ্কন পরামিতিগুলির উপর নির্ভর করে।

If touch.distance.calibration == "scaled":
    output.distance = raw.distance * touch.distance.scale
Else
    output.distance = 0
End If

উদাহরণ

# Input device configuration file for a touch screen that supports pressure,
# size and orientation. The pressure and size scale factors were obtained
# by measuring the characteristics of the device itself and deriving
# useful approximations based on the resolution of the touch sensor and the
# display.
#
# Note that these parameters are specific to a particular device model.
# Different parameters need to be used for other devices.

# Basic Parameters
touch.deviceType = touchScreen
touch.orientationAware = 1

# Size
# Based on empirical measurements, we estimate the size of the contact
# using size = sqrt(area) * 28 + 0.
touch.size.calibration = area
touch.size.scale = 28
touch.size.bias = 0
touch.size.isSummed = 0

# Pressure
# Driver reports signal strength as pressure.
#
# A normal index finger touch typically registers about 80 signal strength
# units although we don't expect these values to be accurate.
touch.pressure.calibration = amplitude
touch.pressure.scale = 0.0125

# Orientation
touch.orientation.calibration = vector

সামঞ্জস্য নোট

টাচ ডিভাইসের জন্য কনফিগারেশন বৈশিষ্ট্যগুলি অ্যান্ড্রয়েড আইসক্রিম স্যান্ডউইচ 4.0 এ উল্লেখযোগ্যভাবে পরিবর্তিত হয়েছে। নতুন কনফিগারেশন বৈশিষ্ট্যগুলি ব্যবহার করতে টাচ ডিভাইসের জন্য সমস্ত ইনপুট ডিভাইস কনফিগারেশন ফাইলগুলি আপডেট করতে হবে।

পুরানো টাচ ডিভাইস ড্রাইভারদেরও আপডেট করার প্রয়োজন হতে পারে।

ভার্চুয়াল কী মানচিত্র ফাইল

ভার্চুয়াল কীগুলি প্রয়োগ করতে টাচ ডিভাইসগুলি ব্যবহার করা যেতে পারে।

টাচ কন্ট্রোলারের সক্ষমতাগুলির উপর নির্ভর করে এটি করার বিভিন্ন উপায় রয়েছে। কিছু টাচ কন্ট্রোলারগুলি ফার্মওয়্যার রেজিস্টারগুলি সেট করে নরম কীগুলি প্রয়োগ করতে সরাসরি কনফিগার করা যেতে পারে। অন্যান্য সময় সফ্টওয়্যারটিতে মূল কোডগুলিতে টাচ স্থানাঙ্ক থেকে ম্যাপিং সম্পাদন করা বাঞ্ছনীয়।

যখন ভার্চুয়াল কীগুলি সফ্টওয়্যারটিতে প্রয়োগ করা হয়, কার্নেলকে অবশ্যই virtualkeys.<devicename> বোর্ডের সম্পত্তি হিসাবে। উদাহরণস্বরূপ, যদি টাচ স্ক্রিন ডিভাইস ড্রাইভাররা এর নামটিকে "টাচিফিলি" হিসাবে প্রতিবেদন করে তবে ভার্চুয়াল কী মানচিত্রের ফাইলটিতে অবশ্যই পথ /sys/board_properties/virtualkeys.touchyfeely থাকতে হবে।

একটি ভার্চুয়াল কী মানচিত্র ফাইল টাচ স্ক্রিনে ভার্চুয়াল কীগুলির স্থানাঙ্ক এবং লিনাক্স কী কোডগুলি বর্ণনা করে।

ভার্চুয়াল কী মানচিত্রের ফাইল ছাড়াও, অ্যান্ড্রয়েড কী কোডগুলিতে লিনাক্স কী কোডগুলি মানচিত্র করতে এবং কীবোর্ড ডিভাইসের ধরণ (সাধারণত SPECIAL_FUNCTION ) নির্দিষ্ট করতে অবশ্যই একটি সম্পর্কিত কী লেআউট ফাইল এবং কী চরিত্রের মানচিত্র ফাইল থাকতে হবে।

বাক্য গঠন

ভার্চুয়াল কী মানচিত্রের ফাইলটি একটি সরল পাঠ্য ফাইল যা ভার্চুয়াল কী লেআউট বর্ণনার ক্রম সমন্বয়ে গঠিত হয় যা হয় নিউলাইনস দ্বারা বা কলোন দ্বারা পৃথক করা হয়।

মন্তব্য লাইনগুলি '#' দিয়ে শুরু হয় এবং লাইনের শেষে চালিয়ে যান।

প্রতিটি ভার্চুয়াল কী 6 টি কোলন-অনুমোদিত উপাদান দ্বারা বর্ণিত হয়:

  • 0x01 : একটি সংস্করণ কোড। সর্বদা 0x01 হতে হবে।
  • <লিনাক্স কী কোড>: ভার্চুয়াল কী এর লিনাক্স কী কোড।
  • <সেন্টারএক্স>: ভার্চুয়াল কীটির কেন্দ্রের এক্স পিক্সেল স্থানাঙ্ক।
  • <সেন্টারি>: ভার্চুয়াল কীটির কেন্দ্রের y পিক্সেল সমন্বয়।
  • <প্রস্থ>: পিক্সেলের ভার্চুয়াল কীটির প্রস্থ।
  • <উচ্চতা>: পিক্সেলগুলিতে ভার্চুয়াল কীটির উচ্চতা।

সমস্ত স্থানাঙ্ক এবং আকারগুলি ডিসপ্লে সমন্বয় সিস্টেমের ক্ষেত্রে নির্দিষ্ট করা হয়।

এখানে একটি ভার্চুয়াল কী মানচিত্রের ফাইলটি একটি লাইনে লেখা সমস্ত।

# All on one line
0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55

একই ভার্চুয়াল কী মানচিত্রের ফাইলটি একাধিক লাইনেও লেখা যেতে পারে।

# One key per line
0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

উপরের উদাহরণে, টাচ স্ক্রিনে 480x800 এর রেজোলিউশন রয়েছে। তদনুসারে, সমস্ত ভার্চুয়াল কীগুলির একটি <সেন্টারি> 835 এর সমন্বয় রয়েছে, যা টাচ স্ক্রিনের দৃশ্যমান ক্ষেত্রের কিছুটা নীচে।

প্রথম কীটিতে লিনাক্স স্ক্যান কোড 158 ( KEY_BACK ), 55 এর সেন্টারেক্স, 835 এর কেন্দ্র, 90 এর প্রস্থ এবং 55 এর উচ্চতা রয়েছে।

উদাহরণ

ভার্চুয়াল কী মানচিত্রের ফাইল: /sys/board_properties/virtualkeys.touchyfeely

0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

কী লেআউট ফাইল: /system/usr/keylayout/touchyfeely.kl

key 158 BACK
key 139 MENU
key 172 HOME
key 217 SEARCH

মূল চরিত্রের মানচিত্র ফাইল: /system/usr/keychars/touchyfeely.kcm

type SPECIAL_FUNCTION

পরোক্ষ মাল্টি-টাচ পয়েন্টার অঙ্গভঙ্গি

পয়েন্টার মোডে, সিস্টেমটি নিম্নলিখিত অঙ্গভঙ্গিগুলির ব্যাখ্যা করে:

  • একক আঙুলের ট্যাপ: ক্লিক করুন।
  • একক আঙুলের গতি: পয়েন্টারটি সরান।
  • একক আঙুলের গতি প্লাস বোতাম টিপুন: পয়েন্টারটি টেনে আনুন।
  • দুটি আঙুলের গতি উভয়ই একই দিকে চলমান আঙ্গুলগুলি: সেই দিকের পয়েন্টারের নীচে অঞ্চলটি টেনে আনুন। পয়েন্টার নিজেই সরে যায় না।
  • দুটি আঙুলের গতি উভয় আঙ্গুলগুলি একে অপরের দিকে বা বিভিন্ন দিকের দিকে পৃথক করে: প্যান/স্কেল/পয়েন্টারের চারপাশের অঞ্চলটি ঘোরান। পয়েন্টার নিজেই সরে যায় না।
  • একাধিক আঙুলের গতি: ফ্রিফর্ম অঙ্গভঙ্গি।

খেজুর প্রত্যাখ্যান

অ্যান্ড্রয়েড 13 হিসাবে, বিল্ট-ইন ফ্রেমওয়ার্ক সক্ষম করা হলে সিস্টেমটি স্বয়ংক্রিয়ভাবে পামগুলি থেকে ইনপুটগুলি প্রত্যাখ্যান করতে পারে। ইন-হাউস, কাস্টম-বিল্ট সমাধানগুলি এখনও সমর্থিত, যদিও কোনও খেজুর সনাক্ত করা হলে তাদের TOOL_TYPE_PALM পতাকাটি ফেরত দেওয়ার জন্য তাদের সংশোধন করার প্রয়োজন হতে পারে। অন্তর্নির্মিত কাঠামোটি কাস্টম সলিউশনগুলির সাথে একত্রে কাজ করে।

প্রকৃত মডেলটি বর্তমান পয়েন্টারটিতে এবং আশেপাশের পয়েন্টারগুলিতে অঙ্গভঙ্গি ডেটাগুলির প্রথম 90 এমএসের দিকে নজর দেয়, তারপরে ছোঁয়াগুলি প্রদর্শন প্রান্ত থেকে কত দূরে রয়েছে তা বিবেচনা করে। এটি তখন নির্ধারণ করে, প্রতি পয়েন্টার ভিত্তিতে, কোন পয়েন্টারগুলি খেজুর। এটি প্রতিটি যোগাযোগের আকারকেও বিবেচনা করে, যেমন touchMajor এবং touchMinor দ্বারা রিপোর্ট করা হয়। অ্যান্ড্রয়েড ফ্রেমওয়ার্কটি তারপরে স্পর্শ স্ট্রিম থেকে খেজুর হিসাবে চিহ্নিত পয়েন্টারগুলি সরিয়ে দেয়।

যদি কোনও পয়েন্টার ইতিমধ্যে অ্যাপ্লিকেশনগুলিতে প্রেরণ করা হয়, তবে সিস্টেমটি হয়:

  • (যদি অন্যান্য সক্রিয় পয়েন্টার থাকে) ACTION_POINTER_UP এবং FLAG_CANCELED সেট সহ পয়েন্টারটি বাতিল করে।
  • (যদি এটিই একমাত্র পয়েন্টার হয়) ACTION_CANCEL দিয়ে পয়েন্টারটি বাতিল করে।

একটি পাবলিক এপিআই, MotionEvent.FLAG_CANCELED , ইঙ্গিত দেয় যে বর্তমান ইভেন্টটি ব্যবহারকারীর ক্রিয়াকলাপকে ট্রিগার করবে না। এই পতাকাটি ACTION_CANCEL এবং ACTION_POINTER_UP উভয়ের জন্যই সেট করা আছে।

যদি পাম পয়েন্টারটি অ্যাপ্লিকেশনগুলিতে প্রেরণ না করা হয়, তবে সিস্টেমটি কেবল পয়েন্টারটি ফেলে দেয়।

খেজুর প্রত্যাখ্যান সক্ষম করুন

  1. আপনার টাচ ড্রাইভারে, নিম্নলিখিত ক্ষেত্রগুলির জন্য রেজোলিউশনগুলি সেট করতে input_abs_set_res ম্যাক্রো ব্যবহার করুন (ইউনিটগুলি প্রতি মিমি পিক্সেল হয়):
    • ABS_MT_POSITION_X
    • ABS_MT_POSITION_Y
    • ABS_MT_TOUCH_MAJOR
    • ABS_MT_TOUCH_MINOR

    ABS_MT_TOUCH_MINOR এর জন্য সমর্থন al চ্ছিক। তবে, যদি আপনার ডিভাইস এটি সমর্থন করে তবে নিশ্চিত করুন যে রেজোলিউশনটি সঠিকভাবে সেট করা আছে।

  2. ক্ষেত্রগুলি সঠিকভাবে সেট করা আছে তা নিশ্চিত করার জন্য, চালান:
        $ adb shell getevent -li
    
  3. রানটাইম চলাকালীন বৈশিষ্ট্যটি সক্ষম করতে, চালান:
        $ adb shell device_config put input_native_boot palm_rejection_enabled 1
    
  4. system_server প্রক্রিয়া পুনরায় চালু করুন।
         $ adb shell stop && adb shell start
        
  5. নিশ্চিত করুন যে adb shell dumpsys input দেখায় যে UnwantedInteractionBlocker ভিতরে পাম প্রত্যাখ্যানকারী রয়েছে। যদি এটি না হয় তবে কী ভুল কনফিগার করা যেতে পারে তার ক্লুগুলি খুঁজে পেতে ইনপুট সম্পর্কিত লগগুলি পরীক্ষা করুন।

    রেফারেন্সের জন্য নিম্নলিখিত উদাহরণটি দেখুন:

    UnwantedInteractionBlocker:
      mEnablePalmRejection: true
      isPalmRejectionEnabled (flag value): true
      mPalmRejectors:
        deviceId = 3:
          mDeviceInfo:
            max_x = 
            max_y = 
            x_res = 11.00
            y_res = 11.00
            major_radius_res = 1.00
            minor_radius_res = 1.00
            minor_radius_supported = true
            touch_major_res = 1
            touch_minor_res = 1
          mSlotState:
            mSlotsByPointerId:
    
            mPointerIdsBySlot:
    
          mSuppressedPointerIds: {}
    
  6. বৈশিষ্ট্যটি স্থায়ীভাবে সক্ষম করতে, আপনার init**rc ফাইলটিতে সংশ্লিষ্ট সিসপ্রপ কমান্ড যুক্ত করুন:

    setprop persist.device_config.input_native_boot.palm_rejection_enabled 1
    

আরও পড়া

,

অ্যান্ড্রয়েড স্টাইলাস-ভিত্তিক ডিজিটাইজার ট্যাবলেট সহ বিভিন্ন টাচ স্ক্রিন এবং টাচ প্যাড সমর্থন করে।

টাচ স্ক্রিনগুলি এমন একটি স্পর্শ ডিভাইস যা একটি ডিসপ্লে এর সাথে সম্পর্কিত যে ব্যবহারকারীর স্ক্রিনে সরাসরি আইটেমগুলি ম্যানিপুলেট করার ছাপ রয়েছে।

টাচ প্যাডগুলি এমন স্পর্শ ডিভাইস যা কোনও ডিজিটাইজার ট্যাবলেট হিসাবে প্রদর্শনের সাথে সম্পর্কিত নয়। টাচ প্যাডগুলি সাধারণত পয়েন্টিংয়ের জন্য বা পরোক্ষ পরোক্ষ অবস্থান বা ব্যবহারকারী ইন্টারফেসের অঙ্গভঙ্গি-ভিত্তিক নিয়ন্ত্রণের জন্য ব্যবহৃত হয়।

টাচ ডিভাইসে এমন বোতাম থাকতে পারে যার ফাংশনগুলি মাউস বোতামগুলির মতো।

অন্তর্নিহিত টাচ সেন্সর প্রযুক্তির উপর নির্ভর করে আঙ্গুলগুলি বা স্টাইলাসের মতো বিভিন্ন সরঞ্জাম ব্যবহার করে কখনও কখনও টাচ ডিভাইসগুলি ম্যানিপুলেট করা যেতে পারে।

টাচ ডিভাইসগুলি কখনও কখনও ভার্চুয়াল কীগুলি প্রয়োগ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, কিছু অ্যান্ড্রয়েড ডিভাইসে, টাচ স্ক্রিন সেন্সর অঞ্চলটি ডিসপ্লেটির প্রান্তের বাইরে প্রসারিত এবং একটি স্পর্শ সংবেদনশীল কী প্যাডের অংশ হিসাবে দ্বৈত উদ্দেশ্য পরিবেশন করে।

টাচ ডিভাইসের দুর্দান্ত বিভিন্ন কারণে, অ্যান্ড্রয়েড প্রতিটি ডিভাইসের বৈশিষ্ট্য এবং কাঙ্ক্ষিত আচরণ বর্ণনা করতে বিপুল সংখ্যক কনফিগারেশন বৈশিষ্ট্যের উপর নির্ভর করে।

ডিভাইস শ্রেণিবিন্যাস স্পর্শ করুন

একটি ইনপুট ডিভাইসকে মাল্টি-টাচ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয় যদি নিম্নলিখিত উভয় শর্ত থাকে:

  • ইনপুট ডিভাইসটি ABS_MT_POSITION_X এবং ABS_MT_POSITION_Y পরম অক্ষগুলির উপস্থিতি প্রতিবেদন করে।
  • ইনপুট ডিভাইসে কোনও গেমপ্যাড বোতাম নেই। এই শর্তটি নির্দিষ্ট গেমপ্যাডগুলির সাথে একটি অস্পষ্টতার সমাধান করে যা কোডগুলির সাথে অক্ষগুলি প্রতিবেদন করে যা এমটি অক্ষের ওভারল্যাপ করে।

একটি ইনপুট ডিভাইসকে একক-টাচ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয় যদি নিম্নলিখিত উভয় শর্ত থাকে:

  • ইনপুট ডিভাইসটি মাল্টি-টাচ ডিভাইস হিসাবে শ্রেণিবদ্ধ করা হয়নি। একটি ইনপুট ডিভাইসটি হয় একক-টাচ ডিভাইস হিসাবে বা মাল্টি-টাচ ডিভাইস হিসাবে শ্রেণিবদ্ধ করা হয়, উভয়ই নয়।
  • ইনপুট ডিভাইসটি ABS_X এবং ABS_Y পরম অক্ষগুলির উপস্থিতি এবং BTN_TOUCH কী কোডের উপস্থিতি রিপোর্ট করে।

যখন কোনও ইনপুট ডিভাইসটি একটি স্পর্শ ডিভাইস হিসাবে শ্রেণিবদ্ধ করা হয়, তখন ভার্চুয়াল কীগুলির উপস্থিতি ডিভাইসের জন্য ভার্চুয়াল কী মানচিত্রের ফাইলটি লোড করার চেষ্টা করে নির্ধারিত হয়। যদি কোনও ভার্চুয়াল কী মানচিত্র উপলব্ধ থাকে তবে ডিভাইসের জন্য কী লেআউট ফাইলটিও লোড করা হয়। এই ফাইলগুলির অবস্থান এবং ফর্ম্যাট সম্পর্কে তথ্যের জন্য [ভার্চুয়াল কী মানচিত্র ফাইলগুলি] (#ভার্চুয়াল-কী-মানচিত্র-ফাইল) দেখুন।

এরপরে, সিস্টেমটি টাচ ডিভাইসের জন্য ইনপুট ডিভাইস কনফিগারেশন ফাইলটি লোড করে।

সমস্ত অন্তর্নির্মিত টাচ ডিভাইসে ইনপুট ডিভাইস কনফিগারেশন ফাইল থাকা উচিত। যদি কোনও ইনপুট ডিভাইস কনফিগারেশন ফাইল উপস্থিত না থাকে তবে সিস্টেমটি একটি ডিফল্ট কনফিগারেশন চয়ন করে যা বাহ্যিক ইউএসবি বা ব্লুটুথ এইচআইডি টাচ স্ক্রিন বা টাচ প্যাডগুলির মতো সাধারণ-উদ্দেশ্যমূলক স্পর্শ পেরিফেরিয়ালগুলির জন্য উপযুক্ত। এই ডিফল্টগুলি অন্তর্নির্মিত টাচ স্ক্রিনগুলির জন্য ডিজাইন করা হয়নি এবং এর ফলে ভুল আচরণ হতে পারে।

ইনপুট ডিভাইস কনফিগারেশন লোড হওয়ার পরে, সিস্টেমটি ইনপুট ডিভাইসটিকে টাচ স্ক্রিন , টাচ প্যাড বা পয়েন্টার ডিভাইস হিসাবে শ্রেণিবদ্ধ করে।

  • স্ক্রিনে অবজেক্টগুলির সরাসরি হেরফেরের জন্য একটি টাচ স্ক্রিন ডিভাইস ব্যবহৃত হয়। ব্যবহারকারী সরাসরি স্ক্রিনটি স্পর্শ করে, যাতে সিস্টেমগুলি হেরফের করা অবজেক্টগুলি নির্দেশ করার জন্য কোনও অতিরিক্ত সাশ্রয়ী প্রয়োজন হয় না।
  • প্রদত্ত সেন্সর অঞ্চলে স্পর্শ সম্পর্কে কোনও অ্যাপ্লিকেশনকে পরম অবস্থানের তথ্য সরবরাহ করতে একটি টাচ প্যাড ডিভাইস ব্যবহার করা হয়। এটি ডিজিটাইজার ট্যাবলেটগুলির জন্য দরকারী হতে পারে।
  • কার্সার ব্যবহার করে স্ক্রিনে অবজেক্টের অপ্রত্যক্ষ হেরফেরের জন্য একটি পয়েন্টার ডিভাইস ব্যবহৃত হয়। আঙ্গুলগুলি মাল্টি-টাচ পয়েন্টার অঙ্গভঙ্গি হিসাবে ব্যাখ্যা করা হয়। অন্যান্য সরঞ্জাম, যেমন স্টাইলাসগুলি পরম অবস্থান ব্যবহার করে ব্যাখ্যা করা হয়। আরও তথ্যের জন্য পরোক্ষ মাল্টি-টাচ পয়েন্টার অঙ্গভঙ্গি দেখুন।

নিম্নলিখিত নিয়মগুলি টাচ স্ক্রিন, টাচ প্যাড বা পয়েন্টার ডিভাইস হিসাবে ইনপুট ডিভাইসটিকে শ্রেণিবদ্ধ করতে ব্যবহৃত হয়।

  • যদি touch.deviceType সম্পত্তি সেট করা থাকে, তবে ডিভাইসের ধরণটি নির্দেশিত হিসাবে সেট করা আছে।
  • যদি ইনপুট ডিভাইসটি INPUT_PROP_DIRECT ইনপুট সম্পত্তি ( EVIOCGPROP আইওসিটিএল এর মাধ্যমে) উপস্থিতি রিপোর্ট করে, তবে ডিভাইসের ধরণটি স্ক্রিনে টাচ করতে সেট করা আছে। এই শর্তটি ধরে নিয়েছে যে সরাসরি ইনপুট টাচ ডিভাইসগুলি এমন একটি ডিসপ্লেতে সংযুক্ত রয়েছে যাও সংযুক্ত রয়েছে।
  • যদি ইনপুট ডিভাইসটি INPUT_PROP_POINTER ইনপুট সম্পত্তি ( EVIOCGPROP আইওসিটিএল এর মাধ্যমে) উপস্থিতি রিপোর্ট করে, তবে ডিভাইস টাইপটি পয়েন্টারে সেট করুন।
  • যদি ইনপুট ডিভাইসটি REL_X বা REL_Y আপেক্ষিক অক্ষগুলির উপস্থিতি রিপোর্ট করে তবে ডিভাইসের ধরণটি প্যাড স্পর্শ করতে সেট করা আছে। এই শর্তটি ইনপুট ডিভাইসের জন্য একটি অস্পষ্টতা সমাধান করে যা একটি মাউস এবং একটি টাচ প্যাড উভয়ই নিয়ে গঠিত। এই ক্ষেত্রে, টাচ প্যাডটি পয়েন্টারটি নিয়ন্ত্রণ করতে ব্যবহৃত হয় না কারণ মাউস ইতিমধ্যে এটি নিয়ন্ত্রণ করে।
  • অন্যথায়, ডিভাইসের ধরণটি পয়েন্টারে সেট করা আছে। এই ডিফল্টটি নিশ্চিত করে যে টাচ প্যাডগুলি যা অন্য কোনও বিশেষ উদ্দেশ্যকে পয়েন্টার নিয়ন্ত্রণ করে নি।

বোতাম

বোতামগুলি al চ্ছিক নিয়ন্ত্রণ যা অ্যাপ্লিকেশনগুলি অতিরিক্ত ফাংশন সম্পাদন করতে ব্যবহার করতে পারে। টাচ ডিভাইসে বোতামগুলি মাউস বোতামগুলির সাথে একইভাবে আচরণ করে এবং মূলত পয়েন্টার টাইপ টাচ ডিভাইসগুলির সাথে বা একটি স্টাইলাসের সাথে ব্যবহৃত হয়।

নিম্নলিখিত বোতামগুলি সমর্থিত:

  • BTN_LEFT : MotionEvent.BUTTON_PRIMARY ম্যাপ করা।
  • BTN_RIGHT : MotionEvent.BUTTON_SECONDARY ম্যাপ করা।
  • BTN_MIDDLE : MotionEvent.BUTTON_MIDDLE ম্যাপ করা।
  • BTN_BACK এবং BTN_SIDE : MotionEvent.BUTTON_BACK ম্যাপ করা হয়েছে। এই বোতামটি টিপলে কী KeyEvent.KEYCODE_BACK সাথে একটি কী প্রেসকে সংশ্লেষিত করে।
  • BTN_FORWARD এবং BTN_EXTRA : MotionEvent.BUTTON_FORWARD ম্যাপ করা। এই বোতামটি টিপলে কী KeyEvent.KEYCODE_FORWARD সাথে একটি কী প্রেসকে সংশ্লেষিত করে।
  • BTN_STYLUS : MotionEvent.BUTTON_SECONDARY ম্যাপ করা।
  • BTN_STYLUS2 : MotionEvent.BUTTON_TERTIARY ম্যাপ করা হয়েছে।

সরঞ্জাম এবং সরঞ্জাম প্রকার

একটি সরঞ্জাম হ'ল একটি আঙুল, স্টাইলাস বা অন্যান্য যন্ত্রপাতি যা টাচ ডিভাইসের সাথে ইন্টারঅ্যাক্ট করতে ব্যবহৃত হয়। কিছু স্পর্শ ডিভাইস বিভিন্ন ধরণের সরঞ্জামের মধ্যে পার্থক্য করতে পারে।

অ্যান্ড্রয়েডের অন্য কোথাও, যেমন MotionEvent এপিআইয়ের মতো, একটি সরঞ্জাম প্রায়শই পয়েন্টার হিসাবে উল্লেখ করা হয়।

নিম্নলিখিত সরঞ্জাম প্রকারগুলি সমর্থিত:

  • BTN_TOOL_FINGER এবং MT_TOOL_FINGER : MotionEvent.TOOL_TYPE_FINGER টাইপ_ফিংগারতে ম্যাপ করা হয়েছে।
  • BTN_TOOL_PEN এবং MT_TOOL_PEN : MotionEvent.TOOL_TYPE_STYLUS টাইপ_স্টাইলাসে ম্যাপ করা।
  • BTN_TOOL_RUBBER : MotionEvent.TOOL_TYPE_ERASER টাইপ_রাসারে ম্যাপ করা।
  • BTN_TOOL_BRUSH : MotionEvent.TOOL_TYPE_STYLUS এ ম্যাপ করা।
  • BTN_TOOL_PENCIL : MotionEvent.TOOL_TYPE_STYLUS টাইপ_স্টাইলাসে ম্যাপ করা।
  • BTN_TOOL_AIRBRUSH : MotionEvent.TOOL_TYPE_STYLUS টাইপ_স্টাইলাসে ম্যাপ করা হয়েছে।
  • BTN_TOOL_MOUSE : MotionEvent.TOOL_TYPE_MOUSE টাইপ_মাউসে ম্যাপ করা।
  • BTN_TOOL_LENS : MotionEvent.TOOL_TYPE_MOUSE টাইপ_মাউসে ম্যাপ করা হয়েছে।
  • BTN_TOOL_DOUBLETAP , BTN_TOOL_TRIPLETAP , এবং BTN_TOOL_QUADTAP : MotionEvent.TOOL_TYPE_FINGER টাইপ_ফিংগারকে ম্যাপ করা।

ঘোরাঘুরি বনাম স্পর্শকারী সরঞ্জাম

সরঞ্জামগুলি হয় টাচ ডিভাইসের সাথে যোগাযোগ করতে পারে বা পরিসীমা এবং এর উপরে ঘুরে বেড়াতে পারে। সমস্ত স্পর্শ ডিভাইসগুলি স্পর্শ ডিভাইসের উপরে ঘুরে দেখার কোনও সরঞ্জামের উপস্থিতি বুঝতে পারে না। আরএফ-ভিত্তিক স্টাইলাস ডিজিটাইজারগুলির মতো যারা করেন তারা প্রায়শই সনাক্ত করতে পারেন যখন সরঞ্জামটি ডিজিটাইজারের সীমিত পরিসরের মধ্যে থাকে।

InputReader উপাদানটি ঘোরাঘুরি সরঞ্জামগুলি থেকে স্পর্শকাতর সরঞ্জামগুলিকে আলাদা করে। তেমনিভাবে, স্পর্শকাতর সরঞ্জাম এবং ঘোরাঘুরি সরঞ্জামগুলি বিভিন্ন উপায়ে অ্যাপ্লিকেশনগুলিতে রিপোর্ট করা হয়।

MotionEvent.ACTION_DOWN , MotionEvent.ACTION_MOVE , MotionEvent.ACTION_DOWN , MotionEvent.ACTION_POINTER_DOWN এবং MotionEvent.ACTION_POINTER_UP ব্যবহার করে স্পর্শকারী সরঞ্জামগুলি অ্যাপ্লিকেশনগুলিতে স্পর্শ ইভেন্ট হিসাবে রিপোর্ট করা হয়েছে।

ঘোরাঘুরি সরঞ্জামগুলি MotionEvent.ACTION_HOVER_ENTER , MotionEvent.ACTION_HOVER_MOVE , এবং MotionEvent.ACTION_HOVER_EXIT ব্যবহার করে জেনেরিক মোশন ইভেন্টগুলি হিসাবে অ্যাপ্লিকেশনগুলিতে রিপোর্ট করা হয়েছে।

ডিভাইস ড্রাইভারের প্রয়োজনীয়তা স্পর্শ করুন

  • টাচ ডিভাইস ড্রাইভারদের তারা যে অক্ষ এবং বোতামগুলি সমর্থন করে তার জন্য কেবল অক্ষ এবং কী কোডগুলি নিবন্ধভুক্ত করা উচিত। অসমর্থিত অক্ষ বা কী কোডগুলি নিবন্ধকরণ ডিভাইস শ্রেণিবিন্যাস অ্যালগরিদমকে বিভ্রান্ত করতে পারে বা সিস্টেমটিকে ডিভাইসের ক্ষমতাগুলি ভুলভাবে সনাক্ত করতে পারে। উদাহরণস্বরূপ, যদি ডিভাইসটি BTN_TOUCH কী কোডটি প্রতিবেদন করে তবে সিস্টেমটি ধরে নিয়েছে যে BTN_TOUCH সর্বদা সরঞ্জামটি স্ক্রিনটি স্পর্শ করছে কিনা তা নির্দেশ করতে ব্যবহৃত হয়। অতএব, BTN_TOUCH কেবল সরঞ্জামটি কেবল পরিসীমা এবং ঘোরাঘুরি করে তা নির্দেশ করতে ব্যবহার করা উচিত নয়।
  • একক-টাচ ডিভাইসগুলি নিম্নলিখিত লিনাক্স ইনপুট ইভেন্টগুলি ব্যবহার করে:
    • ABS_X : (প্রয়োজনীয়) সরঞ্জামটির এক্স সমন্বয় প্রতিবেদন করে।
    • ABS_Y : (প্রয়োজনীয়) সরঞ্জামটির y স্থানাঙ্কের প্রতিবেদন করে।
    • ABS_PRESSURE : (al চ্ছিক) সরঞ্জামের ডগা বা স্পর্শ যোগাযোগের সংকেত শক্তি প্রয়োগের ক্ষেত্রে শারীরিক চাপ প্রয়োগ করে।
    • ABS_TOOL_WIDTH : (al চ্ছিক) স্পর্শ যোগাযোগের বা নিজেই সরঞ্জামটির ক্রস-বিভাগীয় অঞ্চল বা প্রস্থের প্রতিবেদন করে।
    • ABS_DISTANCE : (al চ্ছিক) স্পর্শ ডিভাইসের পৃষ্ঠ থেকে সরঞ্জামটির দূরত্বের প্রতিবেদন করে।
    • ABS_TILT_X : (al চ্ছিক) এক্স অক্ষ বরাবর স্পর্শ ডিভাইসের পৃষ্ঠ থেকে সরঞ্জামটির টিল্ট রিপোর্ট করে।
    • ABS_TILT_Y : (al চ্ছিক) Y অক্ষ বরাবর স্পর্শ ডিভাইসের পৃষ্ঠ থেকে সরঞ্জামটির টিল্ট রিপোর্ট করে।
    • BTN_TOUCH : (প্রয়োজনীয়) সরঞ্জামটি ডিভাইসটি স্পর্শ করছে কিনা তা নির্দেশ করে।
    • BTN_LEFT , BTN_RIGHT , BTN_MIDDLE , BTN_BACK , BTN_SIDE , BTN_FORWARD , BTN_EXTRA , BTN_STYLUS , BTN_STYLUS2 : (al চ্ছিক) রিপোর্ট বোতামে জানিয়েছে।
    • BTN_TOOL_FINGER , BTN_TOOL_PEN , BTN_TOOL_RUBBER , BTN_TOOL_BRUSH , BTN_TOOL_PENCIL , BTN_TOOL_AIRBRUSH , BTN_TOOL_MOUSE , BTN_TOOL_LENS , BTN_TOOL_DOUBLETAP , BTN_TOOL_TRIPLETAP BTN_TOOL_QUADTAP প্রকার
  • মাল্টি-টাচ ডিভাইসগুলি নিম্নলিখিত লিনাক্স ইনপুট ইভেন্টগুলি ব্যবহার করে:
    • ABS_MT_POSITION_X : (প্রয়োজনীয়) সরঞ্জামটির x স্থানাঙ্কের প্রতিবেদন করে।
    • ABS_MT_POSITION_Y : (প্রয়োজনীয়) সরঞ্জামটির y স্থানাঙ্কের প্রতিবেদন করে।
    • ABS_MT_PRESSURE : (al চ্ছিক) সরঞ্জামের ডগা বা স্পর্শ যোগাযোগের সংকেত শক্তি প্রয়োগের শারীরিক চাপের প্রতিবেদন করে।
    • ABS_MT_TOUCH_MAJOR : (al চ্ছিক) স্পর্শ যোগাযোগের ক্রস-বিভাগীয় অঞ্চল বা স্পর্শ যোগাযোগের দীর্ঘ মাত্রার দৈর্ঘ্যের প্রতিবেদন করে।
    • ABS_MT_TOUCH_MINOR : (al চ্ছিক) স্পর্শ যোগাযোগের সংক্ষিপ্ত মাত্রার দৈর্ঘ্যের প্রতিবেদন করে। যদি ABS_MT_TOUCH_MAJOR কোনও অঞ্চল পরিমাপের প্রতিবেদন করছে তবে এই অক্ষটি ব্যবহার করা উচিত নয়।
    • ABS_MT_WIDTH_MAJOR : (al চ্ছিক) নিজেই সরঞ্জামটির ক্রস-বিভাগীয় অঞ্চল বা সরঞ্জামটির দীর্ঘ মাত্রার দৈর্ঘ্যের প্রতিবেদন করে। আপনি যদি সরঞ্জামটির মাত্রাগুলি না জানেন তবে এই অক্ষটি ব্যবহার করবেন না।
    • ABS_MT_WIDTH_MINOR : (al চ্ছিক) নিজেই সরঞ্জামটির সংক্ষিপ্ত মাত্রার দৈর্ঘ্যের প্রতিবেদন করে। এই অক্ষটি ব্যবহার করা উচিত নয় যদি ABS_MT_WIDTH_MAJOR কোনও অঞ্চল পরিমাপের প্রতিবেদন করে বা যদি সরঞ্জামটির মাত্রাগুলি নিজেই অজানা থাকে।
    • ABS_MT_ORIENTATION : (al চ্ছিক) সরঞ্জামটির ওরিয়েন্টেশন রিপোর্ট করে।
    • ABS_MT_DISTANCE : (al চ্ছিক) স্পর্শ ডিভাইসের পৃষ্ঠ থেকে সরঞ্জামটির দূরত্বের প্রতিবেদন করে।
    • ABS_MT_TOOL_TYPE : (al চ্ছিক) MT_TOOL_FINGER বা MT_TOOL_PEN হিসাবে সরঞ্জামের ধরণের প্রতিবেদন করে।
    • ABS_MT_TRACKING_ID : (al চ্ছিক) সরঞ্জামটির ট্র্যাকিং আইডি রিপোর্ট করে। ট্র্যাকিং আইডি হ'ল একটি স্বেচ্ছাসেবী অ-নেতিবাচক পূর্ণসংখ্যা যা একাধিক সরঞ্জাম সক্রিয় থাকাকালীন প্রতিটি সরঞ্জামকে স্বাধীনভাবে সনাক্ত এবং ট্র্যাক করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, যখন একাধিক আঙ্গুলগুলি ডিভাইসটি স্পর্শ করছে, প্রতিটি আঙুলের একটি স্বতন্ত্র ট্র্যাকিং আইডি নির্ধারিত করা উচিত যা যতক্ষণ আঙুলের সংস্পর্শে থাকে ততক্ষণ ব্যবহৃত হয়। ট্র্যাকিং আইডিগুলি পুনরায় ব্যবহার করা যেতে পারে যখন তাদের সম্পর্কিত সরঞ্জামগুলি সীমার বাইরে চলে যায়।
    • ABS_MT_SLOT : (al চ্ছিক) লিনাক্স মাল্টি-টাচ প্রোটোকল 'বি' ব্যবহার করার সময় সরঞ্জামটির স্লট আইডি রিপোর্ট করে। আরও তথ্যের জন্য লিনাক্স মাল্টি-টাচ প্রোটোকল ডকুমেন্টেশন দেখুন।
    • BTN_TOUCH : (প্রয়োজনীয়) সরঞ্জামটি ডিভাইসটি স্পর্শ করছে কিনা তা নির্দেশ করে।
    • BTN_LEFT , BTN_RIGHT , BTN_MIDDLE , BTN_BACK , BTN_SIDE , BTN_FORWARD , BTN_EXTRA , BTN_STYLUS , BTN_STYLUS2 : (al চ্ছিক) রিপোর্ট বোতামে জানিয়েছে।
    • BTN_TOOL_FINGER , BTN_TOOL_PEN , BTN_TOOL_RUBBER , BTN_TOOL_BRUSH , BTN_TOOL_PENCIL , BTN_TOOL_AIRBRUSH , BTN_TOOL_MOUSE , BTN_TOOL_LENS , BTN_TOOL_DOUBLETAP , BTN_TOOL_TRIPLETAP BTN_TOOL_QUADTAP প্রকার
  • যদি একক স্পর্শ এবং মাল্টি-টাচ প্রোটোকল উভয়ের জন্য অক্ষগুলি সংজ্ঞায়িত করা হয় তবে কেবল মাল্টি-টাচ অক্ষগুলি ব্যবহার করা হয় এবং একক-টাচ অক্ষগুলি উপেক্ষা করা হয়।
  • ABS_X , ABS_Y , ABS_MT_POSITION_X , এবং ABS_MT_POSITION_Y অক্ষগুলির সর্বনিম্ন এবং সর্বাধিক মানগুলি ডিভাইস-নির্দিষ্ট পৃষ্ঠের ইউনিটগুলিতে ডিভাইসের সক্রিয় অঞ্চলের সীমানা সংজ্ঞায়িত করে। একটি টাচ স্ক্রিনের ক্ষেত্রে, সক্রিয় অঞ্চলটি স্পর্শ ডিভাইসের অংশটি বর্ণনা করে যা আসলে প্রদর্শনটি কভার করে।

    একটি টাচ স্ক্রিনের জন্য, সিস্টেমটি নিম্নলিখিত গণনা অনুযায়ী ডিসপ্লে পিক্সেলগুলিতে স্পর্শের অবস্থানগুলি পেতে স্বয়ংক্রিয়ভাবে পৃষ্ঠের ইউনিটগুলিতে রিপোর্ট করা স্পর্শের অবস্থানগুলিকে ইন্টারপোল করে:

        displayX = (x - minX) * displayWidth / (maxX - minX + 1)
        displayY = (y - minY) * displayHeight / (maxY - minY + 1)
        

    একটি টাচ স্ক্রিন রিপোর্ট করা সক্রিয় অঞ্চলের বাইরে স্পর্শগুলি রিপোর্ট করতে পারে।

    সক্রিয় অঞ্চলের বাইরে শুরু করা স্পর্শগুলি অ্যাপ্লিকেশনগুলিতে সরবরাহ করা হয় না তবে ভার্চুয়াল কীগুলির জন্য ব্যবহার করা যেতে পারে।

    সক্রিয় অঞ্চলের অভ্যন্তরে শুরু করা স্পর্শগুলি, বা যে এন্টার এবং প্রস্থানটি ডিসপ্লে এরিয়া থেকে প্রস্থান করা হয় সেগুলি অ্যাপ্লিকেশনগুলিতে সরবরাহ করা হয়। ফলস্বরূপ, যদি কোনও স্পর্শ কোনও অ্যাপের সীমানার মধ্যে শুরু হয় এবং তারপরে সক্রিয় অঞ্চলের বাইরে চলে যায় তবে অ্যাপ্লিকেশনটি ডিসপ্লে স্থানাঙ্কগুলির সাথে স্পর্শ ইভেন্টগুলি পেতে পারে যা নেতিবাচক বা প্রদর্শনের সীমানার বাইরেও। এটি প্রত্যাশিত আচরণ।

    একটি স্পর্শ ডিভাইস কখনই সক্রিয় অঞ্চলের সীমানায় স্পর্শের সমন্বয় করে না। যদি কোনও স্পর্শ সক্রিয় অঞ্চল থেকে বেরিয়ে আসে তবে এটি সক্রিয় অঞ্চলের বাইরে থাকা হিসাবে রিপোর্ট করা উচিত, বা এটি মোটেও রিপোর্ট করা উচিত নয়।

    উদাহরণস্বরূপ, যদি ব্যবহারকারীর আঙুলটি টাচ স্ক্রিনের শীর্ষ-বাম কোণার কাছে স্পর্শ করে থাকে তবে এটি (MINX, MINY) এর সমন্বয় রিপোর্ট করতে পারে। যদি আঙুলটি সক্রিয় অঞ্চলের বাইরে আরও এগিয়ে যেতে থাকে তবে টাচ স্ক্রিনটি হয় মিনেক্স এবং মিনির চেয়ে কম উপাদানগুলির সাথে সমন্বয়গুলি যেমন (মিনেক্স - 2, মিনী - 3) এর সাথে প্রতিবেদন করা শুরু করা উচিত, বা এটি পুরোপুরি স্পর্শটি রিপোর্ট করা বন্ধ করা উচিত। অন্য কথায়, যখন ব্যবহারকারীর আঙুলটি সক্রিয় অঞ্চলের বাইরে সত্যই স্পর্শ করে তখন টাচ স্ক্রিনটি রিপোর্ট করা উচিত নয় (MINX, MINY)।

    ডিসপ্লে প্রান্তে টাচ স্থানাঙ্কগুলি ক্ল্যাম্পিং করা স্ক্রিনের প্রান্তের চারপাশে একটি কৃত্রিম শক্ত সীমানা তৈরি করে যা সিস্টেমকে সহজেই ট্র্যাকিং গতি থেকে বিরত রাখে যা প্রদর্শন ক্ষেত্রের সীমানায় প্রবেশ বা প্রস্থান করে।

  • ABS_PRESSURE বা ABS_MT_PRESSURE দ্বারা রিপোর্ট করা মানগুলি যদি সেগুলি একেবারেই রিপোর্ট করা হয় তবে সরঞ্জামটি যখন ঘোরাঘুরি করছে তা নির্দেশ করার জন্য সরঞ্জামটি যখন ডিভাইসটি স্পর্শ করছে তখন অবশ্যই শূন্য হতে হবে।

    চাপের তথ্য প্রতিবেদন করা al চ্ছিক তবে দৃ strongly ়ভাবে প্রস্তাবিত। অ্যাপ্লিকেশনগুলি চাপ-সংবেদনশীল অঙ্কন এবং অন্যান্য প্রভাবগুলি প্রয়োগ করতে চাপের তথ্য ব্যবহার করতে পারে।

  • ABS_TOOL_WIDTH , ABS_MT_TOUCH_MAJOR , ABS_MT_TOUCH_MINOR , ABS_MT_WIDTH_MAJOR , বা ABS_MT_WIDTH_MINOR দ্বারা প্রতিবেদন করা মানগুলি যখন সরঞ্জামটি ডিভাইসটি স্পর্শ করে এবং অন্যথায় শূন্য হয় তবে এটি প্রয়োজন হয় না। উদাহরণস্বরূপ, টাচ ডিভাইসটি আঙুলের স্পর্শ পরিচিতিগুলির আকার পরিমাপ করতে সক্ষম হতে পারে তবে স্টাইলাস টাচ পরিচিতিগুলি নয়।

    রিপোর্টিং আকারের তথ্য al চ্ছিক তবে দৃ strongly ়ভাবে প্রস্তাবিত। অ্যাপ্লিকেশনগুলি আকার-সংবেদনশীল অঙ্কন এবং অন্যান্য প্রভাবগুলি প্রয়োগ করতে চাপের তথ্য ব্যবহার করতে পারে।

  • সরঞ্জামটি ডিভাইসটি স্পর্শ করার সময় ABS_DISTANCE বা ABS_MT_DISTANCE দ্বারা প্রতিবেদন করা মানগুলি শূন্যের কাছে যেতে হবে। সরঞ্জামটি সরাসরি যোগাযোগে থাকলেও দূরত্বটি শূন্য-শূন্য থাকতে পারে। রিপোর্ট করা সঠিক মানগুলি হার্ডওয়্যার যেভাবে দূরত্ব পরিমাপ করে তার উপর নির্ভর করে।

    দূরত্বের তথ্য প্রতিবেদন করা al চ্ছিক তবে স্টাইলাস ডিভাইসের জন্য প্রস্তাবিত।

  • যখন সরঞ্জামটি ডিভাইসের জন্য লম্ব হয় তখন ABS_TILT_X এবং ABS_TILT_Y দ্বারা রিপোর্ট করা মানগুলি শূন্য হওয়া উচিত। একটি শূন্য-অস্তিত্বের টিল্ট নির্দেশ করে যে সরঞ্জামটি একটি ঝুঁকিতে রাখা হয়।

    এক্স এবং ওয়াই অক্ষগুলির সাথে টিল্ট কোণগুলি লম্ব থেকে ডিগ্রিগুলিতে নির্দিষ্ট করা হয় বলে ধরে নেওয়া হয়। কেন্দ্র পয়েন্ট (পুরোপুরি লম্ব) প্রতিটি অক্ষের জন্য (max + min) / 2 দ্বারা দেওয়া হয়। কেন্দ্রের পয়েন্টের চেয়ে ছোট মানগুলি একটি কাত আপ বা বাম দিকে প্রতিনিধিত্ব করে, কেন্দ্রের পয়েন্টের চেয়ে বড় মানগুলি একটি কাত হয়ে বা ডানদিকে উপস্থাপন করে।

    InputReader এক্স এবং ওয়াই টিল্ট উপাদানগুলিকে 0 থেকে PI / 2 রেডিয়ান এবং -PI থেকে PI রেডিয়ান পর্যন্ত একটি প্ল্যানার ওরিয়েন্টেশন কোণে একটি লম্ব কাতযুক্ত কোণে রূপান্তর করে। এই প্রতিনিধিত্বের ফলে ওরিয়েন্টেশনের একটি বিবরণ রয়েছে যা আঙুলের স্পর্শগুলি বর্ণনা করতে ব্যবহৃত হয় তার সাথে সামঞ্জস্যপূর্ণ।

    টিল্ট তথ্য প্রতিবেদন করা al চ্ছিক তবে স্টাইলাস ডিভাইসের জন্য প্রস্তাবিত।

  • যদি সরঞ্জামের ধরণটি ABS_MT_TOOL_TYPE দ্বারা প্রতিবেদন করা হয় তবে এটি BTN_TOOL_* দ্বারা রিপোর্ট করা কোনও সরঞ্জামের ধরণের তথ্যকে ছাড়িয়ে যায়। যদি কোনও সরঞ্জামের ধরণের তথ্য একেবারেই উপলব্ধ না হয় তবে টুল টাইপটি MotionEvent.TOOL_TYPE_FINGER টাইপ_ফিংগারকে ডিফল্ট করে।

  • নিম্নলিখিত শর্তগুলির ভিত্তিতে একটি সরঞ্জাম সক্রিয় হওয়ার জন্য দৃ determined ় সংকল্পবদ্ধ:

    • সিঙ্গেল-টাচ প্রোটোকল ব্যবহার করার সময়, BTN_TOUCH , বা BTN_TOOL_* যদি 1 হয় তবে সরঞ্জামটি সক্রিয় থাকে।

      এই শর্তটি বোঝায় যে InputReader সরঞ্জামটির প্রকৃতি সম্পর্কে কমপক্ষে কিছু তথ্য থাকা দরকার, তা তা স্পর্শ করছে কিনা, বা কমপক্ষে এর সরঞ্জামের ধরণ। যদি কোনও তথ্য পাওয়া যায় না, তবে সরঞ্জামটি নিষ্ক্রিয় বলে ধরে নেওয়া হয় (পরিসীমাটির বাইরে)।

    • মাল্টি-টাচ প্রোটোকল 'এ' ব্যবহার করার সময়, যখনই এটি সাম্প্রতিক সিঙ্ক প্রতিবেদনে প্রদর্শিত হয় তখনই সরঞ্জামটি সক্রিয় থাকে। যখন সরঞ্জামটি সিঙ্ক রিপোর্টে উপস্থিত হওয়া বন্ধ করে দেয়, তখন এটি বিদ্যমান হওয়া বন্ধ করে দেয়।
    • মাল্টি-টাচ প্রোটোকল 'বি' ব্যবহার করার সময়, সরঞ্জামটি যতক্ষণ সক্রিয় স্লট থাকে ততক্ষণ সক্রিয় থাকে। স্লট এটি সাফ হয়ে গেলে, সরঞ্জামটি অস্তিত্ব বন্ধ করে দেয়।
  • একটি সরঞ্জাম নিম্নলিখিত শর্তগুলির উপর ভিত্তি করে ঘোরাফেরা করতে দৃ determined ় সংকল্পবদ্ধ:
    • যদি সরঞ্জামটি BTN_TOOL_MOUSE বা BTN_TOOL_LENS হয়, তবে নিম্নলিখিত শর্তগুলির মধ্যে একটিও সত্য হলেও সরঞ্জামটি ঘোরাঘুরি করছে না।
    • যদি সরঞ্জামটি সক্রিয় থাকে এবং ড্রাইভার চাপের তথ্যের প্রতিবেদন করে এবং রিপোর্ট করা চাপ শূন্য হয়, তবে সরঞ্জামটি ঘুরে বেড়াচ্ছে।
    • যদি সরঞ্জামটি সক্রিয় থাকে এবং ড্রাইভার BTN_TOUCH কী কোড সমর্থন করে এবং BTN_TOUCH শূন্যের মান থাকে, তবে সরঞ্জামটি ঘুরে বেড়াচ্ছে।
  • InputReader মাল্টি-টাচ প্রোটোকল 'এ' এবং 'বি' উভয়কেই সমর্থন করে। নতুন ড্রাইভারদের 'বি' প্রোটোকল ব্যবহার করা উচিত তবে হয় কাজ করে।
  • অ্যান্ড্রয়েড 4.0 হিসাবে, টাচ স্ক্রিন ড্রাইভারদের লিনাক্স ইনপুট প্রোটোকল স্পেসিফিকেশন মেনে চলার জন্য পরিবর্তন করা প্রয়োজন।

    নিম্নলিখিত পরিবর্তনগুলির প্রয়োজন হতে পারে:

    • যখন কোনও সরঞ্জাম নিষ্ক্রিয় হয়ে যায় (আঙুলটি "আপ" যায়), এটি পরবর্তী মাল্টি-টাচ সিঙ্ক রিপোর্টগুলিতে উপস্থিত হওয়া বন্ধ করা উচিত। যখন সমস্ত সরঞ্জাম নিষ্ক্রিয় হয়ে যায় (সমস্ত আঙ্গুলগুলি "আপ" যায়), ড্রাইভারকে একটি খালি সিঙ্ক রিপোর্ট প্যাকেট প্রেরণ করা উচিত, যেমন SYN_MT_REPORT এর পরে SYN_REPORT অনুসরণ করে।

      অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলি 0. এর চাপের মান প্রেরণ করে "আপ" ইভেন্টগুলি প্রত্যাশিত "আপ" ইভেন্টগুলি লিনাক্স ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে বেমানান ছিল এবং এটি আর সমর্থিত নয়।

    • শারীরিক চাপ বা সংকেত শক্তি সম্পর্কিত তথ্য ABS_MT_PRESSURE ব্যবহার করে রিপোর্ট করা উচিত।

      অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলি ABS_MT_TOUCH_MAJOR থেকে চাপ তথ্য পুনরুদ্ধার করেছে। পুরানো আচরণটি লিনাক্স ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে বেমানান ছিল এবং এটি আর সমর্থিত নয়।

    • স্পর্শ আকারের তথ্য ABS_MT_TOUCH_MAJOR ব্যবহার করে রিপোর্ট করা উচিত।

      অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলি ABS_MT_TOOL_MAJOR থেকে আকারের তথ্য পুনরুদ্ধার করেছে। পুরানো আচরণটি লিনাক্স ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে বেমানান ছিল এবং এটি আর সমর্থিত নয়।

    টাচ ডিভাইস ড্রাইভারদের আর অ্যান্ড্রয়েড-নির্দিষ্ট কাস্টমাইজেশনের প্রয়োজন নেই। স্ট্যান্ডার্ড লিনাক্স ইনপুট প্রোটোকলের উপর নির্ভর করে, অ্যান্ড্রয়েড অপরিশোধিত ড্রাইভার ব্যবহার করে বহিরাগত এইচআইডি মাল্টি-টাচ টাচ স্ক্রিনগুলির মতো বিস্তৃত বিভিন্ন টাচ পেরিফেরিয়াল সমর্থন করতে পারে।

ডিভাইস অপারেশন স্পর্শ করুন

নীচে অ্যান্ড্রয়েডে টাচ ডিভাইস অপারেশনের একটি সংক্ষিপ্ত সংক্ষিপ্তসার দেওয়া হল।

  1. EventHub evdev ড্রাইভারের কাঁচা ইভেন্টগুলি পড়ে।
  2. InputReader কাঁচা ইভেন্টগুলি গ্রাস করে এবং প্রতিটি সরঞ্জামের অবস্থান এবং অন্যান্য বৈশিষ্ট্য সম্পর্কে অভ্যন্তরীণ অবস্থা আপডেট করে। এটি বোতামের রাজ্যগুলিও ট্র্যাক করে।
  3. যদি ব্যাক বা ফরোয়ার্ড চাপ দেওয়া হয় বা প্রকাশিত হয় তবে InputReader InputDispatcher মূল ইভেন্টটি সম্পর্কে অবহিত করে।
  4. InputReader একটি ভার্চুয়াল কী প্রেস ঘটেছে কিনা তা নির্ধারণ করে। যদি তা হয় তবে এটি মূল ইভেন্টটি সম্পর্কে InputDispatcher অবহিত করে।
  5. InputReader নির্ধারণ করে যে প্রদর্শনটির সীমানার মধ্যে স্পর্শটি শুরু করা হয়েছিল কিনা। যদি তা হয় তবে এটি টাচ ইভেন্ট সম্পর্কে InputDispatcher অবহিত করে।
  6. যদি কোনও স্পর্শকাতর সরঞ্জাম না থাকে তবে কমপক্ষে একটি ঘোরাঘুরি সরঞ্জাম থাকে তবে InputReader হোভার ইভেন্ট সম্পর্কে InputDispatcher অবহিত করে।
  7. যদি টাচ ডিভাইসের ধরণটি পয়েন্টার হয় তবে InputReader পয়েন্টার অঙ্গভঙ্গি সনাক্তকরণ সম্পাদন করে, সেই অনুযায়ী পয়েন্টার এবং দাগগুলি সরিয়ে দেয় এবং পয়েন্টার ইভেন্ট সম্পর্কে InputDispatcher অবহিত করে।
  8. ইভেন্টগুলি প্রেরণ করা উচিত কিনা এবং তাদের ডিভাইসটি জাগানো উচিত কিনা তা নির্ধারণ করতে InputDispatcher WindowManagerPolicy ব্যবহার করে। তারপরে, InputDispatcher ইভেন্টগুলি উপযুক্ত অ্যাপ্লিকেশনগুলিতে সরবরাহ করে।

ডিভাইস কনফিগারেশন স্পর্শ করুন

স্পর্শ ডিভাইস আচরণ ডিভাইসের অক্ষ, বোতাম, ইনপুট বৈশিষ্ট্য, ইনপুট ডিভাইস কনফিগারেশন, ভার্চুয়াল কী মানচিত্র এবং কী লেআউট দ্বারা নির্ধারিত হয়।

কীবোর্ড কনফিগারেশনে অংশ নেওয়া ফাইলগুলি সম্পর্কে আরও তথ্যের জন্য নিম্নলিখিত বিভাগগুলি দেখুন:

বৈশিষ্ট্য

সিস্টেমটি টাচ ডিভাইস আচরণটি কনফিগার এবং ক্যালিব্রেট করতে অনেকগুলি ইনপুট ডিভাইস কনফিগারেশন বৈশিষ্ট্যের উপর নির্ভর করে।

এর একটি কারণ হ'ল স্পর্শ ডিভাইসের জন্য ডিভাইস ড্রাইভারগুলি প্রায়শই ডিভাইস-নির্দিষ্ট ইউনিট ব্যবহার করে স্পর্শগুলির বৈশিষ্ট্যগুলি প্রতিবেদন করে।

উদাহরণস্বরূপ, অনেক স্পর্শ ডিভাইসগুলি একটি অভ্যন্তরীণ ডিভাইস-নির্দিষ্ট স্কেল ব্যবহার করে স্পর্শ যোগাযোগের ক্ষেত্রটি পরিমাপ করে, যেমন টাচ দ্বারা ট্রিগার করা মোট সেন্সর নোডের মোট সংখ্যা। এই কাঁচা আকারের মান অ্যাপ্লিকেশনগুলির জন্য অর্থবহ হবে না কারণ তাদের টাচ ডিভাইস সেন্সর নোডগুলির শারীরিক আকার এবং অন্যান্য বৈশিষ্ট্যগুলি সম্পর্কে জানতে হবে।

সিস্টেমটি ইনপুট ডিভাইস কনফিগারেশন ফাইলগুলিতে এনকোডযুক্ত ক্যালিব্রেশন প্যারামিটারগুলি ব্যবহার করে টাচ ডিভাইস দ্বারা প্রতিবেদন করা মানগুলি একটি সহজ স্ট্যান্ডার্ড উপস্থাপনায় যা অ্যাপ্লিকেশনগুলি বুঝতে পারে এমন একটি সহজ স্ট্যান্ডার্ড উপস্থাপনায়।

ডকুমেন্টেশন কনভেনশন

ডকুমেন্টেশনের উদ্দেশ্যে, আমরা ক্রমাঙ্কন প্রক্রিয়া চলাকালীন সিস্টেম দ্বারা ব্যবহৃত মানগুলি বর্ণনা করতে নিম্নলিখিত কনভেনশনগুলি ব্যবহার করি।

কাঁচা অক্ষের মান

নিম্নলিখিত অভিব্যক্তিগুলি টাচ ডিভাইস ড্রাইভার দ্বারা উল্লিখিত কাঁচা মানগুলিকে EV_ABS ইভেন্ট হিসাবে চিহ্নিত করে।

raw.x
ABS_X বা ABS_MT_POSITION_X অক্ষের মান।
raw.y
ABS_Y বা ABS_MT_POSITION_Y অক্ষের মান।
raw.pressure
ABS_PRESSURE বা ABS_MT_PRESSURE অক্ষের মান, বা 0 উপলব্ধ না হলে 0।
raw.touchMajor
ABS_MT_TOUCH_MAJOR অক্ষের মান, বা 0 পাওয়া যায় না।
raw.touchMinor
ABS_MT_TOUCH_MINOR অক্ষ, বা raw.touchMajor এর মান যদি না পাওয়া যায় তবে।
raw.toolMajor
ABS_TOOL_WIDTH বা ABS_MT_WIDTH_MAJOR অক্ষের মান, বা 0 না থাকলে 0।
raw.toolMinor
ABS_MT_WIDTH_MINOR অক্ষ, বা raw.toolMajor এর মান যদি না পাওয়া যায় তবে।
raw.orientation
ABS_MT_ORIENTATION অক্ষের মান, বা 0 উপলভ্য না হলে 0।
raw.distance
ABS_DISTANCE বা ABS_MT_DISTANCE অক্ষের মান, বা 0 না থাকলে 0।
raw.tiltX
ABS_TILT_X অক্ষের মান, বা 0 উপলব্ধ না হলে 0।
raw.tiltY
ABS_TILT_Y অক্ষের মান, বা 0 উপলব্ধ না হলে 0।

কাঁচা অক্ষের ব্যাপ্তি

নিম্নলিখিত প্রকাশগুলি কাঁচা মানগুলির সীমা বোঝায়। এগুলি প্রতিটি অক্ষের জন্য EVIOCGABS আইওসিটিএল কল করে প্রাপ্ত হয়।

raw.*.min
কাঁচা অক্ষের অন্তর্ভুক্ত ন্যূনতম মান।
raw.*.max
কাঁচা অক্ষের অন্তর্ভুক্তিমূলক সর্বোচ্চ মান।
raw.*.range
raw.*.max - raw.*.min
raw.*.fuzz
কাঁচা অক্ষের যথার্থতা। যেমন ফুজ = 1 বোঝায় যে মানগুলি +/- 1 ইউনিটের সঠিক।
raw.width
স্পর্শ অঞ্চলের অন্তর্ভুক্ত প্রস্থ, raw.x.range + 1 এর সমতুল্য।
raw.height
স্পর্শ অঞ্চলের অন্তর্ভুক্ত উচ্চতা, raw.y.range + 1 এর সমতুল্য।

আউটপুট রেঞ্জ

নিম্নলিখিত অভিব্যক্তিগুলি আউটপুট সমন্বয় সিস্টেমের বৈশিষ্ট্যগুলি বোঝায়। সিস্টেমটি টাচ ডিভাইস দ্বারা ব্যবহৃত পৃষ্ঠের ইউনিটগুলি থেকে টাচ পজিশনের তথ্যগুলি অনুবাদ করার জন্য লিনিয়ার ইন্টারপোলেশন ব্যবহার করে আউটপুট ইউনিটগুলিতে যা ডিসপ্লে পিক্সেলের মতো অ্যাপ্লিকেশনগুলিতে রিপোর্ট করা হয়।

output.width
আউটপুট প্রস্থ। For touch screens (associated with a display), this is the display width in pixels. For touch pads (not associated with a display), the output width equals raw.width , indicating that no interpolation is performed.
output.height
The output height. For touch screens (associated with a display), this is the display height in pixels. For touch pads (not associated with a display), the output height equals raw.height , indicating that no interpolation is performed.
output.diag
The diagonal length of the output coordinate system, equivalent to sqrt(output.width ^2 + output.height ^2) .

মৌলিক কনফিগারেশন

The touch input mapper uses many configuration properties in the input device configuration file to specify calibration values. The following table describes some general purpose configuration properties. All other properties are described in the following sections along with the fields they are used to calibrate.

touch.deviceType

Definition: touch.deviceType = touchScreen | touchPad | pointer | default

Specifies the touch device type.

  • If the value is touchScreen , the touch device is a touch screen associated with a display.

  • If the value is touchPad , the touch device is a touch pad not associated with a display.

  • If the value is pointer , the touch device is a touch pad not associated with a display, and its motions are used for indirect multi-touch pointer gestures .

  • If the value is default , the system automatically detects the device type according to the classification algorithm.

Refer to the Classification section for more details about how the device type influences the behavior of the touch device.

In Android 3 and lower, all touch devices were assumed to be touch screens.

touch.orientationAware

Definition: touch.orientationAware = 0 | 1

Specifies whether the touch device should react to display orientation changes.

  • If the value is 1 , touch positions reported by the touch device are rotated whenever the display orientation changes.

  • If the value is 0 , touch positions reported by the touch device are immune to display orientation changes.

The default value is 1 if the device is a touch screen, 0 otherwise.

The system distinguishes between internal and external touch screens and displays. An orientation aware internal touch screen is rotated based on the orientation of the internal display. An orientation aware external touch screen is rotated based on the orientation of the external display.

Orientation awareness is used to support rotation of touch screens on devices like the Nexus One. For example, when the device is rotated clockwise 90 degrees from its natural orientation, the absolute positions of touches are remapped such that a touch in the top-left corner of the touch screen's absolute coordinate system is reported as a touch in the top-left corner of the display's rotated coordinate system. This is done so that touches are reported with the same coordinate system that apps use to draw their visual elements.

Prior to Honeycomb, all touch devices were assumed to be orientation aware.

touch.gestureMode

Definition: touch.gestureMode = pointer | spots | default

Specifies the presentation mode for pointer gestures. This configuration property is only relevant when the touch device is of type pointer .

  • If the value is pointer , the touch pad gestures are presented by way of a cursor similar to a mouse pointer.

  • If the value is spots , the touch pad gestures are presented by an anchor that represents the centroid of the gesture and a set of circular spots that represent the position of individual fingers.

The default value is pointer when the INPUT_PROP_SEMI_MT input property is set, or spots otherwise.

X and Y fields

The X and Y fields provide positional information for the center of the contact area.

হিসাব

The calculation is straightforward: positional information from the touch driver is linearly interpolated to the output coordinate system.

xScale = output.width / raw.width
yScale = output.height / raw.height

If not orientation aware or screen rotation is 0 degrees:
output.x = (raw.x - raw.x.min) * xScale
output.y = (raw.y - raw.y.min) * yScale
Else If rotation is 90 degrees:
    output.x = (raw.y - raw.y.min) * yScale
    output.y = (raw.x.max - raw.x) * xScale
Else If rotation is 180 degrees:
    output.x = (raw.x.max - raw.x) * xScale
    output.y = (raw.y.max - raw.y) * yScale
Else If rotation is 270 degrees:
    output.x = (raw.y.max - raw.y) * yScale
    output.y = (raw.x - raw.x.min) * xScale
End If

touchMajor, touchMinor, toolMajor, toolMinor, size fields

The touchMajor and touchMinor fields describe the approximate dimensions of the contact area in output units (pixels).

The toolMajor and toolMinor fields describe the approximate dimensions of the tool itself in output units (pixels).

The size field describes the normalized size of the touch relative to the largest possible touch that the touch device can sense. The smallest possible normalized size is 0.0 (no contact, or it is unmeasurable), and the largest possible normalized size is 1.0 (sensor area is saturated).

When both the approximate length and breadth can be measured, then the touchMajor field specifies the longer dimension and the touchMinor field specifies the shorter dimension of the contact area. When only the approximate diameter of the contact area can be measured, then the touchMajor and touchMinor fields are equal.

Likewise, the toolMajor field specifies the longer dimension and the toolMinor field specifies the shorter dimension of the tool's cross-sectional area.

If the touch size is unavailable but the tool size is available, then the tool size is set equal to the touch size. Conversely, if the tool size is unavailable but the touch size is available, then the touch size is set equal to the tool size.

Touch devices measure or report the touch size and tool size in various ways. The current implementation supports three different kinds of measurements: diameter, area, and geometric bounding box in surface units.

Definition: touch.size.calibration = none | geometric | diameter | area | default

Specifies the kind of measurement used by the touch driver to report the touch size and tool size.

  • If the value is none , the size is set to zero.

  • If the value is geometric , the size is assumed to be specified in the same surface units as the position, so it is scaled in the same manner.

  • If the value is diameter , the size is assumed to be proportional to the diameter (width) of the touch or tool.

  • If the value is area , the size is assumed to be proportional to the area of the touch or tool.

  • If the value is default , the system uses the geometric calibration if the raw.touchMajor or raw.toolMajor axis is available, otherwise it uses the none calibration.

touch.size.scale

Definition: touch.size.scale = <a non-negative floating point number>

Specifies a constant scale factor used in the calibration.

The default value is 1.0 .

touch.size.bias

Definition: touch.size.bias = <a non-negative floating point number>

Specifies a constant bias value used in the calibration.

The default value is 0.0 .

touch.size.isSummed

Definition: touch.size.isSummed = 0 | 1

Specifies whether the size is reported as the sum of the sizes of all active contacts, or is reported individually for each contact.

  • If the value is 1 , the reported size is divided by the number of contacts prior to use.

  • If the value is 0 , the reported size is used as is.

The default value is 0 .

Some touch devices, particularly "Semi-MT" devices cannot distinguish the individual dimensions of multiple contacts so they report a size measurement that represents their total area or width. This property should only be set to 1 for such devices. If in doubt, set this value to 0 .

হিসাব

The calculation of the touchMajor , touchMinor , toolMajor , toolMinor , and size fields depends on the specified calibration parameters.

If raw.touchMajor and raw.toolMajor are available:
    touchMajor = raw.touchMajor
    touchMinor = raw.touchMinor
    toolMajor = raw.toolMajor
    toolMinor = raw.toolMinor
Else If raw.touchMajor is available:
    toolMajor = touchMajor = raw.touchMajor
    toolMinor = touchMinor = raw.touchMinor
Else If raw.toolMajor is available:
    touchMajor = toolMajor = raw.toolMajor
    touchMinor = toolMinor = raw.toolMinor
Else
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
End If

size = avg(touchMajor, touchMinor)

If touch.size.isSummed == 1:
    touchMajor = touchMajor / numberOfActiveContacts
    touchMinor = touchMinor / numberOfActiveContacts
    toolMajor = toolMajor / numberOfActiveContacts
    toolMinor = toolMinor / numberOfActiveContacts
    size = size / numberOfActiveContacts
End If

If touch.size.calibration == "none":
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
Else If touch.size.calibration == "geometric":
    outputScale = average(output.width / raw.width, output.height / raw.height)
    touchMajor = touchMajor * outputScale
    touchMinor = touchMinor * outputScale
    toolMajor = toolMajor * outputScale
    toolMinor = toolMinor * outputScale
Else If touch.size.calibration == "area":
    touchMajor = sqrt(touchMajor)
    touchMinor = touchMajor
    toolMajor = sqrt(toolMajor)
    toolMinor = toolMajor
Else If touch.size.calibration == "diameter":
    touchMinor = touchMajor
    toolMinor = toolMajor
End If

If touchMajor != 0:
    output.touchMajor = touchMajor * touch.size.scale + touch.size.bias
Else
    output.touchMajor = 0
End If

If touchMinor != 0:
    output.touchMinor = touchMinor * touch.size.scale + touch.size.bias
Else
    output.touchMinor = 0
End If

If toolMajor != 0:
    output.toolMajor = toolMajor * touch.size.scale + touch.size.bias
Else
    output.toolMajor = 0
End If

If toolMinor != 0:
    output.toolMinor = toolMinor * touch.size.scale + touch.size.bias
Else
    output.toolMinor = 0
End If

output.size = size

pressure field

The pressure field describes the approximate physical pressure applied to the touch device as a normalized value between 0.0 (no touch) and 1.0 (normal pressure).

A zero pressure indicates that the tool is hovering.

touch.pressure.calibration

Definition: touch.pressure.calibration = none | physical | amplitude | default

Specifies the kind of measurement used by the touch driver to report the pressure.

  • If the value is none , the pressure is unknown so it is set to 1.0 when touching and 0.0 when hovering.

  • If the value is physical , the pressure axis is assumed to measure the actual physical intensity of pressure applied to the touch pad.

  • If the value is amplitude , the pressure axis is assumed to measure the signal amplitude, which is related to the size of the contact and the pressure applied.

  • If the value is default , the system uses the physical calibration if the pressure axis available, otherwise uses none .

touch.pressure.scale

Definition: touch.pressure.scale = <a non-negative floating point number>

Specifies a constant scale factor used in the calibration.

The default value is 1.0 / raw.pressure.max .

হিসাব

The calculation of the pressure field depends on the specified calibration parameters.

If touch.pressure.calibration == "physical" or "amplitude":
    output.pressure = raw.pressure * touch.pressure.scale
Else
    If hovering:
        output.pressure = 0
    Else
        output.pressure = 1
    End If
End If

orientation and tilt fields

The orientation field describes the orientation of the touch and tool as an angular measurement. An orientation of 0 indicates that the major axis is oriented vertically, -PI/2 indicates that the major axis is oriented to the left, PI/2 indicates that the major axis is oriented to the right. When a stylus tool is present, the orientation range can be described in a full circle range from -PI or PI .

The tilt field describes the inclination of the tool as an angular measurement. A tilt of 0 indicates that the tool is perpendicular to the surface. A tilt of PI/2 indicates that the tool is flat on the surface.

touch.orientation.calibration

Definition: touch.orientation.calibration = none | interpolated | vector | default

Specifies the kind of measurement used by the touch driver to report the orientation.

  • If the value is none , the orientation is unknown so it is set to 0.
  • If the value is interpolated , the orientation is linearly interpolated such that a raw value of raw.orientation.min maps to -PI/2 and a raw value of raw.orientation.max maps to PI/2 . The center value of (raw.orientation.min + raw.orientation.max) / 2 maps to 0 .
  • If the value is vector , the orientation is interpreted as a packed vector consisiting of two signed 4-bit fields. This representation is used on Atmel Object Based Protocol parts. When decoded, the vector yields an orientation angle and confidence magnitude. The confidence magnitude is used to scale the size information, unless it is geometric.
  • If the value is default , the system uses the interpolated calibration if the orientation axis available, otherwise uses none .

হিসাব

The calculation of the orientation and tilt fields depends on the specified calibration parameters and available input.

If touch.tiltX and touch.tiltY are available:
    tiltXCenter = average(raw.tiltX.min, raw.tiltX.max)
    tiltYCenter = average(raw.tiltY.min, raw.tiltY.max)
    tiltXAngle = (raw.tiltX - tiltXCenter) * PI / 180
    tiltYAngle = (raw.tiltY - tiltYCenter) * PI / 180
    output.orientation = atan2(-sin(tiltXAngle), sinf(tiltYAngle))
    output.tilt = acos(cos(tiltXAngle) * cos(tiltYAngle))
Else If touch.orientation.calibration == "interpolated":
    center = average(raw.orientation.min, raw.orientation.max)
    output.orientation = PI / (raw.orientation.max - raw.orientation.min)
    output.tilt = 0
Else If touch.orientation.calibration == "vector":
    c1 = (raw.orientation & 0xF0) >> 4
    c2 = raw.orientation & 0x0F

    If c1 != 0 or c2 != 0:
        If c1 >= 8 Then c1 = c1 - 16
        If c2 >= 8 Then c2 = c2 - 16
        angle = atan2(c1, c2) / 2
        confidence = sqrt(c1*c1 + c2*c2)

        output.orientation = angle

        If touch.size.calibration == "diameter" or "area":
            scale = 1.0 + confidence / 16
            output.touchMajor *= scale
            output.touchMinor /= scale
            output.toolMajor *= scale
            output.toolMinor /= scale
        End If
    Else
        output.orientation = 0
    End If
    output.tilt = 0
Else
    output.orientation = 0
    output.tilt = 0
End If

If orientation aware:
    If screen rotation is 90 degrees:
        output.orientation = output.orientation - PI / 2
    Else If screen rotation is 270 degrees:
        output.orientation = output.orientation + PI / 2
    End If
End If

distance field

The distance field describes the distance between the tool and the touch device surface. A value of 0.0 indicates direct contact and larger values indicate increasing distance from the surface.

touch.distance.calibration

Definition: touch.distance.calibration = none | scaled | default

Specifies the kind of measurement used by the touch driver to report the distance.

  • If the value is none , the distance is unknown so it is set to 0.

  • If the value is scaled , the reported distance is multiplied by a constant scale factor.

  • If the value is default , the system uses the scaled calibration if the distance axis available, otherwise uses none .

touch.distance.scale

Definition: touch.distance.scale = <a non-negative floating point number>

Specifies a constant scale factor used in the calibration.

The default value is 1.0 .

হিসাব

The calculation of the distance field depends on the specified calibration parameters.

If touch.distance.calibration == "scaled":
    output.distance = raw.distance * touch.distance.scale
Else
    output.distance = 0
End If

উদাহরণ

# Input device configuration file for a touch screen that supports pressure,
# size and orientation. The pressure and size scale factors were obtained
# by measuring the characteristics of the device itself and deriving
# useful approximations based on the resolution of the touch sensor and the
# display.
#
# Note that these parameters are specific to a particular device model.
# Different parameters need to be used for other devices.

# Basic Parameters
touch.deviceType = touchScreen
touch.orientationAware = 1

# Size
# Based on empirical measurements, we estimate the size of the contact
# using size = sqrt(area) * 28 + 0.
touch.size.calibration = area
touch.size.scale = 28
touch.size.bias = 0
touch.size.isSummed = 0

# Pressure
# Driver reports signal strength as pressure.
#
# A normal index finger touch typically registers about 80 signal strength
# units although we don't expect these values to be accurate.
touch.pressure.calibration = amplitude
touch.pressure.scale = 0.0125

# Orientation
touch.orientation.calibration = vector

Compatibility notes

The configuration properties for touch devices changed significantly in Android Ice Cream Sandwich 4.0. All input device configuration files for touch devices must be updated to use the new configuration properties.

Older touch device drivers might also need to be updated.

Virtual key map files

Touch devices can be used to implement virtual keys.

There are several ways of doing this, depending on the capabilities of the touch controller. Some touch controllers can be directly configured to implement soft keys by setting firmware registers. Other times it is desirable to perform the mapping from touch coordinates to key codes in software.

When virtual keys are implemented in software, the kernel must export a virtual key map file called virtualkeys.<devicename> as a board property. For example, if the touch screen device drivers reports its name as "touchyfeely" then the virtual key map file must have the path /sys/board_properties/virtualkeys.touchyfeely .

A virtual key map file describes the coordinates and Linux key codes of virtual keys on the touch screen.

In addition to the virtual key map file, there must be a corresponding key layout file and key character map file to map the Linux key codes to Android key codes and to specify the type of the keyboard device (usually SPECIAL_FUNCTION ).

বাক্য গঠন

A virtual key map file is a plain text file consisting of a sequence of virtual key layout descriptions either separated by newlines or by colons.

Comment lines begin with '#' and continue to the end of the line.

Each virtual key is described by 6 colon-delimited components:

  • 0x01 : A version code. Must always be 0x01 .
  • <Linux key code>: The Linux key code of the virtual key.
  • <centerX>: The X pixel coordinate of the center of the virtual key.
  • <centerY>: The Y pixel coordinate of the center of the virtual key.
  • <width>: The width of the virtual key in pixels.
  • <height>: The height of the virtual key in pixels.

All coordinates and sizes are specified in terms of the display coordinate system.

Here is a virtual key map file all written on one line.

# All on one line
0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55

The same virtual key map file can also be written on multiple lines.

# One key per line
0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

In the above example, the touch screen has a resolution of 480x800. Accordingly, all of the virtual keys have a <centerY> coordinate of 835, which is a little bit below the visible area of the touch screen.

The first key has a Linux scan code of 158 ( KEY_BACK ), centerX of 55 , centerY of 835 , width of 90 , and height of 55 .

উদাহরণ

Virtual key map file: /sys/board_properties/virtualkeys.touchyfeely .

0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

Key layout file: /system/usr/keylayout/touchyfeely.kl .

key 158 BACK
key 139 MENU
key 172 HOME
key 217 SEARCH

Key character map file: /system/usr/keychars/touchyfeely.kcm .

type SPECIAL_FUNCTION

Indirect multi-touch pointer gestures

In pointer mode, the system interprets the following gestures:

  • Single finger tap: click.
  • Single finger motion: move the pointer.
  • Single finger motion plus button presses: drag the pointer.
  • Two finger motion both fingers moving in the same direction: drag the area under the pointer in that direction. The pointer itself does not move.
  • Two finger motion both fingers moving towards each other or apart in different directions: pan/scale/rotate the area surrounding the pointer. The pointer itself does not move.
  • Multiple finger motion: freeform gesture.

Palm rejection

As of Android 13, the system can automatically reject inputs from palms when the built-in framework is enabled. In-house, custom-built solutions are still supported, though they might need to be modified to return the TOOL_TYPE_PALM flag when a palm is detected. The built-in framework also works in conjunction with custom solutions.

The actual model looks at the first 90 ms of gesture data, at the current pointer, and at the surrounding pointers, then considers how far away from the display edge the touches are. It then determines, on a per-pointer basis, which of the pointers are palms. It also takes into account the size of each contact, as reported by touchMajor and touchMinor . The Android framework then removes the pointers that are marked as palms from the touch stream.

If a pointer was already sent to the apps, then the system either:

  • (If there are other active pointers) Cancels the pointer with ACTION_POINTER_UP and FLAG_CANCELED set.
  • (If this is the only pointer) Cancels the pointer with ACTION_CANCEL .

A public API, MotionEvent.FLAG_CANCELED , indicates that the current event shouldn't trigger user action. This flag is set for both ACTION_CANCEL and ACTION_POINTER_UP .

If the palm pointer wasn't sent to apps, then the system simply drops the pointer.

Enable palm rejection

  1. In your touch driver, use the input_abs_set_res macro to set the resolutions for the following fields (units are pixels per mm ):
    • ABS_MT_POSITION_X
    • ABS_MT_POSITION_Y
    • ABS_MT_TOUCH_MAJOR
    • ABS_MT_TOUCH_MINOR

    Support for ABS_MT_TOUCH_MINOR is optional. However, if your device does support it, make sure the resolution is set correctly.

  2. To confirm the fields are set correctly, run:
        $ adb shell getevent -li
    
  3. To enable the feature during runtime, run:
        $ adb shell device_config put input_native_boot palm_rejection_enabled 1
    
  4. Restart the system_server process.
         $ adb shell stop && adb shell start
        
  5. Confirm that adb shell dumpsys input shows that there are palm rejectors inside UnwantedInteractionBlocker . If it doesn't, check the input-related logs to find clues on what might be misconfigured.

    See the following example for reference:

    UnwantedInteractionBlocker:
      mEnablePalmRejection: true
      isPalmRejectionEnabled (flag value): true
      mPalmRejectors:
        deviceId = 3:
          mDeviceInfo:
            max_x = 
            max_y = 
            x_res = 11.00
            y_res = 11.00
            major_radius_res = 1.00
            minor_radius_res = 1.00
            minor_radius_supported = true
            touch_major_res = 1
            touch_minor_res = 1
          mSlotState:
            mSlotsByPointerId:
    
            mPointerIdsBySlot:
    
          mSuppressedPointerIds: {}
    
  6. To permanently enable the feature, add the corresponding sysprop command in your init**rc file:

    setprop persist.device_config.input_native_boot.palm_rejection_enabled 1
    

আরও পড়া