This function is used to read the information about a pairing request.
Based on this information and the device address provided by btWaitEvent, it must be decided if the pairing should be approved and btSendPairResponse should be called with the result.
Input:
None.
Output:
passkey : DINT
The 6-digit passkey to confirm. It must typically be compared with the one shown on the remote device. This can e.g. be done by showing it on the display or by sending an SMS. If enough security is applied at other levels(e.g. password on higher level protocols), this value can also be ignored and all devices can be accepted.
Returns: INT
1
|
-
|
_BT_OK
|
|
Success
|
0
|
-
|
_BT_ERR_NOT_SUPPORTED
|
|
The API is not supported.
|
-1
|
-
|
_BT_ERR_NOT_OPEN
|
|
The adapter is not powered(see btPower).
|
-9
|
-
|
_BT_ERR_NODATA
|
|
The request is not valid. No pair request event is pending or it has expired.
|
Declaration:
FUNCTION btHandlePairRequest : INT;
VAR_INPUT
passkey : ACCESS DINT;
END_VAR;
Example:
...
THREAD_BLOCK btThread
VAR
rc : INT;
address : STRING;
ch : SINT;
pass : DINT;
END_VAR;
WHILE TRUE DO
rc := btWaitEvent(timeout:=10000, dev := address);
IF rc <> _BT_ERR_TIMEOUT THEN
DebugFmt(message:="event \1: "+address, v1:=rc);
CASE rc OF
_BT_EVENT_INCOMING:
rc := btHandleSerialPortIncomingConnection(ch := ch, port := port);
DebugFmt(message:="btHandleSerialPortIncomingConnection(\2) : \1, \3", v1:=rc, v2:=ch, v3:=port);
_BT_EVENT_DEV_FOUND:
DebugFmt(message:="Found "+address);
_BT_EVENT_DEV_LOST:
DebugFmt(message:="Lost "+address);
_BT_EVENT_PAIR_REQ:
DebugFmt(message:="Requested confirm for "+address);
rc := btHandlePairRequest(passkey:=pass);
DebugFmt(message:="Pass: \4, \1", v1:=rc, v4:=pass);
rc := guiShowMessage(message:="Is the pairing code "+dintToStr(v:=pass)+" correct?", type := 2, timeout := 20);
DebugFmt(message:="guiShowMessage: \1", v1:=rc);
rc := btSendPairResponse(accept:=(rc = 3));
DebugFmt(message:="btSendPairResponse: \1", v1:=rc);
ELSE
DebugFmt(message:="unknown event: \1", v1:=rc);
END_CASE;
btEventDone();
END_IF;
END_WHILE;
END_THREAD_BLOCK;
...
|