diff --git a/profiles/audio/asha.c b/profiles/audio/asha.c
index d478faf..9bd57d7 100644
--- a/profiles/audio/asha.c
+++ b/profiles/audio/asha.c
return (++asha_dev->resume_id);
}
-unsigned int bt_asha_device_stop(struct bt_asha_device *asha_dev,
- bt_asha_cb_t cb, void *user_data)
+unsigned int bt_asha_device_stop(struct bt_asha_device *asha_dev)
{
- bt_asha_stop(asha_dev->asha, cb, user_data);
+ bt_asha_stop(asha_dev->asha);
if (asha_dev->io) {
g_io_channel_shutdown(asha_dev->io, TRUE, NULL);
diff --git a/profiles/audio/asha.h b/profiles/audio/asha.h
index afd23e1..9ffd9d3 100644
--- a/profiles/audio/asha.h
+++ b/profiles/audio/asha.h
unsigned int bt_asha_device_start(struct bt_asha_device *asha_dev,
bt_asha_cb_t cb, void *user_data);
-unsigned int bt_asha_device_stop(struct bt_asha_device *asha_dev,
- bt_asha_cb_t cb, void *user_data);
+unsigned int bt_asha_device_stop(struct bt_asha_device *asha_dev);
void bt_asha_device_state_reset(struct bt_asha_device *asha_dev);
unsigned int bt_asha_device_device_get_resume_id(
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 3d1f55b..c5ae3a7 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
case ASHA_STARTED:
transport_set_state(transport, TRANSPORT_STATE_ACTIVE);
break;
- case ASHA_STOPPING:
- transport_set_state(transport, TRANSPORT_STATE_SUSPENDING);
- break;
}
}
guint ret = 0;
if (owner) {
- ret = bt_asha_device_stop(asha_dev, asha_transport_state_cb,
- owner);
+ ret = bt_asha_device_stop(asha_dev);
asha_transport_sync_state(transport, asha_dev);
+ asha_transport_state_cb(-1, owner);
} else {
- ret = bt_asha_device_stop(asha_dev, NULL, NULL);
+ ret = bt_asha_device_stop(asha_dev);
/* We won't have a callback to set the final state */
transport_set_state(transport, TRANSPORT_STATE_IDLE);
}
if (state == ASHA_STARTING || state == ASHA_STARTED) {
DBG("Cancel requested, stopping");
- bt_asha_device_stop(asha_dev, NULL, NULL);
+ bt_asha_device_stop(asha_dev);
/* We won't have a callback to set the final state */
transport_set_state(transport, TRANSPORT_STATE_IDLE);
- } else if (state == ASHA_STOPPING) {
- DBG("Cancel requested, resetting transport state");
- /* We already dispatched a stop, just reset our state */
- bt_asha_device_state_reset(asha_dev);
- transport_set_state(transport, TRANSPORT_STATE_IDLE);
}
}
diff --git a/src/shared/asha.c b/src/shared/asha.c
index c9277e0..69906fc 100644
--- a/src/shared/asha.c
+++ b/src/shared/asha.c
return 0;
}
-unsigned int bt_asha_stop(struct bt_asha *asha, bt_asha_cb_t cb,
- void *user_data)
+unsigned int bt_asha_stop(struct bt_asha *asha)
{
uint8_t acp_stop_cmd[] = {
0x02, /* STOP */
if (asha->state != ASHA_STARTED)
return 0;
- asha->state = ASHA_STOPPING;
+ asha->state = ASHA_STOPPED;
- ret = asha_send_acp(asha, acp_stop_cmd, sizeof(acp_stop_cmd),
- cb, user_data);
+ ret = asha_send_acp(asha, acp_stop_cmd, sizeof(acp_stop_cmd), NULL,
+ NULL);
asha_set_send_status(asha, false);
+ /* We reset our state without waiting for a response */
+ bt_asha_state_reset(asha);
+ DBG("ASHA stop done");
+
return ret;
}
bt_asha_cb_t state_cb = asha->state_cb;
bt_asha_cb_t state_cb_data = asha->state_cb_data;
+ DBG("ASHA status %u", status);
+
if (asha->state == ASHA_STARTING) {
if (status == 0) {
asha->state = ASHA_STARTED;
bt_asha_state_reset(asha);
DBG("ASHA start failed");
}
- } else if (asha->state == ASHA_STOPPING) {
- /* We reset our state, regardless */
- bt_asha_state_reset(asha);
- DBG("ASHA stop %s", status == 0 ? "complete" : "failed");
}
if (state_cb) {
diff --git a/src/shared/asha.h b/src/shared/asha.h
index 680a270..9e62fcd 100644
--- a/src/shared/asha.h
+++ b/src/shared/asha.h
ASHA_STOPPED = 0,
ASHA_STARTING,
ASHA_STARTED,
- ASHA_STOPPING,
};
typedef void (*bt_asha_cb_t)(int status, void *data);
unsigned int bt_asha_start(struct bt_asha *asha, bt_asha_cb_t cb,
void *user_data);
-unsigned int bt_asha_stop(struct bt_asha *asha, bt_asha_cb_t cb,
- void *user_data);
+unsigned int bt_asha_stop(struct bt_asha *asha);
bool bt_asha_set_volume(struct bt_asha *asha, int8_t volume);