57c57
< driverInitialized(false)
---
> enabled(false), touchKitEnabled(false)
68c68,69
< SERIALIZE_SCALAR(driverInitialized);
---
> SERIALIZE_SCALAR(enabled);
> SERIALIZE_SCALAR(touchKitEnabled);
76c77,78
< UNSERIALIZE_SCALAR(driverInitialized);
---
> UNSERIALIZE_SCALAR(enabled);
> UNSERIALIZE_SCALAR(touchKitEnabled);
83a86,88
> DPRINTF(PS2, "Resetting device.\n");
> enabled = false;
> touchKitEnabled = false;
109a115,117
> sendAck();
> return true;
>
110a119,123
> DPRINTF(PS2, "Disabling device.\n");
> enabled = false;
> sendAck();
> return true;
>
111a125,129
> DPRINTF(PS2, "Enabling device.\n");
> enabled = true;
> sendAck();
> return true;
>
112a131,132
> DPRINTF(PS2, "Setting defaults and disabling device.\n");
> enabled = false;
124,128c144
< sendAck();
< if (data.size() == 1) {
< send(Ps2::TouchKitId);
< send(1);
< send('A');
---
> return recvTouchKit(data);
130,136c146,149
< return false;
< } else if (data.size() == 3) {
< driverInitialized = true;
< return true;
< } else {
< return false;
< }
---
> default:
> panic("Unknown byte received: %#x\n", data[0]);
> }
> }
137a151,175
> bool
> PS2TouchKit::recvTouchKit(const std::vector<uint8_t> &data)
> {
> // Ack all incoming bytes
> sendAck();
>
> // Packet format is: 0x0A SIZE CMD DATA
> assert(data[0] == Ps2::TouchKitId);
> if (data.size() < 3 || data.size() - 2 < data[1])
> return false;
>
> const uint8_t len = data[1];
> const uint8_t cmd = data[2];
>
> // We have received at least one TouchKit diagnostic
> // command. Enabled TouchKit reports.
> touchKitEnabled = true;
>
>
> switch (cmd) {
> case TouchKitActive:
> warn_if(len != 1, "Unexpected activate packet length: %u\n", len);
> sendTouchKit('A');
> return true;
>
139c177
< panic("Unknown byte received: %d\n", data[0]);
---
> panic("Unimplemented touchscreen command: %#x\n", cmd);
143a182,191
> PS2TouchKit::sendTouchKit(const uint8_t *data, size_t size)
> {
> send(Ps2::TouchKitId);
> send(size);
> for (int i = 0; i < size; ++i)
> send(data[i]);
> }
>
>
> void
150c198
< if (!driverInitialized || sendPending() > 10)
---
> if (!enabled || !touchKitEnabled || sendPending() > 10)