emulator: Add support for delete a hook

This commit is contained in:
Eder Ruiz Maria 2013-07-20 20:17:16 -04:00 committed by Johan Hedberg
parent 5fd080f471
commit 653a17cc3b
4 changed files with 59 additions and 0 deletions

View File

@ -1746,3 +1746,28 @@ int btdev_add_hook(struct btdev *btdev, enum btdev_hook_type type,
return -1;
}
bool btdev_del_hook(struct btdev *btdev, enum btdev_hook_type type,
uint16_t opcode)
{
int i;
if (!btdev)
return false;
for (i = 0; i < MAX_HOOK_ENTRIES; i++) {
if (btdev->hook_list[i] == NULL)
continue;
if (btdev->hook_list[i]->type != type ||
btdev->hook_list[i]->opcode != opcode)
continue;
free(btdev->hook_list[i]);
btdev->hook_list[i] = NULL;
return true;
}
return false;
}

View File

@ -89,3 +89,6 @@ void btdev_receive_h4(struct btdev *btdev, const void *data, uint16_t len);
int btdev_add_hook(struct btdev *btdev, enum btdev_hook_type type,
uint16_t opcode, btdev_hook_func handler,
void *user_data);
bool btdev_del_hook(struct btdev *btdev, enum btdev_hook_type type,
uint16_t opcode);

View File

@ -419,3 +419,31 @@ int hciemu_add_hook(struct hciemu *hciemu, enum hciemu_hook_type type,
return btdev_add_hook(hciemu->master_dev, hook_type, opcode, function,
user_data);
}
bool hciemu_del_hook(struct hciemu *hciemu, enum hciemu_hook_type type,
uint16_t opcode)
{
enum btdev_hook_type hook_type;
if (!hciemu)
return false;
switch (type) {
case HCIEMU_HOOK_PRE_CMD:
hook_type = BTDEV_HOOK_PRE_CMD;
break;
case HCIEMU_HOOK_POST_CMD:
hook_type = BTDEV_HOOK_POST_CMD;
break;
case HCIEMU_HOOK_PRE_EVT:
hook_type = BTDEV_HOOK_PRE_EVT;
break;
case HCIEMU_HOOK_POST_EVT:
hook_type = BTDEV_HOOK_POST_EVT;
break;
default:
return false;
}
return btdev_del_hook(hciemu->master_dev, hook_type, opcode);
}

View File

@ -63,3 +63,6 @@ bool hciemu_add_master_post_command_hook(struct hciemu *hciemu,
int hciemu_add_hook(struct hciemu *hciemu, enum hciemu_hook_type type,
uint16_t opcode, hciemu_hook_func_t function,
void *user_data);
bool hciemu_del_hook(struct hciemu *hciemu, enum hciemu_hook_type type,
uint16_t opcode);