Send commitlog mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
        [EMAIL PROTECTED]

You can reach the person managing the list at
        [EMAIL PROTECTED]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:

   1. r3504 - trunk/src/target/gsm/include/gsmd
      ([EMAIL PROTECTED])
   2. r3505 - in trunk/src/target/OM-2007.2/libraries/libmokogsmd2:
      . libmokogsmd ([EMAIL PROTECTED])
   3. r3506 - in
      trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm: .
      src ([EMAIL PROTECTED])
   4. r3507 - in
      trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm: .
      src ([EMAIL PROTECTED])
--- Begin Message ---
Author: mickey
Date: 2007-11-25 21:07:09 +0100 (Sun, 25 Nov 2007)
New Revision: 3504

Modified:
   trunk/src/target/gsm/include/gsmd/usock.h
Log:
gsmd: start with gsmd_msg_auxdata union
Using a union here (similar to gsmd_evt_auxdata) allows for compiler checks and
is much less prone to fail than using pointer arithmetics.


Modified: trunk/src/target/gsm/include/gsmd/usock.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/usock.h   2007-11-24 19:03:43 UTC (rev 
3503)
+++ trunk/src/target/gsm/include/gsmd/usock.h   2007-11-25 20:07:09 UTC (rev 
3504)
@@ -583,6 +583,19 @@
        u_int8_t data[];
 } __attribute__((packed));
 
+struct gsmd_msg_auxdata {
+    union {
+        struct {
+            struct gsmd_signal_quality sigq;
+        } signal;
+        struct {
+            char name[16];
+        } current_operator;
+        /* add more here please */
+    } u;
+    u_int8_t data[0];
+} __attribute__ ((packed));
+
 #ifdef __GSMD__
 
 #include <gsmd/usock.h>




--- End Message ---
--- Begin Message ---
Author: mickey
Date: 2007-11-25 21:10:02 +0100 (Sun, 25 Nov 2007)
New Revision: 3505

Modified:
   trunk/src/target/OM-2007.2/libraries/libmokogsmd2/ChangeLog
   
trunk/src/target/OM-2007.2/libraries/libmokogsmd2/libmokogsmd/moko-gsmd-connection.c
   
trunk/src/target/OM-2007.2/libraries/libmokogsmd2/libmokogsmd/moko-gsmd-connection.h
Log:
libmokogsmd2:
    Register network message handler with libgsmd to get
    answers for trigger messages.
    Keep trying to connect to gsmd, if not available on startup.
    Add new g_signal for incoming operator name


Modified: trunk/src/target/OM-2007.2/libraries/libmokogsmd2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/libraries/libmokogsmd2/ChangeLog 2007-11-25 
20:07:09 UTC (rev 3504)
+++ trunk/src/target/OM-2007.2/libraries/libmokogsmd2/ChangeLog 2007-11-25 
20:10:02 UTC (rev 3505)
@@ -1,3 +1,12 @@
+2007-11-25     Michael Lauer   <[EMAIL PROTECTED]>
+
+       * libmokogsmd/moko-gsmd-connection.[c|h]:
+       Register network message handler with libgsmd to get
+       answers for trigger messages.
+       Keep trying to connect to gsmd, if not available on startup.
+       Add new g_signal for incoming operator name
+       
+
 2007-11-20  Thomas Wood  <[EMAIL PROTECTED]>
 
        * libmokogsmd/moko-gsmd-connection.c:

Modified: 
trunk/src/target/OM-2007.2/libraries/libmokogsmd2/libmokogsmd/moko-gsmd-connection.c
===================================================================
--- 
trunk/src/target/OM-2007.2/libraries/libmokogsmd2/libmokogsmd/moko-gsmd-connection.c
        2007-11-25 20:07:09 UTC (rev 3504)
+++ 
trunk/src/target/OM-2007.2/libraries/libmokogsmd2/libmokogsmd/moko-gsmd-connection.c
        2007-11-25 20:10:02 UTC (rev 3505)
@@ -28,7 +28,7 @@
 #include <errno.h>
 
 #define DEBUG_THIS_FILE
-#undef DEBUG_THIS_FILE
+//#undef DEBUG_THIS_FILE
 
 #ifdef DEBUG_THIS_FILE
 #define moko_debug(fmt,...) g_debug(fmt,##__VA_ARGS__)
@@ -40,6 +40,11 @@
 
 #define GSMD_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), 
MOKO_TYPE_GSMD_CONNECTION, MokoGsmdConnectionPrivate))
 
+#define MOKO_GSMD_CHECK_CONNECTION_GET_PRIV \
+        g_return_if_fail( MOKO_IS_GSMD_CONNECTION( self ) ); \
+        MokoGsmdConnectionPrivate* priv = GSMD_CONNECTION_GET_PRIVATE( self ); 
\
+        if ( !priv->handle ) moko_gsmd_connection_init( self ); \
+        g_return_if_fail( priv->handle );
 
 GQuark
 moko_gsmd_error_quark ()
@@ -91,6 +96,9 @@
     SIGNAL_GSMD_EVT_IN_CBM         = 14, /* Incoming Cell Broadcast message */
     SIGNAL_GSMD_EVT_IN_DS          = 15, /* SMS Status Report */
     SIGNAL_GSMD_EVT_IN_ERROR       = 16, /* CME/CMS error */
+
+    SIGNAL_GSMD_NET_CURRENT_OPERATOR = 100, /* Current Operator */
+
     LAST_SIGNAL,
 };
 static guint moko_gsmd_connection_signals[LAST_SIGNAL] = { 0 };
@@ -241,7 +249,7 @@
     //TODO add SIGNAL_GSMD_EVT_IN_CBM         = 14, /* Incoming Cell Broadcast 
message */
     //TODO add SIGNAL_GSMD_EVT_IN_DS          = 15, /* SMS Status Report */
 
-    moko_gsmd_connection_signals[SIGNAL_GSMD_EVT_OUT_STATUS] = g_signal_new
+    moko_gsmd_connection_signals[SIGNAL_GSMD_EVT_IN_ERROR] = g_signal_new
         ("cme-cms-error",
         G_TYPE_FROM_CLASS (klass),
         G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
@@ -254,6 +262,20 @@
         G_TYPE_INT,
         NULL );
 
+    moko_gsmd_connection_signals[SIGNAL_GSMD_NET_CURRENT_OPERATOR] = 
g_signal_new
+        ("network-current-operator",
+        G_TYPE_FROM_CLASS (klass),
+        G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
+        G_STRUCT_OFFSET (MokoGsmdConnectionClass, network_current_operator),
+        NULL,
+        NULL,
+        g_cclosure_marshal_VOID__STRING,
+        G_TYPE_NONE,
+        1,
+        G_TYPE_STRING,
+        NULL);
+
+
     /* virtual methods */
 
     /* install properties */
@@ -298,9 +320,7 @@
     size = read( self->pollfd.fd, &buf, sizeof( buf ) );
     if ( size < 0 )
     {
-        g_warning( "moko_gsmd_connection_source_dispatch:%s %s",
-                   "read error from libgsmd:", 
-                   strerror( errno ) );
+        g_warning( "moko_gsmd_connection_source_dispatch:%s %s", "read error 
from libgsmd:", strerror( errno ) );
     }
     else
     {
@@ -312,11 +332,102 @@
     return TRUE;
 }
 
-int 
-_moko_gsmd_connection_eventhandler (struct lgsm_handle *lh, 
-                                    int evt_type, 
-                                    struct gsmd_evt_auxdata *aux)
+static int net_msghandler(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh)
 {
+    printf( "=================== new code here ==========================\n");
+
+    moko_debug( "moko_gsmd_connection_network_eventhandler type = %d", 
gmh->msg_subtype );
+    MokoGsmdConnection* self = moko_gsmd_connection_instance;
+
+    struct gsmd_msg_auxdata* aux = (struct gsmd_msg_auxdata*) ((void *) gmh + 
sizeof(*gmh));
+
+    switch ( gmh->msg_subtype )
+    {
+        case GSMD_NETWORK_SIGQ_GET:
+            g_signal_emit( G_OBJECT(self),
+                           
moko_gsmd_connection_signals[SIGNAL_GSMD_EVT_SIGNAL],
+                           0,
+                           aux->u.signal.sigq.rssi );
+            break;
+        case GSMD_NETWORK_OPER_GET:
+            g_signal_emit( G_OBJECT(self),
+                           
moko_gsmd_connection_signals[SIGNAL_GSMD_NET_CURRENT_OPERATOR],
+                           0,
+                           aux->u.current_operator.name );
+            break;
+    }
+    printf( "=================== old code here ==========================\n");
+
+    const struct gsmd_signal_quality *sq = (struct gsmd_signal_quality *)
+            ((void *) gmh + sizeof(*gmh));
+    const char *oper = (char *) gmh + sizeof(*gmh);
+    const struct gsmd_msg_oper *opers = (struct gsmd_msg_oper *)
+            ((void *) gmh + sizeof(*gmh));
+    const struct gsmd_own_number *num = (struct gsmd_own_number *)
+            ((void *) gmh + sizeof(*gmh));
+    static const char *oper_stat[] = {
+        [GSMD_OPER_UNKNOWN] = "of unknown status",
+        [GSMD_OPER_AVAILABLE] = "available",
+        [GSMD_OPER_CURRENT] = "our current operator",
+        [GSMD_OPER_FORBIDDEN] = "forbidden",
+    };
+    static const char *srvname[] = {
+        [GSMD_SERVICE_ASYNC_MODEM] = "asynchronous modem",
+        [GSMD_SERVICE_SYNC_MODEM] = "synchronous modem",
+        [GSMD_SERVICE_PAD_ACCESS] = "PAD Access (asynchronous)",
+        [GSMD_SERVICE_PACKET_ACCESS] = "Packet Access (synchronous)",
+        [GSMD_SERVICE_VOICE] = "voice",
+        [GSMD_SERVICE_FAX] = "fax",
+    };
+
+    //printf( "a = %p, b = %p\n", (void*)aux->u.current_operator.name, oper );
+
+    switch (gmh->msg_subtype)
+    {
+        case GSMD_NETWORK_SIGQ_GET:
+            if (sq->rssi == 99)
+                printf("Signal undetectable\n");
+            else
+                printf("Signal quality %i dBm\n", -113 + sq->rssi * 2);
+            if (sq->ber == 99)
+                printf("Error rate undetectable\n");
+            else
+                printf("Bit error rate %i\n", sq->ber);
+            break;
+        case GSMD_NETWORK_OPER_GET:
+            if (oper[0])
+                printf("Our current operator is %s\n", oper);
+            else
+                printf("No current operator\n");
+            break;
+        case GSMD_NETWORK_OPER_LIST:
+            for (; !opers->is_last; opers ++)
+                printf("%8.*s   %16.*s,   %.*s for short, is %s\n",
+                       sizeof(opers->opname_num),
+                              opers->opname_num,
+                              sizeof(opers->opname_longalpha),
+                                     opers->opname_longalpha,
+                                     sizeof(opers->opname_shortalpha),
+                                            opers->opname_shortalpha,
+                                            oper_stat[opers->stat]);
+            break;
+        case GSMD_NETWORK_GET_NUMBER:
+            printf("\t%s\t%10s%s%s%s\n", num->addr.number, num->name,
+                   (num->service == GSMD_SERVICE_UNKNOWN) ?
+                           "" : " related to ",
+                           (num->service == GSMD_SERVICE_UNKNOWN) ?
+                                   "" : srvname[num->service],
+                                   (num->service == GSMD_SERVICE_UNKNOWN) ?
+                                           "" : " services");
+            break;
+        default:
+            return -EINVAL;
+    }
+}
+
+int
+_moko_gsmd_connection_eventhandler (struct lgsm_handle *lh, int evt_type, 
struct gsmd_evt_auxdata *aux)
+{
     moko_debug( "moko_gsmd_connection_eventhandler type = %d", evt_type );
     MokoGsmdConnection* self = moko_gsmd_connection_instance;
 
@@ -409,15 +520,10 @@
     return 0;
 }
 
-static void
-moko_gsmd_connection_init(MokoGsmdConnection* self)
+static gboolean
+moko_gsmd_connection_try_connect(MokoGsmdConnection* self)
 {
-    moko_debug( "moko_gsmd_connection_init" );
-    /* fail here on more than one MokoGsmdConnection object per process */
-    g_assert( !moko_gsmd_connection_instance);
-
-    moko_gsmd_connection_instance = self;
-
+    moko_debug( "moko_gsmd_connection_try_reconnect" );
     MokoGsmdConnectionPrivate* priv = GSMD_CONNECTION_GET_PRIVATE(self);
 
     priv->handle = lgsm_init( LGSMD_DEVICE_GSMD );
@@ -430,7 +536,7 @@
             g_warning( "libgsmd: %s",
                        "can't connect to gsmd. You won't receive any events." 
);
 
-            return;
+            return TRUE; // can't connect, please call me again
         }
     }
     else
@@ -446,8 +552,8 @@
         NULL,
     };
 
-    priv->source = (MokoGsmdConnectionSource*) g_source_new( &funcs, 
-                                            sizeof( MokoGsmdConnectionSource) 
);
+    priv->source = (MokoGsmdConnectionSource*) g_source_new( &funcs,
+                    sizeof( MokoGsmdConnectionSource) );
     priv->source->handle = priv->handle;
     priv->source->pollfd.fd = lgsm_fd( priv->handle );
     priv->source->pollfd.events = G_IO_IN | G_IO_HUP | G_IO_ERR;
@@ -458,14 +564,26 @@
     int rc = 0;
     for ( int i = GSMD_EVT_IN_CALL; i < __NUM_GSMD_EVT; ++i )
     {
-        rc |= lgsm_evt_handler_register( priv->handle, i, 
+        rc |= lgsm_evt_handler_register( priv->handle, i,
                                          _moko_gsmd_connection_eventhandler );
         moko_debug( "-- registered for event %d, return code %d", i, rc );
     }
 
     lgsm_register_handler( priv->handle, GSMD_MSG_PASSTHROUGH, &pt_msghandler);
+    lgsm_register_handler( priv->handle, GSMD_MSG_NETWORK, &net_msghandler);
+
+    return FALSE; // connection established, don't call again
 }
 
+static void
+moko_gsmd_connection_init(MokoGsmdConnection* self)
+{
+    moko_debug( "moko_gsmd_connection_init" );
+    moko_gsmd_connection_instance = self;
+
+    g_timeout_add_seconds( 5, (GSourceFunc)moko_gsmd_connection_try_connect, 
self );
+}
+
 /* public API */
 void 
 moko_gsmd_connection_set_antenna_power(MokoGsmdConnection* self, gboolean on, 
GError **error)
@@ -490,7 +608,7 @@
     }
 }
 
-void 
+void
 moko_gsmd_connection_send_pin(MokoGsmdConnection* self, const gchar* pin)
 {
     MokoGsmdConnectionPrivate* priv;
@@ -509,7 +627,7 @@
     lgsm_pin( priv->handle, 1, pin, NULL);
 }
 
-void 
+void
 moko_gsmd_connection_network_register(MokoGsmdConnection* self)
 {
     MokoGsmdConnectionPrivate* priv;
@@ -523,7 +641,7 @@
 }
 
 int
-moko_gsmd_connection_get_network_status (MokoGsmdConnection* self)
+moko_gsmd_connection_get_network_status(MokoGsmdConnection* self)
 {
     MokoGsmdConnectionPrivate* priv;
     enum lgsm_netreg_state state;
@@ -538,33 +656,33 @@
     return state;
 }
 
-void 
+void
 moko_gsmd_connection_voice_accept(MokoGsmdConnection* self)
 {
     MokoGsmdConnectionPrivate* priv;
-    
+
     g_return_if_fail ( MOKO_IS_GSMD_CONNECTION ( self ) );
     priv  = GSMD_CONNECTION_GET_PRIVATE( self );
-    
+
     g_return_if_fail( priv->handle );
 
     lgsm_voice_in_accept( priv->handle );
 }
 
-void 
+void
 moko_gsmd_connection_voice_hangup(MokoGsmdConnection* self)
 {
     MokoGsmdConnectionPrivate* priv;
-    
+
     g_return_if_fail ( MOKO_IS_GSMD_CONNECTION ( self ) );
     priv  = GSMD_CONNECTION_GET_PRIVATE( self );
-    
+
     g_return_if_fail( priv->handle );
-    
+
     lgsm_voice_hangup( priv->handle );
 }
 
-void 
+void
 moko_gsmd_connection_voice_dial(MokoGsmdConnection* self, const gchar* number)
 {
     MokoGsmdConnectionPrivate* priv;
@@ -575,39 +693,39 @@
     g_return_if_fail( strlen( number ) > 2 );
 
     priv  = GSMD_CONNECTION_GET_PRIVATE( self );
-    
+
     g_return_if_fail( priv->handle );
-    
 
+
     addr.type = 129; /* ??? */
     g_stpcpy( &addr.addr[0], number );
     lgsm_voice_out_init( priv->handle, &addr );
 }
 
-void 
+void
 moko_gsmd_connection_voice_dtmf(MokoGsmdConnection* self, const gchar number)
 {
     MokoGsmdConnectionPrivate* priv;
-    
+
     g_return_if_fail ( MOKO_IS_GSMD_CONNECTION (self) );
-    
+
     priv  = GSMD_CONNECTION_GET_PRIVATE( self );
-    
+
     g_return_if_fail( priv->handle );
-    
+
     lgsm_voice_dtmf( priv->handle, number );
 }
 
-void 
+void
 moko_gsmd_connection_trigger_signal_strength_event(MokoGsmdConnection* self)
 {
-    MokoGsmdConnectionPrivate* priv;
-    
-    g_return_if_fail ( MOKO_IS_GSMD_CONNECTION (self) );
-    
-    priv  = GSMD_CONNECTION_GET_PRIVATE( self );
-    
-    g_return_if_fail( priv->handle );
-    
+    MOKO_GSMD_CHECK_CONNECTION_GET_PRIV
     lgsm_signal_quality( priv->handle );
 }
+
+void
+moko_gsmd_connection_trigger_current_operator_event(MokoGsmdConnection* self)
+{
+    MOKO_GSMD_CHECK_CONNECTION_GET_PRIV
+    lgsm_oper_get( priv->handle );
+}

Modified: 
trunk/src/target/OM-2007.2/libraries/libmokogsmd2/libmokogsmd/moko-gsmd-connection.h
===================================================================
--- 
trunk/src/target/OM-2007.2/libraries/libmokogsmd2/libmokogsmd/moko-gsmd-connection.h
        2007-11-25 20:07:09 UTC (rev 3504)
+++ 
trunk/src/target/OM-2007.2/libraries/libmokogsmd2/libmokogsmd/moko-gsmd-connection.h
        2007-11-25 20:10:02 UTC (rev 3505)
@@ -12,7 +12,6 @@
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU Public License for more details.
  *
- *  Current Version: $Rev$ ($Date: 2006/12/21 18:03:04 $) [$Author: mickey $]
  */
 
 #ifndef _MOKO_GSMD_CONNECTION_H_
@@ -39,23 +38,22 @@
 struct _MokoGsmdConnectionClass {
     GObjectClass parent_class;
 
-    /* Voice signals */
-    void (*incoming_call) (MokoGsmdConnection *self, int type);
-    void (*call_status_progress) (MokoGsmdConnection *self, int type);
-    void (*pin_requested) (MokoGsmdConnection *self, int type);
+    /* Call signals */
+    void (*incoming_call) (MokoGsmdConnection* self, int type);
+    void (*call_status_progress) (MokoGsmdConnection* self, int type);
+    void (*pin_requested) (MokoGsmdConnection* self, int type);
+    void (*incoming_clip) (MokoGsmdConnection* self, const gchar* number);
 
     /* SMS signals */
 
     /* GPRS signals */
 
-    /* Misc signals */
-    void (*incoming_clip) (MokoGsmdConnection *self, const gchar *number);
-    void (*network_registration) (MokoGsmdConnection *self,
-                                  int type,
-                                  int lac,
-                                  int cell);
-    void (*trigger_signal_strength_event) (MokoGsmdConnection *self);
-    void (*signal_strength_changed) (MokoGsmdConnection *self, int strength);
+    /* Network signals */
+    void (*network_registration) (MokoGsmdConnection* self, int type, int lac, 
int cell);
+    void (*signal_strength_changed) (MokoGsmdConnection* self, int strength);
+    void (*network_current_operator) (MokoGsmdConnection* self, const gchar* 
name );
+
+    /* Misc */
     void (*cme_cms_error) (MokoGsmdConnection *self, int code);
 
     /* Future padding */
@@ -112,6 +110,8 @@
 /* network */
 void moko_gsmd_connection_network_register (MokoGsmdConnection *self);
 int moko_gsmd_connection_get_network_status (MokoGsmdConnection *self);
+void moko_gsmd_connection_trigger_current_operator_event(MokoGsmdConnection* 
self);
+void moko_gsmd_connection_trigger_signal_strength_event(MokoGsmdConnection* 
self);
 
 /* TODO add type, i.e. MOKO_GSMD_CONNECTION_NETREG_AUTO */
 /* voice calls */




--- End Message ---
--- Begin Message ---
Author: mickey
Date: 2007-11-25 21:11:23 +0100 (Sun, 25 Nov 2007)
New Revision: 3506

Modified:
   trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/ChangeLog
   
trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/src/openmoko-panel-gsm.c
Log:
openmoko-panel-gsm:
 * Query operator name on network registration event.
 * Show operator name in notification.


Modified: trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/ChangeLog       
2007-11-25 20:10:02 UTC (rev 3505)
+++ trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/ChangeLog       
2007-11-25 20:11:23 UTC (rev 3506)
@@ -1,3 +1,8 @@
+2007-11-25     Michael Lauer   <[EMAIL PROTECTED]>
+       * src/openmoko-panel-gsm.c:
+       Query operator name on network registration event.
+       Show operator name in notification.
+
 2007-10-23     Michael Lauer <[EMAIL PROTECTED]>
 
        * src/openmoko-panel-gsm.c: (gsm_applet_network_registration_cb):

Modified: 
trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/src/openmoko-panel-gsm.c
===================================================================
--- 
trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/src/openmoko-panel-gsm.c
        2007-11-25 20:10:02 UTC (rev 3505)
+++ 
trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/src/openmoko-panel-gsm.c
        2007-11-25 20:11:23 UTC (rev 3506)
@@ -31,6 +31,10 @@
     MokoPanelApplet* mokoapplet;
     gboolean gprs_mode;
     MokoGsmdConnection* gsm;
+    int type;
+    int lac;
+    int cell;
+    char operator_name[255];
 } GsmApplet;
 
 static GsmApplet* theApplet = NULL;
@@ -77,26 +81,33 @@
     g_free( image );
 }
 
+static void gsm_applet_network_current_operator_cb (MokoGsmdConnection *self, 
const gchar* name )
+{
+    if ( strcmp( name, theApplet->operator_name ) != 0 )
+    {
+        strcpy( theApplet->operator_name, name );
+        gsm_applet_update_signal_strength( self, 0, theApplet );
+        notify_notification_show( notify_notification_new( g_strdup_printf( 
"Connected to '%s'", name ), NULL, NULL, NULL ), NULL );
+    }
+}
+
 static void
 gsm_applet_network_registration_cb (MokoGsmdConnection *self,
                                   int type,
                                   int lac,
                                   int cell)
 {
-    NotifyNotification* nn;
-    static MokoGsmdConnectionNetregType prev_type = 
MOKO_GSMD_CONNECTION_NETREG_NONE;
+    theApplet->type = type;
+    theApplet->lac = lac;
+    theApplet->cell = cell;
 
-    if ( (type == MOKO_GSMD_CONNECTION_NETREG_HOME) || (type == 
MOKO_GSMD_CONNECTION_NETREG_ROAMING) &&
-       ( (prev_type != MOKO_GSMD_CONNECTION_NETREG_HOME) && (prev_type != 
MOKO_GSMD_CONNECTION_NETREG_ROAMING) ) )
+    if ( (type == MOKO_GSMD_CONNECTION_NETREG_HOME) || (type == 
MOKO_GSMD_CONNECTION_NETREG_ROAMING) )
     {
-        gsm_applet_update_signal_strength( self, 0, theApplet );
-        nn = notify_notification_new ("Connected to GSM Network", NULL, NULL, 
NULL);
-        notify_notification_show (nn, NULL);
+        g_debug( "gsm_applet_network_registration_cb: NETREG type = %d", type 
);
+        moko_gsmd_connection_trigger_current_operator_event( self );
     }
-    prev_type = type;
 }
 
-
 static void
 gsm_applet_power_up_antenna(GtkWidget* menu, GsmApplet* applet)
 {
@@ -117,10 +128,16 @@
     moko_gsmd_connection_set_antenna_power( applet->gsm, FALSE, NULL );
 }
 
+static void
+gsm_applet_test_operation(GtkWidget* menu, GsmApplet* applet)
+{
+    moko_gsmd_connection_trigger_current_operator_event( applet->gsm );
+}
+
 G_MODULE_EXPORT GtkWidget*
 mb_panel_applet_create(const char* id, GtkOrientation orientation)
 {
-    GsmApplet* applet = g_slice_new(GsmApplet);
+    GsmApplet* applet = g_slice_new0(GsmApplet);
     theApplet = applet; // nasty global variable
     MokoPanelApplet* mokoapplet = applet->mokoapplet = 
MOKO_PANEL_APPLET(moko_panel_applet_new());
 
@@ -134,6 +151,7 @@
     applet->gsm = moko_gsmd_connection_new();
     g_signal_connect( G_OBJECT(applet->gsm), "signal-strength-changed", 
G_CALLBACK(gsm_applet_update_signal_strength), applet );
     g_signal_connect( G_OBJECT(applet->gsm), "network-registration", 
G_CALLBACK(gsm_applet_network_registration_cb), applet );
+    g_signal_connect( G_OBJECT(applet->gsm), "network-current-operator", 
G_CALLBACK(gsm_applet_network_current_operator_cb), applet );
 
     // tap-with-hold menu (NOTE: temporary: left button atm.)
     GtkMenu* menu = GTK_MENU (gtk_menu_new());
@@ -146,6 +164,9 @@
     GtkWidget* item3 = gtk_menu_item_new_with_label( "Power-Down GSM Antenna" 
);
     g_signal_connect( G_OBJECT(item3), "activate", 
G_CALLBACK(gsm_applet_power_down_antenna), applet );
     gtk_menu_shell_append( GTK_MENU_SHELL(menu), item3 );
+    GtkWidget* item4 = gtk_menu_item_new_with_label( "Trigger Operation 
(TEST)" );
+    g_signal_connect( G_OBJECT(item4), "activate", 
G_CALLBACK(gsm_applet_test_operation), applet );
+    gtk_menu_shell_append( GTK_MENU_SHELL(menu), item4 );
     gtk_widget_show_all( GTK_WIDGET(menu) );
 
     moko_panel_applet_set_popup( mokoapplet, GTK_WIDGET (menu), 
MOKO_PANEL_APPLET_CLICK_POPUP );




--- End Message ---
--- Begin Message ---
Author: mickey
Date: 2007-11-26 02:25:03 +0100 (Mon, 26 Nov 2007)
New Revision: 3507

Modified:
   trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/ChangeLog
   
trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/src/openmoko-panel-gsm.c
Log:
openmoko-panel-gsm:
    Add menu button for redisplaying status notification
    Show some details in the notification



Modified: trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/ChangeLog       
2007-11-25 20:11:23 UTC (rev 3506)
+++ trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/ChangeLog       
2007-11-26 01:25:03 UTC (rev 3507)
@@ -1,4 +1,11 @@
+2007-11-26     Michael Lauer   <[EMAIL PROTECTED]>
+
+       * src/openmoko-panel-gsm.c:
+       Add menu button for redisplaying status notification
+       Show some details in the notification
+
 2007-11-25     Michael Lauer   <[EMAIL PROTECTED]>
+       
        * src/openmoko-panel-gsm.c:
        Query operator name on network registration event.
        Show operator name in notification.

Modified: 
trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/src/openmoko-panel-gsm.c
===================================================================
--- 
trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/src/openmoko-panel-gsm.c
        2007-11-25 20:11:23 UTC (rev 3506)
+++ 
trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gsm/src/openmoko-panel-gsm.c
        2007-11-26 01:25:03 UTC (rev 3507)
@@ -31,14 +31,18 @@
     MokoPanelApplet* mokoapplet;
     gboolean gprs_mode;
     MokoGsmdConnection* gsm;
+    int strength;
     int type;
     int lac;
     int cell;
     char operator_name[255];
+    GtkMenuItem* information;
 } GsmApplet;
 
 static GsmApplet* theApplet = NULL;
 
+static void gsm_applet_show_status(GtkWidget* menu, GsmApplet* applet);
+
 static void
 gsm_applet_free(GsmApplet *applet)
 {
@@ -50,15 +54,21 @@
                                   int strength,
                                   GsmApplet* applet)
 {
-    gfloat percent;
     gint pixmap = 0;
     gchar *image = NULL;
+    applet->strength = strength;
 
     g_debug( "gsm_applet_update_signal_strength: signal strength = %d",
               strength );
 
-    percent = (strength / _MAX_SIGNAL) * 100;
+    if ( strength == 99 )
+    {
+        moko_panel_applet_set_icon( applet, PKGDATADIR 
"/SignalStrength_NR.png" );
+        return;
+    }
 
+    gfloat percent = (strength / _MAX_SIGNAL) * 100;
+
     if ( percent == 0 )
       pixmap = 0;
     else if ( percent < 20 )
@@ -81,22 +91,23 @@
     g_free( image );
 }
 
-static void gsm_applet_network_current_operator_cb (MokoGsmdConnection *self, 
const gchar* name )
+static void gsm_applet_network_current_operator_cb(MokoGsmdConnection *self, 
const gchar* name)
 {
     if ( strcmp( name, theApplet->operator_name ) != 0 )
     {
         strcpy( theApplet->operator_name, name );
         gsm_applet_update_signal_strength( self, 0, theApplet );
-        notify_notification_show( notify_notification_new( g_strdup_printf( 
"Connected to '%s'", name ), NULL, NULL, NULL ), NULL );
+        gsm_applet_show_status( 0, theApplet );
     }
 }
 
 static void
-gsm_applet_network_registration_cb (MokoGsmdConnection *self,
+gsm_applet_network_registration_cb(MokoGsmdConnection *self,
                                   int type,
                                   int lac,
                                   int cell)
 {
+    g_debug( "gsm_applet_network_registration_cb: updating netreg values" );
     theApplet->type = type;
     theApplet->lac = lac;
     theApplet->cell = cell;
@@ -109,6 +120,38 @@
 }
 
 static void
+gsm_applet_show_status(GtkWidget* menu, GsmApplet* applet)
+{
+    const gchar* summary = 0;
+    const gchar* details = 0;
+    switch ( applet->type )
+    {
+        case 0:
+            summary = g_strdup( "Not searching" );
+        break;
+        
+        case 1:
+            summary = g_strdup_printf( "Connected to '%s'", 
applet->operator_name );
+            details = g_strdup_printf( "Type: Home Network\nCell ID: %04x : 
%04x\nSignal: %i dbM", applet->lac, applet->cell, -113 + applet->strength*2 );
+        break;
+        
+        case 2: summary = g_strdup( "Searching for Service" );
+        break;
+        
+        case 3: summary = g_strdup( "Registration Denied" );
+        break;
+        
+        case 5:
+            summary = g_strdup_printf( "Connected to '%s'", 
applet->operator_name );
+            details = g_strdup_printf( "Type: Roaming\nCell ID: %04x : 
%04x\nSignal: %i dbM", applet->lac, applet->cell, -113 + applet->strength*2 );
+
+        default: summary = g_strdup( "Unknown" );
+    }
+
+    notify_notification_show( notify_notification_new( summary, details, NULL, 
NULL ), NULL );
+}
+
+static void
 gsm_applet_power_up_antenna(GtkWidget* menu, GsmApplet* applet)
 {
     //TODO notify user
@@ -139,6 +182,7 @@
 {
     GsmApplet* applet = g_slice_new0(GsmApplet);
     theApplet = applet; // nasty global variable
+    strcpy( applet->operator_name, "<unknown>" );
     MokoPanelApplet* mokoapplet = applet->mokoapplet = 
MOKO_PANEL_APPLET(moko_panel_applet_new());
 
     notify_init ("GSM Applet");
@@ -155,6 +199,17 @@
 
     // tap-with-hold menu (NOTE: temporary: left button atm.)
     GtkMenu* menu = GTK_MENU (gtk_menu_new());
+
+    GtkWidget* title = gtk_frame_new( "GSM Network" );
+    gtk_frame_set_label_align( GTK_FRAME(title), 0.5, 0.5 );
+    gtk_frame_set_shadow_type( GTK_FRAME(title), GTK_SHADOW_IN );
+    gtk_widget_set_name( title, "GsmAppletMenu" );
+
+    GtkWidget* titleitem = gtk_menu_item_new();
+    g_signal_connect( G_OBJECT(titleitem), "activate", 
G_CALLBACK(gsm_applet_show_status), applet );
+    gtk_menu_shell_append( GTK_MENU_SHELL(menu), titleitem );
+    gtk_container_add( GTK_CONTAINER(titleitem), title );
+
     GtkWidget* item1 = gtk_menu_item_new_with_label( "Power-Up GSM Antenna" );
     g_signal_connect( G_OBJECT(item1), "activate", 
G_CALLBACK(gsm_applet_power_up_antenna), applet );
     gtk_menu_shell_append( GTK_MENU_SHELL(menu), item1 );
@@ -164,11 +219,12 @@
     GtkWidget* item3 = gtk_menu_item_new_with_label( "Power-Down GSM Antenna" 
);
     g_signal_connect( G_OBJECT(item3), "activate", 
G_CALLBACK(gsm_applet_power_down_antenna), applet );
     gtk_menu_shell_append( GTK_MENU_SHELL(menu), item3 );
+#if 0
     GtkWidget* item4 = gtk_menu_item_new_with_label( "Trigger Operation 
(TEST)" );
     g_signal_connect( G_OBJECT(item4), "activate", 
G_CALLBACK(gsm_applet_test_operation), applet );
     gtk_menu_shell_append( GTK_MENU_SHELL(menu), item4 );
+#endif
     gtk_widget_show_all( GTK_WIDGET(menu) );
-
     moko_panel_applet_set_popup( mokoapplet, GTK_WIDGET (menu), 
MOKO_PANEL_APPLET_CLICK_POPUP );
     return GTK_WIDGET(mokoapplet);
 }




--- End Message ---
_______________________________________________
commitlog mailing list
[email protected]
http://lists.openmoko.org/mailman/listinfo/commitlog

Reply via email to