Changeset 3449


Ignore:
Timestamp:
11/20/07 07:05:28 (6 years ago)
Author:
tick
Message:

[gsmd] New feature for power on/off GSM modem (Sean Chiang)

Location:
trunk/src/target/gsm
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/target/gsm/include/gsmd/machineplugin.h

    r3430 r3449  
    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); 
  • trunk/src/target/gsm/include/gsmd/usock.h

    r3309 r3449  
    2525        GSMD_MSG_SMS            = 9, 
    2626        GSMD_MSG_CB             = 10, 
     27        GSMD_MSG_MODEM          = 11, 
    2728        __NUM_GSMD_MSGS 
    2829}; 
     
    5657        GSMD_PHONE_POWERUP      = 1, 
    5758        GSMD_PHONE_POWERDOWN    = 2, 
     59}; 
     60 
     61enum gsmd_msg_modem { 
     62        GSMD_MODEM_POWERUP      = 1, 
     63        GSMD_MODEM_POWERDOWN    = 2, 
    5864}; 
    5965 
  • trunk/src/target/gsm/include/libgsmd/misc.h

    r3204 r3449  
    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 { 
  • trunk/src/target/gsm/src/gsmd/machine_generic.c

    r3430 r3449  
    5757struct gsmd_machine_plugin gsmd_machine_plugin = { 
    5858        .name = "generic", 
     59        .power = NULL, 
    5960        .ex_submit = NULL, 
    6061        .detect = &generic_detect, 
  • trunk/src/target/gsm/src/gsmd/machine_gta01.c

    r3430 r3449  
    1616 
    1717#define GSMD_MODEM_WAKEUP_TIMEOUT     3 
     18#define GSMD_MODEM_POWEROFF_TIMEOUT     3         
     19 
     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} 
    1864 
    1965static int null_wakeup_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)  
     
    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, 
  • trunk/src/target/gsm/src/gsmd/machine_tihtc.c

    r3430 r3449  
    6767struct gsmd_machine_plugin gsmd_machine_plugin = { 
    6868        .name = "TI Calypso / HTC firmware", 
     69        .power = NULL, 
    6970        .ex_submit = NULL, 
    7071        .detect = &tihtc_detect, 
  • trunk/src/target/gsm/src/gsmd/usock.c

    r3447 r3449  
    287287 
    288288        return atcmd_submit(gu->gsmd, cmd); 
     289} 
     290 
     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;  
    289301} 
    290302 
     
    11691181        [GSMD_MSG_CB]           = &usock_rcv_cb, 
    11701182        [GSMD_MSG_PHONEBOOK]    = &usock_rcv_phonebook, 
     1183        [GSMD_MSG_MODEM]        = &usock_rcv_modem, 
    11711184}; 
    11721185 
  • trunk/src/target/gsm/src/libgsmd/Makefile.am

    r1765 r3449  
    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 
  • trunk/src/target/gsm/src/util/shell.c

    r3448 r3449  
    357357                "\tO\tPower On\n" 
    358358                "\to\tPower Off\n" 
     359                "\tM\tModem Power On\n" 
     360                "\tm\tModem Power Off\n" 
    359361                "\tr\tRegister to network\n" 
    360362                "\tR\tRegister to given operator (R=number)\n" 
     
    676678                                lgsm_get_imsi(lgsmh); 
    677679                                pending_responses ++; 
     680                        } else if (!strncmp(buf, "M", 1)) { 
     681                                printf("Modem Power On\n"); 
     682                                lgsm_modem_power(lgsmh, 1); 
     683                        } else if (!strncmp(buf, "m", 1)) { 
     684                                printf("Modem Power Off\n"); 
     685                                lgsm_modem_power(lgsmh, 0); 
    678686                        } else { 
    679687                                printf("Unknown command `%s'\n", buf); 
Note: See TracChangeset for help on using the changeset viewer.