--- /dev/null
+/*
+ * $Id$
+ *
+ *
+ * G N O K I I
+ *
+ * A Linux/Unix toolset and driver for Nokia mobile phones.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#ifndef WIN32
+ #include <fcntl.h>
+ #include <sys/ioctl.h>
+ #include <termios.h>
+ #include "devices/unixserial.h"
+#else
+ #include <windows.h>
+ #include "devices/winserial.h"
+#endif
+
+#include "devices/tekram.h"
+
+int tekram_open(__const char *__file) {
+
+ return (serial_open(__file, O_RDWR | O_NOCTTY | O_NONBLOCK));
+}
+
+void tekram_close(int __fd) {
+
+ serial_setdtrrts(__fd, 0, 0);
+
+ serial_close(__fd);
+}
+
+void tekram_reset(int __fd) {
+
+ serial_setdtrrts(__fd, 0, 0); usleep(50000);
+ serial_setdtrrts(__fd, 1, 0); usleep(1000);
+ serial_setdtrrts(__fd, 1, 1); usleep(50);
+
+ serial_changespeed(__fd, 9600);
+}
+
+void tekram_changespeed(int __fd, int __speed) {
+
+ unsigned char speedbyte;
+
+
+ switch (__speed) {
+
+ default:
+ case 9600: speedbyte = TEKRAM_PW | TEKRAM_B9600; break;
+ case 19200: speedbyte = TEKRAM_PW | TEKRAM_B19200; break;
+ case 38400: speedbyte = TEKRAM_PW | TEKRAM_B38400; break;
+ case 57600: speedbyte = TEKRAM_PW | TEKRAM_B57600; break;
+ case 115200: speedbyte = TEKRAM_PW | TEKRAM_B115200; break;
+
+ }
+
+
+ tekram_reset(__fd);
+
+ serial_setdtrrts(__fd, 1, 0);
+
+ usleep(7);
+
+ serial_write(__fd, &speedbyte, 1);
+
+ usleep(100000);
+
+ serial_setdtrrts(__fd, 1, 1);
+
+
+ serial_changespeed(__fd, __speed);
+}
+
+size_t tekram_read(int __fd, __ptr_t __buf, size_t __nbytes) {
+
+ return (serial_read(__fd, __buf, __nbytes));
+}
+
+size_t tekram_write(int __fd, __const __ptr_t __buf, size_t __n) {
+
+ return (serial_write(__fd, __buf, __n));
+}
+
+int tekram_select(int fd, struct timeval *timeout) {
+
+ fd_set readfds;
+
+ FD_ZERO(&readfds);
+ FD_SET(fd, &readfds);
+
+ return (select(fd + 1, &readfds, NULL, NULL, timeout));
+
+}