📄 port_test.c
字号:
ISOUNDPLAYER_Release(pMe->pSP);
pMe->pSP = NULL;
}
pMe->pPort = pPort;
}
void DisplayInit(port_test *pMe) // Image load
{
char * mainText;
switch(pMe->mainImageVal)
{
case 1:
mainText = "./res/main.bci";
break;
case 2:
mainText = "./res/main2.bci";
break;
case 3:
mainText = "./res/main3.bci";
break;
case 4:
mainText = "./res/main4.bci";
break;
case 5:
mainText = "./res/main5.bci";
break;
case 6:
mainText = "./res/main6.bci";
break;
}
pMe->mainImage = ISHELL_LoadImage(GetActiveShell(pMe), mainText);
pMe->doorlockImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/doorlock.bci");
pMe->doorlockIconImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/doorlock_door.bci");
pMe->cutainImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/cutain.bci");
pMe->cutainIconImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/cutain_cutain.bci");
pMe->gasImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/gas.bci");
pMe->gasIconImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/gas_gas.bci");
pMe->safeImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/safe.bci");
pMe->safeIconImage[0] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/safe_motion.bci");
pMe->safeIconImage[1] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/safe_window.bci");
pMe->safeIconImage[2] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/safe_gas.bci");
pMe->modeImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/mode.bci");
pMe->modeIconImage[0] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/mode_out.bci");
pMe->modeIconImage[1] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/mode_sleep.bci");
pMe->modeIconImage[2] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/mode_walkup.bci");
pMe->modeIconImage[3] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/mode_clean.bci");
pMe->alarmBackImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/alarm_back.bci");
pMe->ledImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/led.bci");
pMe->powerImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/power.bci");
pMe->ICon[0] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/icon1.bci");
pMe->ICon[1] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/icon2.bci");
pMe->ICon[2] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/icon3.bci");
pMe->ICon[3] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/icon4.bci");
pMe->ICon[4] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/icon5.bci");
pMe->ICon[5] = ISHELL_LoadImage(GetActiveShell(pMe), "./res/icon6.bci");
pMe->alarmSubImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/alarm_sub.bci");
pMe->setImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/set.bci");
pMe->errorImage1 = ISHELL_LoadImage(GetActiveShell(pMe), "./res/error_window.bci");
pMe->errorImage2 = ISHELL_LoadImage(GetActiveShell(pMe), "./res/error_motion.bci");
pMe->errorImage3 = ISHELL_LoadImage(GetActiveShell(pMe), "./res/error_gas.bci");
}
void DisplayMenu(port_test *pMe)
{
AECHAR text[10];
char mp3Text[16];
int AlarmImageOnoff;
IDISPLAY_ClearScreen(GetActiveDisplay(pMe));
switch(pMe->nCurMenu)
{
case 0:
IIMAGE_DrawFrame(pMe->mainImage, pMe->nCurItem, 0, 0);
SNPRINTF(mp3Text, sizeof(mp3Text), "./mp3/men%d%d.mp3", 0, pMe->nCurItem+1);
ISOUNDPLAYER_Stop(pMe->Menu[pMe->nCurItem]);
ISOUNDPLAYER_Set(pMe->Menu[pMe->nCurItem],SDT_FILE,mp3Text);
ISOUNDPLAYER_Play(pMe->Menu[pMe->nCurItem]);
break;
case 1:
IIMAGE_DrawFrame(pMe->doorlockImage, 0, 0, 0);
IIMAGE_SetParm(pMe->doorlockIconImage,IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_DrawFrame(pMe->doorlockIconImage, pMe->nDoorLockItem[0][0], 5, 40);
break;
case 2:
IIMAGE_DrawFrame(pMe->ledImage, 0, 0, 0);
IIMAGE_SetParm(pMe->ICon[0],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[1],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[2],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[3],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[4],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[5],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_DrawFrame(pMe->ICon[0], pMe->nLedItem[0][0], 5, 40);
IIMAGE_DrawFrame(pMe->ICon[1], pMe->nLedItem[1][0], 80, 40);
IIMAGE_DrawFrame(pMe->ICon[2], pMe->nLedItem[2][0], 155, 40);
IIMAGE_DrawFrame(pMe->ICon[3], pMe->nLedItem[3][0], 5, 145);
IIMAGE_DrawFrame(pMe->ICon[4], pMe->nLedItem[4][0], 80, 145);
IIMAGE_DrawFrame(pMe->ICon[5], pMe->nLedItem[5][0], 155, 145);
break;
case 3:
IIMAGE_DrawFrame(pMe->powerImage, 0, 0, 0);
IIMAGE_SetParm(pMe->ICon[0],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[1],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[2],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[3],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[4],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[5],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_DrawFrame(pMe->ICon[0], pMe->nPowerItem[0][0]+2, 5, 40);
IIMAGE_DrawFrame(pMe->ICon[1], pMe->nPowerItem[1][0]+2, 80, 40);
IIMAGE_DrawFrame(pMe->ICon[2], pMe->nPowerItem[2][0]+2, 155, 40);
IIMAGE_DrawFrame(pMe->ICon[3], pMe->nPowerItem[3][0]+2, 5, 145);
IIMAGE_DrawFrame(pMe->ICon[4], pMe->nPowerItem[4][0]+2, 80, 145);
IIMAGE_DrawFrame(pMe->ICon[5], pMe->nPowerItem[5][0]+2, 155, 145);
break;
case 4:
IIMAGE_DrawFrame(pMe->cutainImage, 0, 0, 0);
IIMAGE_SetParm(pMe->cutainIconImage,IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_DrawFrame(pMe->cutainIconImage, pMe->nCurtainItem[0][0], 5, 40);
break;
case 5:
IIMAGE_DrawFrame(pMe->gasImage, 0, 0, 0);
IIMAGE_SetParm(pMe->gasIconImage,IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_DrawFrame(pMe->gasIconImage, pMe->nGasItem[0][0], 5, 40);
break;
case 6:
IIMAGE_DrawFrame(pMe->safeImage, 0, 0, 0);
IIMAGE_SetParm(pMe->safeIconImage[0],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->safeIconImage[1],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->safeIconImage[2],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_DrawFrame(pMe->safeIconImage[0], pMe->nSafeItem[0][0], 5, 40);
IIMAGE_DrawFrame(pMe->safeIconImage[1], pMe->nSafeItem[1][0], 80, 40);
IIMAGE_DrawFrame(pMe->safeIconImage[2], pMe->nSafeItem[2][0], 155, 40);
break;
case 7:
IIMAGE_DrawFrame(pMe->modeImage, 0, 0, 0);
IIMAGE_SetParm(pMe->modeIconImage[0],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->modeIconImage[1],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->modeIconImage[2],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->modeIconImage[3],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_DrawFrame(pMe->modeIconImage[0], pMe->nModeItem[0][0], 5, 40);
IIMAGE_DrawFrame(pMe->modeIconImage[1], pMe->nModeItem[1][0], 80, 40);
IIMAGE_DrawFrame(pMe->modeIconImage[2], pMe->nModeItem[2][0], 155, 40);
IIMAGE_DrawFrame(pMe->modeIconImage[3], pMe->nModeItem[3][0], 5, 145);
break;
case 8:
_D("====AlarmKeyButtonIndex===== %d", pMe->nAlarmKeyIndex);
IIMAGE_DrawFrame(pMe->alarmBackImage, 0, 0, 0);
IIMAGE_SetParm(pMe->ICon[0],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[1],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[2],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[3],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[4],IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_SetParm(pMe->ICon[5],IPARM_ROP,AEE_RO_TRANSPARENT,0);
AlarmImageOnoff = (pMe->Buf[4]==0?pMe->nAlarmItem[0][0]:pMe->nAlarmItem[0][0]+1);
IIMAGE_DrawFrame(pMe->ICon[0], AlarmImageOnoff+4, 5, 40);
AlarmImageOnoff = (pMe->Buf[8]==0?pMe->nAlarmItem[1][0]:pMe->nAlarmItem[1][0]+1);
IIMAGE_DrawFrame(pMe->ICon[1], AlarmImageOnoff+4, 80, 40);
AlarmImageOnoff = (pMe->Buf[12]==0?pMe->nAlarmItem[2][0]:pMe->nAlarmItem[2][0]+1);
IIMAGE_DrawFrame(pMe->ICon[2], AlarmImageOnoff+4, 155, 40);
AlarmImageOnoff = (pMe->Buf[16]==0?pMe->nAlarmItem[3][0]:pMe->nAlarmItem[3][0]+1);
IIMAGE_DrawFrame(pMe->ICon[3], AlarmImageOnoff+4, 5, 145);
AlarmImageOnoff = (pMe->Buf[20]==0?pMe->nAlarmItem[4][0]:pMe->nAlarmItem[4][0]+1);
IIMAGE_DrawFrame(pMe->ICon[4], AlarmImageOnoff+4, 80, 145);
AlarmImageOnoff = (pMe->Buf[24]==0?pMe->nAlarmItem[5][0]:pMe->nAlarmItem[5][0]+1);
IIMAGE_DrawFrame(pMe->ICon[5], AlarmImageOnoff+4, 155, 145);
break;
case 9:
IIMAGE_DrawFrame(pMe->setImage, 0, 0, 0);
break;
case 20: //舅恩 辑宏皋春
// pMe->Buf[selectIndex+0] = selectObj;
// pMe->Buf[selectIndex+1] = (selectFlag<<4) | selectCmd;
// pMe->Buf[selectIndex+2] = selectHour;
// pMe->Buf[selectIndex+3] = selectMin;
// boolean nAlarmOnOff;
// boolean nAlarmOKCancel;
IIMAGE_DrawFrame(pMe->alarmSubImage, pMe->nAlarmSetIndex, 0, 0);
if(pMe->Buf[pMe->nAlarmKeyIndex*4] != 0)
{
pMe->nAlarmSetHour = pMe->Buf[pMe->nAlarmKeyIndex*4+2];
pMe->nAlarmSetMin = pMe->Buf[pMe->nAlarmKeyIndex*4+3];
pMe->nAlarmSetObj = getContent(pMe->Buf[pMe->nAlarmKeyIndex*4]);
pMe->nAlarmSetCmd = pMe->Buf[pMe->nAlarmKeyIndex*4+1] & 0x0f;
if (pMe->nAlarmSetCmd == 5 || pMe->nAlarmSetCmd == 7)
{
pMe->nAlarmOnOff = TRUE;
}else{
pMe->nAlarmOnOff = FALSE;
}
pMe->nAlarmOKCancel = TRUE;
pMe->Buf[pMe->nAlarmKeyIndex*4] = 0;
pMe->Buf[pMe->nAlarmKeyIndex*4+1] = 0;
pMe->Buf[pMe->nAlarmKeyIndex*4+2] = 0;
pMe->Buf[pMe->nAlarmKeyIndex*4+3] = 0;
_D("alarm value test... %d, %d, %d ", pMe->Buf[pMe->nAlarmKeyIndex*4],pMe->Buf[pMe->nAlarmKeyIndex*4+1],pMe->Buf[pMe->nAlarmKeyIndex*4+2]);
}
WSPRINTF(text,sizeof(text), L"%d", pMe->nAlarmSetHour);
IDISPLAY_DrawText(GetActiveDisplay(pMe), AEE_FONT_NORMAL, text, -1, pMe->nAlarmGetPosition[0][0], pMe->nAlarmGetPosition[0][1], 0, IDF_TEXT_TRANSPARENT);
WSPRINTF(text,sizeof(text), L"%d", pMe->nAlarmSetMin);
IDISPLAY_DrawText(GetActiveDisplay(pMe), AEE_FONT_NORMAL, text, -1, pMe->nAlarmGetPosition[1][0], pMe->nAlarmGetPosition[1][1], 0, IDF_TEXT_TRANSPARENT);
WSPRINTF(text,sizeof(text), L"%d", pMe->nAlarmSetObj);
IDISPLAY_DrawText(GetActiveDisplay(pMe), AEE_FONT_NORMAL, text, -1, pMe->nAlarmGetPosition[2][0], pMe->nAlarmGetPosition[2][1], 0, IDF_TEXT_TRANSPARENT);
if (pMe->nAlarmOnOff == TRUE)
{
IDISPLAY_DrawText(GetActiveDisplay(pMe), AEE_FONT_NORMAL, L" On", -1, pMe->nAlarmGetPosition[3][0], pMe->nAlarmGetPosition[3][1], 0, IDF_TEXT_TRANSPARENT);
}else
{
IDISPLAY_DrawText(GetActiveDisplay(pMe), AEE_FONT_NORMAL, L"Off", -1, pMe->nAlarmGetPosition[3][0], pMe->nAlarmGetPosition[3][1], 0, IDF_TEXT_TRANSPARENT);
}
if( pMe->nAlarmOKCancel == TRUE)
{
IDISPLAY_DrawText(GetActiveDisplay(pMe), AEE_FONT_NORMAL, L" OK", -1, pMe->nAlarmGetPosition[4][0], pMe->nAlarmGetPosition[4][1], 0, IDF_TEXT_TRANSPARENT);
}else{
IDISPLAY_DrawText(GetActiveDisplay(pMe), AEE_FONT_NORMAL, L"Cancel", -1, pMe->nAlarmGetPosition[4][0], pMe->nAlarmGetPosition[4][1], 0, IDF_TEXT_TRANSPARENT);
}
break;
}
IDISPLAY_Update(GetActiveDisplay(pMe));
}
int getContent(int AlarmObj) // Contants CHAR Type -> Int Type
{
switch(AlarmObj)
{
case DOORLOCK:
return 1;
case TOILET_LIGHT:
return 2;
case LIVING_ROOM_FIRST_LIGHT:
return 3;
case LIVING_ROOM_SECOND_LIGHT:
return 4;
case ROOM_FIRST_LIGHT:
return 5;
case ROOM_SECOND_LIGHT:
return 6;
case TV_POWER:
return 7;
case REFRIGERATOR_POWER:
return 8;
case VENTILATION_FAN_POWER:
return 9;
case AIR_CONDITIONER_POWER:
return 10;
case ROOM_FIRST_POWER:
return 11;
case ROOM_SECOND_POWER:
return 12;
case CURTAIN:
return 13;
case GASS_BREAKER:
return 14;
}
}
char getSettingContent(int AlarmObj) // Int Type -> Contants CHAR Type
{
switch(AlarmObj)
{
case 1:
return DOORLOCK;
case 2:
return TOILET_LIGHT;
case 3:
return LIVING_ROOM_FIRST_LIGHT;
case 4:
return LIVING_ROOM_SECOND_LIGHT;
case 5:
return ROOM_FIRST_LIGHT;
case 6:
return ROOM_SECOND_LIGHT;
case 7:
return TV_POWER;
case 8:
return REFRIGERATOR_POWER;
case 9:
return VENTILATION_FAN_POWER;
case 10:
return AIR_CONDITIONER_POWER;
case 11:
return ROOM_FIRST_POWER;
case 12:
return ROOM_SECOND_POWER;
case 13:
return CURTAIN;
case 14:
return GASS_BREAKER;
}
}
static void TimerCallback(port_test *pMe)
{
DisplayInit(pMe); //捞固瘤 按眉 肺爹
if(pMe->loadingImage != NULL)
{
IIMAGE_Stop(pMe->loadingImage);
}
pMe->nCurMenu = 0;
DisplayMenu(pMe); //捞固瘤 ぁぁ
ISHELL_CancelTimer(GetActiveShell(pMe),(PFNNOTIFY)TimerCallback, pMe);
}
static void OnRead(port_test * pMe)
{
int32 dwRead;
char buf[100];
char * mainText;
int i;
dwRead = IPORT_Read(pMe->pPort, buf, sizeof(buf));
if (dwRead > 0)
{
//_D("==============found================== : %s", buf);
if(buf[7] == WINDOW_OPEN_DETECTION)
{
if(pMe->nSafeItem[1][0] == 1)
{
IIMAGE_SetParm(pMe->errorImage1,IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_DrawFrame(pMe->errorImage1,0, 50, 50);
IDISPLAY_Update(GetActiveDisplay(pMe));
mainText = "./mp3/windowdetect.mp3";
for(i = 1 ; i<= 6 ; i++)
{
if(pMe->nLedItem[i][0] == 0){
pMe->nLedItem[i][0] = 1;
SetAction(pMe, pMe->nLedItem[i][1], RELAY, ON1, FALSE);
Sleep(10000);
}
}
ISOUNDPLAYER_Stop(pMe->pSP);
ISOUNDPLAYER_Set(pMe->pSP,SDT_FILE,mainText);
ISOUNDPLAYER_Play(pMe->pSP);
}
_D("====WINDOW_OPEN!!!!!!!!=====");
}else if(buf[7]==MOVING_DETECTION)
{
if(pMe->nSafeItem[0][0] == 1)
{
IIMAGE_SetParm(pMe->errorImage2,IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_DrawFrame(pMe->errorImage2,0, 50, 80);
IDISPLAY_Update(GetActiveDisplay(pMe));
mainText = "./mp3/motiondetect.mp3";
for(i = 1 ; i<= 6 ; i++)
{
if(pMe->nLedItem[i][0] = 0){
pMe->nLedItem[i][0] = 1;
SetAction(pMe, pMe->nLedItem[i][1], RELAY, ON1, FALSE);
Sleep(10000);
}
}
ISOUNDPLAYER_Stop(pMe->pSP);
ISOUNDPLAYER_Set(pMe->pSP,SDT_FILE,mainText);
ISOUNDPLAYER_Play(pMe->pSP);
}
_D("====MOVING_OPEN!!!!!!!!=====");
}else if(buf[7]==GASS_DETECTION)
{
if(pMe->nSafeItem[2][0] == 1)
{
IIMAGE_SetParm(pMe->errorImage3,IPARM_ROP,AEE_RO_TRANSPARENT,0);
IIMAGE_DrawFrame(pMe->errorImage3,0, 50, 110);
IDISPLAY_Update(GetActiveDisplay(pMe));
if (pMe->nGasItem[0][0]==1){
SetAction(pMe, pMe->nGasItem[0][1], CLOSE, CLOSE, FALSE);
pMe->nGasItem[0][0]=0;
}
if(pMe->nPowerItem[2][0] ==0){
SetAction(pMe, pMe->nPowerItem[2][1], RELAY, ON1, FALSE);
pMe->nPowerItem[2][0]=1;
}
mainText = "./mp3/gasdetect.mp3";
ISOUNDPLAYER_Stop(pMe->pSP);
ISOUNDPLAYER_Set(pMe->pSP,SDT_FILE,mainText);
ISOUNDPLAYER_Play(pMe->pSP);
}
_D("====GASS_OPEN!!!!!!!!=====");
}
}
IPORT_Readable(pMe->pPort, &pMe->cbReadable);
}
static void TimerSetAction(void * pParam) //舅恩
{
int hour1, min1;
port_test * pMe = (port_test *)pParam;
char mode,flag,cmd;
int index;
_D("TimerSetAction");
pMe->alarmImage = ISHELL_LoadImage(GetActiveShell(pMe), "./res/alarm_clock.bci");
IIMAGE_DrawFrame(pMe->alarmImage, 0, 0, 0);
IDISPLAY_Update(GetActiveDisplay(pMe));
index = pMe->FlagProgramStart*4;
if(pMe->Buf[index] > 0x00)
{
mode = pMe->Buf[index];
flag = pMe->Buf[index+1]>>4;
cmd = pMe->Buf[index+1] & 0x0f;
hour1 = pMe->Buf[index+2];
min1 = pMe->Buf[index+3];
if(getContent(mode)>=2 && getContent(mode)<=6)
pMe->nLedItem[getContent(mode)-1][0] = 6-cmd;
if(getContent(mode)>=7 && getContent(mode)<=12)
pMe->nPowerItem[getContent(mode)-7][0] = 6-cmd;
if(getContent(mode)==13)
pMe->nCurtainItem[0][0] = 6-cmd;
if(getContent(mode)==14)
pMe->nGasItem[0][0] = 8-cmd;
SetAction(pMe, mode, flag, cmd, TRUE);
_D("....hour and min %d, %d %d", hour1, min1, index/4);
AlarmSetAction(pMe, hour1, min1, mode, flag, cmd, index/4);
pMe->FlagProgramStart = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -