Не можете неявно преобразовать строку в CBCharacteristi c? - PullRequest
0 голосов
/ 10 апреля 2020
    public void GrantLocalUARTCredits()
    {
     if (this.PendingLocalUARTCreditsCount != 0) return;
     this.PendingLocalUARTCreditsCount = this.MaxLocalUARTCreditsCount - 
                       this.LocalUARTCreditsCount;
        Byte[]  byteData = new Byte[1];


        byteData[0] = (Byte)((this.PendingLocalUARTCreditsCount &  0xFF));
        NSData valueData = (NSData.FromArray(byteData));
      Characteristic UartRxCreditsCharacteristic = "00000003-0000-1000- 

8000-008025000000 "; (ошибка здесь)

       this.CbPeripheral.WriteValue(valueData, this.UartRxCreditsCharacteristic, CBCharacteristicWriteType.WithoutResponse);
 }

Я использую CoreBluetools в проекте xamarin C# и получаю исключение нулевой ссылки с последней строкой в ​​виде CBCharacteristi c Я думаю, что это не определено. В верхней части файла я определяю CBCharacteristi c с помощью

public CBCharacteristic UartRxCreditsCharacteristic {get ; set;}

и в этом файле ниже я установил uuid с

public static string UART_RX_CREDITS_UUID = " 00000003-0000-1000-8000-008025000000" Я могу обнаруживать, подключаться и отключаться с приложением, так как оно работает с нашим исходным устройством, но с этим устройством ему требуются кредиты RX / TX (1 кредит на каждый 20-байтовый пакет, максимум 255 кредитов). код взят из оригинального переведенного кода производителя Objective C (в C#), и ошибка в строке кода WriteValue говорит «исключение нулевой ссылки» ((ссылка на объект не установлена ​​для экземпляра объекта), как я думаю c невозможно найти при запуске кода. enter code here

Не уверен, как решить эту проблему. Ник

1 Ответ

0 голосов
/ 26 апреля 2020
    This code does the trick
    internal void Connect(CBPeripheral peripheral)
    {



        peripheral.DiscoveredService += (sender, e) =>
         {
             if (peripheral.Services == null) { return; }
             foreach (var s in peripheral.Services)
             //  var s in peripheral.Services
             {
                 //if (s.UUID.ToString().Contains("0000f100"))
                 if (s.UUID.ToString().Contains("fefb"))
                 //s = s.UUID.ToString();
                 {
                     service = s;
                     peripheral.DiscoverCharacteristics(service);
                 };
             }
         };

        peripheral.DiscoveredCharacteristic += (sender, e) =>
        {
            foreach (var c in service.Characteristics)
            {
                if (c.UUID.ToString() == (TIO_UART_RX_UUID))
                {
                    UartRxCharacteristic = c;
                }
            }


            foreach (var c in service.Characteristics)
            {

                if (c.UUID.ToString() == (TIO_UART_RX_CREDITS_UUID)) 

                {
                    UartRxCreditsCharacteristic = c;
                }
            }

            foreach (var c in service.Characteristics)
            {

                if (c.UUID.ToString() == (TIO_UART_TX_CREDITS_UUID))
                {
                    UartTxCreditsCharacteristic = c;
                    peripheral.SetNotifyValue(true, c);
                }
            }
            foreach (var c in service.Characteristics)
            {
                if (c.UUID.ToString() == (TIO_UART_TX_UUID))
               // {
...