@@ -24,32 +24,38 @@ LOG_MODULE_REGISTER(bt_mesh_le_pair_resp);
2424#define STATUS_PASSKEY_SET 0x00
2525#define STATUS_PASSKEY_NOT_SET 0x01
2626
27- static uint32_t predefined_passkey = BT_PASSKEY_INVALID ;
27+ static uint32_t predefined_passkey = INVALID_PASSKEY ;
2828
2929static int handle_reset (const struct bt_mesh_model * model , struct bt_mesh_msg_ctx * ctx ,
3030 struct net_buf_simple * buf )
3131{
3232 uint32_t passkey ;
3333 uint8_t status = STATUS_PASSKEY_SET ;
34- int err ;
3534
3635 if (buf -> len != 0 ) {
3736 return - EINVAL ;
3837 }
3938
4039 BT_MESH_MODEL_BUF_DEFINE (rsp , BT_MESH_LE_PAIR_OP , 5 );
4140
42- if (predefined_passkey != BT_PASSKEY_INVALID ) {
41+ if (predefined_passkey != INVALID_PASSKEY ) {
4342 passkey = predefined_passkey ;
4443 } else {
4544 passkey = sys_rand32_get () % 1000000 ;
45+ #if !defined(CONFIG_BT_FIXED_PASSKEY )
46+ /* Overwrite the predefined passkey with the randomly generated passkey.
47+ So the le pair responder can use the randomly generated passkey for the next pairing request.*/
48+ predefined_passkey = passkey ;
49+ #endif
4650 }
4751
48- err = bt_passkey_set (passkey );
52+ #if defined(CONFIG_BT_FIXED_PASSKEY )
53+ int err = bt_passkey_set (passkey );
4954 if (err ) {
5055 LOG_ERR ("Unable to set passkey (err: %d)" , err );
5156 status = STATUS_PASSKEY_NOT_SET ;
5257 }
58+ #endif /* CONFIG_BT_FIXED_PASSKEY */
5359
5460 bt_mesh_model_msg_init (& rsp , BT_MESH_LE_PAIR_OP );
5561 net_buf_simple_add_u8 (& rsp , BT_MESH_LE_PAIR_OP_STATUS );
@@ -86,7 +92,7 @@ const struct bt_mesh_model_op _bt_mesh_le_pair_resp_op[] = {
8692
8793static int bt_mesh_le_pair_resp_init (const struct bt_mesh_model * model )
8894{
89- bt_mesh_le_pair_resp_passkey_invalidate ( );
95+ bt_mesh_le_pair_resp_passkey_set ( INVALID_PASSKEY );
9096
9197 return 0 ;
9298}
@@ -95,7 +101,7 @@ static void bt_mesh_le_pair_resp_reset(const struct bt_mesh_model *model)
95101{
96102 int err ;
97103
98- bt_mesh_le_pair_resp_passkey_invalidate ( );
104+ bt_mesh_le_pair_resp_passkey_set ( INVALID_PASSKEY );
99105
100106 for (uint8_t id = 0 ; id < CONFIG_BT_ID_MAX ; id ++ ) {
101107 err = bt_unpair (id , NULL );
@@ -112,10 +118,22 @@ const struct bt_mesh_model_cb _bt_mesh_le_pair_resp_cb = {
112118
113119void bt_mesh_le_pair_resp_passkey_invalidate (void )
114120{
115- (void )bt_passkey_set (BT_PASSKEY_INVALID );
121+ #if defined(CONFIG_BT_FIXED_PASSKEY )
122+ (void )bt_passkey_set (INVALID_PASSKEY );
123+ #endif /* CONFIG_BT_FIXED_PASSKEY */
124+ #if defined(CONFIG_BT_APP_PASSKEY )
125+ predefined_passkey = INVALID_PASSKEY ;
126+ #endif /* CONFIG_BT_APP_PASSKEY */
116127}
117128
118129void bt_mesh_le_pair_resp_passkey_set (uint32_t passkey )
119130{
120131 predefined_passkey = passkey ;
121132}
133+
134+ const uint32_t bt_mesh_le_pair_resp_passkey_get (void )
135+ {
136+ uint32_t passkey = predefined_passkey ;
137+ predefined_passkey = INVALID_PASSKEY ;
138+ return passkey ;
139+ }
0 commit comments