2012-04-30 21 views
5

ब्लूटूथ एफ़टीपी विनिर्देश कहता है कि मैं कार्रवाई आपरेशन उपयोग करने की आवश्यकता है, यहाँ एक पेज http://i47.tinypic.com/2425t2v.pngजे 2 एमई ब्लूटूथ ओबेक्स में कार्रवाई को कैसे कार्यान्वित करें (स्थानांतरित करें/नाम बदलें, अनुमतियां सेट करें)?

है लेकिन ClentSession प्रदान करता है केवल प्राप्त और संचालन रखा, और javadocs में उल्लेख किया कुछ भी नहीं।

यहाँ

कैसे फ़ाइल बनाने के आपरेशन, लग रहा है कि यह बहुत आसान है

public void create() throws IOException { 
     HeaderSet hs = cs.createHeaderSet(); 
     hs.setHeader(HeaderSet.NAME, file); 
     op = cs.put(hs); 
     OutputStream os = op.openOutputStream(); 
     os.close(); 
     op.close(); 
    } 

प्रश्न 1: कैसे मैं इस कदम/नाम बदलें और अनुमतियां सेट प्रदर्शन करने के लिए कस्टम हेडर के साथ कार्रवाई आपरेशन लागू करते हैं? यह जेएसआर 82 ओबीएक्स एपीआई के बिना संभव होना चाहिए। कृपया मुझे ऐसा करने में मदद करें।

प्रश्न 2: क्या मुझे समझ में आया कि अनुमतियां कैसे सेट करें? OBEX_Errata के अनुसार 1.3.pdf के लिए संकलित

1 http://i45.tinypic.com/2h84led.jpg

2 http://i49.tinypic.com/2wgysmx.png

तो, स्थापित करने के लिए केवल पढ़ने के लिए, मैं निम्न करना चाहिए (धन्यवाद alanjmcf!):

int a = 0; 

    //byte 0 //zero 
    //byte 1 //user 
    //byte 2 //group 
    //byte 3 //other 

    //set read for user 
    a |= (1 << 7); //8th bit - byte 1, bit 0 -> set to 1 
    // a = 10000000 

    //for group 
    a |= (1 << 15); //16th bit - byte 2, bit 0 -> set to 1 
    // a = 1000000010000000 

    //for other 
    a |= (1 << 23); //24th bit - byte 3, bit 0 -> set to 1 
    // a = 100000001000000010000000 

    //or simply 
    private static final int READ = 8421504 //1000,0000,1000,0000,1000,0000 
    int value = 0 | READ; 

    //========== calculate write constant ========= 
    a = 0; 
    a |= (1 << 8); //write user 
    a |= (1 << 16); //write group 
    a |= (1 << 24); //write other 
    // a = 1000000010000000100000000 
    private static final int WRITE = 16843008 // 1,0000,0001,0000,0001,0000,0000 

    //========= calculate delete constant ========== 
    a = 0; 
    a |= (1 << 9); //delete user 
    a |= (1 << 17); //delete group 
    a |= (1 << 25); //delete other 
    //a = 10000000100000001000000000 
    private static final DELETE = 33686016; //10,0000,0010,0000,0010,0000,0000 

    //========= calculate modify constant ========== 
    a = 0; 
    a |= (1 << (7 + 7)); //modify user 
    a |= (1 << (15 + 7)); //modify group 
    a |= (1 << (23 + 7)); //modify other 
    //a = 1000000010000000100000000000000 
    private static final MODIFY = 1077952512; // 100,0000,0100,0000,0100,0000,0000,0000 


    // now, if i want to set read-write-delete-modify, I will do the following: 
    int rwdm = 0 | READ | WRITE | DELETE | MODIFY; 
    // and put the value to the header... am I right? 

अगर ठीक है, एकमात्र समस्या सवाल बनी हुई है 1: मैं कार्रवाई ऑपरेशन कैसे कर सकता हूं और हेडर कैसे सेट कर सकता हूं।

+0

+1 सभी चमकदार चित्रों के लिए +1! –

+1

http://code.google.com/p/blueframe/source/checkout - शायद वहां कुछ –

+0

@AmigableClarkKant डिवाइस अपने प्रारूप के डेटा का आदान-प्रदान करते हैं। यह मुझे हेडर बनाने में मदद नहीं करता है जो लक्षित डिवाइस ओबेक्स के रूप में पहचाना जाएगा। –

उत्तर

3

ध्यान दें कि आपके द्वारा ब्लूटूथ एफ़टीपी विनिर्देशन से उद्धृत पाठ में तीन शीर्षलेख हैं: ActionId, Name, DestName। तो आपको एक NAME शीर्षलेख और एक DestName शीर्षलेख जोड़ने की आवश्यकता है।

संशोधन
2.1 OBEX हेडर

HI identifier | Header name | Description 
0x94   Action Id  Specifies the action to be performed (used in ACTION operation) 
0x15   DestName  The destination object name (used in certain ACTION operations) 
0xD6   Permissions 4 byte bit mask for setting permissions 
0x17 to 0x2F Reserved for future use. This range includes all combinations of the upper 2 bits 

तो निम्नलिखित आदि (मेरे जावा के एक बनाने के लिए: JSR-82 जाहिरा तौर पर है कि (नया) हैडर तो OBEX विनिर्देश से उद्धृत के लिए स्थिरांक को परिभाषित नहीं करता बिट जंगली)

static final int DEST_NAME = 0x15; 

और अपने कोड में इसका उपयोग करें।

[ADD] क्रियाएं सभी क्रियाएं (क्रियाएं) क्रियाएं क्रियान्वयन का उपयोग करती हैं! : -,) यह PUT या GET आदि के बजाय OBEX ऑपोड क्रिया का उपयोग करता है। ऑपोड ACTION का मान 0x86 है।

मैं इसे "पीबीएफएफ के लिए संकलित" OBEX_Errata "से पढ़ रहा हूं। आईआरडीए ने विनिर्देशों के लिए चार्ज किया लेकिन अब उन्हें अनुरोध पर प्रदान किया गया है (http://www.irda.org)। नवीनतम ओबेक्स चश्मा (1.5 आईआईआरसी) की एक प्रति के लिए पूछें। मैंने खुद ऐसा किया है लेकिन अभी तक एक प्रतिक्रिया नहीं मिली है। या आप '1.3 इरेटा' पीडीएफ प्राप्त करने के लिए "ऑब्जेक्ट एक्शन को ले जाएं/नाम बदलें" कहने के लिए गुगलिंग का प्रयास कर सकते हैं।

वैसे भी, यदि जावा आपको नए ऑपकोड (केवल जीईटी और पीयूटी की इजाजत देता है) का उपयोग करने से रोकता है और आपको नए हेडर आईडी मानों का उपयोग करने से रोकता है तो आप वैसे भी आगे नहीं बढ़ सकते हैं। :-(* (उनके लिए ऐसा करने का कोई कारण नहीं है क्योंकि हेडरआईडी इसमें डेटा प्रकार को एन्कोड करता है)

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

+0

लेकिन मुझे अभी भी यह नहीं पता कि यह कैसे करना है। –

+0

हालांकि यह उत्तर दिया गया था, मेरा प्रश्न अनुत्तरित रहता है। –