@@ -171,23 +171,30 @@ int zmk_keymap_apply_position_state(uint8_t source, int layer, uint32_t position
171
171
// We want to make a copy of this, since it may be converted from
172
172
// relative to absolute before being invoked
173
173
struct zmk_behavior_binding binding = zmk_keymap [layer ][position ];
174
- const struct device * behavior ;
175
174
struct zmk_behavior_binding_event event = {
176
175
.layer = layer ,
177
176
.position = position ,
178
177
.timestamp = timestamp ,
179
178
};
180
179
181
- LOG_DBG ("layer: %d position: %d, binding name: %s" , layer , position , binding .behavior_dev );
180
+ return zmk_keymap_trigger_callbacks (& binding , event , source , pressed );
181
+ }
182
+
183
+ int zmk_keymap_trigger_callbacks (struct zmk_behavior_binding * binding ,
184
+ struct zmk_behavior_binding_event event , uint8_t source ,
185
+ bool pressed ) {
186
+
187
+ LOG_DBG ("layer: %d position: %d, binding name: %s" , event .layer , event .position ,
188
+ log_strdup (binding -> behavior_dev ));
182
189
183
- behavior = zmk_behavior_get_binding (binding . behavior_dev );
190
+ const struct device * behavior = zmk_behavior_get_binding (binding -> behavior_dev );
184
191
185
192
if (!behavior ) {
186
- LOG_WRN ("No behavior assigned to %d on layer %d" , position , layer );
193
+ LOG_WRN ("No behavior assigned to %d on layer %d" , event . position , event . layer );
187
194
return 1 ;
188
195
}
189
196
190
- int err = behavior_keymap_binding_convert_central_state_dependent_params (& binding , event );
197
+ int err = behavior_keymap_binding_convert_central_state_dependent_params (binding , event );
191
198
if (err ) {
192
199
LOG_ERR ("Failed to convert relative to absolute behavior binding (err %d)" , err );
193
200
return err ;
@@ -202,24 +209,24 @@ int zmk_keymap_apply_position_state(uint8_t source, int layer, uint32_t position
202
209
203
210
switch (locality ) {
204
211
case BEHAVIOR_LOCALITY_CENTRAL :
205
- return invoke_locally (& binding , event , pressed );
212
+ return invoke_locally (binding , event , pressed );
206
213
case BEHAVIOR_LOCALITY_EVENT_SOURCE :
207
214
#if ZMK_BLE_IS_CENTRAL
208
215
if (source == ZMK_POSITION_STATE_CHANGE_SOURCE_LOCAL ) {
209
- return invoke_locally (& binding , event , pressed );
216
+ return invoke_locally (binding , event , pressed );
210
217
} else {
211
- return zmk_split_bt_invoke_behavior (source , & binding , event , pressed );
218
+ return zmk_split_bt_invoke_behavior (source , binding , event , pressed );
212
219
}
213
220
#else
214
- return invoke_locally (& binding , event , pressed );
221
+ return invoke_locally (binding , event , pressed );
215
222
#endif
216
223
case BEHAVIOR_LOCALITY_GLOBAL :
217
224
#if ZMK_BLE_IS_CENTRAL
218
225
for (int i = 0 ; i < ZMK_SPLIT_BLE_PERIPHERAL_COUNT ; i ++ ) {
219
- zmk_split_bt_invoke_behavior (i , & binding , event , pressed );
226
+ zmk_split_bt_invoke_behavior (i , binding , event , pressed );
220
227
}
221
228
#endif
222
- return invoke_locally (& binding , event , pressed );
229
+ return invoke_locally (binding , event , pressed );
223
230
}
224
231
225
232
return - ENOTSUP ;
0 commit comments