]> git.proxmox.com Git - mirror_qemu.git/blobdiff - chardev/baum.c
bsd-user: Implement several get/set system calls:
[mirror_qemu.git] / chardev / baum.c
index 79d618e350450f43786353fe5d956a1e3e5e1c45..a1d9784d92d11615de783e18e9180eaf09e35752 100644 (file)
 
 #define ESC 0x1B
 
-#define BAUM_REQ_DisplayData           0x01
-#define BAUM_REQ_GetVersionNumber      0x05
-#define BAUM_REQ_GetKeys               0x08
-#define BAUM_REQ_SetMode               0x12
-#define BAUM_REQ_SetProtocol           0x15
-#define BAUM_REQ_GetDeviceIdentity     0x84
-#define BAUM_REQ_GetSerialNumber       0x8A
-
-#define BAUM_RSP_CellCount             0x01
-#define BAUM_RSP_VersionNumber         0x05
-#define BAUM_RSP_ModeSetting           0x11
-#define BAUM_RSP_CommunicationChannel  0x16
-#define BAUM_RSP_PowerdownSignal       0x17
-#define BAUM_RSP_HorizontalSensors     0x20
-#define BAUM_RSP_VerticalSensors       0x21
-#define BAUM_RSP_RoutingKeys           0x22
-#define BAUM_RSP_Switches              0x23
-#define BAUM_RSP_TopKeys               0x24
-#define BAUM_RSP_HorizontalSensor      0x25
-#define BAUM_RSP_VerticalSensor                0x26
-#define BAUM_RSP_RoutingKey            0x27
-#define BAUM_RSP_FrontKeys6            0x28
-#define BAUM_RSP_BackKeys6             0x29
-#define BAUM_RSP_CommandKeys           0x2B
-#define BAUM_RSP_FrontKeys10           0x2C
-#define BAUM_RSP_BackKeys10            0x2D
-#define BAUM_RSP_EntryKeys             0x33
-#define BAUM_RSP_JoyStick              0x34
-#define BAUM_RSP_ErrorCode             0x40
-#define BAUM_RSP_InfoBlock             0x42
-#define BAUM_RSP_DeviceIdentity                0x84
-#define BAUM_RSP_SerialNumber          0x8A
-#define BAUM_RSP_BluetoothName         0x8C
+#define BAUM_REQ_DisplayData            0x01
+#define BAUM_REQ_GetVersionNumber       0x05
+#define BAUM_REQ_GetKeys                0x08
+#define BAUM_REQ_SetMode                0x12
+#define BAUM_REQ_SetProtocol            0x15
+#define BAUM_REQ_GetDeviceIdentity      0x84
+#define BAUM_REQ_GetSerialNumber        0x8A
+
+#define BAUM_RSP_CellCount              0x01
+#define BAUM_RSP_VersionNumber          0x05
+#define BAUM_RSP_ModeSetting            0x11
+#define BAUM_RSP_CommunicationChannel   0x16
+#define BAUM_RSP_PowerdownSignal        0x17
+#define BAUM_RSP_HorizontalSensors      0x20
+#define BAUM_RSP_VerticalSensors        0x21
+#define BAUM_RSP_RoutingKeys            0x22
+#define BAUM_RSP_Switches               0x23
+#define BAUM_RSP_TopKeys                0x24
+#define BAUM_RSP_HorizontalSensor       0x25
+#define BAUM_RSP_VerticalSensor         0x26
+#define BAUM_RSP_RoutingKey             0x27
+#define BAUM_RSP_FrontKeys6             0x28
+#define BAUM_RSP_BackKeys6              0x29
+#define BAUM_RSP_CommandKeys            0x2B
+#define BAUM_RSP_FrontKeys10            0x2C
+#define BAUM_RSP_BackKeys10             0x2D
+#define BAUM_RSP_EntryKeys              0x33
+#define BAUM_RSP_JoyStick               0x34
+#define BAUM_RSP_ErrorCode              0x40
+#define BAUM_RSP_InfoBlock              0x42
+#define BAUM_RSP_DeviceIdentity         0x84
+#define BAUM_RSP_SerialNumber           0x8A
+#define BAUM_RSP_BluetoothName          0x8C
 
 #define BAUM_TL1 0x01
 #define BAUM_TL2 0x02
@@ -87,6 +87,9 @@
 
 #define BUF_SIZE 256
 
+#define X_MAX   84
+#define Y_MAX   1
+
 struct BaumChardev {
     Chardev parent;
 
@@ -244,11 +247,11 @@ static int baum_deferred_init(BaumChardev *baum)
         brlapi_perror("baum: brlapi__getDisplaySize");
         return 0;
     }
-    if (baum->y > 1) {
-        baum->y = 1;
+    if (baum->y > Y_MAX) {
+        baum->y = Y_MAX;
     }
-    if (baum->x > 84) {
-        baum->x = 84;
+    if (baum->x > X_MAX) {
+        baum->x = X_MAX;
     }
 
     con = qemu_console_lookup_by_index(0);
@@ -296,7 +299,8 @@ static void baum_chr_accept_input(struct Chardev *chr)
 static void baum_write_packet(BaumChardev *baum, const uint8_t *buf, int len)
 {
     Chardev *chr = CHARDEV(baum);
-    uint8_t io_buf[1 + 2 * len], *cur = io_buf;
+    g_autofree uint8_t *io_buf = g_malloc(1 + 2 * len);
+    uint8_t *cur = io_buf;
     int room;
     *cur++ = ESC;
     while (len--)
@@ -380,9 +384,9 @@ static int baum_eat_packet(BaumChardev *baum, const uint8_t *buf, int len)
     switch (req) {
     case BAUM_REQ_DisplayData:
     {
-        uint8_t cells[baum->x * baum->y], c;
-        uint8_t text[baum->x * baum->y];
-        uint8_t zero[baum->x * baum->y];
+        uint8_t cells[X_MAX * Y_MAX], c;
+        uint8_t text[X_MAX * Y_MAX];
+        uint8_t zero[X_MAX * Y_MAX];
         int cursor = BRLAPI_CURSOR_OFF;
         int i;
 
@@ -405,7 +409,7 @@ static int baum_eat_packet(BaumChardev *baum, const uint8_t *buf, int len)
         }
         timer_del(baum->cellCount_timer);
 
-        memset(zero, 0, sizeof(zero));
+        memset(zero, 0, baum->x * baum->y);
 
         brlapi_writeArguments_t wa = {
             .displayNumber = BRLAPI_DISPLAY_DEFAULT,