Ticket #1003: 03_modem_power_on_off.patch

File 03_modem_power_on_off.patch, 5.9 KB (added by sean_chiang@…, 12 years ago)

Adding api for powe on/off GSM modem

  • include/gsmd/machineplugin.h

    === include/gsmd/machineplugin.h
    ==================================================================
     
    1111struct gsmd_machine_plugin { 
    1212        struct llist_head list; 
    1313        unsigned char *name; 
     14        int (*power)(struct gsmd *g, int power); 
    1415        int (*ex_submit)(struct gsmd *g); 
    1516        int (*detect)(struct gsmd *g); 
    1617        int (*init)(struct gsmd *g, int fd); 
  • include/gsmd/usock.h

    === include/gsmd/usock.h
    ==================================================================
     
    2424        GSMD_MSG_PIN            = 8, 
    2525        GSMD_MSG_SMS            = 9, 
    2626        GSMD_MSG_CB             = 10, 
     27        GSMD_MSG_MODEM          = 11, 
    2728        __NUM_GSMD_MSGS 
    2829}; 
    2930 
     
    5758        GSMD_PHONE_POWERDOWN    = 2, 
    5859}; 
    5960 
     61enum gsmd_msg_modem { 
     62        GSMD_MODEM_POWERUP      = 1, 
     63        GSMD_MODEM_POWERDOWN    = 2, 
     64}; 
     65 
    6066enum gsmd_msg_cb { 
    6167        GSMD_CB_SUBSCRIBE       = 1, 
    6268        GSMD_CB_UNSUBSCRIBE     = 2, 
  • include/libgsmd/misc.h

    === include/libgsmd/misc.h
    ==================================================================
     
    99#include <libgsmd/libgsmd.h> 
    1010 
    1111extern int lgsm_phone_power(struct lgsm_handle *lh, int power); 
     12extern int lgsm_modem_power(struct lgsm_handle *lh, int power); 
    1213 
    1314enum lgsm_info_type { 
    1415        LGSM_INFO_TYPE_NONE             = 0, 
  • src/gsmd/machine_generic.c

    === src/gsmd/machine_generic.c
    ==================================================================
     
    5656 
    5757struct gsmd_machine_plugin gsmd_machine_plugin = { 
    5858        .name = "generic", 
     59        .power = NULL, 
    5960        .ex_submit = NULL, 
    6061        .detect = &generic_detect, 
    6162        .init = &generic_init, 
  • src/gsmd/machine_gta01.c

    === src/gsmd/machine_gta01.c
    ==================================================================
     
    1515#include <gsmd/atcmd.h> 
    1616 
    1717#define GSMD_MODEM_WAKEUP_TIMEOUT     3 
     18#define GSMD_MODEM_POWEROFF_TIMEOUT     3         
    1819 
     20static void poweroff_timeout(struct gsmd_timer *tmr, void *data)  
     21{ 
     22        exit(0); 
     23} 
     24 
     25static struct gsmd_timer * poweroff_timer(struct gsmd *g) 
     26{ 
     27        struct timeval tv; 
     28        tv.tv_sec = GSMD_MODEM_POWEROFF_TIMEOUT; 
     29        tv.tv_usec = 0; 
     30        DEBUGP("Create power off timer\n"); 
     31 
     32        return gsmd_timer_create(&tv,&poweroff_timeout,g); 
     33} 
     34 
     35static int gta01_power(struct gsmd *g, int power) 
     36{ 
     37        struct gsmd_atcmd * cmd = NULL; 
     38 
     39        switch (power)  
     40        { 
     41                case GSMD_MODEM_POWERUP:  
     42                        break; 
     43 
     44                case GSMD_MODEM_POWERDOWN:       
     45 
     46                        //After send AT@POFF to GSM modem, modem will not work anymore and gsmd get no response 
     47                        cmd = atcmd_fill("AT@POFF", 7+1, NULL, g, 0, poweroff_timer); 
     48 
     49                        if (!cmd) 
     50                                return -ENOMEM; 
     51 
     52                        llist_add_tail(&cmd->list, &g->pending_atcmds); 
     53                        if (llist_empty(&g->busy_atcmds) && !llist_empty(&g->pending_atcmds)) { 
     54                                atcmd_wake_pending_queue(g); 
     55                        } 
     56                        break; 
     57 
     58                default: 
     59                        return -EINVAL; 
     60        } 
     61 
     62        return 0; 
     63} 
     64 
    1965static int null_wakeup_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)  
    2066{ 
    2167        DEBUGP("The wake up callback!!\n"); 
     
    103149 
    104150struct gsmd_machine_plugin gsmd_machine_plugin = { 
    105151        .name = "TI Calypso / FIC firmware", 
     152        .power = &gta01_power, 
    106153        .ex_submit = &atcmd_wakeup_modem, 
    107154        .detect = &gta01_detect, 
    108155        .init = &gta01_init, 
  • src/gsmd/machine_tihtc.c

    === src/gsmd/machine_tihtc.c
    ==================================================================
     
    6666 
    6767struct gsmd_machine_plugin gsmd_machine_plugin = { 
    6868        .name = "TI Calypso / HTC firmware", 
     69        .power = NULL, 
    6970        .ex_submit = NULL, 
    7071        .detect = &tihtc_detect, 
    7172        .init = &tihtc_init, 
  • src/gsmd/usock.c

    === src/gsmd/usock.c
    ==================================================================
     
    288288        return atcmd_submit(gu->gsmd, cmd); 
    289289} 
    290290 
     291static int usock_rcv_modem(struct gsmd_user *gu, struct gsmd_msg_hdr *gph,  
     292                           int len) 
     293{ 
     294        struct gsmd *g = gu->gsmd; 
     295 
     296        if (g->machinepl->power) { 
     297                g->machinepl->power(g, gph->msg_subtype); 
     298        } 
     299 
     300        return 0;  
     301} 
     302 
    291303static int network_vmail_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp) 
    292304{ 
    293305        struct gsmd_user *gu = ctx; 
     
    11681180        [GSMD_MSG_SMS]          = &usock_rcv_sms, 
    11691181        [GSMD_MSG_CB]           = &usock_rcv_cb, 
    11701182        [GSMD_MSG_PHONEBOOK]    = &usock_rcv_phonebook, 
     1183        [GSMD_MSG_MODEM]        = &usock_rcv_modem, 
    11711184}; 
    11721185 
    11731186static int usock_rcv_pcmd(struct gsmd_user *gu, char *buf, int len) 
  • src/libgsmd/Makefile.am

    === src/libgsmd/Makefile.am
    ==================================================================
     
    55lib_LTLIBRARIES = libgsmd.la 
    66 
    77libgsmd_la_LDFLAGS = -Wc,-nostartfiles -version-info $(LIBVERSION) 
    8 libgsmd_la_SOURCES = libgsmd.c libgsmd_input.c libgsmd_voicecall.c libgsmd_passthrough.c libgsmd_event.c libgsmd_phone.c libgsmd_network.c libgsmd_pin.c libgsmd_sms.c libgsmd_phonebook.c 
     8libgsmd_la_SOURCES = libgsmd.c libgsmd_input.c libgsmd_voicecall.c libgsmd_passthrough.c libgsmd_event.c libgsmd_phone.c libgsmd_network.c libgsmd_pin.c libgsmd_sms.c libgsmd_phonebook.c libgsmd_modem.c 
    99 
    1010noinst_HEADERS = lgsm_internals.h 
  • src/util/shell.c

    === src/util/shell.c
    ==================================================================
     
    340340                "\tH\tHangup call\n" 
    341341                "\tO\tPower On\n" 
    342342                "\to\tPower Off\n" 
     343                "\tM\tModem Power On\n" 
     344                "\tm\tModem Power Off\n" 
    343345                "\tr\tRegister to network\n" 
    344346                "\tR\tRegister to given operator (R=number)\n" 
    345347                "\tU\tUnregister from netowrk\n" 
     
    646648                        } else if (!strncmp(buf, "im", 2)) { 
    647649                                printf("Get imsi\n"); 
    648650                                lgsm_get_imsi(lgsmh); 
     651                        } else if (!strncmp(buf, "M", 1)) { 
     652                                printf("Modem Power On\n"); 
     653                                lgsm_modem_power(lgsmh, 1); 
     654                        } else if (!strncmp(buf, "m", 1)) { 
     655                                printf("Modem Power Off\n"); 
     656                                lgsm_modem_power(lgsmh, 0); 
    649657                        } else { 
    650658                                printf("Unknown command `%s'\n", buf); 
    651659                        }