📄 tskmenu.c
字号:
Do_Clear_Screen(6,32,7,95); //clear the menu index field
MenuDisplayPinYin(tmpval); //display PinYin
}
else if((CurInputMethod==ENGLISH && MenuTimerRunning==0)||
(CurInputMethod==PINYIN && HanZiSel==0 && CurInputCharsLen==0)){
if(CurTextLen>0){
if(CurTextIstPos==CurTextLen-1)
CurTextIstPos=0xFF;
else if(CurTextIstPos!=0xFF)
CurTextIstPos++;
Do_Clear_Screen(2,0,3,127);
MenuDisplayText();
}
}
break;
case '*':
if(CurInputMethod==ENGLISH && MenuTimerRunning==0){
if(CurInputCase==UPPER_CASE)
CurInputCase=LOWER_CASE;
else
CurInputCase=UPPER_CASE;
}
break;
case '#':
if(CurInputMethod==PINYIN && HanZiSel==0 && CurInputCharsLen>0){
tmpval=GetPYNode(tmpkey);
HanZiSel=1;
LetterLinePos=0;
tmpval=HanZiSelNum>MAX_DISP_HANZI_SEL ? MAX_DISP_HANZI_SEL : HanZiSelNum;
Do_Clear_Screen(4,0,5,127);
app_printf(pLetterLine,tmpval,4,0);
}
break;
default:
if(tmpkey <= '9' && tmpkey >= '0'){
if(CurInputMethod==PINYIN){
if(HanZiSel==1 && tmpkey>='1' && tmpkey<=MAX_DISP_HANZI_SEL+0x30 && (HanZiSelNum-LetterLinePos)!=0){
if((tmpkey-0x31)<(HanZiSelNum-LetterLinePos)){
if(CurTextIstPos==0xFF)
CurText[CurTextLen++]=pLetterLine[LetterLinePos+tmpkey-0x31];
else{
for(i=CurTextLen;i>CurTextIstPos;i--)
CurText[i]=CurText[i-1];
CurText[CurTextIstPos++]=pLetterLine[LetterLinePos+tmpkey-0x31];
CurTextLen++;
}
Do_Clear_Screen(2,0,5,127);
Do_Clear_Screen(6,32,7,95);
MenuDisplayText();
HanZiSel=0; //准备输入拼音
LetterLinePos=0; //待选汉字清零
CurInputCharsLen=0; //拼音清零
}
}
else if(HanZiSel==0 && tmpkey>='2' && CurInputCharsLen<6){
tmpval=GetPYNode(tmpkey); //CurInputChars[CurInputCharsLen++]=tmpkey;
Do_Clear_Screen(6,32,7,95); //clear the menu index field
MenuDisplayPinYin(tmpval); //Display PinYin
}
}
else if(CurInputMethod==ENGLISH){ //英文处理
if(tmpkey!=PrevKey){ //上一个键值所代表的字母已取;或者快速按其它键
MenuTimerRunning=TIMER_ENGLISH_INPUT_VAL; //反正要(重新)启动定时,省去可能的停止定时步骤
if(PrevKey!=0){ //PrevKey==0表示键值所代表的字母已因超时被取走,或刚开始时无键值。
if(CurTextIstPos==0xFF)
CurText[CurTextLen++]=pLetterLine[LetterLinePos];
else{
for(i=CurTextLen;i>CurTextIstPos;i--)
CurText[i]=CurText[i-1];
CurText[CurTextIstPos++]=pLetterLine[LetterLinePos];
CurTextLen++;
}
}
if(CurInputCase==LOWER_CASE) //小写
pLetterLine=MenuEditLowerKey[tmpkey-0x30];
else //大写
pLetterLine=MenuEditUpperKey[tmpkey-0x30];
LetterLinePos=0;
PrevKey=tmpkey;
Do_Clear_Screen(2,0,5,127);
MenuDisplayText();
app_printf(pLetterLine,0,4,0);
Disp_Word(4,LetterLinePos<<3,pLetterLine[LetterLinePos],(PIX8|PIX_REVERSE)); //Highlight
}
else{ //if(tmepkey==PrevKey) //MenuTimerRunning=1 肯定!否则,PrevKey==0x00
LetterLinePos=(LetterLinePos+1)%LetterLineLen[tmpkey-0x30]; //这里要用到各自的长度
if(CurInputCase==LOWER_CASE) //小写
pLetterLine=MenuEditLowerKey[tmpkey-0x30];
else //大写
pLetterLine=MenuEditUpperKey[tmpkey-0x30];
Do_Clear_Screen(4,0,5,127);
app_printf(pLetterLine,0,4,0);
Disp_Word(4,LetterLinePos<<3,pLetterLine[LetterLinePos],(PIX8|PIX_REVERSE)); //Highlight
MenuTimerRunning=TIMER_ENGLISH_INPUT_VAL; //尽管已经MenuTimerRunning==1,但为防万一。
}
} // end of 英文处理
else if(CurInputMethod==SYMBOL && tmpkey>='1' && tmpkey<='8'){ //从1开始计数,一行共有8个符号
if(CurTextIstPos==0xFF)
CurText[CurTextLen++]=MenuEditSymbol[CurLineNo][tmpkey-0x31];
else{
for(i=CurTextLen;i>CurTextIstPos;i--)
CurText[i]=CurText[i-1];
CurText[CurTextIstPos++]=MenuEditSymbol[CurLineNo][tmpkey-0x31];
CurTextLen++;
}
Do_Clear_Screen(2,0,3,127);
MenuDisplayText();
}
}
break;
}
} //End of "for"
}
//Function of editing SMS
//Pre-operation: assign "CurText","CurTextLen","CurPhoneNum" and "CurPhoneNumLen".
INT8U MFunc_EditSMS(INT8U type)
{
INT8U i,retval;
INT8U tmpkey;
INT8U err;
INT8U rom * pSml;
INT8U rom * pLge;
retval=EnterTextEdit();
if(retval==2){ //return from "PIC_ACKNOWLEDGE"
//Begin from "EnterPhoneEdit()"
retval=EnterPhoneEdit();
if(retval==2 || retval==0){
if(retval==2){
Do_Clear_Screen(4,0,5,127);
Disp_Word(2,CurPhoneNumLen*6,' ',PIX8);
Display_Menu_Icon(0,&PIC_SEND);
}
else{
Do_Clear_Screen(2,0,5,127);
Display_Menu_Icon(0,&PIC_RETURN);
app_printf(TextQSave,3,2,0);
}
Display_Menu_Icon(1,&PIC_SAVE);
tmpkey=MFunc_WaitForInput(0);
switch(tmpkey){
case 0xFF:
return(1);
case KEY_FUNC1:
if(retval==2){ //retval==2 means PhoneNumber has been entered.
retval=0;
pSml = OSMemGet(pMemSml, &err);
if(err == OS_NO_ERR){
pLge = OSMemGet(pMemLge, &err);
if(err == OS_NO_ERR){
((MSG_HEAD *)pSml)->Msg_ID = MSG_SM_SEND;
((MSG_HEAD *)pSml)->Origin = peventMenu;
((MSG_HEAD *)pSml)->pmemME = pMemSml;
((MSG_HEAD *)pSml)->Attached = TRUE;
((MSG_HEAD *)pSml)->pMem = pLge;
((MSG_HEAD *)pSml)->pmemATT = pMemLge;
*pLge++ = CurPhoneNumLen;
for(i = 0; i< CurPhoneNumLen; i++){
*pLge++ = CurPhoneNum[i];
}
for(i=0; i<CurTextLen; i++){
*pLge++=(INT8U)((CurText[i]>>8) & 0xFF);
*pLge++=(INT8U)(CurText[i]& 0xFF);
if(i>71) break;
}
((MSG_HEAD *)pSml)->LenOfAttach = 1+CurPhoneNumLen + (CurTextLen<<1);
OSQPost(peventWICCmd, pSml);
MFunc_WaitSendResult();
}
else{ //Can't allocate large-size memory
OSMemPut(pMemSml,pSml);
}
}
}
break;
case KEY_FUNC2: //Save SMS
pLge = OSMemGet(pMemLge, &err);
if(err == OS_NO_ERR){
pSml = pLge;//just save the pointer
*pLge++ = CurPhoneNumLen;
for(i = 0; i< CurPhoneNumLen; i++){
*pLge++ = CurPhoneNum[i];
}
Func_GetSysTime((NM_TIME *)pLge);
pLge += sizeof(NM_TIME);
*pLge++ = SM_UNICODE;
*pLge++ = CurTextLen*2;
for(i=0; i<CurTextLen; i++){
*pLge++=(INT8U)((CurText[i]>>8) & 0xFF);
*pLge++=(INT8U)(CurText[i]& 0xFF);
if(i>71) break;
}
MFunc_SaveSM(pSml, 1);
OSMemPut(pMemLge, pSml);
}
break;
case KEY_C: //Cancel
retval=0;
break;
} //End of "switch()"
} //End of "EnterPhoneEdit()"
} //End of "EnterTextEdit()"
return(retval);
}
//Display Text,including SMS and Name
//Before this function is called,"CurText","CurTextIstPos" and "CurTextLen" should be assigned value.
void MenuDisplayText()
{
INT8U startpos,endpos;
INT8U i,finding;
INT8U count;
INT8U PosY,chpos;
rom INT8U *pchar;
if(CurTextLen<=0)
return;
startpos=0;
endpos=0;
finding=0;
while(finding==0 || endpos==0){
count=0;
for(i=0;i<16;){
if((CurText[startpos+count]>>8)!=0) //Chinese Character
i+=2;
else
i++;
if(i>16){ //Only PIX8 left,cannot display a Chinese Character
if(finding)
endpos=startpos+count;
else
startpos+=count;
break; //break from "for"
}
else{
count++;
if(startpos+count>CurTextIstPos){
finding=1;
if(i==16)
endpos=startpos+count;
}
else{
if(i==16)
startpos+=count;
}
}
if(startpos+count>=CurTextLen){
finding=1; //ready to break from "while"
endpos=CurTextLen;
break; //break from "for"
}
}
}
PosY=0;
pchar=(rom INT8U *)&CurText[startpos];
for(i=0;i<endpos-startpos;i++){
if(i+startpos==CurTextIstPos)
finding=PIX_REVERSE;
else
finding=0x00;
chpos=i<<1;
if(pchar[chpos+1]==0){
(void)Disp_Word(2,PosY,(INT16U)(pchar[chpos]),PIX8|finding);
PosY+=8;
}
else{
(void)Disp_Word(2,PosY,*((rom INT16U *)(&(pchar[chpos]))),PIX16|finding);
PosY+=16;
}
}
if(PosY<120 && CurTextIstPos==0xFF)
(void)Disp_Word(2,PosY,'_',PIX8); //显示光标
}
void MFunc_DirectCall(INT8U rom * ptrData, INT8U Len){
INT8U rom * pSml;
INT8U i,err;
pSml = OSMemGet(pMemSml, &err);
if(err == OS_NO_ERR) {
((MSG_HEAD *)pSml)->Msg_ID = MSG_VOICE_DIRECTCALL;
((MSG_HEAD *)pSml)->pmemME = pMemSml;
((MSG_HEAD *)pSml)->Attached = FALSE;
((MSG_HEAD *)pSml)->LenOfBody = Len;
for(i = 0; i < Len; i++){
((MSG_DIRECTCALL *)pSml)-> Num[i] = *ptrData++;
}
OSQPost(peventDVS, (OS_EVENT *) pSml);
}
}
void MFunc_WaitSendResult()
{
INT8U err;
INT8U rom *pMsg;
Do_Clear_Screen(2,0,5,127);
app_printf(TextSending,0,2,16);
for(;;){
pMsg=OSQPend(peventMenu,1000,&err);
if(err==OS_TIMEOUT){
Do_Clear_Screen(2,0,3,127);
app_printf(TextSendFail,0,2,16);
OSTimeDly(200);
break;
}
else if((INT24U)pMsg >= PTR_MAX){
if((INT24U)pMsg == MSG_SM_SENDSUCC){
Do_Clear_Screen(2,0,3,127);
app_printf(TextSendSucc,0,2,16);
OSTimeDly(200);
break;
}
else if((INT24U)pMsg == MSG_SM_SENDFAIL){
Do_Clear_Screen(2,0,3,127);
app_printf(TextSendFail,0,2,16);
OSTimeDly(200);
break;
}
}
else{
Func_Clear_Msg(pMsg);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -