Changeset 3684
- Timestamp:
- 12/19/07 10:34:34 (5 years ago)
- Location:
- trunk/src/target/gsm
- Files:
-
- 5 edited
-
include/libgsmd/misc.h (modified) (1 diff)
-
include/libgsmd/sms.h (modified) (1 diff)
-
src/gsmd/usock.c (modified) (2 diffs)
-
src/libgsmd/libgsmd_network.c (modified) (2 diffs)
-
src/util/shell.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/target/gsm/include/libgsmd/misc.h
r3636 r3684 34 34 /* Get Signal Strehngth (Chapter 8.5) */ 35 35 extern int lgsm_signal_quality(struct lgsm_handle *h); 36 37 /* Set voice mail number */38 extern int lgsm_voicemail_set(struct lgsm_handle *lh,39 struct lgsm_addr *addr);40 41 /* Get currently configured voice mail number */42 extern int lgsm_voicemail_get(struct lgsm_handle *lh,43 struct lgsm_addr *addr);44 36 45 37 /* Operator Selection, Network Registration */ -
trunk/src/target/gsm/include/libgsmd/sms.h
r3201 r3684 80 80 enum ts0705_mem_type mem1, enum ts0705_mem_type mem2, 81 81 enum ts0705_mem_type mem3); 82 extern int lgsm_number2addr(struct gsmd_addr *dst, const char *src, 83 int skipplus); 82 84 83 85 /* Retrieve current default service centre address */ -
trunk/src/target/gsm/src/gsmd/usock.c
r3657 r3684 521 521 { 522 522 struct gsmd_user *gu = ctx; 523 struct gsmd_voicemail *vmail; 524 struct gsmd_ucmd *ucmd; 525 char *comma; 526 527 DEBUGP("entering(cmd=%p, gu=%p)\n", cmd, gu); 528 529 ucmd = ucmd_alloc(sizeof(*vmail)); 530 if (!ucmd) 531 return -ENOMEM; 532 533 /* FIXME: pass error values back somehow */ 534 ucmd->hdr.version = GSMD_PROTO_VERSION; 535 ucmd->hdr.msg_type = GSMD_MSG_NETWORK; 536 ucmd->hdr.len = sizeof(*vmail); 537 ucmd->hdr.id = cmd->id; 523 struct gsmd_voicemail vmail; 524 struct gsm_extrsp *er; 525 int rc; 526 int ret = cmd->ret; 527 528 DEBUGP("cmd = '%s', resp: '%s'\n", cmd->buf, resp); 538 529 539 530 if (cmd->buf[7] == '=') { 540 531 /* response to set command */ 541 ucmd->hdr.msg_subtype = GSMD_NETWORK_VMAIL_SET; 542 /* FIXME: */ 543 return 0; 532 rc = gsmd_ucmd_submit(gu, GSMD_MSG_NETWORK, 533 GSMD_NETWORK_VMAIL_SET,cmd->id, sizeof(ret), &ret); 544 534 } else { 545 535 /* response to get command */ 546 char *tok = strtok(resp, ","); 547 if (!tok) 548 goto out_free_einval; 549 ucmd->hdr.msg_subtype = GSMD_NETWORK_VMAIL_GET; 550 vmail->enable = atoi(tok); 551 552 tok = strtok(NULL, ","); 553 if (!tok) 554 goto out_free_einval; 555 strncpy(vmail->addr.number, tok, GSMD_ADDR_MAXLEN); 556 vmail->addr.number[GSMD_ADDR_MAXLEN] = '\0'; 557 558 tok = strtok(NULL, ","); 559 if (!tok) 560 goto out_free_einval; 561 vmail->addr.type = atoi(tok); 562 } 563 564 usock_cmd_enqueue(ucmd, gu); 565 566 return 0; 567 568 out_free_einval: 569 gsmd_log(GSMD_ERROR, "can't understand voicemail response\n"); 570 talloc_free(ucmd); 571 return -EINVAL; 536 if (strncmp(resp, "+CSVM: ", 7)) 537 return -EINVAL; 538 resp += 7; 539 er = extrsp_parse(gsmd_tallocs, resp); 540 if(!er) 541 return -ENOMEM; 542 if(er->num_tokens == 3 && 543 er->tokens[0].type == GSMD_ECMD_RTT_NUMERIC && 544 er->tokens[1].type == GSMD_ECMD_RTT_STRING && 545 er->tokens[2].type == GSMD_ECMD_RTT_NUMERIC) { 546 vmail.enable = er->tokens[0].u.numeric; 547 strcpy(vmail.addr.number, er->tokens[1].u.string); 548 vmail.addr.type = er->tokens[2].u.numeric; 549 } 550 rc = gsmd_ucmd_submit(gu, GSMD_MSG_NETWORK, GSMD_NETWORK_VMAIL_GET, 551 cmd->id, sizeof(vmail), &vmail); 552 talloc_free(er); 553 } 554 return rc; 572 555 } 573 556 … … 814 797 break; 815 798 case GSMD_NETWORK_VMAIL_SET: 816 cmd = atcmd_fill("AT+CSVM=", 8+1, &network_vmail_cb, gu, 0, NULL); 799 cmdlen = sprintf(buffer, "AT+CSVM=1,\"%s\",%d", 800 vmail->addr.number, vmail->addr.type); 801 cmd = atcmd_fill(buffer, cmdlen + 1, &network_vmail_cb, gu, 0, NULL); 817 802 break; 818 803 case GSMD_NETWORK_SIGQ_GET: -
trunk/src/target/gsm/src/libgsmd/libgsmd_network.c
r2733 r3684 27 27 #include <libgsmd/libgsmd.h> 28 28 #include <libgsmd/misc.h> 29 #include <libgsmd/sms.h> 29 30 30 31 #include <gsmd/usock.h> … … 134 135 return lgsm_send_simple(lh, GSMD_MSG_NETWORK, GSMD_NETWORK_GET_NUMBER); 135 136 } 137 138 int lgsm_voicemail_set(struct lgsm_handle *lh, const char *number) 139 { 140 struct gsmd_msg_hdr *gmh; 141 struct gsmd_voicemail *vmail; 142 int rc; 143 144 gmh = lgsm_gmh_fill(GSMD_MSG_NETWORK, 145 GSMD_NETWORK_VMAIL_SET, sizeof(*vmail)); 146 if (!gmh) 147 return -ENOMEM; 148 149 vmail = (struct gsmd_voicemail *) gmh->data; 150 vmail->enable = 1; 151 if (lgsm_number2addr(&vmail->addr, number, 0)){ 152 lgsm_gmh_free(gmh); 153 return -EINVAL; 154 } 155 156 if (lgsm_send(lh, gmh) < gmh->len + sizeof(*gmh)) { 157 lgsm_gmh_free(gmh); 158 return -EIO; 159 } 160 161 lgsm_gmh_free(gmh); 162 return 0; 163 } 164 165 /* Get currently configured voice mail number */ 166 int lgsm_voicemail_get(struct lgsm_handle *lh) 167 { 168 return lgsm_send_simple(lh, GSMD_MSG_NETWORK, GSMD_NETWORK_VMAIL_GET); 169 } -
trunk/src/target/gsm/src/util/shell.c
r3657 r3684 286 286 const struct gsmd_own_number *num = (struct gsmd_own_number *) 287 287 ((void *) gmh + sizeof(*gmh)); 288 const struct gsmd_voicemail *vmail = (struct gsmd_voicemail *) 289 ((void *) gmh + sizeof(*gmh)); 290 int result = *(int *) gmh->data; 288 291 static const char *oper_stat[] = { 289 292 [GSMD_OPER_UNKNOWN] = "of unknown status", … … 340 343 (num->service == GSMD_SERVICE_UNKNOWN) ? 341 344 "" : " services"); 345 pending_responses --; 346 break; 347 case GSMD_NETWORK_VMAIL_SET: 348 if (result) 349 printf("Set voicemail error %i\n", result); 350 else 351 printf("Set voicemail OK \n"); 352 pending_responses --; 353 break; 354 case GSMD_NETWORK_VMAIL_GET: 355 if(vmail->addr.number) 356 printf ("voicemail number is %s \n",vmail->addr.number); 342 357 pending_responses --; 343 358 break; … … 482 497 "\tsc\tSMS Show Service Centre\n" 483 498 "\tsC\tSMS Set Service Centre (sC=number)\n" 499 "\tgvm\tGet Voicemail number\n" 500 "\tsvm\tSet Voicemail number(svm=number)\n" 484 501 "\tim\tGet imsi\n" 485 502 "\tcs\tGet Call status\n" … … 767 784 lgsm_get_subscriber_num(lgsmh); 768 785 pending_responses ++; 786 } else if ( !strncmp(buf, "gvm", 3)) { 787 printf("Get Voicemail Number\n"); 788 lgsm_voicemail_get(lgsmh); 789 pending_responses ++; 790 } else if ( !strncmp(buf, "svm", 3)) { 791 printf("Set Voicemail Number\n"); 792 ptr = strchr(buf, '='); 793 if (!ptr || strlen(ptr) < 3) 794 printf("No.\n"); 795 else 796 lgsm_voicemail_set(lgsmh, ptr + 1); 797 pending_responses ++; 769 798 } else if (!strncmp(buf, "im", 2)) { 770 799 printf("Get imsi\n");
Note: See TracChangeset
for help on using the changeset viewer.
