/* *Sendapacketofbytestothedevice
*/ int iforce_send_packet(struct iforce *iforce, u16 cmd, unsignedchar* data)
{ /* Copy data to buffer */ int n = LO(cmd); int c; int empty; int head, tail;
/* Mark an effect that was being updated as ready. That means it can be updated
* again */ staticint mark_core_as_ready(struct iforce *iforce, unsignedshort addr)
{ int i;
if (!iforce->dev->ff) return0;
for (i = 0; i < iforce->dev->ff->max_effects; ++i) { if (test_bit(FF_CORE_IS_USED, iforce->core_effects[i].flags) &&
(iforce->core_effects[i].mod1_chunk.start == addr ||
iforce->core_effects[i].mod2_chunk.start == addr)) {
clear_bit(FF_CORE_UPDATE, iforce->core_effects[i].flags); return0;
}
}
dev_warn(&iforce->dev->dev, "unused effect %04x updated !!!\n", addr); return -1;
}
/* Check if an effect was just started or stopped */
i = data[1] & 0x7f; if (data[1] & 0x80) { if (!test_and_set_bit(FF_CORE_IS_PLAYED, iforce->core_effects[i].flags)) { /* Report play event */
input_report_ff_status(dev, i, FF_STATUS_PLAYING);
}
} elseif (test_and_clear_bit(FF_CORE_IS_PLAYED, iforce->core_effects[i].flags)) { /* Report stop event */
input_report_ff_status(dev, i, FF_STATUS_STOPPED);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.