2012-06-19 12 views
34

पर कैसे बात करता है मैं एंड्रॉइड मॉडेम कोड एंड्रॉइड एप्लिकेशन लेयर पर संदेश कैसे कॉल/पास कर सकता हूं, इस बारे में उच्च स्तरीय विचार जानना चाहता हूं। मान लें कि हम उदाहरण के लिए एसएमएस लेते हैं। यदि नेटवर्क एसएमएस और मोडेम भेजता है (कहें क्वालकॉम सी कोड इसे पार करता है) यह एंड्रॉइड एप्लिकेशन लेयर पर कैसे प्रसारित किया जाता है?मॉडेम कोड एंड्रॉइड कोड

क्या हमेशा एक जेएनआई कॉल हो रहा है? मॉडेम और एंड्रॉइड के बीच इंटरफेस के रूप में? क्या आप कृपया हमारे साथ जानकारी साझा कर सकते हैं। धन्यवाद

उत्तर

68

लगभग सभी एंड्रॉयड स्रोत आधार के रूप में AOSP/CAF/मुख्यमंत्री स्रोत (एंड्रॉयड ओपन सोर्स प्रोजेक्ट, CodeAurora फोरम, CyanogenMod क्रमशः), में पाया सी कोड होगा में कहा जाता rild, (रेडियो इंटरफेस स्तर Daemon) । यह आमतौर पर स्रोत पेड़ के /hardware/ril के भीतर पाया जाता है।

यह डिमन एंड्रॉइड बूट होने के पल से चलता है, और /dev/socket/rild और /dev/socket/rild-debug नामक एक सॉकेट बनाता है। क्वालकॉम, एचटीसी से आने वाली एक मालिकाना लाइब्रेरी होगी, जो बूट पर रन टाइम पर गतिशील रूप से लोड हो जाती है। यह स्वामित्व पुस्तकालय है जो बदले में, रेडियो फर्मवेयर से संचार करता है। और rild मालिकाना पुस्तकालय में कॉल-बैक के लिए हुक वहां और फिर स्थापित किया गया है।

पर परत rild, ऊपर उल्लिखित सॉकेट के माध्यम से, कैसे एंड्रॉयड परत (स्रोत पेड़ में पाया, frameworks/base/telephony/com/android/internal/telephony/RIL.java) संचार है।

जावा पक्ष पर, यह पढ़ने/लिखने के लिए सॉकेट खोलता है, उद्देश्य की स्थापना और प्रसारण के लिए प्रतिनिधियों की स्थापना/इस सॉकेट के माध्यम से घटनाओं को प्राप्त करने के साथ।

उदाहरण के लिए, एक आने वाली कॉल, मालिकाना लाइब्रेरी, rild द्वारा स्थापित कॉलबैक हुक का आह्वान करती है। rild सॉकेट से एटी हेस मॉडेम आदेशों मानक सामान्य लिखते हैं, जावा पक्ष पर, इसे पढ़ता है और मॉडेम आदेशों की व्याख्या, और वहाँ से, PhoneManager प्रसारण CALL_STATE_RINGING, जिसमें फोन आवेदन (स्रोत में पाया packages/apps/Phone) ने एक रिसीवर पंजीकृत किया है और उपयोगकर्ता इंटरफ़ेस को किकस्टार्ट किया है, और इस तरह आप कॉल का जवाब देते हैं।

एक अन्य उदाहरण है, आउटगोइंग कॉल के समय, आप एक नंबर Android पर डायल, आशय बनाया है और जो बारी में PhoneManager (यह सब, यहाँ, के शीर्ष याद नहीं कर सकते यह की जड़ है हो जाता है मेरे सिर, लगता है अपने frameworks/base/core/java स्रोत पेड़ में कहीं) आशय प्राप्त करता है में, यह या तो एटी हेस मॉडेम आदेशों के अनुक्रम में कनवर्ट करते हैं, सॉकेट से यह पता लिखते हैं, rild तो मालिकाना पुस्तकालय के लिए एक कॉलबैक का आह्वान, मालिकाना लाइब्रेरी बदले में रेडियो फर्मवेयर के प्रतिनिधि।

अंतिम उदाहरण, संदेश से, पाठ संदेश भेजने के आवेदन (में packages/apps/Mms स्रोत पेड़ पाया जाता है), जो टेक्स्ट लिखते हैं, एक उद्देश्य के बारे में shoved हो जाता है, PhoneManager, आशय प्राप्त करता GSM- में पाठ धर्मान्तरित इनकोडिंग 7 बिट जीएसएम अक्षरों का प्रयोग कर (IIRC), सॉकेट से बाहर लिखा जाता है, rild बदले में मालिकाना पुस्तकालय के लिए एक कॉलबैक का आह्वान, रेडियो फर्मवेयर के लिए बारी प्रतिनिधियों में मालिकाना पुस्तकालय और पाठ अब डोमेन छोड़ दिया है हैंडसेट का और कहीं एयरवेव में है ...:) एंड्रॉइड के भीतर एक प्रसारण संदेश भेजने के साथ-साथ, READ_PHONE_STATE अनुमति का उपयोग किया जाता है और AndroidManifest.xml में निर्दिष्ट किया गया है।

इसी तरह इसके विपरीत जब पाठ संदेश प्राप्त करने, यह रिवर्स में है, रेडियो फर्मवेयर कुछ बाइट्स प्राप्त करता है, मालिकाना पुस्तकालय बाहर सॉकेट से बाइट्स लिखते rild को कॉलबैक का आह्वान, और इस तरह। जावा पक्ष पर, यह इससे पढ़ता है, और बाइट्स के अनुक्रम को डीकोड करता है, जैसा कि हम जानते हैं, पाठ को परिवर्तित करता है, एक संदेश प्राप्त अधिसूचना के साथ प्रसारित करता है। संदेश आवेदन बारी में, ने कहा कि प्रसारण के लिए रिसीवर पंजीकृत किया गया है, और सूचना पट्टी करने के लिए एक आशय भेजता है की तरह कुछ frameworks/base/telephony/java/com/android/internal/telephony/TelephonyIntents.java

उद्देश्य पाए जाते हैं में "नया संदेश + xxxxxx से प्राप्त" कहने के लिए

टेलीफ़ोनी सिस्टम कैसे काम करता है, इसका असली अर्थ यह है कि वास्तविक जेनरिक एटी हेस मॉडेम कमांड का उपयोग करता है जिससे वास्तविक स्वामित्व तंत्र को सरल और छुपाया जा सके।

क्वालकॉम, एचटीसी की पसंद के लिए, यह सोचने में भूल जाओ कि वे कभी भी पुस्तकालय को स्रोत में खोलेंगे क्योंकि रेडियो टेलीफोनी परत एस-ओ-सी (चिप पर सिस्टम) सर्किट्री के भीतर एम्बेडेड है!

जो एक साइड नोट के रूप में भी है, क्यों रेडियो फर्मवेयर फ्लैश करने के लिए जोखिम भरा है, कुछ हैंडसेट इसे करने की क्षमता प्रदान करते हैं, गलत फर्मवेयर (जैसे असंगत या हैंडसेट के लिए उपयुक्त नहीं) को फ्लैश करें, हैंडसेट अच्छा चुंबन - और एक दरवाजा स्टॉपर या कागज वजन के रूप में इसका उपयोग करें! :)

यह ध्यान दिया जाना चाहिए कि इसमें शून्य जेएनआई तंत्र शामिल हैं।

यह मेरी समझ से है कि यह कैसे काम करता है, यह है कि मैं यह कह सकता हूं कि रेडियो फर्मवेयर को स्मृति पते में लोड किया गया है जहां लिनक्स कर्नेल ने पता स्थान आरक्षित किया है और इसे स्पर्श नहीं करता है, कुछ पीछे की तरह पुराने पीसी दिनों में जब डॉस बूट हो गया था, तो बीआईओएस द्वारा उपयोग किए गए आरक्षित पते थे, मुझे लगता है कि, आरक्षित के रूप में चिह्नित पते फर्मवेयर द्वारा कब्जे में हैं, जिसमें स्वामित्व वाली रेडियो लाइब्रेरी इससे बात करती है - और चूंकि लाइब्रेरी कर्नेल द्वारा स्वामित्व वाले पता स्थान में चल रही है, जो रूट विशेषाधिकारों के साथ रूट के स्वामित्व में है, यदि आप चोटी और पोक की पुरानी मूलभूत बोली का उपयोग करने के बारे में सोचते हैं, तो यह "बात" कर सकता है, मुझे लगता है कि आप नहीं करेंगे उस पते पर बाइट्स के एक निश्चित अनुक्रम को लिखकर वहां से बहुत दूर रहें, रेडियो फर्मवेयर उस पर कार्य करता है, लगभग एक इंटरप्ट वेक्टर टेबल की तरह ... यह अनुमान लगा रहा है कि यह कैसे बिल्कुल काम करता है। :)

+0

इसलिए यदि आप ओस्मोकॉम ओपनबीएससी के लिए 'रिल्ड' को स्वैप करते हैं, तो आपके पास एक खुला फोन है? –

+0

@ जेनस ट्रॉल्सन यह संदिग्ध होगा, हैंडसेट के भीतर रेडियो के फर्मवेयर चिपसेट के आधार पर और इसमें अधिक सुविधाएं हो सकती हैं जिनमें मालिकाना पुस्तकालय को संभालने की आवश्यकता होगी। – t0mm13b

+0

जेएनआई के उपयोग के बिना बनाई गई रोल्ड परत में हुक कैसे हैं? – gonzobrains

0

t0mm13b द्वारा स्पष्टीकरण जारी रखते हुए, जब हम किसी स्मार्टफ़ोन के बारे में बात करते हैं, तो 3 परत संचालन के बारे में सोचें एसएमएस/कॉल पर wrt।

आरआईएल (उपयोगकर्ता स्तर) < -> एपी < -> सी.पी.

एपी: आवेदन प्रोसेसर (। अपने Android ओएस कहाँ चलाता है खेल, गाने, वीडियो, कैमरा आदि इस प्रोसेसर पर चल रहा है के बारे में सोचो)

सीपी: सेलुलर प्रोसेसर (जो वास्तव में इनकमिंग/आउटगोइंग कॉल्स/एसएमएस के लिए एयर इंटरफ़ेस से संबंधित है, नेटवर्क टॉवर आदि के साथ इंटरैक्ट करता है ..)

अब कहें कि सीपी पक्ष में कुछ डेटा प्राप्त हुआ है (यह इंटरनेट डेटा/एसएमएस/कॉल)। अब एपी और सीपी के बीच कुछ तार्किक चैनल हैं। तो सीपी डेटा के प्रकार के आधार पर संबंधित चैनल को प्राप्त डेटा को धक्का देगा। यह डेटा एपी द्वारा प्राप्त किया जाएगा। एपी इस डेटा को आरआईएल/ऐप पर वापस भेज देगा। आरआईएल इस डेटा को डीकोड करेगा (विशेष रूप से कॉल/एसएमएस डेटा)।इसके आधार पर उपयोगकर्ता को एसएमएस/कॉल के बारे में अधिसूचना मिलती है।

संबंधित मुद्दे