Changeset 1228 for branches/monitor-improvement/csctapi/io_serial.c
- Timestamp:
- 01/14/10 19:07:30 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/monitor-improvement/csctapi/io_serial.c
r1210 r1228 60 60 static int IO_Serial_Bitrate(int bitrate); 61 61 62 static bool IO_Serial_WaitToRead ( int hnd,unsigned delay_ms, unsigned timeout_ms);63 64 static bool IO_Serial_WaitToWrite ( IO_Serial *io,unsigned delay_ms, unsigned timeout_ms);62 static bool IO_Serial_WaitToRead (unsigned delay_ms, unsigned timeout_ms); 63 64 static bool IO_Serial_WaitToWrite (unsigned delay_ms, unsigned timeout_ms); 65 65 66 66 static void IO_Serial_DeviceName (char * filename, unsigned length); … … 73 73 int io_serial_need_dummy_char = 0; 74 74 75 int fdmc=(-1);75 extern int fdmc; 76 76 77 77 #if defined(TUXBOX) && defined(PPC) 78 void IO_Serial_Ioctl_Lock( IO_Serial * io,int flag)78 void IO_Serial_Ioctl_Lock(int flag) 79 79 { 80 80 extern int *oscam_sem; 81 if (( io->reader_type!=R_DB2COM1) && (io->reader_type!=R_DB2COM2)) return;81 if ((reader[ridx].typ != R_DB2COM1) && (reader[ridx].typ != R_DB2COM2)) return; 82 82 if (!flag) 83 83 *oscam_sem=0; 84 else while (*oscam_sem!= io->reader_type)84 else while (*oscam_sem!=reader[ridx].typ) 85 85 { 86 86 while (*oscam_sem) 87 usleep(( io->reader_type)*2000);88 *oscam_sem= io->reader_type;87 usleep((reader[ridx].typ)*2000); //FIXME is this right ?!?! 88 *oscam_sem=reader[ridx].typ; 89 89 usleep(1000); 90 90 } … … 176 176 bool IO_Serial_Init (IO_Serial * io, int reader_type) 177 177 { 178 char filename[IO_SERIAL_FILENAME_LENGTH];179 180 IO_Serial_DeviceName (filename, IO_SERIAL_FILENAME_LENGTH);181 182 #ifdef DEBUG_IO183 printf ("IO: Opening serial port %s\n", filename);184 #endif185 186 178 io->reader_type = reader_type; 187 188 #if defined(SCI_DEV) || defined(COOL) 189 if (reader_type==R_INTERNAL) 190 #ifdef SH4 191 io->fd = open (filename, O_RDWR|O_NONBLOCK|O_NOCTTY); 192 #elif COOL 193 return Cool_Init(); 194 #else 195 io->fd = open (filename, O_RDWR); 196 #endif 197 else 198 #endif 199 200 //#ifdef OS_MACOSX 201 // on mac os x, make sure you use the /dev/cu.XXXX device in oscam.server 202 io->fd = open (filename, O_RDWR | O_NOCTTY| O_NONBLOCK); 203 //#else 204 // with O_SYNC set OSCam is very critical on opening a device, on certain installs 205 // (eg virtual Ubuntu with /dev/ttyUSB) it gives "Error activating card" 206 // with O_NONBLOCK this problem is solved 207 // io->fd = open (filename, O_RDWR | O_NOCTTY | O_SYNC); 208 //#endif 209 210 if (io->fd < 0) 211 return FALSE; 212 213 #if defined(TUXBOX) && defined(PPC) 214 if ((reader_type == R_DB2COM1) || (reader_type == R_DB2COM2)) 215 if ((fdmc = open(DEV_MULTICAM, O_RDWR)) < 0) 216 { 217 close(io->fd); 218 return FALSE; 219 } 220 #endif 221 179 io->fd = reader[ridx].handle; 180 222 181 if (reader_type != R_INTERNAL) 223 182 IO_Serial_InitPnP (io); 224 183 225 184 if(io->reader_type!=R_INTERNAL) 226 IO_Serial_Flush( io);185 IO_Serial_Flush(); 227 186 228 187 return TRUE; … … 609 568 // return FALSE; 610 569 611 IO_Serial_Ioctl_Lock( io,1);570 IO_Serial_Ioctl_Lock(1); 612 571 IO_Serial_DTR_RTS(io, 0, io->rts == IO_SERIAL_HIGH); 613 572 IO_Serial_DTR_RTS(io, 1, io->dtr == IO_SERIAL_HIGH); 614 IO_Serial_Ioctl_Lock( io,0);573 IO_Serial_Ioctl_Lock(0); 615 574 616 575 #ifdef DEBUG_IO … … 620 579 } 621 580 622 void IO_Serial_Flush ( IO_Serial * io)581 void IO_Serial_Flush () 623 582 { 624 583 BYTE b; 625 while(IO_Serial_Read( io,1000, 1, &b));584 while(IO_Serial_Read(1000, 1, &b)); 626 585 } 627 586 … … 639 598 640 599 641 bool IO_Serial_Read ( IO_Serial * io,unsigned timeout, unsigned size, BYTE * data)600 bool IO_Serial_Read (unsigned timeout, unsigned size, BYTE * data) 642 601 { 643 602 BYTE c; … … 648 607 #endif 649 608 650 if(( io->reader_type!=R_INTERNAL) && (io->wr>0))609 if((reader[ridx].typ != R_INTERNAL) && (wr>0)) 651 610 { 652 611 BYTE buf[256]; 653 int n = io->wr;654 io->wr = 0;655 656 if(!IO_Serial_Read ( io,timeout, n, buf))612 int n = wr; 613 wr = 0; 614 615 if(!IO_Serial_Read (timeout, n, buf)) 657 616 { 658 617 return FALSE; … … 672 631 while( (((tv_spent.tv_sec-tv.tv_sec)*1000) + ((tv_spent.tv_usec-tv.tv_usec)/1000L))<timeout ) 673 632 { 674 if (read ( io->fd, &c, 1) == 1)633 if (read (reader[ridx].handle, &c, 1) == 1) 675 634 { 676 635 readed=TRUE; … … 687 646 #endif 688 647 #else 689 if (IO_Serial_WaitToRead ( io->fd,0, timeout))648 if (IO_Serial_WaitToRead (0, timeout)) 690 649 { 691 if (read ( io->fd, &c, 1) != 1)650 if (read (reader[ridx].handle, &c, 1) != 1) 692 651 { 693 652 #ifdef DEBUG_IO … … 710 669 fflush (stdout); 711 670 #endif 712 tcflush ( io->fd, TCIFLUSH);671 tcflush (reader[ridx].handle, TCIFLUSH); 713 672 return FALSE; 714 673 } … … 729 688 730 689 731 bool IO_Serial_Write ( IO_Serial * io,unsigned delay, unsigned size, BYTE * data)690 bool IO_Serial_Write (unsigned delay, unsigned size, BYTE * data) 732 691 { 733 692 unsigned count, to_send, i_w; … … 749 708 to_send = (delay? 1: size); 750 709 751 if (IO_Serial_WaitToWrite ( io,delay, 1000))710 if (IO_Serial_WaitToWrite (delay, 1000)) 752 711 { 753 712 for (i_w=0; i_w < to_send; i_w++) { … … 757 716 } 758 717 } 759 unsigned int u = write ( io->fd, data_w, (1+io_serial_need_dummy_char)*to_send);718 unsigned int u = write (reader[ridx].handle, data_w, (1+io_serial_need_dummy_char)*to_send); 760 719 _in_echo_read = 1; 761 720 if (u != (1+io_serial_need_dummy_char)*to_send) … … 765 724 fflush (stdout); 766 725 #endif 767 if( io->reader_type!=R_INTERNAL)768 io->wr += u;726 if(reader[ridx].typ != R_INTERNAL) 727 wr += u; 769 728 return FALSE; 770 729 } 771 730 772 if( io->reader_type!=R_INTERNAL)773 io->wr += to_send;731 if(reader[ridx].typ != R_INTERNAL) 732 wr += to_send; 774 733 775 734 #ifdef DEBUG_IO … … 885 844 } 886 845 887 static bool IO_Serial_WaitToRead ( int hnd,unsigned delay_ms, unsigned timeout_ms)846 static bool IO_Serial_WaitToRead (unsigned delay_ms, unsigned timeout_ms) 888 847 { 889 848 fd_set rfds; … … 906 865 } 907 866 908 in_fd= hnd;867 in_fd=reader[ridx].handle; 909 868 910 869 FD_ZERO(&rfds); … … 936 895 } 937 896 938 static bool IO_Serial_WaitToWrite ( IO_Serial *io,unsigned delay_ms, unsigned timeout_ms)897 static bool IO_Serial_WaitToWrite (unsigned delay_ms, unsigned timeout_ms) 939 898 { 940 899 fd_set wfds; … … 945 904 946 905 #ifdef SCI_DEV 947 if( io->reader_type==R_INTERNAL)906 if(reader[ridx].typ == R_INTERNAL) 948 907 return TRUE; 949 908 #endif … … 962 921 } 963 922 964 out_fd= io->fd;923 out_fd=reader[ridx].handle; 965 924 966 925 FD_ZERO(&wfds); … … 1001 960 memset (io->PnP_id, 0, IO_SERIAL_PNPID_SIZE); 1002 961 io->PnP_id_size = 0; 1003 io->wr = 0;962 wr = 0; 1004 963 //modifyable properties: 1005 964 io->input_bitrate = 0; … … 1033 992 return FALSE; 1034 993 1035 while ((i < IO_SERIAL_PNPID_SIZE) && IO_Serial_Read ( io,200, 1, &(io->PnP_id[i])))994 while ((i < IO_SERIAL_PNPID_SIZE) && IO_Serial_Read (200, 1, &(io->PnP_id[i]))) 1036 995 i++; 1037 996
Note:
See TracChangeset
for help on using the changeset viewer.