mirror of
				https://github.com/xcat2/confluent.git
				synced 2025-11-03 21:02:36 +00:00 
			
		
		
		
	Merge branch 'master' into ansibleplay
This commit is contained in:
		@@ -8,15 +8,16 @@ if ! grep console= /proc/cmdline >& /dev/null; then
 | 
			
		||||
    echo $autocons > /tmp/01-autocons.devnode
 | 
			
		||||
    if [ ! -z "$autocons" ]; then
 | 
			
		||||
        echo "Using $(cat /tmp/01-autocons.conf)"
 | 
			
		||||
        tmux a <> $autocons >&0 2>&1 &
 | 
			
		||||
        TERM=linux tmux a <> /dev/tty1 >&0 2>&1 &
 | 
			
		||||
        (while :; do tmux a <> $autocons >&0 2>&1; done) &
 | 
			
		||||
        (while :; do TERM=linux tmux a <> /dev/tty1 >&0 2>&1; done) &
 | 
			
		||||
    else
 | 
			
		||||
        tmux a <> /dev/console >&0 2>&1 &
 | 
			
		||||
        (while :; do tmux a <> /dev/console >&0 2>&1; done) &
 | 
			
		||||
    fi
 | 
			
		||||
else
 | 
			
		||||
    tmux a <> /dev/console >&0 2>&1 &
 | 
			
		||||
    TERM=linux tmux a <> /dev/tty1 >&0 2>&1 &
 | 
			
		||||
    (while :; do tmux a <> /dev/console >&0 2>&1; done) &
 | 
			
		||||
    (while :; do TERM=linux tmux a <> /dev/tty1 >&0 2>&1; done) &
 | 
			
		||||
fi
 | 
			
		||||
(while :; do TERM=linux tmux <> /dev/tty2 >&0 2>&1; done) &
 | 
			
		||||
echo -n "udevd: "
 | 
			
		||||
/usr/lib/systemd/systemd-udevd --daemon
 | 
			
		||||
echo -n "Loading drivers..."
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,4 @@
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <termios.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
@@ -20,20 +21,29 @@
 | 
			
		||||
 | 
			
		||||
int main(int argc, char* argv[]) {
 | 
			
		||||
    struct termios tty;
 | 
			
		||||
    struct termios tty2;
 | 
			
		||||
    struct winsize ws;
 | 
			
		||||
    unsigned width, height;
 | 
			
		||||
    int ttyf;
 | 
			
		||||
    int spcr;
 | 
			
		||||
    int tmpi;
 | 
			
		||||
    int currspeed;
 | 
			
		||||
    int flags;
 | 
			
		||||
    speed_t cspeed;
 | 
			
		||||
    char buff[128];
 | 
			
		||||
    int bufflen;
 | 
			
		||||
    fd_set set;
 | 
			
		||||
    struct timeval timeout;
 | 
			
		||||
    char* offset;
 | 
			
		||||
    uint64_t address;
 | 
			
		||||
    spcr = open("/sys/firmware/acpi/tables/SPCR", O_RDONLY);
 | 
			
		||||
    if (spcr < 0) {
 | 
			
		||||
    bufflen = 0;
 | 
			
		||||
    tmpi = open("/sys/firmware/acpi/tables/SPCR", O_RDONLY);
 | 
			
		||||
    if (tmpi < 0) {
 | 
			
		||||
        exit(0);
 | 
			
		||||
    }
 | 
			
		||||
    if (read(spcr, buff, 80) < 80) {
 | 
			
		||||
    if (read(tmpi, buff, 80) < 80) {
 | 
			
		||||
        exit(0);
 | 
			
		||||
    }
 | 
			
		||||
    close(tmpi);
 | 
			
		||||
    if (buff[8] != 2) exit(0); //revision 2
 | 
			
		||||
    if (buff[36] != 0) exit(0); //16550 only
 | 
			
		||||
    if (buff[40] != 1) exit(0); //IO only
 | 
			
		||||
@@ -69,12 +79,49 @@ int main(int argc, char* argv[]) {
 | 
			
		||||
    }
 | 
			
		||||
    tcgetattr(ttyf, &tty);
 | 
			
		||||
    if (cspeed) {
 | 
			
		||||
        cfsetospeed(&tty, B115200);
 | 
			
		||||
        cfsetispeed(&tty, B115200);
 | 
			
		||||
        cfsetospeed(&tty, cspeed);
 | 
			
		||||
        cfsetispeed(&tty, cspeed);
 | 
			
		||||
    }
 | 
			
		||||
    printf("%s\n", buff);
 | 
			
		||||
    tcgetattr(ttyf, &tty2);
 | 
			
		||||
    cfmakeraw(&tty2);
 | 
			
		||||
    tcsetattr(ttyf, TCSANOW, &tty2);
 | 
			
		||||
    flags = fcntl(ttyf, F_GETFL, 0);
 | 
			
		||||
    fcntl(ttyf, F_SETFL, flags | O_NONBLOCK);
 | 
			
		||||
    while (read(ttyf, buff, 64) > 0) {
 | 
			
		||||
        // Drain any pending reads
 | 
			
		||||
    }
 | 
			
		||||
    timeout.tv_sec = 0;
 | 
			
		||||
    timeout.tv_usec = 500000;
 | 
			
		||||
    FD_ZERO(&set);
 | 
			
		||||
    FD_SET(ttyf, &set);
 | 
			
		||||
    write(ttyf, "\0337\033[999;999H\033[6n\0338", 18);
 | 
			
		||||
    while (select(ttyf + 1, &set, NULL, NULL, &timeout) > 0) {
 | 
			
		||||
        if ((tmpi = read(ttyf, buff + bufflen, 127 - bufflen)) < 0) {
 | 
			
		||||
            if (errno == EAGAIN || errno == EWOULDBLOCK) {
 | 
			
		||||
                continue;
 | 
			
		||||
            } else {
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        bufflen += tmpi;
 | 
			
		||||
        buff[bufflen] = 0;
 | 
			
		||||
        if (strchr(buff, 'R')) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    fcntl(ttyf, F_SETFL, flags);
 | 
			
		||||
    ws.ws_xpixel = 0;
 | 
			
		||||
    ws.ws_ypixel = 0;
 | 
			
		||||
    if (sscanf(buff, "\033[%u;%uR", &height, &width) == 2) {
 | 
			
		||||
        ws.ws_col = width;
 | 
			
		||||
        ws.ws_row = height;
 | 
			
		||||
    } else {
 | 
			
		||||
        ws.ws_col = 100;
 | 
			
		||||
        ws.ws_row = 31;
 | 
			
		||||
    }
 | 
			
		||||
    ioctl(ttyf, TIOCSWINSZ, &ws);
 | 
			
		||||
    tcsetattr(ttyf, TCSANOW, &tty);
 | 
			
		||||
    ioctl(ttyf, TIOCCONS, 0);
 | 
			
		||||
    printf("%s\n", buff);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user