:pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001
[gnokii.git] / patches / IR-Dongles / device_tekram_irmate_210.c
1 /*
2
3   G N O K I I
4
5   A Linux/Unix toolset and driver for Nokia mobile phones.
6
7   Copyright (C) 1999 Hugh Blemings & Pavel Janík ml.
8
9   Released under the terms of the GNU GPL, see file COPYING for more details.
10
11   Last modification: Wed Dec 15 00:17:17 MET 1999
12   Modified by Marcel Holtmann <marcel@rvs.uni-bielefeld.de>
13
14 */
15
16 #include "unixserial.h"
17 #include "device.h"
18
19 #define TEKRAM_B115200 0x00
20 #define TEKRAM_B57600  0x01
21 #define TEKRAM_B38400  0x02
22 #define TEKRAM_B19200  0x03
23 #define TEKRAM_B9600   0x04
24
25 #define TEKRAM_PW     0x10 /* Pulse select bit */
26
27
28 /*
29  * Structure to store the filedescriptor we use.
30  *
31  */
32
33 int device_portfd = -1;
34
35 int device_getfd(void) {
36
37   return device_portfd;
38 }
39
40 int device_open(__const char *__file) {
41
42   device_portfd = serial_opendevice(__file);
43
44   return (device_portfd >= 0);
45 }
46
47 void device_close(void) {
48
49   serial_setdtrrts(device_portfd, 0, 0);
50
51   serial_close(device_portfd);
52 }
53
54 void device_reset(void) {
55
56   serial_setdtrrts(device_portfd, 0, 0);
57
58   usleep(50000);
59
60   serial_setdtrrts(device_portfd, 1, 0);
61
62   usleep(1000);
63
64   serial_setdtrrts(device_portfd, 1, 1);
65
66   usleep(50);
67
68
69   serial_changespeed(device_portfd, 9600);
70 }
71
72 void device_setdtrrts(int __dtr, int __rts) {
73
74   serial_setdtrrts(device_portfd, __dtr, __rts);
75 }
76
77 void device_changespeed(int __speed) {
78
79   unsigned char speedbyte;
80
81
82   switch (__speed) {
83
84   default:
85   case 9600:   speedbyte = TEKRAM_PW | TEKRAM_B9600;   break;
86   case 19200:  speedbyte = TEKRAM_PW | TEKRAM_B19200;  break;
87   case 38400:  speedbyte = TEKRAM_PW | TEKRAM_B38400;  break;
88   case 57600:  speedbyte = TEKRAM_PW | TEKRAM_B57600;  break;
89   case 115200: speedbyte = TEKRAM_PW | TEKRAM_B115200; break;
90
91   }
92
93
94   device_reset();
95
96   serial_setdtrrts(device_portfd, 1, 0);
97
98   usleep(7);
99
100   serial_write(device_portfd, &speedbyte, 1);
101
102   usleep(100000);
103
104   serial_setdtrrts(device_portfd, 1, 1);
105
106
107   serial_changespeed(device_portfd, __speed);
108 }
109
110 size_t device_read(__ptr_t __buf, size_t __nbytes) {
111
112   return (serial_read(device_portfd, __buf, __nbytes));
113 }
114
115 size_t device_write(__const __ptr_t __buf, size_t __n) {
116
117   return (serial_write(device_portfd, __buf, __n));
118 }