Jump to content

dll bluetooth problems help


Recommended Posts

This is how you do it..

Local $dllCallError[4] = [3,"unable to use the DLL file","Unknown return type","Function not found in the Dll file"]

$dll = DllCall("btfunc.dll","dword:cdecl","BT_IsBlueSoleilStarted","long",2);2 second timeout return if not started
If @error then 
    Msgbox(0,"Error in Dll call", $dllCallError [@error])
    ElseIf $dll[0] = 1 then 
            Msgbox(0,"","BlueSoliel Started")
        Else
            Msgbox(0,"","BlueSoliel NOT Started")
EndIf

Edit: Added the dllcallError array

Edited by ChrisL
Link to comment
Share on other sites

Here is a couple more to get you started

Local $dllCallError[4] = [3,"unable to use the DLL file","Unknown return type","Function not found in the Dll file"]


$handle = DllOpen("btfunc.dll")
$dll = DllCall($handle,"dword:cdecl","BT_InitializeLibrary")
If @error then 
    Msgbox(0,"Error in Dll call", $dllCallError[@error])
    ElseIf $dll[0] = 1 then 
            Msgbox(0,"","BlueSoliel Initialized")
        Else
            Msgbox(0,"","BlueSoliel Failed to initialize")
EndIf
        


$dll = DllCall($handle,"dword:cdecl","BT_IsBlueSoleilStarted","long",2);2 second timeout return if not started
If @error then 
    Msgbox(0,"Error in Dll call", $dllCallError[@error])
    ElseIf $dll[0] = 1 then 
            Msgbox(0,"","BlueSoliel is Started")
        Else
            Msgbox(0,"","BlueSoliel NOT Started")
EndIf
        

$dll = DllCall($handle,"dword:cdecl","BT_GetVersion","dword",0) 
If @error then 
    Msgbox(0,"Error in Dll call", $dllCallError[@error])
        Else
            Msgbox(0,"BlueSoliel Version",$dll[0])  
EndIf

DllClose($handle)
Link to comment
Share on other sites

@chrisl

if u dont mind me askin can u tell me what u use the :cdecl for and y dos this not work

$dll = DllCall("btfunc.dll", "dword:cdecl", "BT_InquireDevices", "long", 2)

thanks again

Edited by 7h331337
Link to comment
Share on other sites

I used cdecl because that is what is needed, if you don't it crashes. Look at dllcall inthe help file.

I'll have a look at the other thing either later or tomorrow, I've got 3 kids running round at the moment so I can't really do it, the other problem I've got is I've loaded the IVT software but I don't actually have a Bluetooth dongle so I'm limited as to what I can do.

Link to comment
Share on other sites

thank u so mutch chris this has been muttley :) for me lol

I'm not convinced this is right.. I keep getting an error but it could be that I don't have a Bluetooth dongle.. or more likely I don't really understand the dllStruct stuff properly. There are a couple of values that don't seem to be difined in the API document, so maybe there is another header file kicking around that contains those values?

Global const $DEVICE_ADDRESS_LENGTH = 6
Global const $DEVICE_CLASS_LENGTH = 3
Global const $MAX_DEVICE_NAME_LENGTH = 64
        
$str        = "DWORD;byte[" & $DEVICE_ADDRESS_LENGTH & "];byte[" & $DEVICE_CLASS_LENGTH & "];char[" & $MAX_DEVICE_NAME_LENGTH & "];int"
$struct_BLUETOOTH_DEVICE_INFO = DllStructCreate($str)
$lpDevsListLength = DllStructCreate("DWORD")

$dll = DllCall($handle,"dword:cdecl","BT_InquireDevices","char","INQUIRY_GENERAL","char",0x30,"long*",DllStructGetPtr($lpDevsListLength),"long*",DllStructGetPtr($struct_BLUETOOTH_DEVICE_INFO))
If @error then 
    Msgbox(0,"Error in Dll call", $dllCallError[@error])

        Else
            _arrayDisplay($dll,"BT_InquireDevices")
EndIf

Edit: this is what the API doc said, maybe one of the cleverer people can figure out what is wrong :(

5.15 BT_InquireDevices

This function inquires nearby Bluetooth devices or gets paired devices from BlueSoleil’s

history records.

DWORD BT_InquireDevices(

/* [in] */ UCHAR ucInqMode,

/* [in] */ UCHAR ucInqTimeLen,

/* [in, out] */ DWORD* lpDevsListLength,

/* [out] */ PBLUETOOTH_DEVICE_INFO pDevsList,

);

Parameters

ucInqMode

[in] Specifies the inquiry mode:

Value Meaning

INQUIRY_GENERAL Inquires using general-discovery mode

INQUIRY_LIMITED Inquires using limited-discovery mode

INQUIRY_PAIRED Gets paired devices from history list

without performing Bluetooth inquiry.

INQUIRY_GENERAL_REFRESH

Inquires using general-discovery mode,

clears devices in memory before

performing the inquiry.

ucInqTimeLen

[in] Maximum amount of time before the inquiry is halted.

Range: 0x01 – 0x30

Time = N * 1.28 sec

Range: 1.28 – 61.44 Sec.

lpDevsListLength

[in,out] Pointer to a variable that specifies the length of the buffer pointed by

lpDevsList, after the function returns, the variable receives the length of data

copied to the buffer.

If value (*lpDevsListLength) is zero, the function returns immediately after

Bluetooth inquiry is started, inquiry results will be reported if callback function for

EVENT_INQUIRY_DEVICE_REPORT is registered.

lpDevsList

[out] Pointer to a BLUETOOTH_DEVICE_INFO array buffer that receives the

device information. This parameter can be NULL if (*lpDevsListLength) is zero..

Return Values

BTSTATUS_SUCCESS if the function succeeds.

BTSTATUS_PARAMETER_ERROR if parameter(s) is error.

BTSTATUS_SYSTEM_ERROR if system error(s) occurs.

BTSTATUS_BT_NOT_READY if Bluetooth is not started.

Edited by ChrisL
Link to comment
Share on other sites

ye i get it saying unable to use the DLL file but i put the dll in the same dir as script is this the problem u got chris

Yes but it's nothing to do with the location of the dll, because it works OK on the other functions and I used the same handle.

It is the struct(s) that are wrong I'm pretty sure about that..

This is what the doc says about the struct

typedef struct _BLUETOOTH_DEVICE_INFO {

DWORD dwSize;

BYTE address[DEVICE_ADDRESS_LENGTH];

BYTE classOfDevice[DEVICE_CLASS_LENGTH];

CHAR szName[MAX_DEVICE_NAME_LENGTH];

BOOL bPaired;

} BLUETOOTH_DEVICE_INFO, *PBLUETOOTH_DEVICE_INFO;

Members

dwSize

Size of the structure, in bytes.

address

Address of the device.

classOfDevice

Class of the device.

szName

A null-terminated string specifying the Bluetooth device name.

bPaired

Specifies whether the device is paired, authenticated or bonded. All

authenticated devices are remembered.

Link to comment
Share on other sites

i just found this in the api do i need to call all of these (on page 5)

7. Typical API Calling Sequence:

1) BT_InitializeLibrary

2) BT_RegisterCallback

3) BT_InquireDevices

4) BT_PairDevice

5) BT_BrowseServices

6) BT_ConnectService

7) BT_DisconnectService

8) BT_UninitializeLibrary

Edited by 7h331337
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...