device_tekram_irmate_210.c

上传用户:susan2053
上传日期:2007-01-07
资源大小:731k
文件大小:2k
源码类别:手机短信编程
开发平台:Unix_Linux
  1. /*
  2.   G N O K I I
  3.   A Linux/Unix toolset and driver for Nokia mobile phones.
  4.   Copyright (C) 1999 Hugh Blemings & Pavel Jan韐 ml.
  5.   Released under the terms of the GNU GPL, see file COPYING for more details.
  6.   Last modification: Wed Dec 15 00:17:17 MET 1999
  7.   Modified by Marcel Holtmann <marcel@rvs.uni-bielefeld.de>
  8. */
  9. #include "unixserial.h"
  10. #include "device.h"
  11. #define TEKRAM_B115200 0x00
  12. #define TEKRAM_B57600  0x01
  13. #define TEKRAM_B38400  0x02
  14. #define TEKRAM_B19200  0x03
  15. #define TEKRAM_B9600   0x04
  16. #define TEKRAM_PW     0x10 /* Pulse select bit */
  17. /*
  18.  * Structure to store the filedescriptor we use.
  19.  *
  20.  */
  21. int device_portfd = -1;
  22. int device_getfd(void) {
  23.   return device_portfd;
  24. }
  25. int device_open(__const char *__file) {
  26.   device_portfd = serial_opendevice(__file);
  27.   return (device_portfd >= 0);
  28. }
  29. void device_close(void) {
  30.   serial_setdtrrts(device_portfd, 0, 0);
  31.   serial_close(device_portfd);
  32. }
  33. void device_reset(void) {
  34.   serial_setdtrrts(device_portfd, 0, 0);
  35.   usleep(50000);
  36.   serial_setdtrrts(device_portfd, 1, 0);
  37.   usleep(1000);
  38.   serial_setdtrrts(device_portfd, 1, 1);
  39.   usleep(50);
  40.   serial_changespeed(device_portfd, 9600);
  41. }
  42. void device_setdtrrts(int __dtr, int __rts) {
  43.   serial_setdtrrts(device_portfd, __dtr, __rts);
  44. }
  45. void device_changespeed(int __speed) {
  46.   unsigned char speedbyte;
  47.   switch (__speed) {
  48.   default:
  49.   case 9600:   speedbyte = TEKRAM_PW | TEKRAM_B9600;   break;
  50.   case 19200:  speedbyte = TEKRAM_PW | TEKRAM_B19200;  break;
  51.   case 38400:  speedbyte = TEKRAM_PW | TEKRAM_B38400;  break;
  52.   case 57600:  speedbyte = TEKRAM_PW | TEKRAM_B57600;  break;
  53.   case 115200: speedbyte = TEKRAM_PW | TEKRAM_B115200; break;
  54.   }
  55.   device_reset();
  56.   serial_setdtrrts(device_portfd, 1, 0);
  57.   usleep(7);
  58.   serial_write(device_portfd, &speedbyte, 1);
  59.   usleep(100000);
  60.   serial_setdtrrts(device_portfd, 1, 1);
  61.   serial_changespeed(device_portfd, __speed);
  62. }
  63. size_t device_read(__ptr_t __buf, size_t __nbytes) {
  64.   return (serial_read(device_portfd, __buf, __nbytes));
  65. }
  66. size_t device_write(__const __ptr_t __buf, size_t __n) {
  67.   return (serial_write(device_portfd, __buf, __n));
  68. }