static int send_update(struct cons_state * state, uint8_t x, uint8_t y, uint8_t attrib, uint8_t val) {
uint8_t fg_color = fg_color_map[(attrib & 0x0f) % 16];
uint8_t bg_color = bg_color_map[(attrib & 0xf0) % 16];
- uint8_t buf[32];
+ uint8_t buf[64];
int ret = 0;
int i = 0;
uint64_t start, end;
rdtscll(start);
- ret = send_all(state->client_fd, buf, 32);
+ ret = send_all(state->client_fd, buf, i);
rdtscll(end);
PrintDebug(VM_NONE, VCORE_NONE, "Sendall latency=%d cycles\n", (uint32_t)(end - start));
// kill thread... ?
+ v3_lock_deinit(&(state->cons_lock));
+
V3_Free(state);
return 0;
}
static int key_handler( struct cons_state * state, uint8_t ascii) {
PrintDebug(VM_NONE, VCORE_NONE, "Character recieved: 0x%x\n", ascii);
- // printable
- if (ascii < 0x80) {
- const struct key_code * key = &(ascii_to_key_code[ascii]);
-
- if (deliver_scan_code(state, (struct key_code *)key) == -1) {
- PrintError(VM_NONE, VCORE_NONE, "Could not deliver scan code to vm\n");
- return -1;
- }
- } else if (ascii == ESC_CHAR) { // Escape Key
+ if (ascii == ESC_CHAR) { // Escape Key
// This means that another 2 characters are pending
// receive it and deliver accordingly
char esc_seq[2] = {0, 0};
} else if (esc_seq[1] == 'D') { // LEFT ARROW
struct key_code left = { 0x4B, 0 };
deliver_scan_code(state, &left);
+ }
+
+ } else if (ascii < 0x80) { // printable
+ const struct key_code * key = &(ascii_to_key_code[ascii]);
+
+ if (deliver_scan_code(state, (struct key_code *)key) == -1) {
+ PrintError(VM_NONE, VCORE_NONE, "Could not deliver scan code to vm\n");
+ return -1;
}
+
} else {
PrintError(VM_NONE, VCORE_NONE, "Invalid character received from network (%c) (code=%d)\n",
ascii, ascii);
v3_console_register_cga(frontend, &cons_ops, state);
- V3_CREATE_THREAD(cons_server, state, "Telnet Console Network Server");
+ V3_CREATE_AND_START_THREAD(cons_server, state, "Telnet Console Network Server", 0);
return 0;
}