On Sun, Jul 11, 2004 at 03:14:41PM +0200, Miloslav Trmac wrote:
> The attached patch ...
Of course, forgot the patch.
Mirek
diff -urN cvs/B/multisync/plugins/irmc_sync/irmc_sync.glade2
multisync/plugins/irmc_sync/irmc_sync.glade2
--- cvs/B/multisync/plugins/irmc_sync/irmc_sync.glade2 2004-04-06 11:47:22.000000000
+0200
+++ multisync/plugins/irmc_sync/irmc_sync.glade2 2004-07-11 14:35:09.957249992
+0200
@@ -712,6 +712,14 @@
<signal name="activate"
handler="on_siemenscable_activate" last_modification_time="Mon, 01 Dec 2003 19:58:20
GMT"/>
</widget>
</child>
+
+ <child>
+ <widget class="GtkMenuItem" id="philipscable">
+ <property name="visible">True</property>
+ <property name="label"
translatable="yes">Philips</property>
+ <property
name="use_underline">True</property>
+ <signal name="activate"
handler="on_philipscable_activate" last_modification_time="Mon, 01 Dec 2003 19:58:20
GMT"/>
+ </widget>
</widget>
</child>
</widget>
diff -urN cvs/B/multisync/plugins/irmc_sync/src/callbacks.c
multisync/plugins/irmc_sync/src/callbacks.c
--- cvs/B/multisync/plugins/irmc_sync/src/callbacks.c 2003-12-01 21:22:30.000000000
+0100
+++ multisync/plugins/irmc_sync/src/callbacks.c 2004-07-11 14:35:09.957249992 +0200
@@ -143,3 +143,11 @@
irmcconn->cabletype = IRMC_CABLE_SIEMENS;
}
+
+void
+on_philipscable_activate (GtkMenuItem *menuitem,
+ gpointer user_data)
+{
+ irmcconn->cabletype = IRMC_CABLE_PHILIPS;
+}
+
diff -urN cvs/B/multisync/plugins/irmc_sync/src/callbacks.h
multisync/plugins/irmc_sync/src/callbacks.h
--- cvs/B/multisync/plugins/irmc_sync/src/callbacks.h 2003-12-01 21:22:30.000000000
+0100
+++ multisync/plugins/irmc_sync/src/callbacks.h 2004-07-11 14:35:09.958249840 +0200
@@ -91,3 +91,7 @@
void
on_siemenscable_activate (GtkMenuItem *menuitem,
gpointer user_data);
+
+void
+on_philipscable_activate (GtkMenuItem *menuitem,
+ gpointer user_data);
diff -urN cvs/B/multisync/plugins/irmc_sync/src/cobex_bfb.c
multisync/plugins/irmc_sync/src/cobex_bfb.c
--- cvs/B/multisync/plugins/irmc_sync/src/cobex_bfb.c 2004-02-09 19:53:31.000000000
+0100
+++ multisync/plugins/irmc_sync/src/cobex_bfb.c 2004-07-11 14:35:09.977246952 +0200
@@ -78,7 +78,7 @@
return_val_if_fail (data != NULL, -1);
c = (obexdata_t *) data;
- if (c->cabletype == IRMC_CABLE_ERICSSON)
+ if (c->cabletype != IRMC_CABLE_SIEMENS)
obex_cable_disconnect(self, data);
if (c->fd >= 0) {
@@ -110,7 +110,7 @@
DEBUG(3, "%s() Data %d bytes\n", __func__, length);
- if (c->cabletype == IRMC_CABLE_ERICSSON)
+ if (c->cabletype != IRMC_CABLE_SIEMENS)
return(obex_cable_write(self, data, buffer, length));
if (c->cobex.seq == 0){
@@ -138,7 +138,7 @@
return_val_if_fail (data != NULL, -1);
c = (obexdata_t *) data;
- if (c->cabletype == IRMC_CABLE_ERICSSON)
+ if (c->cabletype != IRMC_CABLE_SIEMENS)
return(obex_cable_handleinput(self, data, timeout));
if (c->state < 0)
@@ -167,7 +167,7 @@
actual = read(c->fd, &(c->cobex.recv[c->cobex.recv_len]), sizeof(c->cobex.recv) -
c->cobex.recv_len);
DEBUG(2, "%s() Read %d bytes (%d bytes already buffered)\n", __func__, actual,
c->cobex.recv_len);
- if (c->cabletype == IRMC_CABLE_ERICSSON) {
+ if (c->cabletype != IRMC_CABLE_SIEMENS) {
if (actual > 0) {
OBEX_CustomDataFeed(self, c->cobex.recv, actual);
return 1;
diff -urN cvs/B/multisync/plugins/irmc_sync/src/gui.c
multisync/plugins/irmc_sync/src/gui.c
--- cvs/B/multisync/plugins/irmc_sync/src/gui.c 2004-04-06 11:47:22.000000000 +0200
+++ multisync/plugins/irmc_sync/src/gui.c 2004-07-11 14:35:09.979246648 +0200
@@ -304,6 +304,8 @@
int cablemenu = 0;
if (irmcconn->cabletype == IRMC_CABLE_SIEMENS)
cablemenu = 1;
+ else if (irmcconn->cabletype == IRMC_CABLE_PHILIPS)
+ cablemenu = 2;
gtk_option_menu_set_history (GTK_OPTION_MENU(lookup_widget(irmcwindow,
"cablemanumenu")), cablemenu);
}
diff -urN cvs/B/multisync/plugins/irmc_sync/src/interface.c
multisync/plugins/irmc_sync/src/interface.c
--- cvs/B/multisync/plugins/irmc_sync/src/interface.c 2004-04-06 11:47:31.000000000
+0200
+++ multisync/plugins/irmc_sync/src/interface.c 2004-07-11 14:35:09.996244064 +0200
@@ -68,6 +68,13 @@
GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL
},
+ {
+ GNOME_APP_UI_ITEM, "Philips",
+ NULL,
+ (gpointer) on_philipscable_activate, NULL, NULL,
+ GNOME_APP_PIXMAP_NONE, NULL,
+ 0, (GdkModifierType) 0, NULL
+ },
GNOMEUIINFO_END
};
@@ -728,6 +735,7 @@
GLADE_HOOKUP_OBJECT (optionwin, menu1, "menu1");
GLADE_HOOKUP_OBJECT (optionwin, menu1_uiinfo[0].widget, "sonyericssoncable");
GLADE_HOOKUP_OBJECT (optionwin, menu1_uiinfo[1].widget, "siemenscable");
+ GLADE_HOOKUP_OBJECT (optionwin, menu1_uiinfo[1].widget, "philipscable");
GLADE_HOOKUP_OBJECT (optionwin, label29, "label29");
GLADE_HOOKUP_OBJECT (optionwin, testconnbutton, "testconnbutton");
GLADE_HOOKUP_OBJECT (optionwin, alignment1, "alignment1");
diff -urN cvs/B/multisync/plugins/irmc_sync/src/irmc_obex.c
multisync/plugins/irmc_sync/src/irmc_obex.c
--- cvs/B/multisync/plugins/irmc_sync/src/irmc_obex.c 2004-02-09 19:53:31.000000000
+0100
+++ multisync/plugins/irmc_sync/src/irmc_obex.c 2004-07-11 14:35:10.018240720 +0200
@@ -124,6 +124,7 @@
switch(obex_cmd) {
case OBEX_CMD_CONNECT:
+ connect_client_done(handle, object, obex_rsp);
break;
case OBEX_CMD_DISCONNECT:
break;
@@ -167,6 +168,30 @@
return(SYNC_MSG_REQFAILED);
}
+void connect_client_done(obex_t *handle, obex_object_t *object, gint obex_rsp) {
+ obex_headerdata_t hv;
+ guint8 hi;
+ gint hlen;
+ obexdata_t *ud;
+ const char *body = NULL;
+ int body_len = 0;
+
+ ud = OBEX_GetUserData(handle);
+
+ if(obex_rsp != OBEX_RSP_SUCCESS) {
+ ud->state = IRMC_OBEX_REQFAILED;
+ return;
+ }
+
+ ud->connection = 0xFFFFFFFF;
+ while(OBEX_ObjectGetNextHeader(handle, object, &hi, &hv, &hlen)) {
+ if(hi == OBEX_HDR_CONNECTION) {
+ ud->connection = hv.bq4;
+ break;
+ }
+ }
+}
+
void put_client_done(obex_t *handle, obex_object_t *object, gint obex_rsp) {
obexdata_t *ud;
obex_headerdata_t hv;
@@ -286,8 +311,11 @@
/* Answer didn't come within the length of the buffer. Cancel! */
if(total == sizeof(tmpbuf))
return -1;
+ tmpbuf[total] = 0;
if( (answer = index(tmpbuf, '\n')) ) {
+ while (*answer == '\n' || *answer == '\r')
+ answer++;
// Remove first line (echo)
if( (answer_end = index(answer+1, '\n')) ) {
// Found end of answer
@@ -347,7 +375,8 @@
if (userdata->cabletype == IRMC_CABLE_SIEMENS)
return(cobex_connect(handle, ud));
- if (userdata->cabletype != IRMC_CABLE_ERICSSON)
+ if (userdata->cabletype != IRMC_CABLE_ERICSSON
+ && userdata->cabletype != IRMC_CABLE_PHILIPS)
goto err;
/*if(obex_cable_at(userdata, "ATZ\r", rspbuf, sizeof(rspbuf), 1) < 0) {
@@ -392,14 +421,26 @@
dd(printf("Error doing ATZ (%s)\n", rspbuf));
goto err;
}
- if(obex_cable_at(userdata,
- "AT*EOBEX\r", rspbuf, sizeof(rspbuf), 1) < 0) {
- dd(printf("Comm-error sending AT*EOBEX\n"));
- goto err;
- }
- if(strcasecmp("CONNECT", rspbuf) != 0) {
- dd(printf("Error doing AT*EOBEX (%s)\n", rspbuf));
- goto err;
+ if(userdata->cabletype == IRMC_CABLE_ERICSSON) {
+ if(obex_cable_at(userdata,
+ "AT*EOBEX\r", rspbuf, sizeof(rspbuf), 1) < 0) {
+ dd(printf("Comm-error sending AT*EOBEX\n"));
+ goto err;
+ }
+ if(strcasecmp("CONNECT", rspbuf) != 0) {
+ dd(printf("Error doing AT*EOBEX (%s)\n", rspbuf));
+ goto err;
+ }
+ } else { /* IRMC_CABLE_PHILIPS */
+ if(obex_cable_at(userdata,
+ "AT+CPROT=0\r", rspbuf, sizeof(rspbuf), 1) < 0) {
+ dd(printf("Comm-error sending AT+CPROT=0\n"));
+ goto err;
+ }
+ if(strcasecmp("CONNECT", rspbuf) != 0) {
+ dd(printf("Error doing AT+CPROT=0 (%s)\n", rspbuf));
+ goto err;
+ }
}
fcntl(userdata->fd, F_SETFL, O_NONBLOCK);
return(0);
@@ -629,10 +670,15 @@
gint irmc_obex_disconnect(obex_t* handle) {
obex_object_t *object;
obexdata_t *userdata;
+ obex_headerdata_t hd;
userdata = (obexdata_t*) OBEX_GetUserData(handle);
if (userdata->connected) {
if ((object = OBEX_ObjectNew(handle, OBEX_CMD_DISCONNECT))) {
+ if (userdata->connection != 0xFFFFFFFF) {
+ hd.bq4 = userdata->connection;
+ OBEX_ObjectAddHeader (handle, object, OBEX_HDR_CONNECTION, hd, 4, 0);
+ }
if(OBEX_Request(handle, object) < 0)
return(SYNC_MSG_CONNECTIONERROR);
}
@@ -692,6 +738,10 @@
userdata = (obexdata_t*) OBEX_GetUserData(handle);
if ((object = OBEX_ObjectNew(handle, OBEX_CMD_PUT))) {
+ if (userdata->connection != 0xFFFFFFFF) {
+ hd.bq4 = userdata->connection;
+ OBEX_ObjectAddHeader (handle, object, OBEX_HDR_CONNECTION, hd, 4, 0);
+ }
hd.bq4 = body_size;
OBEX_ObjectAddHeader(handle, object, OBEX_HDR_LENGTH, hd, 4, 0);
/* Add unicode name header*/
@@ -736,6 +786,10 @@
userdata = (obexdata_t*) OBEX_GetUserData(handle);
if((object = OBEX_ObjectNew(handle, OBEX_CMD_GET))) {
+ if (userdata->connection != 0xFFFFFFFF) {
+ hd.bq4 = userdata->connection;
+ OBEX_ObjectAddHeader (handle, object, OBEX_HDR_CONNECTION, hd, 4, 0);
+ }
/* Add unicode name header*/
namesize = OBEX_CharToUnicode(unicodename, name, 1024);
hd.bs = unicodename;
diff -urN cvs/B/multisync/plugins/irmc_sync/src/irmc_obex.h
multisync/plugins/irmc_sync/src/irmc_obex.h
--- cvs/B/multisync/plugins/irmc_sync/src/irmc_obex.h 2004-02-09 19:53:31.000000000
+0100
+++ multisync/plugins/irmc_sync/src/irmc_obex.h 2004-07-11 14:35:10.032238592 +0200
@@ -55,6 +55,7 @@
#if HAVE_IRDA
__u32 ir_addr;
#endif
+ guint32 connection;
int channel;
int state;
int error; // One of SYNC_MSG_*
@@ -83,6 +84,7 @@
gint obex_cmd, gint obex_rsp);
void client_done(obex_t *handle, obex_object_t *object,
gint obex_cmd, gint obex_rsp);
+void connect_client_done(obex_t *handle, obex_object_t *object, gint obex_rsp);
void get_client_done(obex_t *handle, obex_object_t *object, gint obex_rsp);
void put_client_done(obex_t *handle, obex_object_t *object, gint obex_rsp);
diff -urN cvs/B/multisync/plugins/irmc_sync/src/irmc_sync.h
multisync/plugins/irmc_sync/src/irmc_sync.h
--- cvs/B/multisync/plugins/irmc_sync/src/irmc_sync.h 2004-04-06 11:47:31.000000000
+0200
+++ multisync/plugins/irmc_sync/src/irmc_sync.h 2004-07-11 14:35:10.067233272 +0200
@@ -23,7 +23,8 @@
typedef enum {
IRMC_CABLE_UNKNOWN = 0,
IRMC_CABLE_ERICSSON,
- IRMC_CABLE_SIEMENS
+ IRMC_CABLE_SIEMENS,
+ IRMC_CABLE_PHILIPS
} cable_type;
#include "irmc_obex.h"