/* * Copyright (C) 2003 BLADOX, s.r.o. All rights reserved. * * This file is part of an example program for Turbo. This example * program may be used, distributed and modified without limitation. * */ #include <config.h> #include <turbo/turbo.h> #include <stdlib.h> #include <string.h> u8 PROGMEM t_Position_mime[] = "pos"; void pos_q_sms (u8 * s) { u8 *tmp, *res; u8 *t = NULL; u16 j; u8 i; u8 *_tp = terminal_profile (); u8 *q; u8 *ln; u16 seq; dbsp (">pos_q_sms\n"); tmp = NULL; t = msisdncpy (tpdu_seek (s, T_SMS_AA), MSISDN_SMS, MEM_R); tmp = malloc (139); q = create_head_a (tmp, s); // compose all loc info sms *q = 0; if (_tp) { if (_tp[0] >= 4 && _tp[4] & 64) *q |= 1; // B4_7 LOC_NFO if (_tp[0] >= 4 && _tp[4] & 128) *q |= 2; // B4_8 NMR if (_tp[0] >= 8 && _tp[8] & 4) *q |= 4; // B8_3 DATE if (_tp[0] >= 9 && _tp[9] & 4) *q |= 8; // B9_3 BCCH if (_tp[0] >= 9 && _tp[9] & 8) *q |= 16; // B9_4 LANG if (_tp[0] >= 9 && _tp[9] & 16) *q |= 32; // B9_5 TA } q++; ln = q; q++; // provide_local_info // T_LOCATION_INFO // 12.19 len=0x07+2 res = provide_local_info (); j = get_tag (res, T_LOCATION_INFO); if (j != 0) { memcpy (q, res + j, res[j + 1] + 2); q += res[j + 1] + 2; } // ?provide_imei? // T_IMEI // 19.20 len=0x08+2 res = provide_imei (); j = get_tag (res, T_IMEI); if (j != 0) { memcpy (q, res + j, res[j + 1] + 2); q += res[j + 1] + 2; } // provide_nmr // T_NMR // 19.22 len=0x10+2 // provide_bcch & term_profile // T_BCCH_CHANNEL_LIST // 12.29 + 1 term_prof res = provide_nmr (); j = get_tag (res, T_NMR); if (j != 0) { memcpy (q, res + j, res[j + 1] + 2); q += res[j + 1] + 2; } j = get_tag (res, T_BCCH_CHANNEL_LIST); if (j != 0) { memcpy (q, res + j, res[j + 1] + 2); q += res[j + 1] + 2; } // provide_date // T_DATE // 12.39 len=0x07+2 res = provide_date (); j = get_tag (res, T_DATE); if (j != 0) { memcpy (q, res + j, res[j + 1] + 2); q += res[j + 1] + 2; } // provide_language // T_LANGUAGE // 12.45 len=0x02+2 res = provide_language (); j = get_tag (res, T_LANGUAGE); if (j != 0) { memcpy (q, res + j, res[j + 1] + 2); q += res[j + 1] + 2; } // provide_ta // T_TIMING_ADVANCE // l2.46 len=0x02+2 res = provide_ta (); j = get_tag (res, T_TIMING_ADVANCE); if (j != 0) { memcpy (q, res + j, res[j + 1] + 2); q += res[j + 1] + 2; } *ln = q - ln; res = send_sms (tmp, q - tmp, t, MSISDN_SMS, tsms_dcs (), tsms_pid (), NULL, NULL); free (tmp); free (t); dbsp ("<pos_q_sms\n"); } u8 PROGMEM t_s1[] = "T: "; u8 PROGMEM t_s2[] = "LOCINFO: "; u8 PROGMEM t_s3[] = "IMEI: "; u8 PROGMEM t_s4[] = "NMR: "; u8 PROGMEM t_s5[] = "BCCH: "; u8 PROGMEM t_s6[] = "DATE: "; u8 PROGMEM t_s7[] = "LANG: "; u8 PROGMEM t_s8[] = "TA: "; void pos_a_sms (u8 * s) { u8 *t = skip_head (s); u8 *buf = malloc (200); u8 *res; u8 *r = buf; u8 j; u8 i, l; dbsp ("rec_pos_a_sms\n"); r = sprints (r, t_s1); r = sprintch (r, *t); r = sprintc (r, '\n'); res = t + 1; j = get_tag (res, T_LOCATION_INFO); if (j != 0) { r = sprints (r, t_s2); l = res[j + 1]; for (i = 0; i < l; i++) r = sprintch (r, res[j + 2 + i]); r = sprintc (r, '\n'); } j = get_tag (res, T_IMEI); if (j != 0) { r = sprints (r, t_s3); l = res[j + 1]; for (i = 0; i < l; i++) r = sprintch (r, res[j + 2 + i]); r = sprintc (r, '\n'); } j = get_tag (res, T_NMR); if (j != 0) { r = sprints (r, t_s4); l = res[j + 1]; for (i = 0; i < l; i++) r = sprintch (r, res[j + 2 + i]); r = sprintc (r, '\n'); } j = get_tag (res, T_BCCH_CHANNEL_LIST); if (j != 0) { r = sprints (r, t_s5); l = res[j + 1]; for (i = 0; i < l; i++) r = sprintch (r, res[j + 2 + i]); r = sprintc (r, '\n'); } j = get_tag (res, T_DATE); if (j != 0) { r = sprints (r, t_s6); l = res[j + 1]; for (i = 0; i < l; i++) r = sprintch (r, res[j + 2 + i]); r = sprintc (r, '\n'); } j = get_tag (res, T_LANGUAGE); if (j != 0) { r = sprints (r, t_s7); l = res[j + 1]; for (i = 0; i < l; i++) r = sprintch (r, res[j + 2 + i]); r = sprintc (r, '\n'); } j = get_tag (res, T_TIMING_ADVANCE); if (j != 0) { r = sprints (r, t_s8); l = res[j + 1]; for (i = 0; i < l; i++) r = sprintch (r, res[j + 2 + i]); r = sprintc (r, '\n'); } r = sprintc (r, '\0'); display_text_raw (buf, Q_DISPLAY_TEXT_HIGH_PRIORITY | Q_DISPLAY_TEXT_USER_CLEAR); free (buf); } void pos (void *data) { u8 *tmp, *res; u8 *ms; u8 *q; u8 l, j, i; u8 alpha[ALPHA_LEN]; tmp = NULL; ms = NULL; res = msisdn (alpha); if (res != ENULL && res != NULL) { ms = msisdncpy (res, MSISDN_ADN, MEM_R); tmp = malloc (20); q = create_head_q (tmp, t_Position_mime, ms, MSISDN_ADN); send_sms (tmp, q - tmp, ms, MSISDN_ADN, tsms_dcs (), tsms_pid (), NULL, NULL); } free (tmp); free (ms); } /* *INDENT-OFF* */ lc_char PROGMEM lc_Position[]={ LC_EN("Locate") LC_CZ("Lokalizuj") LC_END }; /* *INDENT-ON* */ void turbo_handler (u8 action, void *data) { switch (action) { case ACTION_SMS_Q: stk_thread (pos_q_sms, data); break; case ACTION_SMS_A: stk_thread (pos_a_sms, data); break; case ACTION_APP_REGISTER: reg_sms_tag (locale (lc_Position), t_Position_mime, SMS_TYPE_QA); break; case ACTION_INSERT_MENU: insert_menu (locale (lc_Position)); break; case ACTION_MENU_SELECTION: stk_thread (pos, data); break; default: break; } }
Copyright © 2004-2006 BLADOX | Turbo version 1.2
|