00001
00002
00013
00014
00015
00016 #define WEB_C
00017 #include "web.h"
00018 #include "webprocess.h"
00019 #include "config.h"
00020 #include "xml.h"
00021
00022 #include "projectdefs.h"
00023
00024
00025
00026
00027
00028
00029 #define WEB_STACKSIZE 200
00030
00031
00032
00033
00034
00035 typedef enum
00036 {
00037 VAR_PROTO_ACTIVATE_REQ = 0,
00038 VAR_PROTO_NAME_REQ,
00039 VAR_PROTO_BUS_REQ,
00040 VAR_PROTO_REQ,
00041 VAR_PROTO_MINADD_REQ,
00042 VAR_PROTO_MAXADD_REQ,
00043 VAR_PROTO_SPEC1_REQ,
00044 VAR_PROTO_SPEC2_REQ,
00045 VAR_PROTO_REQ_COUNT
00046 } PROTO_REQ_VARS;
00047
00048 typedef enum
00049 {
00050 VAR_SET_NR_REQ = 0,
00051 VAR_SET_ACTIVATE_REQ,
00052 VAR_SET_NAME_REQ,
00053 VAR_SET_ADDRESS_REQ,
00054 VAR_SET_SETTINGS,
00055 VAR_SET_REQ_COUNT
00056 } SET_REQ_VARS;
00057
00058 typedef enum
00059 {
00060 NAV_CLOSE = 0,
00061 NAV_SUBNAV,
00062 NAV_END,
00063 NAV_SUBNAVEND
00064 } NAV_CONTROL;
00065
00066 typedef struct
00067 {
00068 WORD u16StringId;
00069 ROM BYTE * pFilename;
00070 NAV_CONTROL eNavControl;
00071 } sNavigation;
00072
00073
00074
00075
00076
00077
00078 static BYTE str[WEB_STACKSIZE];
00079 static BYTE * pStr;
00080 static BYTE _currentProcessingIdx = 0;
00081
00082 ROM sNavigation _asROMNavigation[] =
00083 {
00084 PROJECT_WEBSITES
00085 };
00086
00087
00089
00091
00092 static BYTE _u8OptionROM(auto BOOL bSel, auto BYTE u8Val, auto char * pu8Dest, auto ROM BYTE * pu8String);
00093 static BYTE _u8RadioROM(auto ROM BYTE * pu8Name, auto DWORD u32Val, auto BOOL bSel, auto BYTE * pu8Dest);
00094 static void _loadNavigation(WORD u16NavId, ROM sNavigation * pNavEntry);
00095
00096 #ifdef _SRCP
00097 static BYTE _u8Option(auto BOOL bSel, auto BYTE u8Val, auto char * pu8Dest, auto BYTE * pu8String);
00098 static BYTE _u8CheckboxROM(auto ROM BYTE * pu8Name, auto BYTE u8Val, auto BOOL bSel, auto BYTE * pu8Dest);
00099 static BYTE _u8TextROM(auto ROM BYTE * pu8Name, auto BYTE * pu8Val, auto BYTE u8Size, auto BYTE * pu8Dest);
00100 static BYTE _u8Radio(auto BYTE * pu8Name, auto DWORD u32Val, auto BOOL bSel, auto BYTE * pu8Dest);
00101 static BYTE _u8HiddenROM(auto ROM BYTE * pu8Name, auto BYTE u8Val, auto BYTE * pu8Dest);
00102 #endif
00103
00104
00105
00106
00107 void HTTPPrint_string(WORD u16StringId)
00108 {
00109 TCPPutROMString(sktHTTP,StrTbl_cau8GetStringPointer(u16StringId));
00110 }
00111
00112
00113
00114
00115 void HTTPPrint_header(WORD u16NavId)
00116 {
00117 if(curHTTP.callbackPos == 0)
00118 {
00119
00120 TCPPutROMString(sktHTTP, (ROM BYTE *)"<h1>eWicht ");
00121 TCPPutROMString(sktHTTP, StrTbl_cau8GetStringPointer(STRTBLID_CONFIGURATION));
00122 TCPPutROMString(sktHTTP, (ROM BYTE *)"</h1>");
00123
00124
00125 TCPPutROMString(sktHTTP, (ROM BYTE *)"<ul id=\"nav\">");
00126 }
00127
00128 if (curHTTP.callbackPos < sizeof(_asROMNavigation)/sizeof(sNavigation))
00129 {
00130 _loadNavigation(u16NavId, &_asROMNavigation[curHTTP.callbackPos++]);
00131 }
00132 else
00133 curHTTP.callbackPos = 0;
00134 }
00135
00136
00137
00138
00139 static void _loadNavigation(WORD u16NavId, ROM sNavigation * pNavEntry)
00140 {
00141 TCPPutROMString(sktHTTP, (ROM BYTE *)"<li><a ");
00142 if(u16NavId == pNavEntry->u16StringId)
00143 {
00144 TCPPutROMString(sktHTTP, (ROM BYTE *)"class=\"active\" ");
00145 }
00146 TCPPutROMString(sktHTTP, (ROM BYTE *)"href=\"");
00147 TCPPutROMString(sktHTTP, pNavEntry->pFilename);
00148 TCPPutROMString(sktHTTP, (ROM BYTE *)"\">");
00149 TCPPutROMString(sktHTTP, StrTbl_cau8GetStringPointer(pNavEntry->u16StringId));
00150 TCPPutROMString(sktHTTP, (ROM BYTE *)"</a>");
00151
00152 switch(pNavEntry->eNavControl)
00153 {
00154 case NAV_CLOSE:
00155 TCPPutROMString(sktHTTP, (ROM BYTE *)"</li>");
00156 break;
00157 case NAV_SUBNAV:
00158 TCPPutROMString(sktHTTP, (ROM BYTE *)"<ul>");
00159 break;
00160 case NAV_SUBNAVEND:
00161 TCPPutROMString(sktHTTP, (ROM BYTE *)"</li></ul></li>");
00162 break;
00163 case NAV_END:
00164 TCPPutROMString(sktHTTP, (ROM BYTE *)"</li></ul>");
00165 break;
00166 }
00167 }
00168
00169
00170
00171
00172 void HTTPPrint_version(WORD u16Pos)
00173 {
00174
00175 switch(u16Pos)
00176 {
00177 case VAR_FIRMWARE_VERSION_MAJOR:
00178 TCPPut(sktHTTP, FIRMWARE_VERSION_MAJOR+0x30);
00179 break;
00180
00181 case VAR_FIRMWARE_VERSION_MINOR:
00182 TCPPut(sktHTTP, FIRMWARE_VERSION_MINOR+0x30);
00183 break;
00184
00185 case VAR_FIRMWARE_VERSION_STRING:
00186 TCPPutROMString(sktHTTP, (ROM char *) PROJECT_NAME " ");
00187 TCPPutROMString(sktHTTP, (ROM char *) FIRMWARE_VERSION_STRING " ");
00188 TCPPutROMString(sktHTTP, (ROM char*)__DATE__);
00189 break;
00190
00191 case VAR_BOOTLOADER_VERSION:
00192 {
00193 LONG version;
00194
00195 memcpypgm2ram((void *)&version, BOOTVERSION, sizeof(version));
00196
00197
00198
00199 if (version == -1)
00200 {
00201 version = 1;
00202 }
00203
00204 sprintf(str, (ROM char *)"%lu", version);
00205 TCPPutString(sktHTTP, str);
00206 }
00207 break;
00208 }
00209 }
00210
00211
00212
00213
00214 void HTTPPrint_macaddress(void)
00215 {
00216
00217 BYTE i = 0;
00218 while(1)
00219 {
00220 TCPPut(sktHTTP, btohexa_high(pu8MAC[i]));
00221 TCPPut(sktHTTP, btohexa_low(pu8MAC[i]));
00222
00223 if(++i == 6)
00224 {
00225 break;
00226 }
00227 TCPPut(sktHTTP, '-');
00228 }
00229 }
00230
00231
00232
00233
00234 void HTTPPrint_ip(WORD u16Pos)
00235 {
00236
00237 BYTE i;
00238 DWORD helper = 0;
00239 BYTE * pDataSource = (BYTE*) &helper;
00240
00241 switch(u16Pos)
00242 {
00243 case VAR_IP_ADDRESS:
00244 pDataSource = (BYTE*)&sIPConfig.MyIPAddr;
00245 break;
00246
00247 case VAR_SUBNET_MASK:
00248 pDataSource = (BYTE*)&sIPConfig.MyMask;
00249 break;
00250
00251 case VAR_GATEWAY_ADDRESS:
00252 pDataSource = (BYTE*)&sIPConfig.MyGateway;
00253 break;
00254
00255 case VAR_CONNECTED_SERVER_IP:
00256 if (ApplIsConnected())
00257 {
00258 pDataSource = (BYTE*)ApplGetServerIP();
00259 }
00260 break;
00261
00262 case VAR_MAN_IP_ADDRESS:
00263 pDataSource = (BYTE*)&sPCommonConfig.ManIPAddr;
00264 break;
00265
00266 case VAR_MAN_SUBNET_MASK:
00267 helper = IPConvertSubnetToMask(sPCommonConfig.ManMask);
00268 break;
00269
00270 case VAR_MAN_GATEWAY_ADDRESS:
00271 pDataSource = (BYTE*)&sPCommonConfig.ManGateway;
00272 break;
00273
00274 case VAR_SERVER_IP:
00275 pDataSource = (BYTE*)&sPApplConfig.sSrvIPAdd;
00276 break;
00277
00278 case VAR_IP_ADDRESS_EEPROM:
00279 XEEReadArray(BOOTUP_EEPROM_ADD+offsetof(PCOMMON_CONFIG, ManIPAddr), (BYTE *)&helper, sizeof(IP_ADDR));
00280 break;
00281
00282 case VAR_SUBNET_MASK_EEPROM:
00283 XEEReadArray(BOOTUP_EEPROM_ADD+offsetof(PCOMMON_CONFIG, ManMask), &i, 1);
00284 helper = IPConvertSubnetToMask(i);
00285 break;
00286
00287 case VAR_GATEWAY_ADDRESS_EEPROM:
00288 XEEReadArray(BOOTUP_EEPROM_ADD+offsetof(PCOMMON_CONFIG, ManGateway), (BYTE *)&helper, sizeof(IP_ADDR));
00289 break;
00290
00291 case VAR_SERVER_IP_EEPROM:
00292 XEEReadArray(APPL_EEPROM_ADD+offsetof(SPAPPLDATA, sSrvIPAdd), (BYTE *)&helper, sizeof(IP_ADDR));
00293 break;
00294 }
00295
00296 if (pDataSource==0)
00297 {
00298 TCPPutROMString(sktHTTP,(ROM char*)"0.0.0.0");
00299 }
00300 else
00301 {
00302 i = 0;
00303
00304 while(1)
00305 {
00306 itoa((WORD)*pDataSource++, str);
00307 TCPPutString(sktHTTP,str);
00308 if(++i == 4)
00309 {
00310 break;
00311 }
00312 TCPPut(sktHTTP, '.');
00313 }
00314 }
00315 }
00316
00317
00318
00319
00320 void HTTPPrint_addressmode(void)
00321 {
00322 if(sPCommonConfig.Flags.bIsDHCPEnabled)
00323 {
00324 TCPPutROMString(sktHTTP,StrTbl_cau8GetStringPointer(STRTBLID_AUTO));
00325 }
00326 else
00327 {
00328 TCPPutROMString(sktHTTP,StrTbl_cau8GetStringPointer(STRTBLID_MANUAL));
00329 }
00330 }
00331
00332
00333
00334
00335 void HTTPPrint_askforaddressmode(void)
00336 {
00337 sIPFlags flags;
00338 XEEReadArray(BOOTUP_EEPROM_ADD+offsetof(PCOMMON_CONFIG, Flags), (BYTE *)&flags, sizeof(sIPFlags));
00339
00340
00341 _u8RadioROM((ROM char *)"ubm", TRUE, flags.bIsDHCPEnabled==TRUE, str);
00342 TCPPutString(sktHTTP, str);
00343 TCPPut(sktHTTP, ' ');
00344 TCPPutROMString(sktHTTP,StrTbl_cau8GetStringPointer(STRTBLID_AUTO));
00345
00346 TCPPutROMString(sktHTTP,(ROM char *)"<br>");
00347
00348 _u8RadioROM((ROM char *)"ubm", FALSE, flags.bIsDHCPEnabled==FALSE, str);
00349 TCPPutString(sktHTTP, str);
00350 TCPPut(sktHTTP, ' ');
00351 TCPPutROMString(sktHTTP,StrTbl_cau8GetStringPointer(STRTBLID_MANUAL));
00352 }
00353
00354
00355
00356
00357 void HTTPPrint_hostname(void)
00358 {
00359 TCPPutROMString(sktHTTP, HOSTNAME);
00360 }
00361
00362
00363
00364
00365 void HTTPPrint_mdns(void)
00366 {
00367 if(eGetMDNSState() == MDNS_HAS_STOPPED)
00368 {
00369 TCPPutROMString(sktHTTP,StrTbl_cau8GetStringPointer(STRTBLID_INACTIVE));
00370 }
00371 else
00372 {
00373 TCPPutROMString(sktHTTP,StrTbl_cau8GetStringPointer(STRTBLID_ACTIVE));
00374 }
00375 }
00376
00377
00378
00379
00380 void HTTPPrint_connection(void)
00381 {
00382 if (ApplIsConnected()==TRUE)
00383 {
00384 TCPPutROMString(sktHTTP,StrTbl_cau8GetStringPointer(STRTBLID_ACTIVE));
00385 }
00386 else
00387 {
00388 TCPPutROMString(sktHTTP,StrTbl_cau8GetStringPointer(STRTBLID_INACTIVE));
00389 }
00390 }
00391
00392
00393
00394
00395 void HTTPPrint_serverport(void)
00396 {
00397 WORD port = ApplGetServerPort().Val;
00398 if (ApplIsConnected()==FALSE)
00399 {
00400 port = 0;
00401 }
00402 sprintf(str, (ROM char *) "%5hu", port);
00403 TCPPutString(sktHTTP, str);
00404 }
00405
00406
00407
00408
00409 void HTTPPrint_locodir(void)
00410 {
00411 if (sPApplConfig.sFlags.bToggleLocoDirMode==TOGGLEDIRMODE_CLICK)
00412 {
00413 TCPPutROMString(sktHTTP,StrTbl_cau8GetStringPointer(STRTBLID_CLICK));
00414 }
00415 else
00416 {
00417 TCPPutROMString(sktHTTP,StrTbl_cau8GetStringPointer(STRTBLID_ZEROPOINT));
00418 }
00419 }
00420
00421
00422
00423
00424 void HTTPPrint_toggledir(void)
00425 {
00426 WORD len = TCPIsPutReady(sktHTTP);
00427 BOOL bFlag = FALSE;
00428
00429 if(curHTTP.callbackPos == 0)
00430 {
00431 pStr = str;
00432 curHTTP.callbackPos =
00433 _u8OptionROM(!sPApplConfig.sFlags.bToggleLocoDirMode,
00434 TOGGLEDIRMODE_CLICK,
00435 pStr,
00436 StrTbl_cau8GetStringPointer(STRTBLID_CLICK));
00437
00438 curHTTP.callbackPos +=
00439 _u8OptionROM(sPApplConfig.sFlags.bToggleLocoDirMode,
00440 TOGGLEDIRMODE_ZERO,
00441 &pStr[curHTTP.callbackPos],
00442 StrTbl_cau8GetStringPointer(STRTBLID_ZEROPOINT));
00443 }
00444
00445 if (len > curHTTP.callbackPos)
00446 {
00447 len = curHTTP.callbackPos;
00448 }
00449
00450 TCPPutArray(sktHTTP, pStr, len);
00451 pStr+=len;
00452 curHTTP.callbackPos-= len;
00453 }
00454
00455
00456
00457
00458 void HTTPPrint_xmllanguage(void)
00459 {
00460 sprintf(str,
00461 (ROM char *)"%hhu",
00462 sPCommonConfig.u8LanguageID);
00463 TCPPutString(sktHTTP, str);
00464 }
00465
00466
00467
00468
00469 void HTTPPrint_ledlight(void)
00470 {
00471 sprintf(str, (ROM char *)"%hhu", sPCommonConfig.u8LCDLight);
00472 TCPPutString(sktHTTP, str);
00473 }
00474
00475
00476
00477
00478 void HTTPPrint_xmlip(void)
00479 {
00480 TCPPutROMString(sktHTTP, (ROM char *)"autoip=\"");
00481
00482 if (sPCommonConfig.Flags.bIsDHCPEnabled == TRUE)
00483 {
00484
00485 TCPPut(sktHTTP, '1');
00486 }
00487 else
00488 {
00489 TCPPut(sktHTTP, '0');
00490 TCPPutROMString(sktHTTP, (ROM char *)"ip=\"");
00491 HTTPPrint_ip(VAR_MAN_IP_ADDRESS);
00492 TCPPutROMString(sktHTTP, (ROM char *)"\" sub=\"");
00493 HTTPPrint_ip(VAR_MAN_SUBNET_MASK);
00494 TCPPutROMString(sktHTTP, (ROM char *)"\" gate=\"");
00495 HTTPPrint_ip(VAR_MAN_GATEWAY_ADDRESS);
00496 }
00497 TCPPut(sktHTTP, '\"');
00498 }
00499
00500
00501
00502
00503 void HTTPPrint_xmltoggle(void)
00504 {
00505 str[0] = '0';
00506 str[1] = 0;
00507 if (sPApplConfig.sFlags.bToggleLocoDirMode)
00508 {
00509 str[0] = '1';
00510 }
00511 TCPPutString(sktHTTP, str);
00512 }
00513
00514
00515
00516
00517 void HTTPPrint_serverurl(void)
00518 {
00519 SEARCH_MODE mode;
00520 XEEReadArray(APPL_EEPROM_ADD + offsetof(SPAPPLDATA, eFindMode), (BYTE *)&mode, sizeof(SEARCH_MODE));
00521
00522 switch(mode)
00523 {
00524 case SEARCH_UNKNOWN:
00525 return;
00526
00527 case SEARCH_IP:
00528 {
00529 WORD port;
00530 HTTPPrint_ip(VAR_SERVER_IP_EEPROM);
00531 XEEReadArray(APPL_EEPROM_ADD + offsetof(SPAPPLDATA, sIPPort), (BYTE *)&port, 2);
00532 sprintf(str, (ROM char *)":%hu", port);
00533 }
00534 break;
00535
00536 case SEARCH_NAME:
00537 {
00538 WORD port;
00539 XEEReadArray(APPL_EEPROM_ADD + offsetof(SPAPPLDATA, au8Name), str, LCD_CHARS_IN_A_ROW+1);
00540 XEEReadArray(APPL_EEPROM_ADD + offsetof(SPAPPLDATA, sNamePort), (BYTE *)&port, 2);
00541 sprintf(&str[strlen(str)], (ROM char *)":%hu", port);
00542 }
00543 break;
00544
00545 case SEARCH_SERVICE:
00546 XEEReadArray(APPL_EEPROM_ADD + offsetof(SPAPPLDATA, au8Service), str, LCD_CHARS_IN_A_ROW+1);
00547 break;
00548 }
00549
00550
00551 TCPPutString(sktHTTP, str);
00552 }
00553
00554
00555
00556
00557 void HTTPPrint_language(void)
00558 {
00559 WORD len = TCPIsPutReady(sktHTTP);
00560 BOOL bFlag = FALSE;
00561
00562 if(curHTTP.callbackPos == 0)
00563 {
00564 pStr = str;
00565
00566 curHTTP.callbackPos =
00567 _u8OptionROM(sPCommonConfig.u8LanguageID==LANGID_GERMAN,
00568 LANGID_GERMAN,
00569 pStr,
00570 StrTbl_cau8GetLanguageStringPointer(LANGID_GERMAN, STRTBLID_LANGUAGE_NAME));
00571
00572 curHTTP.callbackPos +=
00573 _u8OptionROM(sPCommonConfig.u8LanguageID==LANGID_ENGLISH,
00574 LANGID_ENGLISH,
00575 &pStr[curHTTP.callbackPos],
00576 StrTbl_cau8GetLanguageStringPointer(LANGID_ENGLISH, STRTBLID_LANGUAGE_NAME));
00577 }
00578
00579 if (len > curHTTP.callbackPos)
00580 len = curHTTP.callbackPos;
00581
00582 TCPPutArray(sktHTTP, pStr, len);
00583 pStr+=len;
00584 curHTTP.callbackPos -= len;
00585 }
00586
00587
00588
00589 #ifdef _SRCP
00590
00591
00592 #include "srcp.h"
00593
00594 void HTTPPrint_locoproto(void)
00595 {
00596 if (sPSRCPConfig.sFlags.bGLAskForProto == TRUE)
00597 {
00598 TCPPutROMString(sktHTTP, StrTbl_cau8GetStringPointer(STRTBLID_ON));
00599 }
00600 else
00601 {
00602 TCPPutROMString(sktHTTP, StrTbl_cau8GetStringPointer(STRTBLID_OFF));
00603 }
00604 }
00605
00606
00607
00608
00609 void HTTPPrint_accproto(void)
00610 {
00611 if (sPSRCPConfig.sFlags.bGAAskForProto == TRUE)
00612 {
00613 TCPPutROMString(sktHTTP, StrTbl_cau8GetStringPointer(STRTBLID_ON));
00614 }
00615 else
00616 {
00617 TCPPutROMString(sktHTTP, StrTbl_cau8GetStringPointer(STRTBLID_OFF));
00618 }
00619 }
00620
00621
00622
00623
00624 void HTTPPrint_xmldelay(void)
00625 {
00626 sprintf(str, (ROM char *) "%ld", sPSRCPConfig.s32GADelay);
00627 TCPPutString(sktHTTP, str);
00628 }
00629
00630
00631
00632
00633 void HTTPPrint_askfordelay(void)
00634 {
00635 BYTE num[20];
00636 sprintf(num, (ROM char *) "%ld", sPSRCPConfig.s32GADelay);
00637 _u8TextROM((ROM char *)"dV", num, 9, str);
00638
00639 TCPPutString(sktHTTP, str);
00640 }
00641
00642
00643
00644
00645 void HTTPPrint_askforproto(WORD u16IsGL)
00646 {
00647 WORD len = TCPIsPutReady(sktHTTP);
00648 BOOL bFlag = FALSE;
00649
00650 if (u16IsGL)
00651 {
00652 bFlag = sPSRCPConfig.sFlags.bGLAskForProto;
00653 }
00654 else
00655 {
00656 bFlag = sPSRCPConfig.sFlags.bGAAskForProto;
00657 }
00658
00659 if(curHTTP.callbackPos == 0)
00660 {
00661 pStr = str;
00662 curHTTP.callbackPos =
00663 _u8OptionROM(!bFlag,
00664 0,
00665 pStr,
00666 StrTbl_cau8GetStringPointer(STRTBLID_OFF));
00667
00668 curHTTP.callbackPos += _u8OptionROM(bFlag,
00669 1,
00670 &pStr[curHTTP.callbackPos],
00671 StrTbl_cau8GetStringPointer(STRTBLID_ON));
00672 }
00673
00674 if (len > curHTTP.callbackPos)
00675 {
00676 len = curHTTP.callbackPos;
00677 }
00678
00679 TCPPutArray(sktHTTP, pStr, len);
00680 pStr+=len;
00681 curHTTP.callbackPos -= len;
00682 }
00683
00684
00685
00686
00687 void HTTPPrint_xmlproto(WORD u16Pos)
00688 {
00689 SPPROTOCOL protocoldata;
00690 WORD len;
00691
00692 SRCP_GetProtoFromEEPROM((BYTE)u16Pos, &protocoldata);
00693
00694 if (protocoldata.sFlags.bActive == FALSE)
00695 {
00696 return;
00697 }
00698
00699 len = TCPIsPutReady(sktHTTP);
00700
00701 TCPPutROMString(sktHTTP, (ROM char *) "\n<srcpproto ");
00702 sprintf(str, (ROM char *)" id=\"%hu\">\n\t<data", u16Pos);
00703 TCPPutString(sktHTTP, str);
00704
00705 TCPPutROMString(sktHTTP, (ROM char *)" name=\"");
00706 XMLPutString(sktHTTP, protocoldata.au8Desc);
00707 TCPPut(sktHTTP, '\"');
00708
00709 TCPPutROMString(sktHTTP, (ROM char *)" proto=\"");
00710 XMLPutString(sktHTTP, protocoldata.au8Proto);
00711 TCPPut(sktHTTP, '\"');
00712
00713 sprintf(str, (ROM char *)" bus=\"%hhu\" minadd=\"%hu\" maxadd=\"%hu\"",
00714 protocoldata.u8Bus, protocoldata.u16MinAdd, protocoldata.u16MaxAdd);
00715 TCPPutString(sktHTTP, str);
00716
00717
00718 if (u16Pos >= MAX_PROTO_SLOTS)
00719 {
00720 sprintf(str, (ROM char *) " minport=\"%hhu\" maxport=\"%hhu\"",
00721 protocoldata.uSpec.sGA.u8MinP, protocoldata.uSpec.sGA.u8MaxP);
00722 }
00723 else
00724 {
00725 sprintf(str, (ROM char *) " steps=\"%hhu\" funcs=\"%hhu\"",
00726 protocoldata.uSpec.sGL.u8MaxSteps, protocoldata.uSpec.sGL.u8NrFunc);
00727 }
00728
00729 TCPPutString(sktHTTP, str);
00730 TCPPutROMString(sktHTTP, (ROM char *) "/></srcpproto>\n");
00731 }
00732
00733
00734
00735
00736 void HTTPPrint_xmlset(WORD u16SetIdx)
00737 {
00738 SPSET setdata;
00739 SRCP_GetSetFromEEPROM((BYTE)u16SetIdx, &setdata);
00740
00741 if (setdata.sFlags.bActive == FALSE)
00742 {
00743 return;
00744 }
00745
00746 TCPPutROMString(sktHTTP, (ROM char *) "\n<srcpdb ");
00747
00748 sprintf(str, (ROM char *)"id=\"%hu\">\n\t<data", u16SetIdx);
00749 TCPPutString(sktHTTP, str);
00750 TCPPutROMString(sktHTTP, (ROM char *)" name=\"");
00751 XMLPutString(sktHTTP, setdata.au8Name);
00752 sprintf(str, (ROM char *)"\" bus=\"%hhu\"", setdata.u8BusNr);
00753 TCPPutString(sktHTTP, str);
00754 TCPPutROMString(sktHTTP, (ROM char *)" proto=\"");
00755 XMLPutString(sktHTTP, setdata.au8Proto);
00756 sprintf(str, (ROM char *)"\" add=\"%lu\"", setdata.u32Address);
00757 TCPPutString(sktHTTP, str);
00758
00759 if (u16SetIdx & SRCP_EEPROMSET_GA_MASK)
00760 {
00761 sprintf(str, (ROM char *)" minport=\"%hu\" maxport=\"%hu\" delay=\"%ld\"",
00762 setdata.uSpec.sGA.u8MinP, setdata.uSpec.sGA.u8MaxP, setdata.uSpec.sGA.s32Delay);
00763 }
00764 else
00765 {
00766 sprintf(str, (ROM char *)" steps=\"%hu\" funcs=\"%hu\" maxspeed=\"%hu\" togglemask=\"%lu\"",
00767 setdata.uSpec.sGL.u8MaxSteps, setdata.uSpec.sGL.u8NrFunc, setdata.uSpec.sGL.u16MaxV, setdata.uSpec.sGL.u32FuncToggleMask);
00768 }
00769
00770 TCPPutString(sktHTTP, str);
00771 TCPPutROMString(sktHTTP, (ROM char *) "/></srcpdb>\n");
00772 }
00773
00774
00775
00776
00777 static BYTE u8Colcount;
00778 static BOOL bStartNewCol;
00779
00780 void HTTPPrint_eepromset(WORD u16SetIdx)
00781 {
00782 WORD len = TCPIsPutReady(sktHTTP);
00783
00784 if(curHTTP.callbackPos == 0)
00785 {
00786
00787 u8Colcount = 0;
00788 bStartNewCol = TRUE;
00789
00790
00791 strcpypgm2ram(str, (ROM char *) "<tr>");
00792 pStr = &str[4];
00793 }
00794
00795 if (bStartNewCol == TRUE)
00796 {
00797 SPSET setdata;
00798 BYTE num[6];
00799 SRCP_GetSetFromEEPROM(u16SetIdx, &setdata);
00800
00801 strcpypgm2ram(pStr, (ROM char *) "<td>");
00802 pStr += 4;
00803
00804 switch(u8Colcount++)
00805 {
00806 case VAR_SET_NR_REQ:
00807 {
00808 BYTE nr = u16SetIdx & SRCP_EEPROMSET_IDX_MASK;
00809 pStr += _u8HiddenROM((ROM BYTE *)"A", u16SetIdx, pStr);
00810 pStr += sprintf(pStr, (ROM char *) "S%hu", nr+1);
00811 break;
00812 }
00813
00814 case VAR_SET_ACTIVATE_REQ:
00815 pStr += _u8CheckboxROM((ROM char *)"c",
00816 u16SetIdx,
00817 (setdata.sFlags.bActive),
00818 pStr);
00819 break;
00820
00821 case VAR_SET_NAME_REQ:
00822 pStr += _u8TextROM((ROM char *)"n", setdata.au8Name, SRCP_NAME_MAXLEN, pStr);
00823 break;
00824
00825 case VAR_SET_ADDRESS_REQ:
00826 sprintf(num, (ROM char *) "%lu", setdata.u32Address);
00827 pStr += _u8TextROM((ROM char *)"usm", num, 5, pStr);
00828 break;
00829
00830 case VAR_SET_SETTINGS:
00831 if (setdata.sFlags.bGL == FALSE)
00832 {
00833 strcpypgm2ram(pStr, (ROM char *)"<a href=\"accset.htm?");
00834 }
00835 else
00836 {
00837 strcpypgm2ram(pStr, (ROM char *)"<a href=\"locoset.htm?");
00838 }
00839
00840 pStr = &str[strlen(str)];
00841 sprintf(pStr, (ROM char *)"%hhu\">%HS...</a>", u16SetIdx, StrTbl_cau8GetStringPointer(STRTBLID_CONFIGURE));
00842 pStr = &str[strlen(str)];
00843 pStr += _u8HiddenROM((ROM BYTE *)"E", u16SetIdx, pStr);
00844 break;
00845 }
00846
00847 strcpypgm2ram(pStr, (ROM char *) "</td>");
00848 pStr += 5;
00849
00850
00851 if (u8Colcount == VAR_PROTO_REQ_COUNT)
00852 {
00853
00854 strcpypgm2ram(pStr, (ROM char *) "</tr>");
00855 }
00856
00857 bStartNewCol = FALSE;
00858 curHTTP.callbackPos = strlen(str);
00859 pStr = str;
00860 }
00861
00862 #ifdef __DEBUG
00863 if(curHTTP.callbackPos>WEB_STACKSIZE)
00864 {
00865 while(1);
00866 }
00867 #endif
00868
00869 if (len > curHTTP.callbackPos)
00870 {
00871 len = curHTTP.callbackPos;
00872 }
00873
00874 TCPPutArray(sktHTTP, pStr, len);
00875 curHTTP.callbackPos-= len;
00876
00877 if (curHTTP.callbackPos == 0)
00878 {
00879 bStartNewCol = TRUE;
00880
00881 if (u8Colcount == VAR_SET_REQ_COUNT)
00882 {
00883
00884 return;
00885 }
00886
00887
00888 curHTTP.callbackPos = 1;
00889 }
00890 else
00891 {
00892 pStr+=len;
00893 }
00894 }
00895
00896
00897
00898
00899 void HTTPPrint_protoreq(WORD u16Pos)
00900 {
00901 WORD len = TCPIsPutReady(sktHTTP);
00902
00903 if(curHTTP.callbackPos == 0)
00904 {
00905
00906 u8Colcount = 0;
00907 bStartNewCol = TRUE;
00908 }
00909
00910 if (bStartNewCol == TRUE)
00911 {
00912 SPPROTOCOL protocoldata;
00913 BYTE num[6];
00914 SRCP_GetProtoFromEEPROM(u16Pos, &protocoldata);
00915
00916 pStr = str;
00917 if (u8Colcount == 0)
00918 {
00919 strcpypgm2ram(pStr, (ROM char *) "<tr>");
00920 pStr = &str[4];
00921 }
00922
00923 strcpypgm2ram(pStr, (ROM char *) "<td>");
00924 pStr += 4;
00925
00926 switch(u8Colcount++)
00927 {
00928 case VAR_PROTO_ACTIVATE_REQ:
00929 pStr += _u8HiddenROM((ROM BYTE *)"A", u16Pos, pStr);
00930 pStr += _u8CheckboxROM((ROM char *)"c",
00931 u16Pos,
00932 protocoldata.sFlags.bActive,
00933 pStr);
00934 break;
00935
00936 case VAR_PROTO_NAME_REQ:
00937 pStr += _u8TextROM((ROM char *)"n", protocoldata.au8Desc, 16, pStr);
00938 break;
00939
00940 case VAR_PROTO_BUS_REQ:
00941 sprintf(num, (ROM char *) "%hhu", protocoldata.u8Bus);
00942 pStr += _u8TextROM((ROM char *)"ubb", num, 3, pStr);
00943 break;
00944
00945 case VAR_PROTO_REQ:
00946 pStr += _u8TextROM((ROM char *)"p", protocoldata.au8Proto, 3, pStr);
00947 break;
00948
00949 case VAR_PROTO_MINADD_REQ:
00950 sprintf(num, (ROM char *) "%hu", protocoldata.u16MinAdd);
00951 pStr += _u8TextROM((ROM char *)"usm", num, 5, pStr);
00952 break;
00953
00954 case VAR_PROTO_MAXADD_REQ:
00955 sprintf(num, (ROM char *) "%hu", protocoldata.u16MaxAdd);
00956 pStr += _u8TextROM((ROM char *)"usx", num, 5, pStr);
00957 break;
00958
00959 case VAR_PROTO_SPEC1_REQ:
00960 sprintf(num, (ROM char *) "%hhu", protocoldata.uSpec.sGL.u8MaxSteps);
00961 if (protocoldata.sFlags.bGL == TRUE)
00962 {
00963 pStr += _u8TextROM((ROM char *)"ubs", num, 3, pStr);
00964 }
00965 else
00966 {
00967 pStr += _u8TextROM((ROM char *)"ubq", num, 3, pStr);
00968 }
00969 break;
00970
00971 case VAR_PROTO_SPEC2_REQ:
00972 sprintf(num, (ROM char *) "%hhu", protocoldata.uSpec.sGL.u8NrFunc);
00973 if (protocoldata.sFlags.bGL == TRUE)
00974 {
00975 pStr += _u8TextROM((ROM char *)"ubf", num, 3, pStr);
00976 }
00977 else
00978 {
00979 pStr += _u8TextROM((ROM char *)"ubr", num, 3, pStr);
00980 }
00981 pStr += _u8HiddenROM((ROM BYTE *)"E", u16Pos, pStr);
00982 break;
00983 }
00984
00985 strcpypgm2ram(pStr, (ROM char *) "</td>");
00986 pStr += 5;
00987
00988
00989 if (u8Colcount == VAR_PROTO_REQ_COUNT)
00990 {
00991
00992 strcpypgm2ram(pStr, (ROM char *) "</tr>");
00993 }
00994
00995 bStartNewCol = FALSE;
00996 curHTTP.callbackPos = strlen(str);
00997 pStr = str;
00998 }
00999
01000 #ifdef __DEBUG
01001 if(curHTTP.callbackPos>WEB_STACKSIZE)
01002 {
01003 while(1);
01004 }
01005 #endif
01006
01007 if (len > curHTTP.callbackPos)
01008 {
01009 len = curHTTP.callbackPos;
01010 }
01011
01012 TCPPutArray(sktHTTP, pStr, len);
01013 curHTTP.callbackPos-= len;
01014
01015 if (curHTTP.callbackPos == 0)
01016 {
01017 bStartNewCol = TRUE;
01018
01019 if (u8Colcount == VAR_PROTO_REQ_COUNT)
01020 {
01021
01022 return;
01023 }
01024
01025
01026 curHTTP.callbackPos = 1;
01027 }
01028 else
01029 {
01030 pStr+=len;
01031 }
01032 }
01033
01034
01035
01036
01037 void HTTPPrint_xmllocoprotoreq(void)
01038 {
01039 if (sPSRCPConfig.sFlags.bGLAskForProto)
01040 {
01041 TCPPut(sktHTTP, '1');
01042 }
01043 else
01044 {
01045 TCPPut(sktHTTP, '0');
01046 }
01047 }
01048
01049
01050
01051
01052 void HTTPPrint_xmlaccprotoreq(void)
01053 {
01054 if (sPSRCPConfig.sFlags.bGAAskForProto)
01055 {
01056 TCPPut(sktHTTP, '1');
01057 }
01058 else
01059 {
01060 TCPPut(sktHTTP, '0');
01061 }
01062 }
01063
01064
01065
01066
01067 void HTTPPrint_xmllocostandard(void)
01068 {
01069 sprintf(str, (ROM char *)"%hhu", sPSRCPConfig.u8DefaultGLProtoId);
01070 TCPPutString(sktHTTP, str);
01071 }
01072
01073
01074
01075
01076 void HTTPPrint_xmlaccstandard(void)
01077 {
01078 sprintf(str, (ROM char *)"%hhu", sPSRCPConfig.u8DefaultGAProtoId);
01079 TCPPutString(sktHTTP, str);
01080 }
01081
01082
01083
01084
01085 void HTTPPrint_locostandard(void)
01086 {
01087 auto WORD len = TCPIsPutReady(sktHTTP);
01088
01089 if(curHTTP.callbackPos == 0)
01090 {
01091
01092 _u8OptionROM(sPSRCPConfig.u8DefaultGLProtoId == SRCP_SERVERCACHE_ID,
01093 SRCP_SERVERCACHE_ID,
01094 str,
01095 StrTbl_cau8GetStringPointer(STRTBLID_SERVER_CACHE));
01096
01097 pStr = &str[strlen(str)];
01098 _u8OptionROM(sPSRCPConfig.u8DefaultGLProtoId == SRCP_EEPROMSET_ID,
01099 SRCP_EEPROMSET_ID,
01100 pStr,
01101 StrTbl_cau8GetStringPointer(STRTBLID_DATABASE));
01102
01103 pStr = str;
01104
01105
01106 curHTTP.callbackPos = 1;
01107 }
01108 else if ((strlen(pStr) == 0) && (curHTTP.callbackPos < 9))
01109 {
01110 SPPROTOCOL protocoldata;
01111 SRCP_GetProtoFromEEPROM(curHTTP.callbackPos-1, &protocoldata);
01112
01113 if (protocoldata.sFlags.bActive)
01114 {
01115 _u8Option(sPSRCPConfig.u8DefaultGLProtoId == (curHTTP.callbackPos-1),
01116 curHTTP.callbackPos-1,
01117 str,
01118 protocoldata.au8Desc);
01119 pStr = str;
01120 }
01121 curHTTP.callbackPos++;
01122 }
01123
01124 if (len > strlen(pStr))
01125 {
01126 len = strlen(pStr);
01127 }
01128
01129 TCPPutArray(sktHTTP, pStr, len);
01130 pStr+=len;
01131
01132 if ((strlen(pStr) == 0) && (curHTTP.callbackPos == 9))
01133 {
01134 curHTTP.callbackPos = 0;
01135 return;
01136 }
01137 }
01138
01139
01140
01141
01142 void HTTPPrint_accstandard(void)
01143 {
01144 auto WORD len = TCPIsPutReady(sktHTTP);
01145
01146 if(curHTTP.callbackPos == 0)
01147 {
01148
01149 _u8OptionROM(sPSRCPConfig.u8DefaultGAProtoId == SRCP_EEPROMSET_ID,
01150 SRCP_EEPROMSET_ID,
01151 str,
01152 StrTbl_cau8GetStringPointer(STRTBLID_DATABASE));
01153
01154 pStr = str;
01155
01156
01157 curHTTP.callbackPos = 8;
01158 }
01159
01160 if ((strlen(pStr) == 0)&&(curHTTP.callbackPos<16))
01161 {
01162 SPPROTOCOL protocoldata;
01163 SRCP_GetProtoFromEEPROM(curHTTP.callbackPos, &protocoldata);
01164
01165 if (protocoldata.sFlags.bActive)
01166 {
01167 _u8Option(sPSRCPConfig.u8DefaultGAProtoId == (curHTTP.callbackPos),
01168 curHTTP.callbackPos,
01169 str,
01170 protocoldata.au8Desc);
01171 pStr = str;
01172 }
01173 curHTTP.callbackPos++;
01174 }
01175
01176 if (len > strlen(pStr))
01177 {
01178 len = strlen(pStr);
01179 }
01180
01181 TCPPutArray(sktHTTP, pStr, len);
01182 pStr+=len;
01183
01184 if ((strlen(pStr) == 0) && (curHTTP.callbackPos == 16))
01185 {
01186 curHTTP.callbackPos = 0;
01187 return;
01188 }
01189 }
01190
01191
01192
01193
01194 void HTTPPrint_setid(void)
01195 {
01196 auto BYTE tmp[6];
01197 btoa((_currentProcessingIdx & SRCP_EEPROMSET_IDX_MASK)+1, tmp);
01198 TCPPutString(sktHTTP, tmp);
01199 }
01200
01201
01202
01203
01204 void HTTPPrint_setidx(void)
01205 {
01206 auto BYTE tmp[6];
01207 btoa(_currentProcessingIdx, tmp);
01208 TCPPutString(sktHTTP, tmp);
01209 }
01210
01211
01212
01213
01214 void HTTPPrint_setname(void)
01215 {
01216 auto SPSET * pSetdata = (SPSET *)str;
01217 BYTE * pStr = &str[sizeof(SPSET)];
01218
01219 _u8TextROM((ROM char *)"n",pSetdata->au8Name,SRCP_NAME_MAXLEN,pStr);
01220 TCPPutString(sktHTTP, pStr);
01221 }
01222
01223
01224
01225
01226 void HTTPPrint_setaddress(void)
01227 {
01228 auto SPSET * pSetdata = (SPSET *)str;
01229 auto BYTE num[10];
01230 auto BYTE * pStr = &str[sizeof(SPSET)];
01231
01232 sprintf(num, (ROM char *) "%lu", pSetdata->u32Address);
01233 _u8TextROM((ROM char *)"usm", num, 5, pStr);
01234 TCPPutString(sktHTTP, pStr);
01235 }
01236
01237
01238
01239
01240 void HTTPPrint_setmaxspeed(void)
01241 {
01242 auto SPSET * pSetdata = (SPSET *)str;
01243 auto BYTE num[6];
01244 auto BYTE * pStr = &str[sizeof(SPSET)];
01245
01246 sprintf(num, (ROM char *) "%hu", pSetdata->uSpec.sGL.u16MaxV);
01247 _u8TextROM((ROM char *)"ush", num, 5, pStr);
01248 TCPPutString(sktHTTP, pStr);
01249 }
01250
01251
01252
01253
01254 void HTTPPrint_setbus(void)
01255 {
01256 auto SPSET * pSetdata = (SPSET *)str;
01257 auto BYTE num[4];
01258 auto BYTE * pStr = &str[sizeof(SPSET)];
01259
01260 sprintf(num, (ROM char *) "%hhu", pSetdata->u8BusNr);
01261 _u8TextROM((ROM char *)"ubb", num, 3, pStr);
01262 TCPPutString(sktHTTP, pStr);
01263 }
01264
01265
01266
01267
01268 void HTTPPrint_setprotocol(void)
01269 {
01270 auto SPSET * pSetdata = (SPSET *)str;
01271 auto BYTE num[4];
01272 auto BYTE * pStr = &str[sizeof(SPSET)];
01273
01274 _u8TextROM((ROM char *)"p", pSetdata->au8Proto, 3, pStr);
01275 TCPPutString(sktHTTP, pStr);
01276 }
01277
01278
01279
01280
01281 void HTTPPrint_setsteps(void)
01282 {
01283 auto SPSET * pSetdata = (SPSET *)str;
01284 auto BYTE num[4];
01285 auto BYTE * pStr = &str[sizeof(SPSET)];
01286
01287 sprintf(num, (ROM char *) "%hhu", pSetdata->uSpec.sGL.u8MaxSteps);
01288 _u8TextROM((ROM char *)"ubs", num, 3, pStr);
01289 TCPPutString(sktHTTP, pStr);
01290 }
01291
01292
01293
01294
01295 void HTTPPrint_setfunctions(void)
01296 {
01297 auto SPSET * pSetdata = (SPSET *)str;
01298 auto BYTE num[4];
01299 auto BYTE * pStr = &str[sizeof(SPSET)];
01300
01301 sprintf(num, (ROM char *) "%hhu", pSetdata->uSpec.sGL.u8NrFunc);
01302 _u8TextROM((ROM char *)"ubf", num, 3, pStr);
01303 TCPPutString(sktHTTP, pStr);
01304 }
01305
01306
01307
01308
01309 void HTTPPrint_setprotos(WORD u16ProtoId)
01310 {
01311 auto SPSET * pSetdata = (SPSET *)str;
01312 auto SPPROTOCOL protocoldata;
01313 auto BYTE num[4];
01314 auto BYTE * pStr = &str[sizeof(SPSET)];
01315
01316 SRCP_GetProtoFromEEPROM((BYTE)u16ProtoId, &protocoldata);
01317
01318 if (protocoldata.sFlags.bActive == FALSE)
01319 {
01320 return;
01321 }
01322
01323 TCPPutROMString(sktHTTP, (ROM char *)"<tr><td>");
01324 _u8RadioROM((ROM char *)"P", u16ProtoId, FALSE, pStr);
01325 TCPPutString(sktHTTP, pStr);
01326 TCPPutROMString(sktHTTP, (ROM char *)"</td><td>");
01327 TCPPutString(sktHTTP, protocoldata.au8Desc);
01328 TCPPutROMString(sktHTTP, (ROM char *)"</td><td>");
01329 sprintf(num, (ROM char *) "%hhu", protocoldata.u8Bus);
01330 TCPPutString(sktHTTP, num);
01331 TCPPutROMString(sktHTTP, (ROM char *)"</td><td>");
01332 TCPPutString(sktHTTP, protocoldata.au8Proto);
01333
01334 if (pSetdata->sFlags.bGL == TRUE)
01335 {
01336 TCPPutROMString(sktHTTP, (ROM char *)"</td><td>");
01337 sprintf(num, (ROM char *) "%hhu", protocoldata.uSpec.sGL.u8MaxSteps);
01338 TCPPutString(sktHTTP, num);
01339 TCPPutROMString(sktHTTP, (ROM char *)"</td><td>");
01340 sprintf(num, (ROM char *) "%hhu", protocoldata.uSpec.sGL.u8NrFunc);
01341 TCPPutString(sktHTTP, num);
01342 }
01343 else
01344 {
01345 TCPPutROMString(sktHTTP, (ROM char *)"</td><td>");
01346 sprintf(num, (ROM char *) "%hhu", protocoldata.uSpec.sGA.u8MinP);
01347 TCPPutString(sktHTTP, num);
01348 TCPPutROMString(sktHTTP, (ROM char *)"</td><td>");
01349 sprintf(num, (ROM char *) "%hhu", protocoldata.uSpec.sGA.u8MaxP);
01350 TCPPutString(sktHTTP, num);
01351 }
01352
01353 TCPPutROMString(sktHTTP, (ROM char *)"</td></tr>");
01354 }
01355
01356
01357
01358
01359 void HTTPPrint_setfunction(WORD u16FunctionNr, WORD u16Mode)
01360 {
01361 auto SPSET * pSetdata = (SPSET *)str;
01362 auto BYTE format[4];
01363 auto DWORD mask;
01364 auto DWORD valuemask = 0;
01365 auto WORD i;
01366 auto BOOL bDefault = FALSE;
01367 auto BYTE * pStr = &str[sizeof(SPSET)];
01368
01369
01370 mask = 0x01;
01371 for (i = 0; i < u16FunctionNr; i++)
01372 {
01373 mask = mask << 1;
01374 }
01375
01376
01377 if ((u16Mode && (pSetdata->uSpec.sGL.u32FuncToggleMask & mask)) ||
01378 ((u16Mode == 0) && ((pSetdata->uSpec.sGL.u32FuncToggleMask & mask) == 0)))
01379 {
01380 bDefault = TRUE;
01381 }
01382
01383 if (u16Mode)
01384 {
01385 valuemask = mask;
01386 }
01387
01388 TCPPutROMString(sktHTTP, (ROM char *)"<td>");
01389 sprintf(format, (ROM char *) "F%hu", u16FunctionNr);
01390 _u8Radio(format, valuemask, bDefault, pStr);
01391 TCPPutString(sktHTTP, pStr);
01392 TCPPutROMString(sktHTTP, (ROM char *)"</td>");
01393 }
01394
01395
01396
01397
01398 void HTTPPrint_setminport(void)
01399 {
01400 auto SPSET * pSetdata = (SPSET *)str;
01401 auto BYTE num[4];
01402 auto BYTE * pStr = &str[sizeof(SPSET)];
01403
01404 sprintf(num, (ROM char *) "%hhu", pSetdata->uSpec.sGA.u8MinP);
01405 _u8TextROM((ROM char *)"ubq", num, 3, pStr);
01406 TCPPutString(sktHTTP, pStr);
01407 }
01408
01409
01410
01411
01412 void HTTPPrint_setmaxport(void)
01413 {
01414 auto SPSET * pSetdata = (SPSET *)str;
01415 auto BYTE num[4];
01416 auto BYTE * pStr = &str[sizeof(SPSET)];
01417
01418 sprintf(num, (ROM char *) "%hhu", pSetdata->uSpec.sGA.u8MaxP);
01419 _u8TextROM((ROM char *)"ubr", num, 3, pStr);
01420 TCPPutString(sktHTTP, pStr);
01421 }
01422
01423
01424
01425
01426 void HTTPPrint_setdelay(void)
01427 {
01428 auto SPSET * pSetdata = (SPSET *)str;
01429 auto BYTE num[10];
01430 auto BYTE * pStr = &str[sizeof(SPSET)];
01431
01432 sprintf(num, (ROM char *) "%ld", pSetdata->uSpec.sGA.s32Delay);
01433 _u8TextROM((ROM char *)"dd", num, 9, pStr);
01434 TCPPutString(sktHTTP, pStr);
01435 }
01436
01437
01438
01439 #endif // #ifdef _SRCP
01440
01441
01442
01443
01444 HTTP_IO_RESULT HTTPExecuteGet(void)
01445 {
01446 BYTE *ptr;
01447 BYTE filename[20];
01448
01449
01450
01451 MPFSGetFilename(curHTTP.file, filename, 20);
01452
01453
01454
01455 if(!strcmppgm2ram(filename, (ROM char*)"index.htm"))
01456 {
01457 ApplRestart(curHTTP.data[0]=='2');
01458 }
01459
01460 #ifdef _SRCP
01461 else if(!strcmppgm2ram(filename, (ROM char*)"locoset.htm")||
01462 !strcmppgm2ram(filename, (ROM char*)"accset.htm"))
01463 {
01464 _currentProcessingIdx = atob(curHTTP.data);
01465 if (_currentProcessingIdx >= SRCP_EEPROMSET_COUNT)
01466 {
01467 _currentProcessingIdx = 0;
01468 }
01469
01470 SRCP_GetSetFromEEPROM(_currentProcessingIdx, (SPSET *)str);
01471 }
01472 #endif
01473
01474 curHTTP.httpStatus = HTTP_REDIRECT;
01475 strcpy(curHTTP.data, filename);
01476
01477
01478 return HTTP_IO_DONE;
01479 }
01480
01481
01482
01483
01484
01485
01486 #define SM_READ_NAME (0u)
01487 #define SM_READ_VALUE (1u)
01488
01489 #define EXEC_POST_NAME_LENGTH (5+1)
01490 #define EXEC_POST_FILENAME_LENGTH (20+1)
01491 #define EXEC_POST_VALUE_LENGTH (32+1)
01492
01493 #define EXEC_POST_NEEDED_SPACE (EXEC_POST_NAME_LENGTH+EXEC_POST_FILENAME_LENGTH+EXEC_POST_VALUE_LENGTH)
01494
01495
01496 HTTP_IO_RESULT HTTPExecutePost(void)
01497 {
01498 auto BYTE * name = str;
01499 auto BYTE * filename = &str[EXEC_POST_NAME_LENGTH];
01500 auto BYTE * value = &filename[EXEC_POST_FILENAME_LENGTH];
01501
01502
01503
01504 MPFSGetFilename(curHTTP.file, filename, (EXEC_POST_FILENAME_LENGTH-1));
01505
01506
01507 if(!strcmppgm2ram(filename, (ROM char*)"file.htm"))
01508 {
01509 return ConfigPostFile(str);
01510 }
01511
01512
01513 while(1)
01514 {
01515
01516 switch(curHTTP.smPost)
01517 {
01518 case SM_READ_NAME:
01519 if(HTTPReadPostName(name, (EXEC_POST_NAME_LENGTH-1)) == HTTP_READ_INCOMPLETE)
01520 {
01521 return HTTP_IO_NEED_DATA;
01522 }
01523
01524
01525 curHTTP.smPost = SM_READ_VALUE;
01526
01527
01528 case SM_READ_VALUE:
01529 if(HTTPReadPostValue(value, (EXEC_POST_VALUE_LENGTH-1)) == HTTP_READ_INCOMPLETE)
01530 {
01531 return HTTP_IO_NEED_DATA;
01532 }
01533
01534
01535 curHTTP.smPost = SM_READ_NAME;
01536 break;
01537 }
01538
01539 if (strcmppgm2ram(filename, (ROM char*)"common.htm")==0)
01540 {
01541 ProcessCommonData(name, value);
01542 }
01543
01544 #ifdef _SRCP
01545 else if (strcmppgm2ram(filename, (ROM char*)"srcp.htm")==0)
01546 {
01547 ProcessSRCPData(name, value);
01548 }
01549 else if (strcmppgm2ram(filename, (ROM char*)"locoproto.htm")==0)
01550 {
01551 ProcessProtoData(&str[EXEC_POST_NEEDED_SPACE], name, value);
01552 }
01553 else if (strcmppgm2ram(filename, (ROM char*)"accproto.htm")==0)
01554 {
01555 ProcessProtoData(&str[EXEC_POST_NEEDED_SPACE], name, value);
01556 }
01557 else if (!strcmppgm2ram(filename, (ROM char*)"locos.htm")==0)
01558 {
01559 ProcessSetData(&str[EXEC_POST_NEEDED_SPACE], name, value);
01560 }
01561 else if (!strcmppgm2ram(filename, (ROM char*)"accs.htm")==0)
01562 {
01563 ProcessSetData(&str[EXEC_POST_NEEDED_SPACE], name, value);
01564 }
01565 else if (!strcmppgm2ram(filename, (ROM char*)"locoset.htm")==0)
01566 {
01567 ProcessSetData(&str[EXEC_POST_NEEDED_SPACE], name, value);
01568 }
01569 else if (!strcmppgm2ram(filename, (ROM char*)"accset.htm")==0)
01570 {
01571 ProcessSetData(&str[EXEC_POST_NEEDED_SPACE], name, value);
01572 }
01573 #endif
01574
01575 if (name[0] == 'R')
01576 {
01577 ApplRestart(FALSE);
01578 strcpypgm2ram(curHTTP.data, (ROM char*)"index.htm");
01579 curHTTP.httpStatus = HTTP_REDIRECT;
01580 return HTTP_IO_DONE;
01581 }
01582 else if (name[0] == 'O')
01583 {
01584 curHTTP.httpStatus = HTTP_REDIRECT;
01585 strcpy(curHTTP.data, filename);
01586 return HTTP_IO_DONE;
01587 }
01588 }
01589 }
01590
01591
01592
01593
01594 static BYTE _u8RadioROM(auto ROM BYTE * pu8Name, auto DWORD u32Val, auto BOOL bSel, auto BYTE * pu8Dest)
01595 {
01596 auto BYTE len=sprintf(pu8Dest,
01597 (ROM char *)"<input type=\"radio\" name=\"%HS\" value=\"%lu\"",
01598 pu8Name, u32Val);
01599
01600 if (bSel==TRUE)
01601 {
01602 strcpypgm2ram(&pu8Dest[len], (ROM char *)" checked=\"checked\"");
01603 len+=18;
01604 }
01605
01606 strcpypgm2ram(&pu8Dest[len], (ROM char *)" />");
01607 return (len+3);
01608 }
01609
01610
01611
01612
01613 static BYTE _u8OptionROM(auto BOOL bSel, auto BYTE u8Val, auto char * pu8Dest,
01614 auto ROM BYTE * pu8String)
01615 {
01616 BYTE len=sprintf(pu8Dest, (ROM char *)"<option value=\"%hhu\"", u8Val);
01617
01618 if (bSel == TRUE)
01619 {
01620 strcpypgm2ram(&pu8Dest[len], (ROM char *)" selected=\"selected\"");
01621 len += 20;
01622 }
01623 pu8Dest[len++] = '>';
01624 strcpypgm2ram(&pu8Dest[len], (ROM char *)pu8String);
01625 len += strlenpgm((ROM char *)pu8String);
01626 strcpypgm2ram(&pu8Dest[len], (ROM char *)"</option>");
01627 len += 9;
01628
01629 return len;
01630 }
01631
01632
01633 #ifdef _SRCP
01634
01635
01636 static BYTE _u8HiddenROM(auto ROM BYTE * pu8Name, auto BYTE u8Val, auto BYTE * pu8Dest)
01637 {
01638 BYTE len=sprintf(pu8Dest,
01639 (ROM char *)"<input type=\"hidden\" name=\"%HS\" value=\"%hhu\" />",
01640 pu8Name, u8Val);
01641
01642 return len;
01643 }
01644
01645
01646
01647
01648 static BYTE _u8Option(auto BOOL bSel, auto BYTE u8Val, auto char * pu8Dest, auto BYTE * pu8String)
01649 {
01650 BYTE len=sprintf(pu8Dest, (ROM char *)"<option value=\"%hhu\"", u8Val);
01651
01652 if (bSel == TRUE)
01653 {
01654 strcpypgm2ram(&pu8Dest[len], (ROM char *)" selected=\"selected\"");
01655 len += 20;
01656 }
01657 pu8Dest[len++] = '>';
01658 strcpy(&pu8Dest[len], pu8String);
01659 len += strlen(pu8String);
01660 strcpypgm2ram(&pu8Dest[len], (ROM char *)"</option>");
01661 len += 9;
01662
01663 return len;
01664 }
01665
01666
01667
01668
01669 static BYTE _u8CheckboxROM(auto ROM BYTE * pu8Name, auto BYTE u8Val, auto BOOL bSel,
01670 auto BYTE * pu8Dest)
01671 {
01672 BYTE len=sprintf(pu8Dest,
01673 (ROM char *)"<input type=\"checkbox\" name=\"%HS\" value=\"%hhu\"",
01674 pu8Name, u8Val);
01675
01676 if (bSel==TRUE)
01677 {
01678 strcpypgm2ram(&pu8Dest[len], (ROM char *)" checked=\"checked\"");
01679 len+=18;
01680 }
01681
01682 strcpypgm2ram(&pu8Dest[len], (ROM char *)" />");
01683 return (len+3);
01684 }
01685
01686
01687
01688
01689 static BYTE _u8TextROM(auto ROM BYTE * pu8Name, auto BYTE * pu8Val, auto BYTE u8Size,
01690 auto BYTE * pu8Dest)
01691 {
01692 BYTE len=sprintf(pu8Dest,
01693 (ROM char *)"<input type=\"text\" name=\"%HS\" value=\"%s\" ",
01694 pu8Name, pu8Val);
01695
01696 len+=sprintf(&pu8Dest[len],
01697 (ROM char *)"size=\"%hhu\" maxlength=\"%hhu\" />",
01698 u8Size, u8Size);
01699
01700 return len;
01701 }
01702
01703
01704
01705
01706 static BYTE _u8Radio(auto BYTE * pu8Name, auto DWORD u32Val, auto BOOL bSel, auto BYTE * pu8Dest)
01707 {
01708 auto BYTE len=sprintf(pu8Dest,
01709 (ROM char *)"<input type=\"radio\" name=\"%s\" value=\"%lu\"",
01710 pu8Name, u32Val);
01711
01712 if (bSel==TRUE)
01713 {
01714 strcpypgm2ram(&pu8Dest[len], (ROM char *)" checked=\"checked\"");
01715 len+=18;
01716 }
01717
01718 strcpypgm2ram(&pu8Dest[len], (ROM char *)" />");
01719 return (len+3);
01720 }
01721
01722
01723 #endif // #ifdef _SRCP
01724