[mythtv] cidbcast

Behan Webster behanw at websterwood.com
Mon Dec 8 08:28:42 EST 2003


Isaac Richards wrote:

>On Sunday 07 December 2003 08:11 pm, Behan Webster wrote:
>  
>
>>This is a patch to make cidbcast work with the ZyXel 1496E+ modem.
>>    
>>
>
>diff -u, please?
>  
>
Drat.  Forgot the -u in the "cvs diff".  Sorry.

Try this.

Behan
-------------- next part --------------
Index: cidbcast.c
===================================================================
RCS file: /var/lib/mythcvs/mythtv/contrib/mythnotify/cidbcast/cidbcast.c,v
retrieving revision 1.2
diff -u -r1.2 cidbcast.c
--- cidbcast.c	8 Nov 2003 03:31:14 -0000	1.2
+++ cidbcast.c	8 Dec 2003 13:25:13 -0000
@@ -10,6 +10,7 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <time.h>
+#include <ctype.h>
 #include <string.h>
 #include <stdio.h>
 #include <sys/timeb.h>
@@ -185,6 +186,8 @@
 
    if (strstr(buffer, "OK") != 0)
      return (0);
+
+   sleep(1);
  }
  
  return (-1);
@@ -350,21 +353,53 @@
   }
 }
 
+int getNum(char *dest, int dsize, const char *src, int ssize)
+{
+  int ret = 0;
+
+  if( dest && src )
+  {
+    int i, j;
+    memset(dest, 0, dsize);
+    for(i=0,j=0; i<ssize && i<dsize; i++)
+    {
+      if( isspace(src[i]) )
+      {
+        break;
+      }
+      else if( isdigit(src[i]) )
+      {
+        dest[j++] = src[i];
+      }
+    }
+    ret = j;
+  }
+
+  return ret;
+}
+
 /*
 ** Data comes from modem (when enabled via AT#CID=1) as
 ** DATE = 0915
 ** TIME = 1700
 ** NMBR = 3015551212
 ** NAME = SCHMOE JOE
+**
+** For the ZyXel 1496E+
+** TIME: 09-15 17:00
+** CALLER NAME: SCHMOE JOE
+** CALLER NUMBER: 3015551212
+**
+** init string is: "AT E0 L0 M0 N0 Q0 V1 X7 &C1 &H3 S0=0 S7=45 S13.2=1 S40.2=1 S40.3=1 S40.4=1"
 */
 
 int checkfor_cid_info(char *buffer, int len, CID_Info *cid_info)
 {
-  char *field_ptr;
-  int field_len;
+  char *field_ptr, date[8], time[8];
+  int field_len, time_len=0;
 
-  field_ptr = extract_cid_field(buffer, len, "NAME = ", &field_len);
-  if (field_ptr)
+  if( (field_ptr = extract_cid_field(buffer, len, "NAME = ", &field_len)) 
+   || (field_ptr = extract_cid_field(buffer, len, "CALLER NAME: ", &field_len)) )
   {
     memset(cid_info->name, 0, sizeof(cid_info->name));
     memcpy(cid_info->name, field_ptr, field_len);
@@ -382,8 +417,8 @@
     return 0;
   }
 
-  field_ptr = extract_cid_field(buffer, len, "NMBR = ", &field_len);
-  if (field_ptr)
+  if( (field_ptr = extract_cid_field(buffer, len, "NMBR = ", &field_len))
+   || (field_ptr = extract_cid_field(buffer, len, "CALLER NUMBER: ", &field_len)) )
   {
     memset(cid_info->number, 0, sizeof(cid_info->number));
     memcpy(cid_info->number, field_ptr, field_len);
@@ -401,7 +436,23 @@
     return 0;
   }
 
-  field_ptr = extract_cid_field(buffer, len, "DATE = ", &field_len);
+  if( (field_ptr = extract_cid_field(buffer, len, "TIME: ", &field_len)) )
+  {
+    int date_len;
+    date_len = getNum(date, sizeof(date), field_ptr, field_len);
+    time_len = getNum(time, sizeof(time), &field_ptr[date_len+2], field_len-date_len-2);
+    field_ptr = &date[0];
+    field_len = date_len;
+    if( verbose )
+    {
+      printf( "Date(%d): %s\nTime(%d): %s\nField_ptr: %s\n",
+        field_len, date, time_len, time, field_ptr );
+    }
+  }
+  else
+  {
+    field_ptr = extract_cid_field(buffer, len, "DATE = ", &field_len);
+  }
   if (field_ptr)
   {
     memset(cid_info->date, 0, sizeof(cid_info->date));
@@ -420,7 +471,15 @@
     return 0;
   }
 
-  field_ptr = extract_cid_field(buffer, len, "TIME = ", &field_len);
+  if (time_len)
+  {
+    field_ptr = &time[0];
+    field_len = time_len;
+  }
+  else
+  {
+    field_ptr = extract_cid_field(buffer, len, "TIME = ", &field_len);
+  }
   if (field_ptr)
   {
     memset(cid_info->time, 0, sizeof(cid_info->time));
@@ -501,6 +560,13 @@
     return -1;
   }
   
+  if (write(*fd, "+++", 3) != 3)
+  {
+    printf("error init modem\n");
+    return -1;
+  }
+  sleep(2);
+  
   if (issue_modem_cmd(*fd, "AT\r") < 0)
   {
     printf("error init modem\n");


More information about the mythtv-dev mailing list