DriverUI

ক্লাস্টার UI সাধারণত স্টিয়ারিং হুইলের পিছনে আলাদা ডিসপ্লেতে থাকে। OEM ধীরে ধীরে ক্লাস্টার এবং IVI-কে একটি ডিসপ্লেতে একত্রিত করে। এই সম্মিলিত UI হল DriverUI।

DriverUI

ছবি ১. DriverUI.

DriverUI হল একটি Android সিস্টেম অ্যাপ যা সম্পূর্ণ ইন্সট্রুমেন্ট ক্লাস্টার ডিসপ্লে রেন্ডার করে, তবে হাই অ্যাভেলেবিলিটি রেন্ডারার (HAR) দ্বারা রেন্ডার করা নিরাপত্তা-সম্পর্কিত বা রেগুলেটরি এলিমেন্ট বাদ দিয়ে। DriverUI মিডিয়া প্লেব্যাক, টেলিফোন কল, ম্যাপ, নেভিগেশন ও আরও অনেক কিছু সম্পর্কিত তথ্য দেখায় এবং Automotive Design for Compose প্রয়োগ করে।

ডিফল্ট ক্লাস্টার অ্যাক্টিভিটি হিসেবে DriverUI

DriverUI, Android-এ একটি বিশেষাধিকার প্রাপ্ত ক্লাস্টার অ্যাপ হিসেবে চলে এবং AAOS এটি অটোমেটিক শুরু করে।

AAOS, ইনস্ট্রুমেন্ট ক্লাস্টার তৈরি করতে ClusterHomeManager ক্লাস ব্যবহার করে, যা Cluster2 নামেও পরিচিত। এই ক্লাসটি ইন্সট্রুমেন্ট ক্লাস্টার ইমপ্লিমেন্টেশন শনাক্ত করার জন্য প্রয়োজনীয় কনফিগারেশন এবং AAOS কীভাবে এটির সাথে ইন্টার‍্যাক্ট করে তা নির্দিষ্ট করে। Google, Cluster2 API-এর রেফারেন্স ইমপ্লিমেন্টেশন প্রদান করে।

প্ল্যাটফর্মগুলি

আপনি SDV-তে ডিসপ্লে সেফটি তৈরি ও রান করতে পারবেন। সফ্টওয়্যার-ডিফাইন্ড ভেহিকল (SDV) প্ল্যাটফর্ম:

  • দুটি গেস্ট VM প্রয়োজন।
  • গেস্ট VM-এ SDV মিডিয়াতে (র‍্যাপিড বুট VM নামেও পরিচিত) HAR রান করে।
  • অন্য গেস্ট SDV IVI VM-এ DriverUI রান করে।
  • SDV মিডিয়া VM-এ নিরাপত্তা মনিটর রান করে।

SDV প্ল্যাটফর্ম আর্কিটেকচার

ছবি ২. SDV প্ল্যাটফর্ম আর্কিটেকচার।

HAR ও DriverUI আউটপুট ব্লেন্ড করুন

HAR এবং DriverUI তাদের UI রেন্ডার করার জন্য আলাদা ডিসপ্লে ব্যবহার করে। দুটি আউটপুট কম্পোজিট এবং DriverUI-তে একটি ছবি হিসেবে দেখা যায়।

এটি করার জন্য, HAR সেইসব অংশের স্বচ্ছতা নিয়ন্ত্রণ করে যেখানে DriverUI থেকে হার্টবিট মেসেজের উপর ভিত্তি করে Android আউটপুট দেখা যায়। DriverUI উপলভ্য না থাকলে, HAR হার্টবিট না থাকার বিষয়টি শনাক্ত করে এবং DriverUI অংশটি অস্বচ্ছ করে দেয় ও প্লেসহোল্ডার দেখায়। হার্টবিট পাওয়া গেলে, প্লেসহোল্ডার সরিয়ে দেওয়া হয় এবং DriverUI এরিয়া স্বচ্ছ হিসেবে সেট করা হয়।

HAR ও DriverUI কম্পোজিশন

ছবি ৩. HAR ও DriverUI কম্পোজিশন।

আলফা কম্পোজিশন ও পাঞ্চ-থ্রু সংক্রান্ত সমস্যার সমাধান করা

HAR-এর নিরাপত্তা সংক্রান্ত গুরুত্ব অনেক বেশি, তাই এর হার্ডওয়্যার ডিসপ্লে প্লেন Android IVI ডিসপ্লে প্লেনের উপরে থাকে। HAR-এ কাস্টম ভিউ বা এক্সটার্নাল OpenGL ES সারফেস তৈরি বা ডিবাগ করার সময়, আলফা ভ্যালু কীভাবে সেট করা হয়েছে তা যাচাই করুন:

  • HAR প্লেনের অধীনে DriverUI আউটপুট নেই: HAR, DriverUI থেকে সঠিক HeartbeatRequest মেসেজ পাওয়ার সময়, HAR-কে অবশ্যই DriverUI ভিউপোর্ট অঞ্চল মুছে স্বচ্ছ (alpha = 0.0) করতে হবে যাতে অন্তর্নিহিত Android ক্লাস্টার UI দেখা যায়। কাস্টম HAR লেয়ার বা ব্যাকগ্রাউন্ড যদি DriverUI এরিয়াতে অস্বচ্ছ পিক্সেল (alpha = 1.0) ড্র করে, তাহলে এটি নিচে থাকা Android আউটপুটকে ব্লক করে।
  • কাস্টম 3D বা OpenGL সারফেসে অনিচ্ছাকৃত স্বচ্ছ গর্ত: আপনি যখন একটি HAR নোডে (যেমন একটি কাস্টম 3D গেজ বা দৃশ্য যা 0x00-এ অব্যবহৃত আলফা বাইট সহ RGB পিক্সেল লেখে) একটি এক্সটার্নাল OpenGL ES বা 3D সারফেস রেন্ডার করেন, তখন স্পষ্টভাবে অস্বচ্ছ পিক্সেলের আলফা চ্যানেলকে 0xFF (alpha = 1.0)-এ সেট করুন। 0x00-এ আলফা বাইট রেখে দিলে কম্পোজিটর সেই পিক্সেলগুলিকে স্বচ্ছ (alpha = 0.0) হিসেবে বিবেচনা করে এবং HAR লেয়ারের মাধ্যমে সরাসরি অন্তর্নিহিত Android IVI প্লেনে একটি গর্ত তৈরি করে।
  • ক্রস-VM ডিসপ্লে ডায়াগনস্টিকস: HAR (sdv_media_har_cf) এবং Android IVI (sdv_ivi_cf_ds) আলাদা আলাদা গেস্ট VM-এ রান করে, তাই Android IVI VM-এ adb shell dumpsys SurfaceFlinger রান করলে তা শুধু Android লেয়ারগুলিই পরীক্ষা করে এবং উপরে থাকা HAR প্লেন দেখতে পায় না।

DriverUI এবং HAR কমিউনিকেশন

DriverUI এবং HAR রিমোট প্রসিডিউর কল (RPC) ব্যবহার করে একে অপরের সাথে যোগাযোগ করে। হার্টবিট মেসেজ হল RPC চ্যানেলের মাধ্যমে পাঠানো ডেটার একটি উদাহরণ এবং এর একটি ফিল্ডে টাইমস্ট্যাম্প থাকে।

RPC-এর জন্য gRPC ব্যবহার করা হয়। SDV-তে, SDV comms, DriverUI থেকে HAR-এ চ্যানেল খুঁজে পেতে ও প্রতিষ্ঠা করতে SDV Gateway Client প্রদান করে। gRPC পরিষেবা প্রোটোকল বাফার ফাইলকে সংজ্ঞায়িত করে:


// Heartbeat.
rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse) {}

// Document switched in the DriverUI.
rpc DocumentSwitched(DocumentSwitchedRequest) returns (DocumentSwitchedResponse) {}

// Document updated in the DriverUI. Unary RPC.
rpc DocumentUpdated(DocumentUpdatedRequest) returns (DocumentUpdatedResponse) {}

// Document updated in the DriverUI. Requests are streamed with each request
// containing a part of the document and the entire document is assembled from these
// chunks by the server.
rpc DocumentUpdatedStreaming(stream DocumentUpdatedRequest) returns (DocumentUpdatedResponse) {}

/// Request for HAR to change design tokens.
rpc DesignTokenUpdate(DesignTokenUpdateRequest) returns (DesignTokenUpdateResponse) {}

// Request to change the current locale used in HAR.
rpc LocaleUpdate(LocaleUpdateRequest) returns (LocaleUpdateResponse) {}

// Requests to swap a certain variant at a Figma node.
rpc ChangeVariant(ChangeVariantRequest) returns (ChangeVariantResponse) {}

// Requests to change the container (display/root node) configuration (dpi, size) in HAR.
rpc ChangeContainerConfiguration(ChangeContainerConfigurationRequest) returns (ChangeContainerConfigurationResponse) {}

অনুরোধ ও উত্তরের বিবরণ ub-automotive সোর্স কোড রিপোজিটরির packages/apps/Car/DriverUI/proto/driverui.proto-এ ডিসপ্লে সেফটি সোর্সে রয়েছে।

SDV প্ল্যাটফর্মে, SDV comms, DriverUI থেকে HAR পর্যন্ত gRPC চ্যানেল খুঁজে পেতে ও প্রতিষ্ঠা করতে SDV Gateway Client প্রদান করে।

IVI টার্মিনাল ব্যবহার করে এইসব কমান্ড এক্সিকিউট করলে, SDV মিডিয়াতে কমিউনিকেশন পাঠানো হয়, যার ফলে পুরো ক্লাস্টার জুড়ে থিম আপডেট ট্রিগার হয়।

adb shell cmd car_service inject-key -d 1 9 # Purple Theme
adb shell cmd car_service inject-key -d 1 8 # Blue Theme

DriverUI এবং HAR থিম, দুটিই পরিবর্তন করার জন্য RPC কমিউনিকেশন।

ছবি ৪. DriverUI এবং HAR থিম, দুটিই পরিবর্তন করার জন্য RPC কমিউনিকেশন।

ক্লাস্টারে মিডিয়া, Maps ও টেলিফোনি সংক্রান্ত তথ্য দেখুন

IVI-এর সাথে যোগাযোগের মাধ্যমে, DriverUI রেফারেন্স ক্লাস্টারের মধ্যে মিডিয়া, Maps ও টেলিফোনের তথ্য দেখাতে পারে। রেফারেন্স ইমপ্লিমেন্টেশনে ডিফল্ট স্টেট হিসেবে মিডিয়া কাজ করলেও, নিম্নলিখিত অগ্রাধিকার অনুযায়ী অ্যাক্টিভ পরিষেবার ভিত্তিতে ডিসপ্লে আপডেট হয়:

  1. Maps
  2. টেলিফোন সংক্রান্ত পরিষেবা
  3. মিডিয়া

সিস্টেম অটোমেটিক ডিফল্ট মিডিয়া স্ট্যাটাসের পরিবর্তে Maps নেভিগেশন বা অ্যাক্টিভ টেলিফোনি পরিষেবা দেখানোর বিষয়কে অগ্রাধিকার দেয়।

DriverUI ডিসপ্লের বিভিন্ন স্ট্যাটাস নিচের ছবিতে দেখানো হয়েছে:

DriverUI সম্পূর্ণ ক্লাস্টারে মিডিয়া ও টেলিফোনি বিভাগ
দেখাচ্ছে।

ছবি ৫. DriverUI সম্পূর্ণ ক্লাস্টারে মিডিয়া এবং টেলিফোনি বিভাগ প্রদর্শন করছে।

Compose ইন্টিগ্রেশনের জন্য অটোমোটিভ ডিজাইন

DriverUI Automotive Design for Compose প্রয়োগ করে যাতে ডিজাইন (Figma) সরাসরি Android অ্যাপের মধ্যে শোকেস ও ইটারেট করা যায়। এই ইন্টিগ্রেশন রানটাইম এনভায়রনমেন্টে ডিজাইন ডকুমেন্ট রেন্ডার করার মাধ্যমে ডিজাইন ও ডেভেলপমেন্টের মধ্যে ব্যবধান দূর করে।

ডিজাইন অ্যাসেট অ্যাক্সেস করুন

DriverUI-এর জন্য Figma ডকুমেন্টের স্যাম্পেল কোডবেসের অংশ। এইসব ডিজাইন অ্যাক্সেস ও পরিবর্তন করতে:

  1. packages/apps/Car/DriverUI/src/main/assets/figma/*.dcf থেকে Compose DCF ডিজাইন ফাইলের জন্য স্থানীয় অটোমোটিভ ডিজাইন সহ DriverUI লঞ্চ করুন।
  2. packages/apps/Car/DriverUI/src/main/assets/DriverUI.fig অ্যাসেট ফাইলটি খুঁজে বের করুন।
  3. সোর্স ডিজাইন দেখতে বা পরিবর্তন করতে এই ফাইলটি Figma-তে ইমপোর্ট করুন।

Compose ভার্সনের জন্য অটোমোটিভ ডিজাইন

  • Gradle, packages/apps/Car/libs/aaos-apps-gradle-project/gradle/libs.versions.toml-এ designcompose-এর জন্য নির্দিষ্ট করা কম্পোজ ভার্সনের জন্য অটোমোটিভ ডিজাইন ব্যবহার করে।
  • Compose-এর জন্য অটোমোটিভ ডিজাইন রিলিজ রিলিজ পৃষ্ঠায় উপলভ্য।

লাইভ আপডেট কনফিগারেশন

Automotive Design for Compose ডেভেলপমেন্ট মোডে লাইভ আপডেট সাপোর্ট করে, যার ফলে Figma-তে করা পরিবর্তনগুলি DriverUI-তে সাথে সাথে রেন্ডার করা যায়। এটি দ্রুত টেস্টিং ও ডিজাইন ইটারেশন সাইকেলকে সহজ করে তোলে।

DriverUI-এর জন্য Figma টোকেন সেট করতে নিম্নলিখিত কমান্ড রান করুন:

adb shell am startservice \
  -n "com.android.car.driverui/com.android.designcompose.ApiKeyService" \
  -a setApiKey \
  -e ApiKey $FIGMA_ACCESS_TOKEN \
  --user 0

ডুয়াল VM ডিজাইন ডকুমেন্ট সিঙ্ক্রোনাইজেশন

ডুয়াল VM সেট-আপে, সামঞ্জস্য বজায় রাখার জন্য ডিজাইন আপডেট অবশ্যই বাউন্ডারি জুড়ে প্রোপাগেট করতে হবে।

  • DriverUI লেটেস্ট Figma ডিজাইন ডকুমেন্ট নিয়ে আসে এবং এই পৃষ্ঠায় বিস্তারিত gRPC কমিউনিকেশন চ্যানেল ব্যবহার করে HAR-এ ট্রান্সমিট করে।
  • এর ফলে, লেটেস্ট Figma ডিজাইন ইটারেশনের সাথে সম্পূর্ণ ক্লাস্টার আপডেট হয়, যা দুটি VM-কেই ডিজাইন সোর্সের সাথে সিঙ্ক করে রাখে।

Figma থেকে DriverUI এবং HAR-এ ডিজাইন ডকুমেন্টের লাইভ আপডেট।

ছবি ৬. Figma থেকে DriverUI এবং HAR-এ ডিজাইন ডকুমেন্টের লাইভ আপডেট।

gRPC চ্যানেল সুরক্ষিত করুন

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