[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Vala] Serial port help



Hello guys,

I've attached a working Termios binding to this message. Just run valac
--pkg termios and you should be able to use the Termios namespace. Below
is an example:

using Termios;

| class Test {
| 	public static void main(string[] args) {
| 		Termios.Termios a;
| 
| 		a.getattr(0);
| 		a.oflag |= OFlag.ONLCR;
| 		a.setispeed(Speed.B38400);
| 		a.cc[VKILL] = 'a';
| 		a.setattr(0, AttrType.NOW);
| 
| 		Termios.Termios.flush(0, FlushType.IFLUSH);
| 	}
| }

I'm not so happy with the namespace and the class having the same name,
but ideally we should introduce a `POSIX' namespace, which should
contain all POSIX (not ISO C) stuff.

Have fun!

-- 
 Ed Schouten <ed 80386 nl>
 WWW: http://80386.nl/
/* termios.vala
 *
 * Copyright (c) 2008 Ed Schouten <ed 80386 nl>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

[CCode (cheader_filename = "termios.h", lower_case_cprefix = "")]
namespace Termios {
	[CCode (cname = "struct termios", cprefix = "tc")]
	public struct Termios {
		[CCode (cname = "c_iflag")]
		public IFlag iflag;
		[CCode (cname = "c_oflag")]
		public OFlag oflag;
		[CCode (cname = "c_cflag")]
		public CFlag cflag;
		[CCode (cname = "c_lflag")]
		public LFlag lflag;
		[CCode (cname = "c_cc")]
		public char[] cc;

		[CCode (cname = "cfgetispeed")]
		public Speed getispeed();
		[CCode (cname = "cfgetospeed")]
		public Speed getospeed();
		[CCode (cname = "cfsetispeed")]
		public int setispeed(Speed speed);
		[CCode (cname = "cfsetospeed")]
		public int setospeed(Speed speed);

		public static int drain(int fildes);
		public static int flow(int fildes, FlowType action);
		public static int flush(int fildes, FlushType queue_selector);

		[CCode (instance_pos=-1)]
		public int getattr(int fildes);

		public static int sendbreak(int fildes, int duration);

		[CCode (instance_pos=-1)]
		public int setattr(int fildes, AttrType optional_actions);
	}

	public const uint NCCS;

	public const uint VEOF;
	public const uint VEOL;
	public const uint VERASE;
	public const uint VINTR;
	public const uint VKILL;
	public const uint VMIN;
	public const uint VQUIT;
	public const uint VSTART;
	public const uint VSTOP;
	public const uint VSUSP;
	public const uint VTIME;

	[CCode (cname = "tcflag_t", cprefix = "")]
	public enum IFlag {
		BRKINT, ICRNL, IGNBRK, IGNCR, IGNPAR, INLCR, INPCK,
		ISTRIP, IXANY, IXOFF, IXON, PARMRK,
	}

	[CCode (cname = "tcflag_t", cprefix = "")]
	public enum OFlag {
		OPOST, ONLCR, OCRNL, ONOCR, ONLRET, OFILL, ONLDLY, NL0,
		NL1, CRDLY, CR0, CR1, CR2, CR3, TABDLY, TAB0, TAB1,
		TAB2, TAB3, BSDLY, BS0, BS1, VTDLY, VT0, VT1, FFDLY,
		FF0, FF1,
	}

	[CCode (cname = "speed_t", cprefix = "")]
	public enum Speed {
		B0, B50, B75, B110, B134, B150, B200, B300, B600, B1200,
		B1800, B2400, B4800, B9600, B19200, B38400,
	}

	[CCode (cname = "tcflag_t", cprefix = "")]
	public enum CFlag {
		CSIZE, CS5, CS6, CS7, CS8, CSTOPB, CREAD, PARENB,
		PARODD, HUPCL, CLOCAL,
	}

	[CCode (cname = "tcflag_t", cprefix = "")]
	public enum LFlag {
		ECHO, ECHOE, ECHOK, ECHONL, ICANON, IEXTEN, ISIG,
		NOFLSH, TOSTOP,
	}

	[CCode (cname = "int", cprefix = "TCSA")]
	public enum AttrType { NOW, DRAIN, FLUSH, }

	[CCode (cname = "int", cprefix = "TC")]
	public enum FlushType { IFLUSH, IOFLUSH, OFLUSH }

	[CCode (cname = "int", cprefix = "TC")]
	public enum FlowType { IOFF, ION, OOFF, OON }
}

Attachment: pgpLEQFUkoAwn.pgp
Description: PGP signature



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]