00001
00002
00013
00014
00015
00016 #define IPSET_C
00017
00018 #include <stdio.h>
00019
00020 #include "appl.h"
00021 #include "ipset.h"
00022 #include "mdns.h"
00023 #include "stringtable.h"
00024 #include "sralloc.h"
00025
00026
00027
00028
00029
00030
00031 typedef enum
00032 {
00033 IPSET_SM_STARTUP = 0,
00034 IPSET_SM_WAIT_FOR_IP_USER,
00035 IPSET_SM_PREPARE_IPMODE,
00036 IPSET_SM_IPMODE,
00037 IPSET_SM_PREPARE_IPDIAG,
00038 IPSET_SM_PREPARE_DIAG,
00039 IPSET_SM_IP_DIAG,
00040 IPSET_SM_PREPARE_SUBDIAG,
00041 IPSET_SM_SUB_DIAG,
00042 IPSET_SM_PREPARE_GATEDIAG,
00043 IPSET_SM_GATE_DIAG,
00044 IPSET_SM_IP_FINISHED,
00045 IPSET_SM_SERVER_STARTUP,
00046 IPSET_SM_SERVER_STARTUP_WAIT,
00047 IPSET_SM_PREPARE_SERVER_FINDMODE,
00048 IPSET_SM_SERVER_FINDMODE,
00049 IPSET_SM_SERVER_AFTER_FINDMODE,
00050 IPSET_SM_SERVER_PREPARE_IP_DIAG,
00051 IPSET_SM_SERVER_IP_DIAG,
00052 IPSET_SM_SERVER_PREPARE_PORT_DIAG,
00053 IPSET_SM_SERVER_PORT_WAIT_FOR_DIAG,
00054 IPSET_SM_SERVER_PORT_DIAG,
00055 IPSET_SM_SERVER_PREPARE_NAME_DIAG,
00056 IPSET_SM_SERVER_NAME_WAIT_FOR_DIAG,
00057 IPSET_SM_SERVER_NAME_DIAG,
00058 IPSET_SM_SERVER_PORT_CORRECTED,
00059 IPSET_SM_SERVER_FINISHED,
00060 IPSET_SM_SAVED,
00061 IPSET_SM_WAIT_FOR_USER,
00062 IPSET_SM_FINISHED
00063 } SM_IPSET;
00064
00065 typedef struct
00066 {
00067 DWORD u32oldSrvIp;
00068 DWORD u32oldIp;
00069 DWORD u32oldGate;
00070 WORD u16oldSrvIPPort;
00071 WORD u16oldSrvNamePort;
00072 SM_IPSET eState;
00073 BYTE u8oldMask;
00074 BOOL boldDHCP;
00075 SEARCH_MODE eoldSrvFindMode;
00076 BYTE au8oldSrvName[sizeof(sPApplConfig.au8Name)];
00077 BYTE au8oldSrvService[sizeof(sPApplConfig.au8Service)];
00078 } sIPsetControl;
00079
00080
00081
00082
00083
00084
00085 ROM BYTE _cau8hostname_chars[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
00086 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
00087 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-' };
00088
00089
00090
00091
00092
00093 static BYTE * pdata;
00094 static BYTE _u8CursorPos;
00095 static sIPsetControl * _pIPSetCtrl = NULL;
00096
00097
00098
00099
00100
00101
00102 static void _cancelDialog(void);
00103
00104
00105
00106
00107
00108 void IPSetInit(BOOL bServer)
00109 {
00110
00111 InputButtonReset(ALL_BTN);
00112 SRAMInitHeap();
00113
00114 _pIPSetCtrl = (sIPsetControl* )(SRAMalloc(sizeof(sIPsetControl)));
00115 if (_pIPSetCtrl == NULL)
00116 {
00117 return;
00118 }
00119
00120 if (bServer == TRUE)
00121 {
00122 _pIPSetCtrl->eState = IPSET_SM_SERVER_STARTUP;
00123 }
00124 else
00125 {
00126 _pIPSetCtrl->eState = IPSET_SM_STARTUP;
00127 }
00128
00129 _pIPSetCtrl->u32oldIp = sPCommonConfig.ManIPAddr.Val;
00130 _pIPSetCtrl->u8oldMask = sPCommonConfig.ManMask;
00131 _pIPSetCtrl->u32oldGate = sPCommonConfig.ManGateway.Val;
00132
00133 _pIPSetCtrl->boldDHCP = sPCommonConfig.Flags.bIsDHCPEnabled;
00134 _pIPSetCtrl->eoldSrvFindMode = sPApplConfig.eFindMode;
00135 _pIPSetCtrl->u32oldSrvIp = sPApplConfig.sSrvIPAdd.Val;
00136 _pIPSetCtrl->u16oldSrvIPPort = sPApplConfig.sIPPort.Val;
00137 _pIPSetCtrl->u16oldSrvNamePort = sPApplConfig.sNamePort.Val;
00138
00139 memcpy(_pIPSetCtrl->au8oldSrvName, (void*)sPApplConfig.au8Name, sizeof(_pIPSetCtrl->au8oldSrvName));
00140 memcpy(_pIPSetCtrl->au8oldSrvService, (void*)sPApplConfig.au8Service, sizeof(_pIPSetCtrl->au8oldSrvService));
00141 }
00142
00143
00144
00145
00146 BOOL IPSetMain(void)
00147 {
00148 if (_pIPSetCtrl == NULL)
00149 {
00150 return TRUE;
00151 }
00152
00153
00154 if ((bInputButtonPushed(F2_BTN) == TRUE) && (_pIPSetCtrl->eState < IPSET_SM_SAVED))
00155 {
00156 _cancelDialog();
00157 }
00158
00159
00160 switch(_pIPSetCtrl->eState)
00161 {
00162 case IPSET_SM_STARTUP:
00163 StrTbl_GetString(lcdram_row1, STRTBLID_IP_MENU);
00164 lcd_addr2 = 0;
00165 strcpypgm2ram(lcdram_row2, (ROM char *) " ESC ");
00166 lcdram_row2[0] = 0xFB;
00167 lcdram_row2[15] = 0xFC;
00168 lcd_status = LCD_CLR_MASK | LCD_ROW1_MASK | LCD_CENTER1_MASK | LCD_ROW2_MASK;
00169
00170 InputButtonReset(ENC_BTN);
00171 _pIPSetCtrl->eState = IPSET_SM_WAIT_FOR_IP_USER;
00172 break;
00173
00174 case IPSET_SM_WAIT_FOR_IP_USER:
00175 if (bInputButtonPushed(F1_BTN))
00176 {
00177 _cancelDialog();
00178 }
00179
00180 if (bInputButtonPushed(ENC_BTN) || bInputButtonPushed(F4_BTN))
00181 {
00182 _pIPSetCtrl->eState = IPSET_SM_PREPARE_IPMODE;
00183 }
00184 break;
00185
00186 case IPSET_SM_PREPARE_IPMODE:
00187 StrTbl_GetString(lcdram_row1, STRTBLID_IP_ALLOCATION);
00188 _pIPSetCtrl->eState = IPSET_SM_IPMODE;
00189 InputEncoderInit(sPCommonConfig.Flags.bIsDHCPEnabled, 0, 1,ENC_ENDSTOP_MASK);
00190 InputButtonReset(ALL_BTN);
00191
00192
00193 case IPSET_SM_IPMODE:
00194 if (bInputButtonPushed(ENC_BTN) || bInputButtonPushed(F4_BTN))
00195 {
00196 sPCommonConfig.Flags.bIsDHCPEnabled = (BOOL) s16InputEncoderGetValue();
00197 if ( sPCommonConfig.Flags.bIsDHCPEnabled == FALSE)
00198 {
00199 _pIPSetCtrl->eState = IPSET_SM_PREPARE_IPDIAG;
00200 }
00201 else
00202 {
00203 _pIPSetCtrl->eState = IPSET_SM_IP_FINISHED;
00204 }
00205 }
00206 else if (bInputButtonPushed(F1_BTN))
00207 {
00208 _pIPSetCtrl->eState = IPSET_SM_STARTUP;
00209 }
00210 else if (bInputEncoderValueChanged() == TRUE)
00211 {
00212 if (s16InputEncoderGetValue() == 0)
00213 {
00214 StrTbl_GetString(lcdram_row2, STRTBLID_MANUAL);
00215 }
00216 else
00217 {
00218 StrTbl_GetString(lcdram_row2, STRTBLID_AUTO);
00219 }
00220
00221 lcd_status = LCD_CLR_MASK | LCD_ROW1_MASK | LCD_CENTER1_MASK |
00222 LCD_ROW2_MASK | LCD_CENTER2_MASK;
00223 }
00224 break;
00225
00226 case IPSET_SM_PREPARE_IPDIAG:
00227 pdata = sPCommonConfig.ManIPAddr.v;
00228 StrTbl_GetString(lcdram_row1, STRTBLID_IP_ADDRESS);
00229 _pIPSetCtrl->eState = IPSET_SM_PREPARE_DIAG;
00230 break;
00231
00232 case IPSET_SM_PREPARE_GATEDIAG:
00233 case IPSET_SM_PREPARE_DIAG:
00234 case IPSET_SM_SERVER_PREPARE_IP_DIAG:
00235 InputButtonReset(ALL_BTN);
00236 _u8CursorPos = 0;
00237 InputEncoderInit(pdata[0], 1, 223, 0);
00238 lcd_addr2 = 0;
00239 sprintf(lcdram_row2, (ROM char *) "%3hhu.%3hhu.%3hhu.%3hhu",
00240 pdata[0], pdata[1], pdata[2], pdata[3]);
00241 lcd_status = LCD_CLR_MASK | LCD_ROW1_MASK |
00242 LCD_CENTER1_MASK | LCD_ROW2_MASK;
00243 _pIPSetCtrl->eState++;
00244 break;
00245
00246 case IPSET_SM_IP_DIAG:
00247 case IPSET_SM_SERVER_IP_DIAG:
00248 case IPSET_SM_GATE_DIAG:
00249 {
00250 BOOL bpushed = FALSE;
00251 BOOL bchanged = FALSE;
00252
00253 if(OutIsLCDBusy())
00254 {
00255
00256 break;
00257 }
00258
00259 bchanged = bInputEncoderValueChanged();
00260 pdata[_u8CursorPos] = s16InputEncoderGetValue();
00261
00262 if (bInputButtonPushed(F4_BTN))
00263 {
00264
00265 _pIPSetCtrl->eState++;
00266 break;
00267 }
00268 else if (bInputButtonPushed(F1_BTN))
00269 {
00270 if (_pIPSetCtrl->eState == IPSET_SM_SERVER_IP_DIAG)
00271 {
00272 _pIPSetCtrl->eState = IPSET_SM_PREPARE_SERVER_FINDMODE;
00273 }
00274 else if (_pIPSetCtrl->eState == IPSET_SM_GATE_DIAG)
00275 {
00276 _pIPSetCtrl->eState = IPSET_SM_PREPARE_SUBDIAG;
00277 }
00278 else if (_pIPSetCtrl->eState == IPSET_SM_IP_DIAG)
00279 {
00280 _pIPSetCtrl->eState = IPSET_SM_PREPARE_IPMODE;
00281 }
00282 break;
00283 }
00284 else if (bInputButtonPushed(ENC_BTN))
00285 {
00286
00287 InputButtonReset(ENC_BTN);
00288 lcdram_row2[2] = ' ';
00289 u8ApplTimer = 0;
00290 bpushed = TRUE;
00291 }
00292 else if (bchanged == TRUE)
00293 {
00294 lcdram_row2[2] = ' ';
00295 u8ApplTimer = 0;
00296 }
00297
00298 if (u8ApplTimer == 0)
00299 {
00300 lcd_addr2 = 4*_u8CursorPos;
00301 if (lcdram_row2[2] != ' ')
00302 {
00303 u8ApplTimer = 50;
00304 strcpypgm2ram(lcdram_row2, (ROM char *) " ");
00305 }
00306 else
00307 {
00308 u8ApplTimer = 150;
00309 sprintf(lcdram_row2, (ROM char *) "%3hhu", pdata[_u8CursorPos]);
00310 }
00311
00312 lcd_status |= LCD_ROW2_MASK;
00313 }
00314
00315 if (bpushed == TRUE)
00316 {
00317 if (++_u8CursorPos == 4)
00318 {
00319 _u8CursorPos = 0;
00320 InputEncoderInit(pdata[0], 1, 223, 0);
00321 }
00322 else
00323 {
00324 InputEncoderInit(pdata[_u8CursorPos], 0, 255, 0);
00325 }
00326
00327 u8ApplTimer = 0;
00328 s16InputEncoderGetValue();
00329 }
00330 break;
00331 }
00332 case IPSET_SM_PREPARE_SUBDIAG:
00333 InputButtonReset(ALL_BTN);
00334 StrTbl_GetString(lcdram_row1, STRTBLID_SUBNETMASK);
00335 lcd_status = LCD_CLR_MASK | LCD_ROW1_MASK | LCD_CENTER1_MASK;
00336 InputEncoderInit(sPCommonConfig.ManMask, 8, 30, 0);
00337 _pIPSetCtrl->eState = IPSET_SM_SUB_DIAG;
00338
00339
00340 case IPSET_SM_SUB_DIAG:
00341 if (bInputButtonPushed(ENC_BTN)||bInputButtonPushed(F4_BTN))
00342 {
00343
00344 sPCommonConfig.ManMask = (BYTE) s16InputEncoderGetValue();
00345
00346 if ((_pIPSetCtrl->u32oldIp != sPCommonConfig.ManIPAddr.Val) ||
00347 (_pIPSetCtrl->u8oldMask != sPCommonConfig.ManMask))
00348 {
00349 DWORD_VAL tempMask;
00350 tempMask.Val = IPConvertSubnetToMask(sPCommonConfig.ManMask);
00351
00352 sPCommonConfig.ManGateway.Val =
00353 tempMask.Val & sPCommonConfig.ManIPAddr.Val;
00354 sPCommonConfig.ManGateway.v[3] += 1;
00355 }
00356
00357 _pIPSetCtrl->eState = IPSET_SM_PREPARE_GATEDIAG;
00358 pdata = sPCommonConfig.ManGateway.v;
00359 StrTbl_GetString(lcdram_row1, STRTBLID_GATEWAY_ADDRESS);
00360 }
00361 else if (bInputButtonPushed(F1_BTN))
00362 {
00363 _pIPSetCtrl->eState = IPSET_SM_PREPARE_IPDIAG;
00364 }
00365 else if (bInputEncoderValueChanged() == TRUE)
00366 {
00367 DWORD_VAL sub;
00368 sub.Val = IPConvertSubnetToMask((BYTE) s16InputEncoderGetValue());
00369 lcd_addr2 = 0;
00370 sprintf(lcdram_row2, (ROM char *) "%3hhu.%3hhu.%3hhu.%3hhu",
00371 sub.v[0], sub.v[1], sub.v[2], sub.v[3]);
00372 lcd_status |= LCD_ROW2_MASK;
00373 }
00374 break;
00375
00376 case IPSET_SM_IP_FINISHED:
00377 if (_pIPSetCtrl->u32oldIp != sPCommonConfig.ManIPAddr.Val ||
00378 _pIPSetCtrl->u8oldMask != sPCommonConfig.ManMask ||
00379 _pIPSetCtrl->u32oldGate != sPCommonConfig.ManGateway.Val ||
00380 _pIPSetCtrl->boldDHCP != sPCommonConfig.Flags.bIsDHCPEnabled)
00381 {
00382 BYTE * confPtr = (BYTE *)(&sPCommonConfig);
00383 StopMDNSResponder();
00384
00385
00386 if ((_pIPSetCtrl->u32oldIp != sPCommonConfig.ManIPAddr.Val)||
00387 (_pIPSetCtrl->boldDHCP != sPCommonConfig.Flags.bIsDHCPEnabled))
00388 {
00389 sIPConfig.Flags.bIPunique = FALSE;
00390 }
00391
00392 if (sPCommonConfig.Flags.bIsDHCPEnabled == FALSE)
00393 {
00394 DHCPDisable();
00395 sIPConfig.MyIPAddr.Val = sPCommonConfig.ManIPAddr.Val;
00396 sIPConfig.MyMask.Val = IPConvertSubnetToMask(sPCommonConfig.ManMask);
00397 sIPConfig.MyGateway.Val = sPCommonConfig.ManGateway.Val;
00398 }
00399 else
00400 {
00401 DHCPEnable();
00402 DHCPReset(FALSE);
00403 }
00404
00405
00406 XEEWriteArray(BOOTUP_EEPROM_ADD, confPtr, sizeof(PCOMMON_CONFIG));
00407
00408 _pIPSetCtrl->eState = IPSET_SM_SAVED;
00409 }
00410 else
00411 {
00412 DHCPReset(TRUE);
00413 _pIPSetCtrl->eState = IPSET_SM_FINISHED;
00414 }
00415 break;
00416
00417 case IPSET_SM_SERVER_STARTUP:
00418 StrTbl_GetString(lcdram_row1, STRTBLID_SERVER_MENU);
00419 lcd_addr2 = 0;
00420 strcpypgm2ram(lcdram_row2, (ROM char *) " ESC ");
00421 lcdram_row2[0] = 0xFB;
00422 lcdram_row2[10] = 0x7F;
00423 lcdram_row2[15] = 0xFC;
00424 lcd_status = LCD_CLR_MASK | LCD_ROW1_MASK |
00425 LCD_CENTER1_MASK | LCD_ROW2_MASK;
00426 InputButtonReset(ALL_BTN);
00427 _pIPSetCtrl->eState = IPSET_SM_SERVER_STARTUP_WAIT;
00428 break;
00429
00430 case IPSET_SM_SERVER_STARTUP_WAIT:
00431 if (bInputButtonPushed(F1_BTN))
00432 {
00433 _cancelDialog();
00434 }
00435
00436 if ((bInputButtonPushed(ENC_BTN) == TRUE)||(bInputButtonPushed(F4_BTN) == TRUE))
00437 {
00438 _pIPSetCtrl->eState = IPSET_SM_PREPARE_SERVER_FINDMODE;
00439 }
00440 break;
00441
00442 case IPSET_SM_PREPARE_SERVER_FINDMODE:
00443 StrTbl_GetString(lcdram_row1, STRTBLID_FIND_SERVER);
00444 _pIPSetCtrl->eState = IPSET_SM_SERVER_FINDMODE;
00445 if (sPApplConfig.eFindMode == SEARCH_UNKNOWN)
00446 {
00447 sPApplConfig.eFindMode = SEARCH_IP;
00448 }
00449
00450 InputEncoderInit(sPApplConfig.eFindMode, 1, 3, 0);
00451 InputButtonReset(ALL_BTN);
00452 OutEnableCursor(FALSE);
00453 break;
00454
00455 case IPSET_SM_SERVER_FINDMODE:
00456 if ((bInputButtonPushed(ENC_BTN) == TRUE)||
00457 (bInputButtonPushed(F4_BTN) == TRUE))
00458 {
00459 sPApplConfig.eFindMode = (BOOL)s16InputEncoderGetValue();
00460 _pIPSetCtrl->eState = IPSET_SM_SERVER_AFTER_FINDMODE;
00461 }
00462 else if (bInputButtonPushed(F1_BTN) == TRUE)
00463 {
00464
00465 _pIPSetCtrl->eState = IPSET_SM_SERVER_STARTUP;
00466 }
00467 else if (bInputEncoderValueChanged() == TRUE)
00468 {
00469 BYTE val = (BYTE) s16InputEncoderGetValue();
00470
00471 if (val == SEARCH_IP)
00472 {
00473 StrTbl_GetString(lcdram_row2, STRTBLID_IP_ADDRESS);
00474 }
00475 else if (val == SEARCH_NAME)
00476 {
00477 StrTbl_GetString(lcdram_row2, STRTBLID_NETWORK_NAME);
00478 }
00479 else
00480 {
00481 StrTbl_GetString(lcdram_row2, STRTBLID_NETWORK_SERVICE);
00482 }
00483
00484 lcd_status = LCD_CLR_MASK | LCD_ROW1_MASK | LCD_CENTER1_MASK | LCD_ROW2_MASK | LCD_CENTER2_MASK;
00485 }
00486 break;
00487
00488 case IPSET_SM_SERVER_AFTER_FINDMODE:
00489 if (sPApplConfig.eFindMode == SEARCH_IP)
00490 {
00491 _pIPSetCtrl->eState = IPSET_SM_SERVER_PREPARE_IP_DIAG;
00492 pdata = sPApplConfig.sSrvIPAdd.v;
00493 StrTbl_GetString(lcdram_row1, STRTBLID_SERVER_ADDRESS);
00494 }
00495 else
00496 {
00497 if(sPApplConfig.eFindMode == SEARCH_NAME)
00498 {
00499 pdata = sPApplConfig.au8Name;
00500 StrTbl_GetString(lcdram_row1, STRTBLID_SERVER_NAME);
00501 }
00502 else
00503 {
00504 pdata = sPApplConfig.au8Service;
00505 StrTbl_GetString(lcdram_row1, STRTBLID_SERVICE_NAME);
00506 }
00507
00508 _pIPSetCtrl->eState = IPSET_SM_SERVER_PREPARE_NAME_DIAG;
00509 }
00510 break;
00511
00512 case IPSET_SM_SERVER_PREPARE_PORT_DIAG:
00513 StrTbl_GetString(lcdram_row1, STRTBLID_PORT);
00514 lcd_addr1 = 0;
00515 lcd_addr2 = 0;
00516 if (sPApplConfig.eFindMode == SEARCH_IP)
00517 {
00518 pdata = (BYTE *)&sPApplConfig.sIPPort.Val;
00519 }
00520 else
00521 {
00522 pdata = (BYTE *)&sPApplConfig.sNamePort.Val;
00523 }
00524
00525 sprintf(lcdram_row2, (ROM char *)"%05hu", *((WORD *)pdata));
00526 lcd_status = LCD_CLR_MASK | LCD_ROW1_MASK | LCD_ROW2_MASK;
00527
00528 InputEncoderInit(lcdram_row2[0]-'0'+26, 26, 35, 0);
00529 InputButtonReset(ALL_BTN);
00530 _u8CursorPos = 0;
00531 _pIPSetCtrl->eState = IPSET_SM_SERVER_PORT_WAIT_FOR_DIAG;
00532 OutEnableCursor(TRUE);
00533 break;
00534
00535
00536 case IPSET_SM_SERVER_PORT_DIAG:
00537 if (bInputButtonPushed(F4_BTN) == TRUE)
00538 {
00539 DWORD val = (DWORD)(atol(lcdram_row2));
00540 OutEnableCursor(FALSE);
00541
00542 if (val > 65535)
00543 {
00544 *((WORD *)pdata) = 65535;
00545 }
00546 else if (val == 0)
00547 {
00548 *((WORD *)pdata) = 1;
00549 }
00550 else
00551 {
00552 *((WORD *)pdata) = (WORD) val;
00553 _pIPSetCtrl->eState = IPSET_SM_SERVER_FINISHED;
00554 break;
00555 }
00556
00557 _pIPSetCtrl->eState = IPSET_SM_SERVER_PORT_CORRECTED;
00558 StrTbl_GetString(lcdram_row1, STRTBLID_SET_PORT_TO1);
00559 sprintf(lcdram_row2, StrTbl_cau8GetStringPointer(STRTBLID_SET_PORT_TO2), *((WORD *)pdata));
00560
00561 lcd_status = LCD_CLR_MASK | LCD_ROW1_MASK | LCD_CENTER1_MASK | LCD_ROW2_MASK | LCD_CENTER2_MASK;
00562 u8ApplTimer = 200;
00563 InputButtonReset(ENC_BTN);
00564 }
00565 else if (bInputButtonPushed(F1_BTN) == TRUE)
00566 {
00567 _pIPSetCtrl->eState = IPSET_SM_SERVER_AFTER_FINDMODE;
00568 OutEnableCursor(FALSE);
00569 }
00570 else if (bInputEncoderValueChanged() == TRUE)
00571 {
00572 lcdram_row2[_u8CursorPos] = _cau8hostname_chars[s16InputEncoderGetValue()];
00573 lcd_status |= LCD_ROW2_MASK;
00574 _pIPSetCtrl->eState--;
00575 }
00576 else if (bInputButtonPushed(ENC_BTN) == TRUE)
00577 {
00578 InputButtonReset(ENC_BTN);
00579 if (++_u8CursorPos > 4)
00580 {
00581 _u8CursorPos = 0;
00582 }
00583 InputEncoderSetValue(lcdram_row2[_u8CursorPos] - '0' + 26, TRUE);
00584 _pIPSetCtrl->eState--;
00585 }
00586 break;
00587
00588 case IPSET_SM_SERVER_PREPARE_NAME_DIAG:
00589 {
00590 BYTE i;
00591 _u8CursorPos = strlen(pdata);
00592 if (_u8CursorPos)
00593 {
00594 _u8CursorPos--;
00595 while(pdata[_u8CursorPos]!=_cau8hostname_chars[i++]);
00596 }
00597 else
00598 {
00599 i = 1;
00600 }
00601
00602 InputEncoderInit(i-1, 0, sizeof(_cau8hostname_chars)-1, 0);
00603
00604 strcpy(lcdram_row2, pdata);
00605 lcd_addr1 = 0;
00606 lcd_addr2 = 0;
00607 lcd_status = LCD_CLR_MASK | LCD_ROW1_MASK | LCD_ROW2_MASK;
00608
00609 InputButtonReset(ALL_BTN);
00610 _pIPSetCtrl->eState = IPSET_SM_SERVER_NAME_WAIT_FOR_DIAG;
00611 OutEnableCursor(TRUE);
00612 break;
00613 }
00614
00615 case IPSET_SM_SERVER_PORT_WAIT_FOR_DIAG:
00616 case IPSET_SM_SERVER_NAME_WAIT_FOR_DIAG:
00617 if (OutIsLCDBusy()==FALSE)
00618 {
00619 OutSetCursor(_u8CursorPos, 1);
00620 _pIPSetCtrl->eState++;
00621 }
00622 break;
00623
00624 case IPSET_SM_SERVER_NAME_DIAG:
00625 if (bInputButtonPushed(F4_BTN) == TRUE)
00626 {
00627 OutEnableCursor(FALSE);
00628 if (sPApplConfig.eFindMode == SEARCH_NAME)
00629 {
00630 _pIPSetCtrl->eState = IPSET_SM_SERVER_PREPARE_PORT_DIAG;
00631 }
00632 else
00633 {
00634 _pIPSetCtrl->eState = IPSET_SM_SERVER_FINISHED;
00635 }
00636 }
00637 else if (bInputButtonPushed(F1_BTN) == TRUE)
00638 {
00639
00640 OutEnableCursor(FALSE);
00641 _pIPSetCtrl->eState = IPSET_SM_PREPARE_SERVER_FINDMODE;
00642 }
00643 else if ((bInputEncoderValueChanged() == TRUE) && (_u8CursorPos<16))
00644 {
00645 pdata[_u8CursorPos] = _cau8hostname_chars[s16InputEncoderGetValue()];
00646 strcpy(lcdram_row2, pdata);
00647 lcd_status |= LCD_ROW2_MASK;
00648
00649
00650 _pIPSetCtrl->eState--;
00651 }
00652 else if (bInputButtonPushed(ENC_BTN) == TRUE)
00653 {
00654
00655 InputButtonReset(ENC_BTN);
00656
00657 if (pdata[_u8CursorPos] && (_u8CursorPos<15))
00658 {
00659 InputEncoderSetValue(0, TRUE);
00660 _u8CursorPos++;
00661 _pIPSetCtrl->eState--;
00662 }
00663 }
00664 else if (bInputButtonPushed(F3_BTN) == TRUE)
00665 {
00666
00667 InputButtonReset(F3_BTN);
00668 pdata[_u8CursorPos] = 0;
00669 lcdram_row2[_u8CursorPos] = ' ';
00670 lcdram_row2[_u8CursorPos+1] = 0;
00671 lcd_status |= LCD_ROW2_MASK;
00672
00673 if (_u8CursorPos)
00674 {
00675 BYTE i = 0;
00676 _u8CursorPos--;
00677 while(pdata[_u8CursorPos]!=_cau8hostname_chars[i++]);
00678 InputEncoderSetValue(i-1, TRUE);
00679 }
00680 else
00681 {
00682 InputEncoderSetValue(0, FALSE);
00683 }
00684 _pIPSetCtrl->eState--;
00685 }
00686
00687 break;
00688
00689 case IPSET_SM_SERVER_FINISHED:
00690 if (_pIPSetCtrl->eoldSrvFindMode != sPApplConfig.eFindMode ||
00691 _pIPSetCtrl->u32oldSrvIp != sPApplConfig.sSrvIPAdd.Val ||
00692 _pIPSetCtrl->u16oldSrvIPPort != sPApplConfig.sIPPort.Val ||
00693 _pIPSetCtrl->u16oldSrvNamePort != sPApplConfig.sNamePort.Val ||
00694 (strcmp(_pIPSetCtrl->au8oldSrvName, sPApplConfig.au8Name) != 0) ||
00695 (strcmp(_pIPSetCtrl->au8oldSrvService, sPApplConfig.au8Service) != 0))
00696 {
00697 BYTE * confPtr = (BYTE *)(&sPApplConfig);
00698
00699
00700 XEEWriteArray(APPL_EEPROM_ADD, confPtr, sizeof(SPAPPLDATA));
00701
00702 _pIPSetCtrl->eState = IPSET_SM_SAVED;
00703 }
00704 else
00705 {
00706 _pIPSetCtrl->eState = IPSET_SM_FINISHED;
00707 }
00708 break;
00709
00710 case IPSET_SM_SAVED:
00711 StrTbl_GetString(lcdram_row1, STRTBLID_DATA_WAS);
00712 StrTbl_GetString(lcdram_row2, STRTBLID_SAVED);
00713 lcd_status = LCD_CLR_MASK | LCD_ROW1_MASK | LCD_CENTER1_MASK |
00714 LCD_ROW2_MASK | LCD_CENTER2_MASK;
00715 _pIPSetCtrl->eState = IPSET_SM_WAIT_FOR_USER;
00716 u8ApplTimer = 200;
00717 InputButtonReset(ALL_BTN);
00718 break;
00719
00720 case IPSET_SM_SERVER_PORT_CORRECTED:
00721 case IPSET_SM_WAIT_FOR_USER:
00722 if ((u8ApplTimer == 0) || (bInputButtonPushed(ENC_BTN)))
00723 {
00724 _pIPSetCtrl->eState++;
00725 }
00726 break;
00727
00728 case IPSET_SM_FINISHED:
00729 SRAMfree((BYTE *)_pIPSetCtrl);
00730 _pIPSetCtrl = NULL;
00731 return TRUE;
00732 }
00733
00734 return FALSE;
00735 }
00736
00737
00738
00739
00740 static void _cancelDialog(void)
00741 {
00742
00743 OutEnableCursor(FALSE);
00744
00745
00746 sPCommonConfig.ManIPAddr.Val = _pIPSetCtrl->u32oldIp;
00747 sPCommonConfig.ManMask = _pIPSetCtrl->u8oldMask;
00748 sPCommonConfig.ManGateway.Val = _pIPSetCtrl->u32oldGate;
00749 sPCommonConfig.Flags.bIsDHCPEnabled = _pIPSetCtrl->boldDHCP;
00750 sPApplConfig.eFindMode = _pIPSetCtrl->eoldSrvFindMode;
00751 sPApplConfig.sSrvIPAdd.Val = _pIPSetCtrl->u32oldSrvIp;
00752 sPApplConfig.sIPPort.Val = _pIPSetCtrl->u16oldSrvIPPort;
00753 sPApplConfig.sNamePort.Val = _pIPSetCtrl->u16oldSrvNamePort;
00754 memcpy(sPApplConfig.au8Name, (void *)_pIPSetCtrl->au8oldSrvName,
00755 sizeof(_pIPSetCtrl->au8oldSrvName));
00756 memcpy(sPApplConfig.au8Service, (void *)_pIPSetCtrl->au8oldSrvService,
00757 sizeof(_pIPSetCtrl->au8oldSrvService));
00758
00759 StrTbl_GetString(lcdram_row1, STRTBLID_DATA_NOT);
00760 StrTbl_GetString(lcdram_row2, STRTBLID_SAVED);
00761 lcd_status = LCD_CLR_MASK | LCD_ROW1_MASK | LCD_CENTER1_MASK |
00762 LCD_ROW2_MASK | LCD_CENTER2_MASK;
00763
00764 u8ApplTimer = 200;
00765 InputButtonReset(ALL_BTN);
00766 _pIPSetCtrl->eState = IPSET_SM_WAIT_FOR_USER;
00767 }
00768
00769
00770