📄 main.c
字号:
//
EdbgOutputDebugString("begin WriteFlashSettings %x-\r\n",BLDR_SETTINGS_FLASH_BASE);
if (CFI_Erase_Block((unsigned16*)BLDR_SETTINGS_FLASH_BASE) != PASS)
{
EdbgOutputDebugString("ERROR: WriteFlashSettings - erase failed (0x%x).\r\n",
BLDR_SETTINGS_FLASH_BASE);
EdbgOutputDebugString("error eraseFlash -\r\n");
bRet = FALSE;
}
else
{
if (CFI_Write_Block((unsigned16*)BLDR_SETTINGS_FLASH_BASE,
(unsigned16*)pSettings, sizeof(BLDR_SETTINGS)) != PASS)
{
EdbgOutputDebugString("ERROR: WriteFlashSettings - write failed (0x%x).\r\n",
BLDR_SETTINGS_FLASH_BASE);
EdbgOutputDebugString("error Writeblock -\r\n");
bRet = FALSE;
}
}
return(bRet);
}
static BOOLEAN WriteDefaultFlashSettings(void)
{
BLDR_SETTINGS Settings;
memset(&Settings, 0, sizeof(BLDR_SETTINGS));
Settings.nCheckSum = 0;
Settings.nVerMaj = BLDR_SETTINGS_MAJOR;
Settings.nVerMin = BLDR_SETTINGS_MINOR;
Settings.nFlags = 0x06;//BLDR_SETTINGS_FLAGS_DHCP;
Settings.nSubnetMask = ntohl(0xfffe0000);
Settings.nJumpAddr = FLASH_JUMP_ADDR;
Settings.nIPAddress = ntohl(0x0a0a053c);
// Settings.nSubnetMask = 0x0000feff;
//Settings.nIPAddress = 0x3c050a0a;
return(WriteFlashSettings(&Settings));
}
static BOOLEAN VerifyFlashSettings(PBLDR_SETTINGS pSettings)
{
ULONG nCheckSum = 0;
UCHAR nCount = 0;
// Start just after checksum field.
for (nCheckSum = 0, nCount = sizeof(ULONG);
nCount < sizeof(BLDR_SETTINGS) ; nCount++)
{
nCheckSum += (UCHAR)*(((PUCHAR)pSettings) + nCount);
}
return((nCheckSum == pSettings->nCheckSum));
}
//////////////////////////////////////////////////////////////////////
// User input and menu functions
//
static void GetStringFromSerial(PUCHAR pBuff, USHORT nLen)
{
int nChar = 0;
USHORT nCount = 0;
do
{
while((nChar = OEMReadDebugByte()) == OEM_DEBUG_READ_NODATA)
{
;
}
if (nChar == OEM_DEBUG_COM_ERROR)
return;
if (nChar == BACKSPACE && nCount)
{
OEMWriteDebugByte((UCHAR)BACKSPACE);
OEMWriteDebugByte((UCHAR)' ');
OEMWriteDebugByte((UCHAR)BACKSPACE);
--nCount;
}
else if ((UCHAR)nChar != '\n' && (UCHAR)nChar != '\r')
{
*(pBuff + nCount) = (UCHAR)nChar;
++nCount;
OEMWriteDebugByte((UCHAR)nChar);
}
}
while(nCount < (nLen - 1) && (UCHAR)nChar != '\n' && (UCHAR)nChar != '\r');
*(pBuff + nCount) = '\0';
return;
}
static BOOLEAN UserInterrupt(void)
{
UCHAR nCount = 5; // Wait for 5 seconds...
ULONG nWait = 0;
unsigned char sOut[12] = "Config 5...";
while(nCount)
{
EdbgOutputDebugString("\rPress any key to break into configuration menu %d ...",
nCount);
// Poll keyboard 10 times per second
for (nWait = 0 ; nWait < 10 ; nWait++)
{
uSecsWait( OEM_COUNT_1MS*50, 0 ); // Wait for 50ms
if (OEMReadDebugByte() != OEM_DEBUG_READ_NODATA)
{
return(TRUE);
}
}
sOut[7]--; // Alter the count-down in the string
nCount--;
}
EdbgOutputDebugString("\r\n\r\n");
return(FALSE);
}
static BOOLEAN ToggleFlagSetting( ULONG nFlag, PCHAR pcFlagName,
PCHAR pcFlagOn, PCHAR pcFlagOff )
{
BLDR_SETTINGS Settings;
memset(&Settings, 0, sizeof(BLDR_SETTINGS));
if (!ReadFlashSettings(&Settings))
{
EdbgOutputDebugString("ERROR: ToggleFlagSetting - unable to read flash settings.\r\n");
return(FALSE);
}
//
// Toggle the flag.
//
Settings.nFlags ^= nFlag;
EdbgOutputDebugString("%s is now %s.\r\n", pcFlagName,
((Settings.nFlags & nFlag) ? pcFlagOn : pcFlagOff));
if (!WriteFlashSettings(&Settings))
{
EdbgOutputDebugString("ERROR: ToggleFlagSetting - unable to write modified flash settings.\r\n");
return(FALSE);
}
return(TRUE);
}
static void DisplayNetworkSettings(void)
{
BLDR_SETTINGS Settings;
memset(&Settings, 0, sizeof(BLDR_SETTINGS));
if (!ReadFlashSettings(&Settings))
{
EdbgOutputDebugString("ERROR: DisplayNetworkSettings - unable to read flash settings.\r\n");
return;
}
EdbgOutputDebugString("Network Settings:\r\n");
EdbgOutputDebugString("----------------------------------------\r\n");
EdbgOutputDebugString("DHCP = %s\r\n",
((Settings.nFlags & BLDR_SETTINGS_FLAGS_DHCP) ?
"ENABLED" : "DISABLED"));
EdbgOutputDebugString("IP = %s\r\n", inet_ntoa(Settings.nIPAddress));
EdbgOutputDebugString("Subnet = %s\r\n", inet_ntoa(Settings.nSubnetMask));
EdbgOutputDebugString("MAC = %x.%x.%x.%x.%x.%x\r\n", (Settings.nMAC[1]>>8)&0xff,Settings.nMAC[1]&0xff,
(Settings.nMAC[0]>>24)&0xff,(Settings.nMAC[0]>>16)&0xff,(Settings.nMAC[0]>>8)&0xff,Settings.nMAC[0]&0xff);
}
static BOOLEAN StoreIPAndSubnet(void)
{
BLDR_SETTINGS Settings;
CHAR szIPAddr[IPADDR_MAX];
CHAR szSubnetMask[IPADDR_MAX];
memset(&Settings, 0, sizeof(BLDR_SETTINGS));
if (!ReadFlashSettings(&Settings))
{
EdbgOutputDebugString("ERROR: StoreIPAndSubnet - unable to read flash settings.\r\n");
return(FALSE);
}
EdbgOutputDebugString("\r\nEnter IP Address (xxx.xxx.xxx.xxx): ");
GetStringFromSerial(&szIPAddr[0], IPADDR_MAX);
EdbgOutputDebugString("\r\nEnter Subnet Mask (xxx.xxx.xxx.xxx): ");
GetStringFromSerial(&szSubnetMask[0], IPADDR_MAX);
EdbgOutputDebugString("\r\n");
Settings.nIPAddress = inet_addr(&szIPAddr[0]);
Settings.nSubnetMask = inet_addr(&szSubnetMask[0]);
if (!WriteFlashSettings(&Settings))
{
EdbgOutputDebugString("ERROR: StoreIPAndSubnet - unable to write modified flash settings.\r\n");
return(FALSE);
}
return(TRUE);
}
void StoreMAC(void)
{
//random read timer value to produce MAC address
BLDR_SETTINGS Settings;
ULONG tick = *(ULONG *)0x20022004; //timer0
memset(&Settings, 0, sizeof(BLDR_SETTINGS));
if (!ReadFlashSettings(&Settings))
{
EdbgOutputDebugString("ERROR: StoreIPAndSubnet - unable to read flash settings.\r\n");
return;
}
Settings.nMAC[0] = tick;
Settings.nMAC[1] = tick<<2;
Settings.nMAC[2] = Settings.nMAC[1];
EdbgOutputDebugString("A random MAC address is made\r\n");
if (!WriteFlashSettings(&Settings))
{
EdbgOutputDebugString("ERROR: StoreIPAndSubnet - unable to write modified flash settings.\r\n");
}
}
static void LoaderNetworkMenu(void)
{
CHAR c = 0;
BOOLEAN bExit = FALSE;
do
{
EdbgOutputDebugString("\r\nNetwork Settings Menu:\r\n");
EdbgOutputDebugString("----------------------------------------\r\n");
EdbgOutputDebugString("1. Show Current Settings\r\n");
EdbgOutputDebugString("2. Toggle DHCP Enabled Setting\r\n");
EdbgOutputDebugString("3. Store Static IP Address And Subnet Mask\r\n");
EdbgOutputDebugString("4. Store MAC Address\r\n");
EdbgOutputDebugString("\r\n");
EdbgOutputDebugString("9. Return To Main Menu\r\n\r\n");
EdbgOutputDebugString("Please make a selection: ");
do
{
c = OEMReadDebugByte();
} while(c == OEM_DEBUG_READ_NODATA ||
((c < '1' || c > '4') && c != '9'));
EdbgOutputDebugString("\r\n");
switch(c)
{
case '1': // Show Current Settings.
DisplayNetworkSettings();
break;
case '2': // Toggle DHCP Enabled Setting.
ToggleFlagSetting(BLDR_SETTINGS_FLAGS_DHCP, "DHCP", "<ENABLED>",
"<DISABLED>");
break;
case '3': // Store Static IP Address And Subnet Mask.
StoreIPAndSubnet();
break;
case '4': // Store MAC Address.
StoreMAC();
break;
case '9': // Return To Main Menu.
bExit = TRUE;
break;
default:
EdbgOutputDebugString("\'%c\' isn't a valid menu selection\r\n", c);
}
} while (!bExit);
}
static void DisplayKitlSettings(void)
{
BLDR_SETTINGS Settings;
memset(&Settings, 0, sizeof(BLDR_SETTINGS));
if (!ReadFlashSettings(&Settings))
{
EdbgOutputDebugString("ERROR: DisplayKitlSettings - unable to read flash settings.\r\n");
return;
}
EdbgOutputDebugString("Kitl Settings:\r\n");
EdbgOutputDebugString("----------------------------------------\r\n");
EdbgOutputDebugString("Kitl = %s\r\n",
((Settings.nFlags & BLDR_SETTINGS_FLAGS_NOKITL) ?
"DISABLED" : "ENABLED"));
EdbgOutputDebugString("Mode = %s\r\n",
((Settings.nFlags & BLDR_SETTINGS_FLAGS_PSVKITL) ?
"PASSIVE" : "ACTIVE"));
}
static void LoaderKitlMenu(void)
{
CHAR c = 0;
BOOLEAN bExit = FALSE;
do
{
EdbgOutputDebugString("\r\nKitl Settings Menu:\r\n");
EdbgOutputDebugString("----------------------------------------\r\n");
EdbgOutputDebugString("1. Show Current Settings\r\n");
EdbgOutputDebugString("2. Toggle Kitl Enabled Setting\r\n");
EdbgOutputDebugString("3. Toggle Kitl Active Mode Setting\r\n");
EdbgOutputDebugString("\r\n");
EdbgOutputDebugString("9. Return To Main Menu\r\n\r\n");
EdbgOutputDebugString("Please make a selection: ");
do
{
c = OEMReadDebugByte();
} while(c == OEM_DEBUG_READ_NODATA || ((c < '1' || c > '3') && c != '9'));
EdbgOutputDebugString("\r\n");
switch(c)
{
case '1': // Show Current Settings.
DisplayKitlSettings();
break;
case '2': // Toggle Kitl Enabled Setting.
ToggleFlagSetting(BLDR_SETTINGS_FLAGS_NOKITL, "Kitl",
"<DISABLED>", "<ENABLED>");
break;
case '3': // Toggle Kitl Active Mode Setting.
ToggleFlagSetting(BLDR_SETTINGS_FLAGS_PSVKITL, "Kitl Mode",
"<PASSIVE>", "<ACTIVE>");
break;
case '9': // Return To Main Menu.
bExit = TRUE;
break;
default:
EdbgOutputDebugString("\'%c\' isn't a valid menu selection\r\n", c);
}
} while (!bExit);
}
static void DisplayFlashSettings(void)
{
BLDR_SETTINGS Settings;
memset(&Settings, 0, sizeof(BLDR_SETTINGS));
if (!ReadFlashSettings(&Settings))
{
EdbgOutputDebugString("ERROR: DisplayFlashSettings - unable to read flash settings.\r\n");
return;
}
EdbgOutputDebugString("Flash Settings:\r\n");
EdbgOutputDebugString("----------------------------------------\r\n");
EdbgOutputDebugString("Force PB Flash Download/Boot = %s\r\n",
((Settings.nFlags & BLDR_SETTINGS_FLAGS_FSHDLOAD) ?
"ENABLED" : "DISABLED"));
}
static void LoaderFlashMenu(void)
{
CHAR c = 0;
BOOLEAN bExit = FALSE;
do
{
EdbgOutputDebugString("\r\nFlash Settings Menu:\r\n");
EdbgOutputDebugString("----------------------------------------\r\n");
EdbgOutputDebugString("1. Show Current Settings\r\n");
EdbgOutputDebugString("2. Toggle Force PB Flash Download/Boot Setting\r\n");
EdbgOutputDebugString("\r\n");
EdbgOutputDebugString("9. Return To Main Menu\r\n\r\n");
EdbgOutputDebugString("Please make a selection: ");
do
{
c = OEMReadDebugByte();
} while(c == OEM_DEBUG_READ_NODATA ||
((c < '1' || c > '2') && c != '9'));
EdbgOutputDebugString("\r\n");
switch(c)
{
case '1': // Show Current Settings.
DisplayFlashSettings();
break;
case '2': // Toggle Kitl Enabled Setting.
ToggleFlagSetting(BLDR_SETTINGS_FLAGS_FSHDLOAD,
"Force PB Flash Download/Boot", "<ENABLED>",
"<DISABLED>");
break;
case '9': // Return To Main Menu.
bExit = TRUE;
break;
default:
EdbgOutputDebugString("\'%c\' isn't a valid menu selection\r\n", c);
}
} while (!bExit);
}
static void LoaderMainMenu(void)
{
CHAR c = 0;
BOOLEAN bExit = FALSE;
// apCHARLCD_PrintXY(0, 0, "Config Menu");
do
{
EdbgOutputDebugString("\r\nMain Menu:\r\n");
EdbgOutputDebugString("----------------------------------------\r\n");
EdbgOutputDebugString("1. Network Settings\r\n");
EdbgOutputDebugString("2. Kitl Settings\r\n");
EdbgOutputDebugString("3. Flash Settings\r\n");
EdbgOutputDebugString("\r\n");
EdbgOutputDebugString("9. Exit (Continue)\r\n\r\n");
EdbgOutputDebugString("Please make a selection: ");
do
{
c = OEMReadDebugByte();
} while(c == OEM_DEBUG_READ_NODATA ||
((c < '1' || c > '3') && c != '9'));
EdbgOutputDebugString("\r\n");
switch(c)
{
case '1': // Network Settings.
LoaderNetworkMenu();
break;
case '2': // Kitl Settings.
LoaderKitlMenu();
break;
case '3': // Flash Settings.
LoaderFlashMenu();
break;
case '9': // Exit.
bExit = TRUE;
break;
default:
EdbgOutputDebugString("\'%c\' isn't a valid menu selection\r\n", c);
}
} while (!bExit);
// apCHARLCD_PrintXY(0, 0, " ");
}
/* EOF main.c */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -