Changeset ca97cad in mainline for uspace/srv/drivers/serial/serial.c
- Timestamp:
- 2010-05-06T11:42:55Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ab1aa871
- Parents:
- ba95e8f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/drivers/serial/serial.c
rba95e8f rca97cad 92 92 } 93 93 94 static bool serial_received(ioport8_t *port) 95 { 96 return (pio_read_8(port + 5) & 1) != 0; 97 } 98 99 static uint8_t serial_read_8(ioport8_t *port) 100 { 101 return pio_read_8(port); 102 } 103 104 static bool is_transmit_empty(ioport8_t *port) 105 { 106 return (pio_read_8(port + 5) & 0x20) != 0; 107 } 108 109 static void serial_write_8(ioport8_t *port, uint8_t c) 110 { 111 while (!is_transmit_empty(port)) 112 ; 113 114 pio_write_8(port, c); 115 } 116 94 117 static int serial_read(device_t *dev, char *buf, size_t count) 95 118 { … … 111 134 } 112 135 136 static inline void serial_putchar(serial_dev_data_t *data, uint8_t c) 137 { 138 fibril_mutex_lock(&data->mutex); 139 serial_write_8(data->port, c); 140 fibril_mutex_unlock(&data->mutex); 141 } 142 113 143 static int serial_write(device_t *dev, char *buf, size_t count) 114 144 { 115 // TODO 145 serial_dev_data_t *data = (serial_dev_data_t *)dev->driver_data; 146 147 size_t idx; 148 for (idx = 0; idx < count; idx++) { 149 serial_putchar(data, (uint8_t)buf[idx]); 150 } 151 116 152 return 0; 117 153 } … … 150 186 dev->parent_phone = 0; 151 187 } 152 }153 154 static bool serial_received(ioport8_t *port)155 {156 return (pio_read_8(port + 5) & 1) != 0;157 }158 159 static uint8_t serial_read_8(ioport8_t *port)160 {161 return pio_read_8(port);162 }163 164 static bool is_transmit_empty(ioport8_t *port)165 {166 return (pio_read_8(port + 5) & 0x20) != 0;167 }168 169 static void serial_write_8(ioport8_t *port, uint8_t c)170 {171 while (!is_transmit_empty(port))172 ;173 174 pio_write_8(port, c);175 188 } 176 189 … … 333 346 334 347 while (cont) { 348 fibril_mutex_lock(&data->mutex); 349 335 350 if (cont = serial_received(port)) { 336 351 uint8_t val = serial_read_8(port); 337 352 printf(NAME ": character %c read from %s.\n", val, dev->name); 338 353 339 fibril_mutex_lock(&data->mutex);354 340 355 if (data->client_connected) { 341 356 if (!buf_push_back(&(data->input_buffer), val)) { … … 346 361 } else { 347 362 printf(NAME ": no client is connected to %s, discarding the character which was read.\n", dev->name); 348 } 349 fibril_mutex_unlock(&data->mutex); 363 } 350 364 } 351 365 366 fibril_mutex_unlock(&data->mutex); 367 368 fibril_yield(); 352 369 } 353 370 }
Note:
See TracChangeset
for help on using the changeset viewer.