📄 menus.c
字号:
if (digit_index == 1)
{
mo = (digits[0]-0x30);
CAN_HWOBJ[mo].uwMSGCTR = 0xe7ff;; // Transmit MO (digits[0]-0x30)
}
else
{
mo = 10*((unsigned int)digits[0]-0x30) + (unsigned int)digits[1]-0x30;
if (mo <32)
CAN_HWOBJ[mo].uwMSGCTR = 0xe7ff;; // Transmit MO 10*(digits[0]-0x30) + digits[1]-0x30
}
PrintPrompt(0,mo);
MenuID = 0;
}
}
if (digit_index < 2)
{
if ( (key < ';') && (key > '/') ) // digit
{
putchar(key);
CursorPosX++;
digits[digit_index++] = key;
}
}
}
break;
case 2:
if (key == 27) // Escape
{
PrintPrompt(0,mo);
MenuID = 0;
}
if (digit_index)
{
if (key == 8) // backspace
{
MoveCursor(CursorPosY, --CursorPosX);
putchar(' ');
MoveCursor(CursorPosY, CursorPosX);
digits[--digit_index] = 0;
}
}
if(digit_index < 3)
{
if (digit_index)
{
if (key == 13) //Enter
{
if (digit_index == 1)
{
mo = (digits[0]-0x30);
}
else
{
mo = 10*(digits[0]-0x30) + digits[1]-0x30;
}
PrintPrompt(3, mo);
MenuID = 3;
}
}
if (digit_index < 2)
{
if ( (key < ';') && (key > '/') ) // digit
{
putchar(key);
CursorPosX++;
digits[digit_index++] = key;
}
}
}
break;
case 3:
if (key == 27) // Escape
{
PrintPrompt(2,mo);
MenuID = 2;
}
else if (key == 'N' || key == 'n')
{
PrintPrompt(4, mo);
MenuID = 4;
}
else if (key == 'R' || key == 'r')
{
if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
{
CAN_HWOBJ[mo].uwMSGCTR = 0xff7f; // disable MO
CAN_HWOBJ[mo].uwMSGCFG &= ~0x0008; // Set to dir to rx
CAN_HWOBJ[mo].uwMSGCTR = 0xffbf; // enable MO
}
else // if MO invalid
{
CAN_HWOBJ[mo].uwMSGCFG &= ~0x0008; // Set to dir to rx
}
PrintPrompt(3,mo);
MenuID = 3;
MO_Status[mo]=1;
UpdateStatus();
}
else if (key == 'T' || key == 't')
{
if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
{
CAN_HWOBJ[mo].uwMSGCTR = 0xff7f; // disable MO
CAN_HWOBJ[mo].uwMSGCFG |= 0x0008; // Set dir to tx
CAN_HWOBJ[mo].uwMSGCTR = 0xffbf; // enable MO
}
else // if MO invalid
{
CAN_HWOBJ[mo].uwMSGCFG |= 0x0008; // Set dir to tx
}
PrintPrompt(3,mo);
MenuID = 3;
MO_Status[mo]=1;
UpdateStatus();
}
else if (key == 'I' || key == 'i')
{
PrintPrompt(5, mo);
MenuID = 5;
}
else if (key == 'M' || key == 'm')
{
PrintPrompt(6, mo);
MenuID = 6;
}
else if (key == 'D' || key == 'd')
{
PrintPrompt(7, mo);
MenuID = 7;
}
else if (key == 'V' || key == 'v')
{
PrintPrompt(8, mo);
MenuID = 8;
}
break;
case 4:
if (key == 27) // Escape
{
PrintPrompt(3,mo);
MenuID = 3;
}
else if (key == 'A' || key == 'a')
{
if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
{
CAN_HWOBJ[mo].uwMSGCTR = 0xff7f; // disable MO
CAN_HWOBJ[mo].uwMSGCFG &= ~0x0002; // Set to Node A
CAN_HWOBJ[mo].uwMSGCTR = 0xffbf; // enable MO
}
else // if MO invalid
{
CAN_HWOBJ[mo].uwMSGCFG &= ~0x0002; // Set to Node A
}
PrintPrompt(3,mo);
MenuID = 3;
MO_Status[mo]=1;
UpdateStatus();
}
else if (key == 'B' || key == 'b')
{
if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
{
CAN_HWOBJ[mo].uwMSGCTR = 0xff7f; // disable MO
CAN_HWOBJ[mo].uwMSGCFG |= 0x0002; // Set to Node B
CAN_HWOBJ[mo].uwMSGCTR = 0xffbf; // enable MO
}
else // if MO invalid
{
CAN_HWOBJ[mo].uwMSGCFG |= 0x0002; // Set to Node B
}
PrintPrompt(3,mo);
MenuID = 3;
MO_Status[mo]=1;
UpdateStatus();
}
break;
case 5:
if (key == 27) // Escape
{
PrintPrompt(3,mo);
MenuID = 3;
}
if (digit_index)
{
if (key == 8) // backspace
{
MoveCursor(CursorPosY, --CursorPosX);
putchar(' ');
MoveCursor(CursorPosY, CursorPosX);
digits[--digit_index] = 0;
}
}
if(digit_index < 4)
{
if (digit_index)
{
if (key == 13) //Enter
{
if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
{
CAN_HWOBJ[mo].uwMSGCTR = 0xfb7f; // Set CPU Update, reset MSGVAL
if (digit_index == 1)
{
CAN_HWOBJ[mo].ulCANAR = (unsigned long)(digits[0]) << 18;
}
else if (digit_index == 2)
{
CAN_HWOBJ[mo].ulCANAR = (unsigned long)((digits[0]<<4)|digits[1]) << 18;
}
else if (digit_index == 3)
{
CAN_HWOBJ[mo].ulCANAR = ((unsigned long)((unsigned long)(digits[0]<<8)|(digits[1]<<4)|digits[2]) & 0x07FF) << 18;
}
CAN_HWOBJ[mo].uwMSGCTR = 0xf7bf; // reset CPUUPD, set MSGVAL
}
else
{
if (digit_index == 1)
{
CAN_HWOBJ[mo].ulCANAR = (unsigned long)(digits[0]) << 18;
}
else if (digit_index == 2)
{
CAN_HWOBJ[mo].ulCANAR = (unsigned long)((digits[0]<<4)|digits[1]) << 18;
}
else if (digit_index == 3)
{
CAN_HWOBJ[mo].ulCANAR = ((unsigned long)((unsigned long)(digits[0]<<8)|(digits[1]<<4)|digits[2]) & 0x07FF) << 18;
}
}
MO_Status[mo] = 1;
PrintPrompt(3, mo);
MenuID = 3;
}
}
if (digit_index < 3)
{
if ( (key < ';') && (key > '/') ) // digit
{
putchar(key);
CursorPosX++;
digits[digit_index++] = key-48; // convert to number
}
else if ( (key < 'G') && (key > '@') ) // Cap Letter
{
putchar(key);
CursorPosX++;
digits[digit_index++] = key-55; // convert to number
}
else if ( (key < 'g') && (key > 96) ) // Small Letter
{
putchar(key);
CursorPosX++;
digits[digit_index++] = key-87; // convert to number
}
}
}
break;
case 6:
if (key == 27) // Escape
{
PrintPrompt(3,mo);
MenuID = 3;
}
if (digit_index)
{
if (key == 8) // backspace
{
MoveCursor(CursorPosY, --CursorPosX);
putchar(' ');
MoveCursor(CursorPosY, CursorPosX);
digits[--digit_index] = 0;
}
}
if(digit_index < 4)
{
if (digit_index)
{
if (key == 13) //Enter
{
if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
{
CAN_HWOBJ[mo].uwMSGCTR = 0xfb7f; // Set CPU Update, reset MSGVAL
if (digit_index == 1)
{
CAN_HWOBJ[mo].ulCANAMR = (unsigned long)(digits[0]) << 18;
}
else if (digit_index == 2)
{
CAN_HWOBJ[mo].ulCANAMR = (unsigned long)((digits[0]<<4)|digits[1]) << 18;
}
else if (digit_index == 3)
{
CAN_HWOBJ[mo].ulCANAMR = ((unsigned long)((unsigned long)(digits[0]<<8)|(digits[1]<<4)|digits[2]) & 0x07FF) << 18;
}
CAN_HWOBJ[mo].uwMSGCTR = 0xf7bf; // reset CPUUPD, set MSGVAL
}
else
{
if (digit_index == 1)
{
CAN_HWOBJ[mo].ulCANAMR = (unsigned long)(digits[0]) << 18;
}
else if (digit_index == 2)
{
CAN_HWOBJ[mo].ulCANAMR = (unsigned long)((digits[0]<<4)|digits[1]) << 18;
}
else if (digit_index == 3)
{
CAN_HWOBJ[mo].ulCANAMR = ((unsigned long)((unsigned long)(digits[0]<<8)|(digits[1]<<4)|digits[2]) & 0x07FF) << 18;
}
}
MO_Status[mo] = 1;
PrintPrompt(3, mo);
MenuID = 3;
}
}
if (digit_index < 3)
{
if ( (key < ';') && (key > '/') ) // digit
{
putchar(key);
CursorPosX++;
digits[digit_index++] = key-48; // convert to number
}
else if ( (key < 'G') && (key > '@') ) // Cap Letter
{
putchar(key);
CursorPosX++;
digits[digit_index++] = key-55; // convert to number
}
else if ( (key < 'g') && (key > 96) ) // Small Letter
{
putchar(key);
CursorPosX++;
digits[digit_index++] = key-87; // convert to number
}
}
}
break;
case 7:
if (key == 27) // Escape
{
PrintPrompt(3,mo);
MenuID = 3;
}
if (digit_index)
{
if (key == 8) // backspace
{
MoveCursor(CursorPosY, --CursorPosX);
putchar(' ');
MoveCursor(CursorPosY, CursorPosX);
digits[--digit_index] = 0;
}
}
if(digit_index < 9)
{
if (digit_index)
{
if (key == 13) //Enter
{
// <<<<<<<<< NEED TO add NEWDAT and Check if DIR is RX or TX
CAN_HWOBJ[mo].uwMSGCTR = 0xfaff; // set CPUUPD and NEWDAT
if (CAN_HWOBJ[mo].uwMSGCTR & 0x0080) // if MO valid
{
CAN_HWOBJ[mo].uwMSGCFG &= 0xFF0F;
CAN_HWOBJ[mo].uwMSGCFG |= digit_index << 4; // Set DLC
for (i = 0; i< digit_index; i++)
CAN_HWOBJ[mo].ubData[i] = digits[i];
CAN_HWOBJ[mo].uwMSGCTR = 0xf7bf; // reset CPUUPD, set MSGVAL
}
else
{
CAN_HWOBJ[mo].uwMSGCFG &= 0xFF0F;
CAN_HWOBJ[mo].uwMSGCFG |= digit_index << 4; // Set DLC
for (i = 0; i< digit_index; i++)
CAN_HWOBJ[mo].ubData[i] = digits[i];
CAN_HWOBJ[mo].uwMSGCTR = 0xf7Ff; // reset CPUUPD
}
MO_Status[mo] = 1;
PrintPrompt(3, mo);
MenuID = 3;
}
}
if (digit_index < 8)
{
if ( (key < 127) && (key > 31) ) // visible key
{
putchar(key);
CursorPosX++;
digits[digit_index++] = key;
}
}
}
break;
case 8:
if (key == 27) // Escape
{
PrintPrompt(3,mo);
MenuID = 3;
}
else if (key == 'E' || key == 'e')
{
CAN_HWOBJ[mo].uwMSGCTR = 0xffbf; // enable MO
PrintPrompt(3,mo);
MenuID = 3;
MO_Status[mo]=1;
UpdateStatus();
}
else if (key == 'D' || key == 'd')
{
CAN_HWOBJ[mo].uwMSGCTR = 0xff7f; // disable MO
PrintPrompt(3,mo);
MenuID = 3;
MO_Status[mo]=1;
UpdateStatus();
}
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -