रिमोट ऐक्सेस सेट अप करना

Android 14 में रिमोट ऐक्सेस की नई सुविधा जोड़ी गई है. इसकी मदद से पार्टनर, किसी वाहन में मौजूद Android डिवाइस को रिमोट से चालू कर सकते हैं, ताकि कुछ खास टास्क पूरे किए जा सकें. उदाहरण के लिए, सॉफ़्टवेयर अपडेट लागू करने के लिए, रात भर गैराज मोड चालू रखें. एंड-टू-एंड वर्कफ़्लो के लिए, Android के अलावा कई कॉम्पोनेंट की ज़रूरत होती है. Android, Android के अलावा अन्य कॉम्पोनेंट के लिए, न तो कोई परिभाषा तय करता है और न ही उन्हें लागू करने का तरीका बताता है. यह ज़िम्मेदारी आपकी है.

ज़्यादा जानने के लिए, यहां दिए गए सेक्शन देखें:

भवन निर्माण

इस कॉन्टेंट में यह माना गया है कि इस सैंपल आर्किटेक्चर का इस्तेमाल किया गया है. यह काल्पनिक है और हो सकता है कि यह असल आर्किटेक्चर को न दिखाए. ओईएम को अपने वाहन और सर्वर आर्किटेक्चर के हिसाब से, असल में लागू होने वाले तरीके को अपनाना चाहिए.

इमेज

पहली इमेज. सैंपल आर्किटेक्चर.

सैंपल आर्किटेक्चर में ये हार्डवेयर कॉम्पोनेंट शामिल हैं:

हार्डवेयर कॉम्पोनेंट ब्यौरा
ऐप्लिकेशन प्रोसेसर Android को चलाने वाला प्रोसेसर. Android, इस प्रोसेसर पर वर्चुअल मेमोरी (वीएम) पर चल सकता है. हालांकि, यह असली हार्डवेयर पर नहीं चलेगा.
वाहन प्रोसेसर यह प्रोसेसर, ऐप्लिकेशन प्रोसेसर के लिए पावर को कंट्रोल करने के लिए ज़िम्मेदार होता है.
टेलीमैटिक्स कंट्रोल यूनिट (टीसीयू) वाहन में मौजूद प्रोसेसर, क्लाउड से रिमोट मैसेज हमेशा पा सकता है. टीसीयू हमेशा चालू रहता है या कम पावर वाले मोड में रहता है. टीसीयू को चालू करने के लिए, रिमोट मैसेज का इस्तेमाल करें.
वेक-अप सर्वर यह क्लाउड में चलने वाला रिमोट सर्वर होता है. यह वाहन में मौजूद टीसीयू से कम्यूनिकेट करता है, ताकि वेक-अप कमांड जारी की जा सकें.
रिमोट टास्क सर्वर रिमोट टास्क सर्वर, क्लाउड में चलता है. यह लोगों से इंटरैक्ट करता है और रिमोट टास्क मैनेज करता है.

सैंपल आर्किटेक्चर में ये सॉफ़्टवेयर कॉम्पोनेंट शामिल हैं. ये सभी Android पर काम करते हैं:

Android डिवाइस पर मौजूद सॉफ़्टवेयर कॉम्पोनेंट ब्यौरा
कार सेवा AAOS फ़्रेमवर्क सेवा, रिमोट ऐक्सेस एपीआई उपलब्ध कराती है.
रिमोट टास्क क्लाइंट वेंडर की ओर से लिखा गया Service क्लास, जो रिमोट टास्क को पूरा करता है. एक Android सिस्टम, कई रिमोट टास्क क्लाइंट चला सकता है.
रिमोट ऐक्सेस एचएएल रिमोट ऐक्सेस के लिए इसे लागू करना ज़रूरी है.
यह AAOS और TCU जैसे नॉन-Android कॉम्पोनेंट के बीच कम्यूनिकेशन के लिए अबस्ट्रैक्शन लेयर है.

Android के अलावा किसी अन्य ओएस पर चलने वाले सॉफ़्टवेयर के कॉम्पोनेंट के बारे में यहां बताया गया है:

Android के अलावा किसी अन्य प्लैटफ़ॉर्म का सॉफ़्टवेयर कॉम्पोनेंट ब्यौरा
क्लाइंट को रीस्टोर करना टीसीयू पर चलने वाला सॉफ़्टवेयर, जो वेक-अप सर्वर के साथ लंबे समय तक कनेक्शन बनाए रखता है. यह Remote Access HAL के साथ कनेक्शन भी बनाए रखता है, ताकि Car Service को रिमोट टास्क डिलीवर किए जा सकें.
वेक-अप सर्वर लागू करना यह सर्वर, टीसीयू पर चल रहे वेक-अप क्लाइंट से कम्यूनिकेट करता है. वेक-अप क्लाइंट को वेक-अप अनुरोध भेज सकता है.
रिमोट टास्क सर्वर लागू करना यह सर्वर, रिमोट टास्क को मैनेज करता है. उपयोगकर्ता इस सर्वर के साथ इंटरैक्ट करते हैं, ताकि रिमोट टास्क जारी किए जा सकें और उनकी निगरानी की जा सके.

वर्कफ़्लो

इस सेक्शन में, सैंपल वर्कफ़्लो में शामिल चरणों की सूची दी गई है.

वर्कफ़्लो का सैंपल

ज़्यादा जानकारी वाला वर्कफ़्लो इस तरह का हो सकता है:

  1. उपयोगकर्ता ने वाहन को गैराज में पार्क किया.

  2. पार्टनर, रात के समय वाहन को अपडेट करना चाहता है, ताकि वाहन के साथ इंटरैक्शन होने की संभावना कम हो.

  3. पार्टनर का क्लाउड सर्वर, वाहन को अपडेट सिस्टम रिमोट टास्क भेजता है. खास तौर पर, टेलीमैटिक कंट्रोल यूनिट (टीसीयू).

  4. वाहन का टीसीयू, Android इलेक्ट्रॉनिक कंट्रोल यूनिट (ईसीयू) को चालू करता है. साथ ही, OEM की सेवा, गैराज मोड को ट्रिगर करती है.

  5. Android, Google Play के ज़रिए अपडेट डाउनलोड और इंस्टॉल करने के लिए, Garage mode का इस्तेमाल करता है.

  6. अपडेट लागू करने के बाद, Android टास्क को 'पूरा हो गया' के तौर पर मार्क करता है. इसके बाद, वह कनेक्शन बंद कर देता है या तय किए गए टाइम आउट तक पहुंच जाता है.

वर्कफ़्लो के बारे में ज़्यादा जानकारी

रिमोट ऐक्सेस के लिए, दो ज़रूरी चरण पूरे करने होते हैं. पहला चरण है क्लाइंट को रजिस्टर करना. इसका मतलब है कि किसी उपयोगकर्ता को किसी वाहन पर चल रहे किसी रिमोट टास्क क्लाइंट से लिंक करना. दूसरा काम है, किसी टास्क को डिलीवर करना. इसका मतलब है कि किसी खास उपयोगकर्ता के लिए रिमोट टास्क को, किसी खास वाहन पर चल रहे रिमोट टास्क क्लाइंट को डिलीवर करना.

क्लाइंट को रजिस्टर करना

रिमोट ऐक्सेस की सुविधा का इस्तेमाल करने के लिए, उपयोगकर्ता को रिमोट टास्क क्लाइंट ऐप्लिकेशन को कम से कम एक बार खोलना होगा. साथ ही, उसे क्लाइंट के रजिस्ट्रेशन की प्रोसेस पूरी करनी होगी (बोल्ड टेक्स्ट से पता चलता है कि AAOS ने कौनसे टास्क लागू किए हैं):

  1. बूट-अप होने पर, Car Service को रिमोट ऐक्सेस HAL से वाहन की जानकारी मिलती है.

  2. बूट-अप होने पर, Car Service, इंटेंट-फ़िल्टर और अनुमति के आधार पर, रिमोट टास्क के सभी क्लाइंट लॉन्च करती है.

  3. रिमोट टास्क क्लाइंट शुरू होने पर, रिमोट टास्क क्लाइंट खुद को कार सेवा के साथ रजिस्टर करता है.

  4. कार सर्विस, रिमोट टास्क क्लाइंट को रजिस्ट्रेशन की जानकारी देती है. इसमें वाहन का आईडी और क्लाइंट आईडी शामिल है. क्लाइंट आईडी यूनीक होता है और इसे Car Service, इस क्लाइंट को असाइन करती है. यह गारंटी दी जाती है कि एक ही वाहन पर मौजूद सभी रिमोट टास्क क्लाइंट के लिए, यह यूनीक होगा.

  5. उपयोगकर्ता, रिमोट टास्क क्लाइंट के ज़रिए रिमोट टास्क सर्वर में लॉग इन करता है और इस वाहन के लिए रिमोट ऐक्सेस की सुविधा चालू करता है. इस चरण में आम तौर पर, रिमोट टास्क सर्वर के ज़रिए पुष्टि की जाती है.

  6. रिमोट टास्क क्लाइंट, उपयोगकर्ता की जानकारी को वाहन के आईडी और क्लाइंट आईडी के साथ रिमोट टास्क सर्वर पर अपलोड करता है. साथ ही, सर्वर से उपयोगकर्ता को इस खास क्लाइंट और इस खास वाहन से लिंक करने के लिए कहता है.

    इस चरण में, उपयोगकर्ता को दो तरीकों से पुष्टि करने की अतिरिक्त प्रक्रिया से गुज़रना पड़ सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है.

    रिमोट टास्क सर्वर को यह पुष्टि करनी होगी कि अनुरोध में दिया गया वाहन आईडी, भेजने वाले के वाहन आईडी से मेल खाता है. ऐसा वाहन की पुष्टि करके किया जा सकता है.

फ़ैक्ट्री रीसेट होने तक, क्लाइंट रजिस्ट्रेशन की प्रोसेस को हर उपयोगकर्ता के लिए, हर वाहन में एक बार पूरा करना ज़रूरी है. क्लाइंट आईडी को Car Service में स्थानीय तौर पर सेव किया जाता है. साथ ही, यह एक ही क्लाइंट के लिए एक जैसा रहता है.

इमेज

दूसरी इमेज. किसी क्लाइंट को रजिस्टर करें.

किसी क्लाइंट को अपंजीकृत करना

कोई उपयोगकर्ता, वाहन को अपने खाते से अलग कर सकता है. इसके लिए, वह वाहन या रिमोट टास्क सर्वर का इस्तेमाल कर सकता है:

  • वाहन में, उपयोगकर्ता रिमोट टास्क क्लाइंट ऐप्लिकेशन खोल सकते हैं. साथ ही, इस वाहन को पहले से लिंक किए गए उपयोगकर्ता खातों से अनलिंक करने का अनुरोध कर सकते हैं.

  • रिमोट टास्क सर्वर पर, लोग अपने खाते में लॉग इन कर सकते हैं. साथ ही, इस खाते से पहले से लिंक किए गए वाहन को अनलिंक कर सकते हैं.

अगर उपयोगकर्ता अपने खाते से वाहन को अनलिंक करता है, तो रिमोट टास्क सर्वर को उस उपयोगकर्ता के लिए सेव की गई मैपिंग को हटाना होगा.

टास्क डिलीवर करना

क्लाउड में:

  1. कोई उपयोगकर्ता, रिमोट टास्क सर्वर का इस्तेमाल करके किसी खास वाहन को रिमोट टास्क भेजता है.

  2. रिमोट टास्क सर्वर, User-ID को वाहन के आईडी और Client-ID से मैप करता है. यह टास्क का डेटा, वाहन का आईडी, और क्लाइंट आईडी को वेक-अप सर्वर पर भेजता है.

  3. वेक-अप सर्वर, वाहन के आईडी के लिए खास टीसीयू ढूंढता है. इसमें यह मान लिया जाता है कि टीसीयू का रजिस्ट्रेशन पहले ही हो चुका है. इसके बाद, वह टीसीयू को टास्क डेटा और क्लाइंट आईडी भेजता है.

वाहन पर (बोल्ड टेक्स्ट से पता चलता है कि AAOS ने कौनसे टास्क पूरे किए):

  1. टीसीयू को रिमोट सर्वर से रिमोट टास्क मिलते हैं.

  2. अगर AAOS चलाने वाला ऐप्लिकेशन प्रोसेसर (एपी) बंद है, तो टीसीयू, एपी को चालू करने के लिए वाहन प्रोसेसर (वीपी) का इस्तेमाल करता है.

  3. कार सर्विस को टीसीयू से टास्क मिलते हैं.

  4. Car Service, टास्क को उससे जुड़े रिमोट टास्क क्लाइंट को भेजता है.

  5. रिमोट टास्क क्लाइंट को टास्क मिलता है और वह उसे पूरा करता है.

    (ज़रूरी नहीं) रिमोट टास्क क्लाइंट, टास्क की ज़्यादा जानकारी के लिए टास्क सर्वर से संपर्क करता है और टास्क को पूरा करता है.

  6. (ज़रूरी नहीं) रिमोट टास्क क्लाइंट, टास्क के नतीजे की जानकारी टास्क सर्वर को भेजता है.

  7. टास्क पूरा होने पर, रिमोट टास्क क्लाइंट, कार सर्विस को इसकी सूचना देता है.

  8. अगर ज़रूरी हो, तो कार सेवा, वाहन की पावर की स्थिति को पहले जैसा कर देती है.

इमेज

तीसरी इमेज. टास्क डिलीवर करना.

रिमोट टास्क क्लाइंट लिखना

CarRemoteAccessManager, रिमोट ऐक्सेस की सुविधाओं के लिए एपीआई उपलब्ध कराता है. ज़्यादा जानने के लिए, CarRemoteAccessManager देखें. रिमोट टास्क क्लाइंट, Android सेवा है. यह रिमोट टास्क को पूरा करती है और CarRemoteAccessManager का इस्तेमाल करती है. इसके लिए PERMISSION_USE_REMOTE_ACCESS और PERMISSION_CONTROL_REMOTE_ACCESS की ज़रूरत होती है. साथ ही, RemoteTaskClientService के लिए इंटेंट फ़िल्टर का एलान करना ज़रूरी है. जैसे:

<service android:name=".remoteaccess.RemoteTaskClientService"
         android:directBootAware="true"
         android:exported="true">
    <intent-filter>
       <action android:name="android.car.remoteaccess.RemoteTaskClientService" />
    </intent-filter>
</service>

रिमोट टास्क क्लाइंट को, टास्क बनाते समय Car Service में खुद को रजिस्टर करना चाहिए:

public final class RemoteTaskClientService extends Service {
    @Override
    public void onCreate() {
        // mCar = Car.createCar()...
        mRemoteAccessManager = (CarRemoteAccessManager)
            mcar.getCarManager(Car.CAR_REMOTE_ACCESS_SERVICE);
        if (mRemoteAccessManager == null) {
            // Remote access feature is not supported.
            return;
        }
        mRemoteAccessManager.setRemoteTaskClient(executor, mRemoteTaskClient);
    }
}

इसे onBind फ़ंक्शन को बदलकर null करना होगा.

@Override
public IBinder onBind(Intent intent) {
    return null;
}

कार सेवा, अपनी लाइफ़साइकल को मैनेज करती है. कार सेवा, स्टार्टअप के दौरान और रिमोट टास्क आने पर इस सेवा से जुड़ जाती है. टास्क पूरा होने पर, Car Service इस सेवा से अनबाइंड हो जाती है. ज़्यादा जानने के लिए, किसी सेवा का लाइफ़साइकल मैनेज करना लेख पढ़ें.

रिमोट टास्क क्लाइंट, सिस्टम उपयोगकर्ता के तौर पर काम करता है. इसलिए, इसके पास उपयोगकर्ता से जुड़े किसी भी डेटा का ऐक्सेस नहीं होता.

यहां दिए गए उदाहरण में, रजिस्टर किए गए कॉलबैक को मैनेज करने का तरीका बताया गया है:

private final class RemoteTaskClient
    implements CarRemoteAccessManager.RemoteTaskClientCallback {
    @Override
    public void onRegistrationUpdated(
        RemoteTaskClientRegistrationInfo info) {
        // Register to remote task server using info.
    }
    @Override
    public void onRemoteTaskRequested(String taskId,
        byte[] data, int remainingTimeSec) {
        // Parses the data and execute the task.
        // Report task result to remote task server.
        mRemoteAccessManager.reportRemoteTaskDone(taskId);
    }
    @Override
    public void onShutdownStarting(CompleteableRemoteTaskFuture future) {
        // Stop the executing task.
        // Clear the pending task queue.
        future.complete();
    }
}

वेंडर के लिए मेज़रमेंट मोड लागू करना

रिमोट ऐक्सेस की सुविधा का इस्तेमाल करना ज़रूरी नहीं है. यह डिफ़ॉल्ट रूप से बंद रहती है. इस सुविधा को चालू करने के लिए, यहां दिए गए RRO में से कोई एक जोड़ें:

// res/xml/overlays.xml
<?xml version="1.0" encoding="utf-8"?>
<overlay>
    <item target="array/config_allowed_optional_car_features" value="@array/config_allowed_optional_car_features" />
</overlay>

// res/values/config.xml
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string-array translatable="false" name="config_allowed_optional_car_features">
        <item>car_remote_access_service</item>
    </string-array>
</resources>

// Android.bp
runtime_resource_overlay {
    name: "RemoteAccessOverlay",
    resource_dirs: ["res"],
    manifest: "AndroidManifest.xml",
    sdk_version: "current",
    product_specific: true
}

इसके अलावा, यूज़रडीबग/ईएनजी बिल्ड पर यह adb कमांड इस्तेमाल करें:

adb shell cmd car_service enable-feature car_remote_access_service

Android डिवाइस पर इस्तेमाल करने से जुड़ी ज़रूरी शर्तें

रिमोट ऐक्सेस एचएएल

रिमोट ऐक्सेस हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल), वेंडर की ओर से लागू की गई ऐब्स्ट्रैक्शन लेयर होती है. इसका इस्तेमाल AAOS और किसी अन्य ईसीयू (उदाहरण के लिए, टीसीयू) के बीच कम्यूनिकेशन के लिए किया जाता है. रिमोट ऐक्सेस की सुविधा के लिए, यह ज़रूरी है. अगर रिमोट ऐक्सेस की सुविधा लागू नहीं की गई है, तो इसे लागू करने की ज़रूरत नहीं है.

इंटरफ़ेस को IRemoteAccess.aidl पर तय किया गया है. इसमें ये तरीके शामिल हैं:

कक्षा ब्यौरा
String getVehicleId() यह कुकी, वाहन का एक यूनीक आईडी हासिल करती है. इस आईडी की मदद से, वेक-अप सर्वर वाहन की पहचान कर सकता है.
String getWakeupServiceName() यह कुकी, रिमोट वेक-अप सर्वर का नाम पाने के लिए इस्तेमाल की जाती है.
String getProcessorId() यह कुकी, एक यूनीक प्रोसेसर आईडी को सेव करती है. इस आईडी की मदद से, क्लाइंट को चालू किया जा सकता है.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

यह फ़ंक्शन, रिमोट टास्क का अनुरोध किए जाने पर कॉल किए जाने वाले कॉलबैक को सेट करता है.

void clearRemoteTaskCallback() यह फ़ंक्शन, पहले से सेट किए गए रिमोट टास्क के कॉलबैक को मिटाता है.
void notifyApStateChange(in ApState state)

यह कुकी पता लगाती है कि ऐप्लिकेशन प्रोसेसर, रिमोट टास्क पाने के लिए तैयार है या नहीं.

कॉलबैक इंटरफ़ेस को IRemoteTaskCallback.aid पर तय किया जाता है.

कक्षा ब्यौरा
oneway void onRemoteTaskRequested(String clientId, in byte[] data)

यह एक कॉलबैक है, जिसे रिमोट टास्क का अनुरोध किए जाने पर कॉल किया जाता है.

बाहरी टीसीयू के साथ रेफ़रंस के तौर पर लागू करने का तरीका देखें. लागू करने के लिए, लंबे समय तक चलने वाली रीड स्ट्रीम का इस्तेमाल किया जाता है, ताकि रिमोट टास्क मिल सकें. साथ ही, यह debug कमांड के साथ काम करता है:

dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default

वाहन एचएएल

रिमोट ऐक्सेस की सुविधा के लिए, VHAL को इन प्रॉपर्टी के साथ काम करना होगा:

कक्षा ब्यौरा
SHUTDOWN_REQUEST यह हेड यूनिट को बंद करने का अनुरोध करता है.
VEHICLE_IN_USE
  • यह कुकी पता लगाती है कि वाहन का इस्तेमाल किया जा रहा है या नहीं.
  • जब उपयोगकर्ता कार को अनलॉक कर लेता है या जब वह कार के पास पहुंच जाता है. true होना चाहिए.
  • उपयोगकर्ता के गाड़ी बंद करने के बाद या गाड़ी लॉक करने के बाद, एक तय अवधि तक. false होना चाहिए.
  • true होने पर, रिमोट टास्क पूरा होने पर AAOS, वाहन को बंद करने की कोशिश नहीं करता है.

ज़्यादा जानने के लिए, इस्तेमाल की जा सकने वाली सिस्टम प्रॉपर्टी देखें.

साइलेंट मोड (खामोश)

रिमोट ऐक्सेस की सुविधा के लिए, साइलेंट मोड चालू होना चाहिए, ताकि जब कोई उपयोगकर्ता मौजूद न हो, तो वाहन साइलेंट मोड में बूट हो सके और रिमोट टास्क पूरे कर सके. साइलेंट मोड में, AAOS डिवाइस बूट अप होता है. इस दौरान, डिसप्ले और ऑडियो बंद रहता है.

साइलेंट मोड को दो Linux कर्नेल sysfs फ़ाइलों से कंट्रोल किया जाता है.

कक्षा ब्यौरा
/sys/kernel/silent_boot/pm_silentmode_kernel_state

इससे मौजूदा साइलेंट मोड के बारे में पता चलता है.

/sys/kernel/silent_boot/pm_silentmode_hw_state

इससे साइलेंट मोड को सेट करने के लिए, हार्डवेयर सिग्नल के बारे में पता चलता है.

वाहन का प्रोसेसर, Android SoC को एचडब्ल्यू सिग्नल भेजता है, ताकि साइलेंट मोड को चालू/बंद किया जा सके. सिग्नल (0 या 1) को /sys/kernel/silent_boot/pm_silentmode_hw_state में लिखा जाता है. इसके बाद, AAOS फ़्रेमवर्क में /sys/kernel/silent_boot/pm_silentmode_kernel_state बदलाव होता है. इससे साइलेंट मोड की मौजूदा स्थिति का पता चलता है. AAOS मॉड्यूल, /sys/kernel/silent_boot/pm_silentmode_kernel_state की जांच करता है, ताकि यह पता चल सके कि सिस्टम साइलेंट मोड में है या नहीं.

जब कोई रिमोट टास्क मिलता है और AAOS बूट होता है, तो वाहन का प्रोसेसर साइलेंट मोड सेट करता है और AAOS को चालू करता है, ताकि सिस्टम डिसप्ले/ऑडियो बंद करके बूट हो.

वाहन में मौजूद, Android के अलावा अन्य कॉम्पोनेंट

वाहन प्रोसेसर

वाहन का प्रोसेसर, वाहन में मौजूद एक प्रोसेसर होता है. यह Android चलाने वाले ऐप्लिकेशन प्रोसेसर की पावर को कंट्रोल कर सकता है. आर्किटेक्चर के इस उदाहरण में, टीसीयू, वाहन के प्रोसेसर को सिग्नल भेजकर ऐप्लिकेशन प्रोसेसर को चालू करता है.

वाहन में मौजूद, Android के अलावा अन्य कॉम्पोनेंट

वाहन का टीसीयू, रिमोट मैसेज हमेशा पा सकता है.

वेक-अप क्लाइंट, टीसीयू पर काम करता है. इससे रिमोट वेक-अप सर्वर के साथ लंबे समय तक कनेक्शन बना रहता है.

एपी पर चल रहा AAOS, रिमोट ऐक्सेस HAL के ज़रिए टीसीयू पर चल रहे वेक-अप क्लाइंट से कम्यूनिकेट कर सकता है.

इमेज

चौथी इमेज. टीसीयू (वेक-अप क्लाइंट).

क्लाउड पर मौजूद कॉम्पोनेंट

वेक-अप सर्वर

वेक-अप सर्वर, टीसीयू पर मौजूद वेक-अप क्लाइंट से इन कामों के लिए कम्यूनिकेट करता है:

  • वाहन के टीसीयू से लंबे समय तक कनेक्शन बनाए रखना.
  • वाहन के आईडी के आधार पर, किसी खास टीसीयू को ढूंढना.
  • किसी वाहन की स्थिति की रिपोर्ट करना. उदाहरण के लिए, ऑनलाइन या ऑफ़लाइन या रिमोट टास्क सर्वर से कनेक्ट होने का आखिरी समय.

असल में, वेक-अप सर्वर को रिमोट टास्क सर्वर के साथ मर्ज किया जा सकता है.

रिमोट टास्क सर्वर

रिमोट टास्क सर्वर, इन रिमोट टास्क को मैनेज करता है.

  • उपयोगकर्ता, सर्वर के साथ इंटरैक्ट करके नए रिमोट टास्क शुरू करता है और रिमोट टास्क की निगरानी करता है.

  • यह कुकी, रिमोट वेक-अप सर्वर का इस्तेमाल करके वाहनों में ऐप्लिकेशन प्रोसेसर को चालू करती है.

  • यह वाहन पर चल रहे रिमोट टास्क क्लाइंट के साथ इंटरैक्ट करता है.

  • यह कुकी, क्लाइंट के रजिस्ट्रेशन की जानकारी सेव करती है. इससे किसी वाहन पर किसी खास रिमोट टास्क क्लाइंट के साथ किसी उपयोगकर्ता को जोड़ा जाता है.

आम तौर पर, रिमोट टास्क सर्वर से वेक-अप सर्वर, वाहन के टीसीयू, और आखिर में रिमोट टास्क क्लाइंट को भेजा जाने वाला टास्क का डेटा, सिर्फ़ एक टास्क आईडी होता है. रिमोट टास्क क्लाइंट, टास्क आईडी का इस्तेमाल करके रिमोट टास्क सर्वर से टास्क के बारे में ज़्यादा जानकारी फ़ेच करता है.

निजता और सुरक्षा से जुड़ी ज़रूरी शर्तें

टास्क शर्त ज़रूरी शर्त
टीसीयू (वेक-अप क्लाइंट) ज़रूरी है
  • वेक-अप सर्वर की पुष्टि करें.
  • कोड पर भरोसा करें.
वेक-अप सर्वर ज़रूरी है
  • सिर्फ़ उन रिमोट टास्क सर्वर को कनेक्ट करने की अनुमति दें जिन्हें अनुमति वाली सूची में शामिल किया गया है.
  • वेक-अप क्लाइंट की पुष्टि करें.
  • सिर्फ़ टारगेट किए गए वाहन को वेक-अप मैसेज भेजें only.
रिमोट टास्क क्लाइंट ज़रूरी है
  • रजिस्ट्रेशन के दौरान उपयोगकर्ता की पुष्टि करें.
  • रिमोट टास्क सर्वर की पुष्टि करें.
  • Android सेवा के लिए, सुरक्षा से जुड़ी सभी ज़रूरी शर्तें पूरी करता हो. उदाहरण के लिए, सीमित अनुमतियां.
रिमोट टास्क सर्वर ज़रूरी है
  • वेक-अप सर्वर की पुष्टि करना ज़रूरी है.
  • वाहन के अटेस्टेशन की जानकारी दें. इसका मतलब है कि पुष्टि करना कि अनुरोध में दिया गया वाहन आईडी, भेजने वाले के वाहन आईडी से मेल खाता है. अगर वाहन की पुष्टि नहीं की जा सकती, तो यह पुष्टि करने के लिए अन्य तरीकों का इस्तेमाल करना होगा कि उपयोगकर्ता के पास फ़िलहाल वाहन का मालिकाना हक है.
  • उपयोगकर्ता की पहचान की पुष्टि करें.
  • उपयोगकर्ता की जानकारी को मैनेज करने वाले सर्वर के लिए, सुरक्षा से जुड़ी सभी ज़रूरी शर्तों को पूरा करें.

फ़ैक्ट्री रीसेट करना और मालिकाना हक ट्रांसफ़र करना

अगर कोई उपयोगकर्ता फ़ैक्ट्री रीसेट करता है, तो Car Service में सेव किया गया Client-ID मिट जाता है. हालांकि, सर्वर (रिमोट टास्क सर्वर और रिमोट वेकअप सर्वर) को इसकी सूचना नहीं दी जाती है. सर्वर, अब खत्म हो चुके क्लाइंट आईडी से वाहन की मैपिंग को बनाए रखते हैं. इस वजह से, अगर उपयोगकर्ता वाहन के लिए कोई नया रिमोट टास्क शुरू करता है, तो यह खत्म हो चुके क्लाइंट आईडी का इस्तेमाल करता है. वाहन को चालू कर दिया गया है, लेकिन रिमोट टास्क को पूरा नहीं किया जा सकता, क्योंकि रिमोट टास्क क्लाइंट का क्लाइंट आईडी अलग है और यह मेल नहीं खाता.

यहां फ़ैक्ट्री रीसेट करने के एक संभावित तरीके के बारे में बताया गया है.

जब कोई उपयोगकर्ता फ़ैक्ट्री रीसेट करता है, तो वेंडर उपयोगकर्ता को रिमोट टास्क सर्वर में लॉग इन करने के लिए कहता है. साथ ही, अगर उपयोगकर्ता ने पहले वाहन को लिंक किया था, तो उसे वाहन को अपने खाते से अनलिंक करने के लिए कहता है. फ़ैक्ट्री रीसेट के दौरान, डिवाइस में नेटवर्क ऐक्सेस होने की गारंटी नहीं होती. इसलिए, डिवाइस को फ़ैक्ट्री रीसेट करते समय, उसे अनलिंक करने का अनुरोध करना संभव नहीं हो सकता.

जब किसी वाहन का मालिकाना हक ट्रांसफ़र किया जाता है, तो कुछ कार्रवाइयां की जानी चाहिए. इससे यह पक्का किया जा सकेगा कि वाहन का पिछला मालिक, वाहन को रिमोट से कंट्रोल करने के लिए कोई टास्क न दे पाए. उदाहरण के लिए, नए मालिक से ये काम करने के लिए कहा जा सकता है:

  • फ़ैक्ट्री रीसेट करें. इससे यह पक्का होता है कि क्लाइंट आईडी फिर से जनरेट हो गया है. इस चरण के बाद, वाहन का पिछला मालिक अब भी वाहन को चालू कर सकता है. हालांकि, वह अब रिमोट से कंट्रोल नहीं कर पाएगा.

  • रिमोट टास्क क्लाइंट ऐप्लिकेशन खोलें. इसके बाद, क्लाइंट को अनरजिस्टर करें प्रोसेस को पूरा करके, वाहन को पिछले मालिक के खाते से अनलिंक करें. नया मालिक, वाहन को अपने खाते से लिंक करने के लिए, क्लाइंट के तौर पर रजिस्टर करने की प्रोसेस पूरी कर सकता है. इससे, पहले से लिंक किया गया खाता बदल जाएगा.

  • नया मालिक, क्लाइंट रजिस्टर करें प्रोसेस का इस्तेमाल करके, वाहन को अपने खाते से लिंक कर सकता है. साथ ही, पहले से लिंक किए गए खाते को बदल सकता है.

रिमोट टास्क क्लाइंट की जांच करना

हम रिमोट ऐक्सेस एचएएल default डायरेक्ट्री का रेफ़रंस देते हैं, ताकि रिमोट टास्क क्लाइंट की जांच की जा सके. एचएएल में फ़र्ज़ी रिमोट टास्क इंजेक्ट करने के लिए, यहां दी गई debug कमांड का इस्तेमाल किया जा सकता है. अगर आपने सही क्लाइंट आईडी दिया है, तो इसे आपके रिमोट टास्क क्लाइंट को फ़ॉरवर्ड कर दिया जाता है. रजिस्ट्रेशन की जानकारी को रिमोट टास्क क्लाइंट में लॉग करके, क्लाइंट आईडी पाया जा सकता है.

adb root && adb shell dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default --inject-task [clientID] [taskData]