Jump to content

Search the Community

Showing results for tags 'bluetooth'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Delphi Questions and Answers
    • Algorithms, Data Structures and Class Design
    • VCL
    • FMX
    • RTL and Delphi Object Pascal
    • Databases
    • Network, Cloud and Web
    • Windows API
    • Cross-platform
    • Delphi IDE and APIs
    • General Help
    • Delphi Third-Party
  • C++Builder Questions and Answers
    • General Help
  • General Discussions
    • Embarcadero Lounge
    • Tips / Blogs / Tutorials / Videos
    • Job Opportunities / Coder for Hire
    • I made this
  • Software Development
    • Project Planning and -Management
    • Software Testing and Quality Assurance
  • Community
    • Community Management

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Delphi-Version

Found 8 results

  1. Hello, I'm using Embarcadero C++Builder 11 Community Edition to write a simple program that connects to a selected Bluetooth LE device. After discovering desired services, I try to read the characteristics, but the program hangs when reading the service->Characteristics property. Here is my code snippet: TGUID VSP_GUID = StringToGUID("{569a1101-b87f-490c-92cb-11ba5ea5167c}"); void __fastcall TForm1::BluetoothLEServicesDiscovered(TObject * const Sender, TBluetoothGattServiceList * const AServiceList) { for(int i=0;i<AServiceList->Count;i++) { if(AServiceList->Items[i]->UUID == VSP_GUID) { TBluetoothGattService * service = AServiceList->Items[i]; if(service->Characteristics != NULL) //freezes here { } } } } The problem appears on Windows 11. On Windows 10, everything worked fine. I have tried this code on C++ Builder 12 Trial Version, but problem still exists. What should I do and where is the problem?
  2. Hi All! I have a joystick that is connected to my phone. When my application is running a can see than joysticks buttons are pressing. But when the phone screen is locked, I don't see notifications about it in my app. What can I do to receive joystick button press in my application when the screen is locked? Receivers code procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin inc(i); Memo1.Lines.Add('i=' + IntToStr(i) + '; Key=' + IntToStr(Key)); end; The result of the application, photos of joysticks and the source code are in the attachment. KeyCodeReceiver.7z
  3. Hi, for one of my Bluetooth BLE projects, the MTU has to be adjusted in the Bluetooth communication. There is a "requestMTU" function in the Bluetooth framework for this, but how can I find out to which MTU the devices have agreed on? When I call requestMTU(200) and look into the logcat profiler I see the following messages there: BluetoothGatt: configureMTU() - device: <DEVICE> mtu: 200 BluetoothGatt: onConnectionUpdated() - Device=<DEVICE> interval=6 latency=0 timeout=500 status=0 BluetoothGatt: onConfigureMTU() - Device=<DEVICE> mtu=200 status=0 There is an "onMtuChanged" handler in "Android.JNI.Bluetooth.pas", but I don't know how to implement this or where. I really just need a tip on how to include this event in a Bluetooth class from "System.Android.Bluetooth.pas". I'm sure I'll be able to grind through the event myself through the remaining levels. Does anyone have a hint or maybe an example code for me?
  4. Dear all RAD Studio Experts, I am new to Pascal and RAD Studio. I heard that we can develop cross-platform applications from within a single environment RAD Studio 10.4. I am not developing games or pure software. I am developing user GUI for my bluetooth + sensors hardware. Please guide me the correct direction, for instances, with books, user guides, examples, etc. My platform is RAD Studio Community v10.4 for Windows 10. Yours faithfully, Timmy Siu
  5. This issue shows up when writing a Characteristic from the Andorid app to the BT device. Here is the sequence using these TBluetoothGattCharactertistics methods SetValueAsUint32, then 4 bytes are transmitted. SetValueAsUint64, then 8 bytes are transmitted SetValueAsUint32, then 8 bytes are transmitted, the first four bytes contain the new 32 bits and the remaining 4 bytes contain the previous 64 bit value ************************************************************************************************************* In System.Bluetooth we find this method @line 2717(10.4.2), which all of the above methods call procedure TBluetoothGattCharacteristic.SetValueAs<T>(AValue: T; Offset: Integer); var LBytes: TBytes; begin LBytes := Value; if (Length(LBytes) < Offset + SizeOf(AValue)) then SetLength(LBytes, Offset + SizeOf(AValue)); Move(AValue, LBytes[Offset], SizeOf(AValue)); SetValue(LBytes); end; LBytes is always the last value sent (64 bits or 8bytes in the above example). As long as offset is zero (0), following a 64bit value with a 32bit or less value, will always result in SetLength not being called. And as long as offset is zero, this procedure can never reduce the size of LBytes, it can only increase the size of LBytes. ***************************************************************************************************************** my work around was to create a method in my BT wrapper that creates a variable ClrValue of type TBytes set length to 1 call the method SetValue(ClrValue) This resets the TBluetoothGattCharactertistics property Value to be length 1 and thus the SetLength in the above code will always be called and the correct number of bytes will be transmitted. ***************************************************************************************************************** I went back and checked 10.1 Update2 and the same code as above is there. This may be expected behavior, I dont know, Other than my little work around, I found no intrinsic way to change the array length and thus the bytes transmitted. If you call SetValueAsUint32, I would expect 4 bytes to be transmitted, regardless of what was transmitted before.
  6. Hi there, I wanted to call the Bluetooth initWithDictionary and its option CBCentralManagerOptionShowPowerAlertKey; There is little information out there howto create the options for this call in the right way. CBCentralManager = interface(NSObject) ['{587D1855-5B53-43DA-91AF-AF9D93FFDB9F}'] ... function initWithDelegate(delegate: id; queue: dispatch_queue_t; options: NSDictionary): id; cdecl; overload; In XCode that looks quite straightforward, but what about Fmx ? let opts = [CBCentralManagerOptionShowPowerAlertKey: false] let manager = CBCentralManager(delegate: self, queue: nil, options: opts) Info's like this doesn't help much http://codeverge.com/embarcadero.delphi.firemonkey/help-rewrite-objective-c-proced/1046099 Using NSUserDefaults to access the info list properties seems not to work, returning nil. But is NSUserDefaults the right place to look for those keys ? var LDefaults: NSUserDefaults; LDict: NSDictionary; begin LDefaults := TNSUserDefaults.Wrap(TNSUserDefaults.OCClass.standardUserDefaults); LDict := LDefaults.dictionaryForKey( CBCentralManagerOptionShowPowerAlertKey ); // ! This (LDict) is nil if Assigned(lDict) then FCentralManager := TCBCentralManager.Wrap( TCBCentralManager.Alloc.initWithDelegate( GetObjectID, 0, LDict )) I used this function to get the key constant function CBCentralManagerOptionShowPowerAlertKey : NSString; begin Result := CocoaNSStringConst(libCoreBluetooth, 'CBCentralManagerOptionShowPowerAlertKey'); end; Other ways to construct this NSDictionary look to ugly to be true: LDict := TNSDictionary.Wrap( TNSDictionary.OCClass.dictionaryWithObjectsAndKeys( <<This is Pointer to object a nil-terminated list>>)); Maybe somebody can help with some useful hints, to find the right way to access such system options ?
  7. John Kouraklis

    Triggers from Bluetooth Beacons

    Hi, I've got a beacon that has a button to trigger actions. I can configure the actions. For example, I when the user pushed the button the beacon advertises a URL. In Delphi, I can identify the beacon and I can read all the device info. What I can not figure out is how to identify that the user has triggered the button and thus the URL has been transmitted. Does anyone know how to do this? Thanks
  8. Hi, I tried all BlueTooth examples available with 10.3 Rio on my Mac (Xcode 10.1) but none of the them, compiled to Windows or macOS, work. Each time I click the scan button to list all available BlueTooth devices, I get a dialog box stating: Error BlueTooth device not found: disconnected or turned off. My BlueTooth card on my Mac is turned on and fully functional. Can anybody here use BlueTooth functionalities with Rio 10.3 on a Mojave macOS machine with Xcode 10.1? Or do you face the same problem? Thanks for any help. Steve
×