2012-11-26 25 views
5

मेरा कोरब्लूटूथ एप्लिकेशन क्लाइंट विशेषता कॉन्फ़िगरेशन डिस्क्रिप्टर में "संकेत बिट" को सक्षम करने की आवश्यकता है। कॉलबैककोरब्लूटूथ लिखनाव्यू: फॉर डिस्क्रिप्टर: अंक

अंदर डिवाइस

  • कॉल discoverServices
  • कॉल discoverCharacteristics से कनेक्ट करने के स्कैन करने के लिए

  • प्रारंभ

    1. प्रारंभ - (शून्य) परिधीय: यहाँ मैं क्या किया है (CBPeripheral *) परिधीय किया गया डिस्कवर सर्विसेज: (एनएसईआरआर * * त्रुटि

    2. कॉल discoverDescriptorsForCharacteristic कॉलब के अंदर कॉल करें ack

      - (शून्य) परिधीय: (CBPeripheral *) परिधीय didDiscoverCharacteristicsForService: (CBService *) सेवा त्रुटि: (NSError *) त्रुटि

    3. कॉलबैक अंदर

      - (शून्य) परिधीय: (CBPeripheral *) परिधीय didDiscoverDescriptorsForCharacteristic: (CBCharacteristic *) विशेषता त्रुटि: (NSError *) त्रुटि

    मैं कहा जाता है:

     if ([[descriptor.UUID representativeString] isEqualToString:@"2902" ]) 
         { 
          const unsigned char raw_data[] = {0x02}; 
          NSData *myData = [NSData dataWithBytes: raw_data length: 2]; 
          [self.cBCP writeValue:myData forDescriptor:descriptor]; 
         } 
    

    लेकिन मेरा ऐप writeVale में क्रैश हो जाता है:। कंसोल में त्रुटि संदेश है:

    Cannot write Client Characteristic Configuration descriptors using this method!

    कोई विचार? धन्यवाद

  • +1

    अगर वहाँ writeVale उपयोग कर किसी भी नमूना कोड है मैं सोच रहा हूँ: forDescriptor। –

    +0

    दरअसल मेरा समाधान लिखने का उपयोग नहीं करता है Value: forDescriptor। –

    +0

    क्या आप व्याख्या कर सकते हैं कि लिखने के बिना संकेत कैसे सक्षम करें Value: forDescriptor? मैं एक ही स्थान पर फंस गया हूँ ... – imcc

    उत्तर

    -1

    समस्या यह है कि आप लेखन का उपयोग नहीं कर सकते हैं: forDescriptor: क्लाइंट कॉन्फ़िगरेशन डिस्क्रिप्टर (UUID = 2902) के मान को लिखने के लिए विधि जैसा आपने किया था।

    इसके बजाय, आपको setNotifyValue का उपयोग करना चाहिए: के लिए: क्लाइंट संकेतों को कॉन्फ़िगर करने के लिए सीबीपीरिफेरल क्लास की विधि या किसी सर्वर पर किसी विशेषता के मानकों की सूचनाएं।

    0

    सुंदर पुराने सवाल है, लेकिन जब से यह उत्तर नहीं दिया गया, लगता है कि अगर विधि setNotifyValue(_:for:) आप के लिए है कि संभाल लेंगे, उसके नीचे स्थित charcateristics गुणों पर निर्भर करता है:

    • सूचित केवल: सूचनाएं सक्षम हो जाएगा।
    • केवल संकेत: संकेत सक्षम होंगे।
    • संकेत & सूचित करें: केवल अधिसूचनाएं सक्षम की जाएंगी।

    इसलिए यदि आपको संकेतों को सक्षम करने की आवश्यकता है, तो विशेषता के पास केवल संपत्ति का संकेत होना चाहिए, और अधिसूचना हटा दी जानी चाहिए।

    मुझे लगता है कि इसके पीछे मुख्य तर्क यह है कि संकेत बहुत धीमे हैं, इसलिए आईओएस हमेशा सबसे तेज़ संभव विकल्प पसंद करेगा जब तक कि यह इंगित करने की आवश्यकता न हो।

    Read more on the Apple docs