mirror of https://github.com/xqemu/xqemu.git
Merge remote-tracking branch 'qmp/queue/qmp' into staging
* qmp/queue/qmp: qmp: add DEVICE_TRAY_MOVED event ide: drop ide_tray_state_post_load() block: Don't call bdrv_eject() if the tray state didn't change block: bdrv_eject(): Make eject_flag a real bool block: Rename bdrv_mon_event() & BlockMonEventAction
This commit is contained in:
commit
7c1daf341f
|
@ -26,6 +26,24 @@ Example:
|
||||||
Note: If action is "stop", a STOP event will eventually follow the
|
Note: If action is "stop", a STOP event will eventually follow the
|
||||||
BLOCK_IO_ERROR event.
|
BLOCK_IO_ERROR event.
|
||||||
|
|
||||||
|
DEVICE_TRAY_MOVED
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
It's emitted whenever the tray of a removable device is moved by the guest
|
||||||
|
or by HMP/QMP commands.
|
||||||
|
|
||||||
|
Data:
|
||||||
|
|
||||||
|
- "device": device name (json-string)
|
||||||
|
- "tray-open": true if the tray has been opened or false if it has been closed
|
||||||
|
(json-bool)
|
||||||
|
|
||||||
|
{ "event": "DEVICE_TRAY_MOVED",
|
||||||
|
"data": { "device": "ide1-cd0",
|
||||||
|
"tray-open": true
|
||||||
|
},
|
||||||
|
"timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
|
||||||
|
|
||||||
RESET
|
RESET
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
84
block.c
84
block.c
|
@ -943,10 +943,59 @@ void bdrv_set_dev_ops(BlockDriverState *bs, const BlockDevOps *ops,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bdrv_emit_qmp_error_event(const BlockDriverState *bdrv,
|
||||||
|
BlockQMPEventAction action, int is_read)
|
||||||
|
{
|
||||||
|
QObject *data;
|
||||||
|
const char *action_str;
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
|
case BDRV_ACTION_REPORT:
|
||||||
|
action_str = "report";
|
||||||
|
break;
|
||||||
|
case BDRV_ACTION_IGNORE:
|
||||||
|
action_str = "ignore";
|
||||||
|
break;
|
||||||
|
case BDRV_ACTION_STOP:
|
||||||
|
action_str = "stop";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
data = qobject_from_jsonf("{ 'device': %s, 'action': %s, 'operation': %s }",
|
||||||
|
bdrv->device_name,
|
||||||
|
action_str,
|
||||||
|
is_read ? "read" : "write");
|
||||||
|
monitor_protocol_event(QEVENT_BLOCK_IO_ERROR, data);
|
||||||
|
|
||||||
|
qobject_decref(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bdrv_emit_qmp_eject_event(BlockDriverState *bs, bool ejected)
|
||||||
|
{
|
||||||
|
QObject *data;
|
||||||
|
|
||||||
|
data = qobject_from_jsonf("{ 'device': %s, 'tray-open': %i }",
|
||||||
|
bdrv_get_device_name(bs), ejected);
|
||||||
|
monitor_protocol_event(QEVENT_DEVICE_TRAY_MOVED, data);
|
||||||
|
|
||||||
|
qobject_decref(data);
|
||||||
|
}
|
||||||
|
|
||||||
static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load)
|
static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load)
|
||||||
{
|
{
|
||||||
if (bs->dev_ops && bs->dev_ops->change_media_cb) {
|
if (bs->dev_ops && bs->dev_ops->change_media_cb) {
|
||||||
|
bool tray_was_closed = !bdrv_dev_is_tray_open(bs);
|
||||||
bs->dev_ops->change_media_cb(bs->dev_opaque, load);
|
bs->dev_ops->change_media_cb(bs->dev_opaque, load);
|
||||||
|
if (tray_was_closed) {
|
||||||
|
/* tray open */
|
||||||
|
bdrv_emit_qmp_eject_event(bs, true);
|
||||||
|
}
|
||||||
|
if (load) {
|
||||||
|
/* tray close */
|
||||||
|
bdrv_emit_qmp_eject_event(bs, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2293,35 +2342,6 @@ int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
|
||||||
return data.ret;
|
return data.ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bdrv_mon_event(const BlockDriverState *bdrv,
|
|
||||||
BlockMonEventAction action, int is_read)
|
|
||||||
{
|
|
||||||
QObject *data;
|
|
||||||
const char *action_str;
|
|
||||||
|
|
||||||
switch (action) {
|
|
||||||
case BDRV_ACTION_REPORT:
|
|
||||||
action_str = "report";
|
|
||||||
break;
|
|
||||||
case BDRV_ACTION_IGNORE:
|
|
||||||
action_str = "ignore";
|
|
||||||
break;
|
|
||||||
case BDRV_ACTION_STOP:
|
|
||||||
action_str = "stop";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
data = qobject_from_jsonf("{ 'device': %s, 'action': %s, 'operation': %s }",
|
|
||||||
bdrv->device_name,
|
|
||||||
action_str,
|
|
||||||
is_read ? "read" : "write");
|
|
||||||
monitor_protocol_event(QEVENT_BLOCK_IO_ERROR, data);
|
|
||||||
|
|
||||||
qobject_decref(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
BlockInfoList *qmp_query_block(Error **errp)
|
BlockInfoList *qmp_query_block(Error **errp)
|
||||||
{
|
{
|
||||||
BlockInfoList *head = NULL, *cur_item = NULL;
|
BlockInfoList *head = NULL, *cur_item = NULL;
|
||||||
|
@ -3609,13 +3629,17 @@ int bdrv_media_changed(BlockDriverState *bs)
|
||||||
/**
|
/**
|
||||||
* If eject_flag is TRUE, eject the media. Otherwise, close the tray
|
* If eject_flag is TRUE, eject the media. Otherwise, close the tray
|
||||||
*/
|
*/
|
||||||
void bdrv_eject(BlockDriverState *bs, int eject_flag)
|
void bdrv_eject(BlockDriverState *bs, bool eject_flag)
|
||||||
{
|
{
|
||||||
BlockDriver *drv = bs->drv;
|
BlockDriver *drv = bs->drv;
|
||||||
|
|
||||||
if (drv && drv->bdrv_eject) {
|
if (drv && drv->bdrv_eject) {
|
||||||
drv->bdrv_eject(bs, eject_flag);
|
drv->bdrv_eject(bs, eject_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bs->device_name[0] != '\0') {
|
||||||
|
bdrv_emit_qmp_eject_event(bs, eject_flag);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
8
block.h
8
block.h
|
@ -85,15 +85,15 @@ typedef enum {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BDRV_ACTION_REPORT, BDRV_ACTION_IGNORE, BDRV_ACTION_STOP
|
BDRV_ACTION_REPORT, BDRV_ACTION_IGNORE, BDRV_ACTION_STOP
|
||||||
} BlockMonEventAction;
|
} BlockQMPEventAction;
|
||||||
|
|
||||||
void bdrv_iostatus_enable(BlockDriverState *bs);
|
void bdrv_iostatus_enable(BlockDriverState *bs);
|
||||||
void bdrv_iostatus_reset(BlockDriverState *bs);
|
void bdrv_iostatus_reset(BlockDriverState *bs);
|
||||||
void bdrv_iostatus_disable(BlockDriverState *bs);
|
void bdrv_iostatus_disable(BlockDriverState *bs);
|
||||||
bool bdrv_iostatus_is_enabled(const BlockDriverState *bs);
|
bool bdrv_iostatus_is_enabled(const BlockDriverState *bs);
|
||||||
void bdrv_iostatus_set_err(BlockDriverState *bs, int error);
|
void bdrv_iostatus_set_err(BlockDriverState *bs, int error);
|
||||||
void bdrv_mon_event(const BlockDriverState *bdrv,
|
void bdrv_emit_qmp_error_event(const BlockDriverState *bdrv,
|
||||||
BlockMonEventAction action, int is_read);
|
BlockQMPEventAction action, int is_read);
|
||||||
void bdrv_info_print(Monitor *mon, const QObject *data);
|
void bdrv_info_print(Monitor *mon, const QObject *data);
|
||||||
void bdrv_info(Monitor *mon, QObject **ret_data);
|
void bdrv_info(Monitor *mon, QObject **ret_data);
|
||||||
void bdrv_stats_print(Monitor *mon, const QObject *data);
|
void bdrv_stats_print(Monitor *mon, const QObject *data);
|
||||||
|
@ -265,7 +265,7 @@ int bdrv_enable_write_cache(BlockDriverState *bs);
|
||||||
int bdrv_is_inserted(BlockDriverState *bs);
|
int bdrv_is_inserted(BlockDriverState *bs);
|
||||||
int bdrv_media_changed(BlockDriverState *bs);
|
int bdrv_media_changed(BlockDriverState *bs);
|
||||||
void bdrv_lock_medium(BlockDriverState *bs, bool locked);
|
void bdrv_lock_medium(BlockDriverState *bs, bool locked);
|
||||||
void bdrv_eject(BlockDriverState *bs, int eject_flag);
|
void bdrv_eject(BlockDriverState *bs, bool eject_flag);
|
||||||
void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
|
void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
|
||||||
BlockDriverState *bdrv_find(const char *name);
|
BlockDriverState *bdrv_find(const char *name);
|
||||||
BlockDriverState *bdrv_next(BlockDriverState *bs);
|
BlockDriverState *bdrv_next(BlockDriverState *bs);
|
||||||
|
|
|
@ -994,7 +994,7 @@ static int floppy_media_changed(BlockDriverState *bs)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void floppy_eject(BlockDriverState *bs, int eject_flag)
|
static void floppy_eject(BlockDriverState *bs, bool eject_flag)
|
||||||
{
|
{
|
||||||
BDRVRawState *s = bs->opaque;
|
BDRVRawState *s = bs->opaque;
|
||||||
int fd;
|
int fd;
|
||||||
|
@ -1084,7 +1084,7 @@ static int cdrom_is_inserted(BlockDriverState *bs)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cdrom_eject(BlockDriverState *bs, int eject_flag)
|
static void cdrom_eject(BlockDriverState *bs, bool eject_flag)
|
||||||
{
|
{
|
||||||
BDRVRawState *s = bs->opaque;
|
BDRVRawState *s = bs->opaque;
|
||||||
|
|
||||||
|
@ -1194,7 +1194,7 @@ static int cdrom_is_inserted(BlockDriverState *bs)
|
||||||
return raw_getlength(bs) > 0;
|
return raw_getlength(bs) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cdrom_eject(BlockDriverState *bs, int eject_flag)
|
static void cdrom_eject(BlockDriverState *bs, bool eject_flag)
|
||||||
{
|
{
|
||||||
BDRVRawState *s = bs->opaque;
|
BDRVRawState *s = bs->opaque;
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ static int raw_media_changed(BlockDriverState *bs)
|
||||||
return bdrv_media_changed(bs->file);
|
return bdrv_media_changed(bs->file);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void raw_eject(BlockDriverState *bs, int eject_flag)
|
static void raw_eject(BlockDriverState *bs, bool eject_flag)
|
||||||
{
|
{
|
||||||
bdrv_eject(bs->file, eject_flag);
|
bdrv_eject(bs->file, eject_flag);
|
||||||
}
|
}
|
||||||
|
|
|
@ -197,7 +197,7 @@ struct BlockDriver {
|
||||||
/* removable device specific */
|
/* removable device specific */
|
||||||
int (*bdrv_is_inserted)(BlockDriverState *bs);
|
int (*bdrv_is_inserted)(BlockDriverState *bs);
|
||||||
int (*bdrv_media_changed)(BlockDriverState *bs);
|
int (*bdrv_media_changed)(BlockDriverState *bs);
|
||||||
void (*bdrv_eject)(BlockDriverState *bs, int eject_flag);
|
void (*bdrv_eject)(BlockDriverState *bs, bool eject_flag);
|
||||||
void (*bdrv_lock_medium)(BlockDriverState *bs, bool locked);
|
void (*bdrv_lock_medium)(BlockDriverState *bs, bool locked);
|
||||||
|
|
||||||
/* to control generic scsi devices */
|
/* to control generic scsi devices */
|
||||||
|
|
|
@ -883,8 +883,11 @@ static void cmd_start_stop_unit(IDEState *s, uint8_t* buf)
|
||||||
ide_atapi_cmd_error(s, sense, ASC_MEDIA_REMOVAL_PREVENTED);
|
ide_atapi_cmd_error(s, sense, ASC_MEDIA_REMOVAL_PREVENTED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bdrv_eject(s->bs, !start);
|
|
||||||
s->tray_open = !start;
|
if (s->tray_open != !start) {
|
||||||
|
bdrv_eject(s->bs, !start);
|
||||||
|
s->tray_open = !start;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ide_atapi_cmd_ok(s);
|
ide_atapi_cmd_ok(s);
|
||||||
|
|
|
@ -519,7 +519,7 @@ static int ide_handle_rw_error(IDEState *s, int error, int op)
|
||||||
BlockErrorAction action = bdrv_get_on_error(s->bs, is_read);
|
BlockErrorAction action = bdrv_get_on_error(s->bs, is_read);
|
||||||
|
|
||||||
if (action == BLOCK_ERR_IGNORE) {
|
if (action == BLOCK_ERR_IGNORE) {
|
||||||
bdrv_mon_event(s->bs, BDRV_ACTION_IGNORE, is_read);
|
bdrv_emit_qmp_error_event(s->bs, BDRV_ACTION_IGNORE, is_read);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -527,7 +527,7 @@ static int ide_handle_rw_error(IDEState *s, int error, int op)
|
||||||
|| action == BLOCK_ERR_STOP_ANY) {
|
|| action == BLOCK_ERR_STOP_ANY) {
|
||||||
s->bus->dma->ops->set_unit(s->bus->dma, s->unit);
|
s->bus->dma->ops->set_unit(s->bus->dma, s->unit);
|
||||||
s->bus->error_status = op;
|
s->bus->error_status = op;
|
||||||
bdrv_mon_event(s->bs, BDRV_ACTION_STOP, is_read);
|
bdrv_emit_qmp_error_event(s->bs, BDRV_ACTION_STOP, is_read);
|
||||||
vm_stop(RUN_STATE_IO_ERROR);
|
vm_stop(RUN_STATE_IO_ERROR);
|
||||||
bdrv_iostatus_set_err(s->bs, error);
|
bdrv_iostatus_set_err(s->bs, error);
|
||||||
} else {
|
} else {
|
||||||
|
@ -537,7 +537,7 @@ static int ide_handle_rw_error(IDEState *s, int error, int op)
|
||||||
} else {
|
} else {
|
||||||
ide_rw_error(s);
|
ide_rw_error(s);
|
||||||
}
|
}
|
||||||
bdrv_mon_event(s->bs, BDRV_ACTION_REPORT, is_read);
|
bdrv_emit_qmp_error_event(s->bs, BDRV_ACTION_REPORT, is_read);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -2077,15 +2077,6 @@ static bool ide_drive_pio_state_needed(void *opaque)
|
||||||
|| (s->bus->error_status & BM_STATUS_PIO_RETRY);
|
|| (s->bus->error_status & BM_STATUS_PIO_RETRY);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ide_tray_state_post_load(void *opaque, int version_id)
|
|
||||||
{
|
|
||||||
IDEState *s = opaque;
|
|
||||||
|
|
||||||
bdrv_eject(s->bs, s->tray_open);
|
|
||||||
bdrv_lock_medium(s->bs, s->tray_locked);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool ide_tray_state_needed(void *opaque)
|
static bool ide_tray_state_needed(void *opaque)
|
||||||
{
|
{
|
||||||
IDEState *s = opaque;
|
IDEState *s = opaque;
|
||||||
|
@ -2125,7 +2116,6 @@ static const VMStateDescription vmstate_ide_tray_state = {
|
||||||
.version_id = 1,
|
.version_id = 1,
|
||||||
.minimum_version_id = 1,
|
.minimum_version_id = 1,
|
||||||
.minimum_version_id_old = 1,
|
.minimum_version_id_old = 1,
|
||||||
.post_load = ide_tray_state_post_load,
|
|
||||||
.fields = (VMStateField[]) {
|
.fields = (VMStateField[]) {
|
||||||
VMSTATE_BOOL(tray_open, IDEState),
|
VMSTATE_BOOL(tray_open, IDEState),
|
||||||
VMSTATE_BOOL(tray_locked, IDEState),
|
VMSTATE_BOOL(tray_locked, IDEState),
|
||||||
|
|
|
@ -291,14 +291,14 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int error)
|
||||||
BlockErrorAction action = bdrv_get_on_error(s->qdev.conf.bs, is_read);
|
BlockErrorAction action = bdrv_get_on_error(s->qdev.conf.bs, is_read);
|
||||||
|
|
||||||
if (action == BLOCK_ERR_IGNORE) {
|
if (action == BLOCK_ERR_IGNORE) {
|
||||||
bdrv_mon_event(s->qdev.conf.bs, BDRV_ACTION_IGNORE, is_read);
|
bdrv_emit_qmp_error_event(s->qdev.conf.bs, BDRV_ACTION_IGNORE, is_read);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((error == ENOSPC && action == BLOCK_ERR_STOP_ENOSPC)
|
if ((error == ENOSPC && action == BLOCK_ERR_STOP_ENOSPC)
|
||||||
|| action == BLOCK_ERR_STOP_ANY) {
|
|| action == BLOCK_ERR_STOP_ANY) {
|
||||||
|
|
||||||
bdrv_mon_event(s->qdev.conf.bs, BDRV_ACTION_STOP, is_read);
|
bdrv_emit_qmp_error_event(s->qdev.conf.bs, BDRV_ACTION_STOP, is_read);
|
||||||
vm_stop(RUN_STATE_IO_ERROR);
|
vm_stop(RUN_STATE_IO_ERROR);
|
||||||
bdrv_iostatus_set_err(s->qdev.conf.bs, error);
|
bdrv_iostatus_set_err(s->qdev.conf.bs, error);
|
||||||
scsi_req_retry(&r->req);
|
scsi_req_retry(&r->req);
|
||||||
|
@ -317,7 +317,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int error)
|
||||||
scsi_check_condition(r, SENSE_CODE(IO_ERROR));
|
scsi_check_condition(r, SENSE_CODE(IO_ERROR));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
bdrv_mon_event(s->qdev.conf.bs, BDRV_ACTION_REPORT, is_read);
|
bdrv_emit_qmp_error_event(s->qdev.conf.bs, BDRV_ACTION_REPORT, is_read);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -1116,8 +1116,11 @@ static int scsi_disk_emulate_start_stop(SCSIDiskReq *r)
|
||||||
: SENSE_CODE(NOT_READY_REMOVAL_PREVENTED));
|
: SENSE_CODE(NOT_READY_REMOVAL_PREVENTED));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
bdrv_eject(s->qdev.conf.bs, !start);
|
|
||||||
s->tray_open = !start;
|
if (s->tray_open != !start) {
|
||||||
|
bdrv_eject(s->qdev.conf.bs, !start);
|
||||||
|
s->tray_open = !start;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq *req, int error,
|
||||||
VirtIOBlock *s = req->dev;
|
VirtIOBlock *s = req->dev;
|
||||||
|
|
||||||
if (action == BLOCK_ERR_IGNORE) {
|
if (action == BLOCK_ERR_IGNORE) {
|
||||||
bdrv_mon_event(s->bs, BDRV_ACTION_IGNORE, is_read);
|
bdrv_emit_qmp_error_event(s->bs, BDRV_ACTION_IGNORE, is_read);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,14 +77,14 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq *req, int error,
|
||||||
|| action == BLOCK_ERR_STOP_ANY) {
|
|| action == BLOCK_ERR_STOP_ANY) {
|
||||||
req->next = s->rq;
|
req->next = s->rq;
|
||||||
s->rq = req;
|
s->rq = req;
|
||||||
bdrv_mon_event(s->bs, BDRV_ACTION_STOP, is_read);
|
bdrv_emit_qmp_error_event(s->bs, BDRV_ACTION_STOP, is_read);
|
||||||
vm_stop(RUN_STATE_IO_ERROR);
|
vm_stop(RUN_STATE_IO_ERROR);
|
||||||
bdrv_iostatus_set_err(s->bs, error);
|
bdrv_iostatus_set_err(s->bs, error);
|
||||||
} else {
|
} else {
|
||||||
virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
|
virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
|
||||||
bdrv_acct_done(s->bs, &req->acct);
|
bdrv_acct_done(s->bs, &req->acct);
|
||||||
g_free(req);
|
g_free(req);
|
||||||
bdrv_mon_event(s->bs, BDRV_ACTION_REPORT, is_read);
|
bdrv_emit_qmp_error_event(s->bs, BDRV_ACTION_REPORT, is_read);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -485,6 +485,9 @@ void monitor_protocol_event(MonitorEvent event, QObject *data)
|
||||||
case QEVENT_BLOCK_JOB_CANCELLED:
|
case QEVENT_BLOCK_JOB_CANCELLED:
|
||||||
event_name = "BLOCK_JOB_CANCELLED";
|
event_name = "BLOCK_JOB_CANCELLED";
|
||||||
break;
|
break;
|
||||||
|
case QEVENT_DEVICE_TRAY_MOVED:
|
||||||
|
event_name = "DEVICE_TRAY_MOVED";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
abort();
|
abort();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -38,6 +38,7 @@ typedef enum MonitorEvent {
|
||||||
QEVENT_SPICE_DISCONNECTED,
|
QEVENT_SPICE_DISCONNECTED,
|
||||||
QEVENT_BLOCK_JOB_COMPLETED,
|
QEVENT_BLOCK_JOB_COMPLETED,
|
||||||
QEVENT_BLOCK_JOB_CANCELLED,
|
QEVENT_BLOCK_JOB_CANCELLED,
|
||||||
|
QEVENT_DEVICE_TRAY_MOVED,
|
||||||
QEVENT_MAX,
|
QEVENT_MAX,
|
||||||
} MonitorEvent;
|
} MonitorEvent;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue