#include "../includes/io.h" /* Sets the speed of the data being sent. The default speed of a serial port is 115,200 bits/s. The argument is a divisor of that number, hence the resulting speed becomes 115,200 / divisor bits/s. */ void set_serial_baud_rate(unsigned short com, unsigned short divisor){ outb(com + 3, 0x80);//SERIAL_LINE_ENABLE_DLAB); outb(com, (divisor >> 8) & 0x00FF); outb(com, divisor & 0x00FF); } void configure_serial_line(unsigned short com){ // Configuring the Line /* d: Enables (1) or disables (0) DLAB b: Break if controls is enabled (1) parity: The number of parity bits to use s: The number of stop bits to use (0 = One Stop, 1 = 1.5 or 2 stops) dl: Describes the langth of the data Bit: | 7 | 6 | 5 4 3 | 2 | 1 0 | Content: | d | b | parity| s | dl | Value: | 0 | 0 | 0 0 0 | 0 | 1 1 | = 0x03 */ outb(com + 3, 0x03); // Configuring the Buffers /* lvl: How many bytes should be stored in the FIFO buffers bs: If the buffers should be 16 or 64 bytes large r: Reserved dma: How the serial port data should be accessed clt: Clear the transmission FIFO buffer clr: Clear the reciever FIFO buffer e: If the FIFO bufffer should be enabled or not Bit: | 7 6 | 5 | 4 | 3 | 2 | 1 | 0 | Content: | lvl | bs| r | dma| clt| clr| e | Value: | 1 1 | 0 | 0 | 0 | 1 | 1 | 1 | */ outb(com + 2, 0xC7); // Confirgure the Modem outb(com + 4, 0x03); } /* @return 0 if the FIFO is not empty 1 if the FIFO is empty */ int serial_transmit_fifo_empty(unsigned int com){ // 0x20 = 0010 0000 return inb(com + 5) & 0x20; } void write_to_com(unsigned int com, char* msg){ for(int i = 0; msg[i] != '\0'; i++){ while(serial_transmit_fifo_empty(com) == 0); outb(com, (char) msg[i]); } }