找回密码
 注册
搜索
查看: 1641|回复: 10

[讨论] 强烈求欲也谈论MMI>MTK

[复制链接]
发表于 2006-8-12 22:08:00 | 显示全部楼层 |阅读模式
我想重建MTK6219的MMI可是我一个新手,不太了解这个平台,如下是我遇到的一个问题,请大家帮帮忙,
我在写增值服务代码时,能发送信息到SP服务器,可是内容是空白的,查两了两三天,都没有结果,请大家帮把手.谢谢

void mmi_fng_game_send_msg(void)
{
S8*  number="13751159457";
kal_uint8 msg='P';
mmi_frm_sms_send_struct* sendSms;
S8* addr =number;
EMSData* pEMS;

sendSms = (mmi_frm_sms_send_struct*) OslConstructDataPtr(sizeof(*sendSms));
pEMS = (EMSData*)OslConstructDataPtr(sizeof(*pEMS));
//pEMS = GetEMSDataForEdit(0, 0) ;
memset((S8*)pEMS->textBuffer, 0, MAX_CC_ADDR_LEN);
//memcpy((S8*)pEMS->textBuffer, (S8*)msg, strlen((S8*)msg));
UnicodeToAnsii((S8 *)msg, (S8 *)L"P#");
AppendEMSString ( INPUT_TYPE_ALPHANUMERIC_SENTENCECASE,pEMS, (U8*)msg, SMSAL_DEFAULT_DCS, NULL );

memset((S8*)sendSms->number, 0, MAX_CC_ADDR_LEN);
memcpy((S8*)sendSms->number, (S8*)addr, strlen((S8*)addr));
  
mmi_frm_sms_send_sms(mmi_fng_game_dream_callback, MOD_MMI, sendSms);
OslMfree(sendSms);
if(chatbuff5!=NULL)
  {
      OslMfree(pEMS);
      chatbuff5=NULL;
  }
}
 楼主| 发表于 2006-8-13 12:42:00 | 显示全部楼层
现在不是空信息了,而是:UnicodeToAnsii((S8 *)msg, (S8 *)L"P854236P#");的内容在发送到13751159457后,只显示P526#只是显示单数的字符,不显示全部的字符.后面还跟着一大串特殊字符,

请问大侠们怎么去更改呀!
void mmi_fng_game_send_msg(void)
{       
        S8*  number="13751159457";
        kal_uint8 msg='P';
        mmi_frm_sms_send_struct*        sendSms;
        S8* addr =number;
        EMSData*        pEMS;

       
        sendSms = (mmi_frm_sms_send_struct*) OslConstructDataPtr(sizeof(*sendSms));
        pEMS = (EMSData*)OslConstructDataPtr(sizeof(*pEMS));
        pEMS = GetEMSDataForEdit(0, 0) ;
        memset((S8*)pEMS->textBuffer, 0, MAX_CC_ADDR_LEN);
        UnicodeToAnsii((S8 *)msg, (S8 *)L"P854236P#");
        AppendEMSString ( INPUT_TYPE_ALPHANUMERIC_SENTENCECASE,pEMS, (U8*)msg, SMSAL_DEFAULT_DCS, NULL );
        memset((S8*)sendSms->number, 0, MAX_CC_ADDR_LEN);
        memcpy((S8*)sendSms->number, (S8*)addr, strlen((S8*)addr));
        mmi_frm_sms_send_sms(mmi_fng_game_dream_callback, MOD_MMI, sendSms);
        OslMfree(sendSms);
        }
点评回复

使用道具 举报

发表于 2006-8-15 09:22:00 | 显示全部楼层
现在不是空信息了,而是:UnicodeToAnsii((S8 *)msg, (S8 *)L"P854236P#");的内容在发送到13751159457后,只显示P526#只是显示单数的字符,不显示全部的字符.后面还跟着一大串特殊字符,


============================
你的编码基本功还不到家。
点评回复

使用道具 举报

发表于 2006-8-15 09:27:00 | 显示全部楼层
楼主,重建6219的MMI,首先需要将c语言学好,
理解Unicode编码, 7-bit编码, Ascii编码等。

短消息部分你要清楚各种消息的格式,发送的模式,
走的通道,封装的模式等等。直接调用系统包好的函数
不一定能将消息发送完整,何况你的函数里还有语法
问题。

6219的MMI做的还是很强的,普通一个公司也不可能
做出来,一个人做,估计研究研究还可以。
点评回复

使用道具 举报

发表于 2006-8-16 09:45:00 | 显示全部楼层
not easy to do it
点评回复

使用道具 举报

 楼主| 发表于 2006-8-19 09:28:00 | 显示全部楼层
谢谢 jsjjms与linuxdreamer,
虽然我对MMI这块有很多的疑惑。很多的不解,我想只要坚持不懈,还是会有进展的。遇到问题可以向你们请教。像jsjjms解答我的问题,答案是很清析明了的,让我能更进一步的了解短信息这块的代码。
我的QQ是:100800337
MSN:steven_ssc437@hotmail.com
谢谢
点评回复

使用道具 举报

发表于 2006-8-21 11:53:00 | 显示全部楼层
我也做过sp业务,这个是我的发短信的代码,你可以参考一下

void Entertainment_send_message_response(void *number,module_type mod,U16 result)
{
        U16 currentSCRID;
       
        if (result == MMI_FRM_SMS_OK)
{
}
        else
                {
                }

        if (CloseDeliveryRepyStatesFlag)
        {
                CloseDeliveryRepyStatesFlag = 0;
                DeliveryRepyStates[0] = 1;
                mmi_frm_sms_set_common_settings(NULL,MOD_MMI,DeliveryRepyStates);
        }

        MdogSendMessage = 0;
        mmi_frm_sms_delete_screen_history();

        currentSCRID = GetActiveScreenId();
       
        if ((currentSCRID == SCR_ID_MSG_SENDING) || (currentSCRID == SCR_ID_MSG_PROCESSING))
                GoBackHistory();

        AlmEnableSPOF();
}

/*****************************************************************************
* FUNCTION
*        Entertainment_IsReady4SendSms

* DESCRIPTION
*        ÊäÈë¹Ì¶¨Îı¾ÄÚÈݲ¢·¢ËͶÌÏûÏ¢
* PARAMETERS
*       
* RETURNS
*
* Author
*       
*****************************************************************************/

extern  S8 Entertainment_IsReady4SendSms(void)
{
        S8 result;
        if (g_pwr_context.CurrentServiceType == NO_SERVICE)  
        {
                return FALSE;
        }
        else if (mmi_frm_sms_get_sms_list_size(0x00) == MMI_FRM_SMS_INVALID_INDEX)   
        {
                return FALSE;
        }
        else
        {
                if (mmi_frm_sms_check_action_pending())                
                {
                        return FALSE;
                }
                else
                {
                        return TRUE;
                }
        }
}

/*****************************************************************************
* FUNCTION
*        Entertainment_SendSms

* DESCRIPTION
*        ÊäÈë¹Ì¶¨Îı¾ÄÚÈݲ¢·¢ËͶÌÏûÏ¢
* PARAMETERS
*       
* RETURNS
*
* Author
*       
*****************************************************************************/

S8 Entertainment_SendSms(U8 *pNumber,U8 *pContent)
{
                S8 *textbufUCS2 ;
                S8 smsPhoneNumber[(MAX_DIGITS + 1) * ENCODING_LENGTH];
                EMSData *pEMS;
                byte result;
                U8 len, i;

               
                if (!Entertainment_IsReady4SendSms())
                {
                        return FALSE;
                }
       
                len = strlen((char *) pContent);

                ReleaseEMSEditBuffer();
                pEMS = GetEMSDataForEdit(0,1);


                g_msg_cntx.sendSaveStatus = SEND_SAVE_NIL;
                memset(g_msg_cntx.smsPhoneNumber,0,sizeof(g_msg_cntx.smsPhoneNumber));
                AnsiiToUnicodeString((S8 *) smsPhoneNumber,(S8 *) pNumber);
                pfnUnicodeStrcpy(g_msg_cntx.smsPhoneNumber,(S8 *) smsPhoneNumber);

                PendingSaveSendData.totalSegments = 1;
                PendingSaveSendData.mti = SMSAL_MTI_SUBMIT;
                memset(PendingSaveSendData.TPUD,0,sizeof(PendingSaveSendData.TPUD));

                for (i = 1; i < mmi_msg_get_seg_num(); i++)
                {
                        PendingSaveSendData.TPUDLen = 0;
                        PendingSaveSendData.TPUD_p = NULL;
                        PendingSaveSendData.l4index = SMS_INVALID_INDEX;
                        PendingSaveSendData.TPUD_udhi = FALSE;
                }

                g_msg_cntx.sendMessageCase = SEND_CASE_SEND_ONLY;

                textbufUCS2 = (S8 *) OslMalloc((len + 1) * 2);
                memset(textbufUCS2,0,((len + 1) * 2));
                AnsiiToUnicodeString((S8 *) textbufUCS2,(S8 *) pContent);

                result = AppendEMSString(INPUT_TYPE_ALPHANUMERIC_SENTENCECASE,
                                                                 pEMS,
                                                                 (U8 *) textbufUCS2,
                                                                 SMSAL_DEFAULT_DCS,
                                                                 NULL);  
                OslMfree(textbufUCS2);

                if (result)
                {
                        mmi_frm_sms_send_struct *sendData        = OslMalloc(sizeof(mmi_frm_sms_send_struct));

                        if (DeliveryRepyStates[0] == 1)   
                        {
                                CloseDeliveryRepyStatesFlag = 1;
                                DeliveryRepyStates[0] = 0;
                                mmi_frm_sms_set_common_settings(NULL,MOD_MMI,DeliveryRepyStates);
                        }

                        memset((S8 *) sendData,0,sizeof(mmi_frm_sms_send_struct));
                        memset(sendData->number,0,MAX_DIGITS_SMS);       
                        if (pfnUnicodeStrlen((S8 *) smsPhoneNumber))
                                UnicodeToAnsii((S8 *) sendData->number,(S8 *) smsPhoneNumber);

                        MdogSendMessage = 1;       
                        mmi_frm_sms_send_sms(Entertainment_send_message_response,MOD_MMI,sendData);
                        OslMfree(sendData);

                        return TRUE;
                }

        return FALSE;
}
点评回复

使用道具 举报

发表于 2006-8-21 11:55:00 | 显示全部楼层
你只要调用这个函数就可以了
Entertainment_SendSms(U8 *pNumber,U8 *pContent)

注意输入的是ASCII,因为里面已经做了转换,MTK所有的需要显示到界面的字符,都必须转换成unicode!
点评回复

使用道具 举报

发表于 2006-8-21 11:56:00 | 显示全部楼层
还有,提醒你一下,因为sp业务所涉及的号码非常多,所以你的号码最好别定义在函数里面,容易写错,最好用宏来表示,这样都很方便,这是个好习惯!
点评回复

使用道具 举报

 楼主| 发表于 2006-9-12 11:51:00 | 显示全部楼层
[QUOTE]根据你的提示,信息可以成功发出了,可是前几天测试部的同事跟我说,菜单中有多出来的项及有一项没有STR ID..没有的STRID的是外墙纸,多出的项是小写字母,小写字母是在出现在服务里,把帐号资料挤到下个菜单里.如图

c:\document and setting\鬼文子\桌面
点评回复

使用道具 举报

发表于 2006-9-16 20:55:00 | 显示全部楼层
建议先看看ETSI03.40部分,那里是讲述SMS的技术实现的.
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-23 14:19 , Processed in 0.087848 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表