Arkadaşlar merhaba , lpc2368 ethernetle ilgili araştırma yapıyorum ,bulduğum bilgileri ve takıldığım noktaları sizinle paylaşmak istedim. (Barış Samancı Arkadaşımızın yaptığı çalışmaya göre çok daha basit bir örnek.) ('http://www.keil.com/download/docs/295.asp') Sayfasından örneği indirdim ve lpc2368+dp83848 bir pcb üzerinde test ettim, vede çalıştı.
Aşağıda web sayfasına bir progress bar var , genişliği ölçtüğü ADC'den alıyor (benim çalıştığım mcb200 olmadığından adc değeri gönderemiyorum.)
<table bgcolor="#ff0000" border="5" cellpadding="0" cellspacing="0" width="500">
<tr>
<td>
<table width="AD7%" border="0" cellpadding="0" cellspacing="0">
<tr><td bgcolor="#00ff00"> </td></tr>
</table>
</td>
</tr>
</table>
web sayfasına veri gönderme aşağıda ;web sayfasında AD7 değişkenine veri gönderiyor.
void InsertDynamicValues(void)
{
unsigned char *Key;
char NewKey[5];
unsigned int i;
if (TCPTxDataCount < 4) return; // there can't be any special string
Key = TCP_TX_BUF;
for (i = 0; i < (TCPTxDataCount - 3); i++)
{
if (*Key == 'A')
if (*(Key + 1) == 'D')
if (*(Key + 3) == '%')
switch (*(Key + 2))
{
case '7' : // "AD7%"?
{
sprintf(NewKey, "%3u", GetAD7Val()); // insert AD converter value
memcpy(Key, NewKey, 3); // channel 7 (P6.7)
break;
}
case 'A' : // "ADA%"?
{
sprintf(NewKey, "%3u", GetTempVal()); // insert AD converter value
memcpy(Key, NewKey, 3); // channel 10 (temp.-diode)
break;
}
}
Key++;
}
}
Takıldığım nokta ; diyelim web sayfasında bir textbox ve buton var. Web sayfasındaki textbox'taki verileri işlemciyle nasıl okurum. Veya butona basılıp basılmadığını nasıl kontrol ederim. Yardımlarınız için şimdiden teşekkür ederim.
Bunu html ile yapamazsınız. Meselan bir check box ın durumunu değiştirmek vesayre tarzı işlemler için javascript gibi diller kullanmalısınız. Mesela o check box a da tıklandığında devre üzerindeki ledleri yakmak istiyosanız bunun için de CGI gibi script diller kullanmalısınız
Yani veri göndermek kolay ama okumak biraz daha zor.
Aslında sadece HTML ile de yapmak mümkün..
HTML kodunuz da textbox vs. leri bir form nesnesi üzerine yerleştirin. Form etiketinde GET veya POST şeklinde methodu belirleyin.
Adı submit olan bir button da ekleyin..
Butona tıkladığınızda form içeriği post veya get stringinde gönderilecek..
Örneğin ..../index.htm?led1=1&text1=yaksöndür gibi..
mcu da yapmanız gereken gelen stringi çözüp uygun işlemi yapmak..
Teknik olarak bakarsak bu konuda olduğu şekilde, PC de-WEB sunucuda NULL porta bir program yardımıyla oluşturduğunuz stringleri basarak HTML sayfalarını oluşturursanız bir CGI.exe yapmış olursunuz. Zamanında server side scripting dilleri bu kadar çeşitli ve güçlü değilken çok kullanılırdı.
İlk önce yanıt olarak teşekkürler ama , şu an itibariyle seviyem söylediğiniz teknikleri kod çeviremiyeğim doğrultusunda yinede teşekkür ederim.
Arkadaşlar merhaba,basit bir örnek verebilecek yokmu,webte bir butona basilsin kitte bir led yakmak istiyorum.
Yardimlariniz için şimdiden teşekkür ederim.
Biraz html kodlama, biraz ip networking frame fromatları, bi de wireshirk ile paket analizi ile işler güzel gider..
Keil in RL-ARM indirip kurunuz. Bu Realtime kütüphanesini(TCPnet) inceleyiniz. Gelen örneklerde bendeki Keil MCB1700 deneme kartıma hazırlanmış örnekler de var. Kart üzerindeki ledleri vs. kontrol edebiliyorsunuz.
Merhaba ; haydarpasamikro arkadaşımızın dediklerini yaptrım mcb2300 kiti için yapılmış http_demo örneği var , lakin derlerken hata veriyor uğraştım çözülmedi hata aşağıda.
FCARM.exe ile web sayfalarını web.c dosyasını dönüştürüyorum.
Build target 'MCB2300'
custom translating Web.inp...
Custom: FCARM.exe index.htm, keil.gif, nxp_logo.gif,llblue.jpg,pabb.gif,home.png,network.cgi,leds.cgi,tcp.cgi,system.cgi,lcd.cgi,language.cgi,ad.cgi Web.c nopr
compiling HTTP_demo.c...
compiling HTTP_CGI.c...
compiling WEB.C...
Web\WEB.C(1133): error: #29: expected an expression
Web\WEB.C(1133): error: #67: expected a "}"
Web\WEB.C(1579): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1579): error: #146: too many initializer values
Web\WEB.C(1580): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1580): error: #146: too many initializer values
Web\WEB.C(1581): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1581): error: #146: too many initializer values
Web\WEB.C(1582): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1582): error: #146: too many initializer values
Web\WEB.C(1583): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1583): error: #146: too many initializer values
Web\WEB.C(1584): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1584): error: #146: too many initializer values
Web\WEB.C(1585): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1585): error: #146: too many initializer values
Web\WEB.C(1586): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1586): error: #146: too many initializer values
Web\WEB.C(1587): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1587): error: #146: too many initializer values
Web\WEB.C(1588): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1588): error: #146: too many initializer values
Web\WEB.C(1589): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1589): error: #146: too many initializer values
Web\WEB.C(1597): error: #40: expected an identifier
Web\WEB.C(1597): error: At end of source: #65: expected a ";"
Web\WEB.C(19): warning: #177-D: variable "Web" was declared but never referenced
compiling Net_Config.c...
assembling LPC2300.s...
compiling LPC23_EMAC.c...
compiling LCD.c...
Target not created
Kod aşağıda
/*---------------------------------------------------------------------------*/
const U8 network_cgi[] = {
"#=====================================================================================\r\n"
"# ----- This is a TcpNet Script file which runs on TcpNet -------\r\n"
"# It generates a dynamic page to edit/change IP address, Net mask and Default"
" Gateway\r\n"
"#=====================================================================================\r\n"
"t <body text=#000000 BGCOLOR=#ccddff LINK=#0000FF VLINK=#0000FF ALINK=#FF0000>\r\n"
"t <br><H2 ALIGN=CENTER>Network Settings</H2>\r\n"
"t <FORM ACTION=oprresult.cgi METHOD=GET NAME=CGI>\r\n"
"t <TABLE ALIGN=\"CENTER\" BORDER=0 WIDTH=60%><TR BGCOLOR=#aaccff>\r\n"
"t <TH WIDTH=40%>Item</TH><TH WIDTH=60%>Setting</TH></TR>\r\n"
"# Here begin data setting which is formatted in HTTP_CGI.C module\r\n"
"t <TR><TD>Device Name</TD>\r\n"
"c n n <TD><INPUT NAME=dname SIZE=16 MAXLENGTH=16 VALUE=\"%s\"></TD></TR>\r\n"
"t <TR><TD>LAN IP Address</TD>\r\n"
"c n i <TD><INPUT TYPE=TEXT NAME=ip VALUE=\"%d.%d.%d.%d\" SIZE=18 MAXLENGTH=18></TD></TR>\r\n"
"t <TR><TD>LAN Net Mask</TD>\r\n"
"c n m <TD><INPUT TYPE=TEXT NAME=msk VALUE=\"%d.%d.%d.%d\" SIZE=18 MAXLENGTH=18></TD></TR>\r\n"
"t <TR><TD>Default Gateway</TD>\r\n"
"c n g <TD><INPUT TYPE=TEXT NAME=gw VALUE=\"%d.%d.%d.%d\" SIZE=18 MAXLENGTH=18></TD></TR>\r\n"
"t <TR><TD>Primary DNS Server</TD>\r\n"
"c n p <TD><INPUT TYPE=TEXT NAME=pdns VALUE=\"%d.%d.%d.%d\" SIZE=18 MAXLENGTH=18></TD></TR>\r\n"
"t <TR><TD>Secondary DNS Server</TD>\r\n"
"c n s <TD><INPUT TYPE=TEXT NAME=sdns VALUE=\"%d.%d.%d.%d\" SIZE=18 MAXLENGTH=18></TD></TR>\r\n"
"# t <TR><TD>Remote IP Address(only for slaves)</TD>\r\n"
"# c n 2 <TD><INPUT TYPE=TEXT NAME=remip VALUE=\"%d.%d.%d.%d\" SIZE=18 MAXLENGTH=18></TD></TR>\r\n"
"t <TR><TD>Listen Port Number</TD>\r\n"
"c n 1 <TD><INPUT TYPE=TEXT NAME=tcpport VALUE=\"%d\" SIZE=5 MAXLENGTH=5></TD></TR>\r\n"
"t <TR><TD align=center colspan=2><br><br><br>\r\n"
"# Here begin button definitions\r\n"
"t <INPUT TYPE=SUBMIT NAME=set VALUE=\"Change\" id=\"sbm\">\r\n"
"t <INPUT TYPE=RESET VALUE=\"Undo\">\r\n"
"t </TD></TR></FORM></BODY></HTML>\r\n"
".\r\n"
};
/*---------------------------------------------------------------------------*/
const U8 system_cgi[] = {
"#=====================================================================================\r\n"
"# ----- This is a TcpNet Script file which runs on TcpNet -------\r\n"
"# It generates a dynamic page to edit/change System Password.\r\n"
"#=====================================================================================\r\n"
"t <body text=#000000 BGCOLOR=#ccddff LINK=#0000FF VLINK=#0000FF ALINK=#FF0000>\r\n"
"t <br><H2 ALIGN=CENTER>System Password</H2>\r\n"
"t <FORM ACTION=oprresult.cgi METHOD=POST NAME=CGI>\r\n"
"t <TABLE ALIGN=\"CENTER\" BORDER=0 WIDTH=60%><TR BGCOLOR=#aaccff>\r\n"
"t <TH WIDTH=40%>Item</TH><TH WIDTH=60%>Setting</TH></TR>\r\n"
"# Here begin data setting which is formatted in HTTP_CGI.C module\r\n"
"t <TR><TD>User :</TD>\r\n"
"t <TD>admin</TD></TR>\r\n"
"t <TR><TD>Password :</TD>\r\n"
"c d 2 <TD><INPUT TYPE=PASSWORD NAME=pw SIZE=10 MAXLENGTH=10 VALUE=\"%s\"></TD></TR>\r\n"
"t <TR><TD>Retype your password :</TD>\r\n"
"c d 2 <TD><INPUT TYPE=PASSWORD NAME=pw2 SIZE=10 MAXLENGTH=10 VALUE=\"%s\"></TD></TR>\r\n"
"t <TR><TD align=center colspan=2><br><br><br>\r\n"
"# Here begin button definitions\r\n"
"t <INPUT TYPE=SUBMIT NAME=set VALUE=\"Change\" id=\"sbm\">\r\n"
"t <INPUT TYPE=RESET VALUE=\"Undo\">\r\n"
"t </TD></TR></FORM></BODY></HTML>\r\n"
".\r\n"
};
/*---------------------------------------------------------------------------*/
const U8 MACSetup_cgi[] = {
"#=====================================================================================\r\n"
"# ----- This is a TcpNet Script file which runs on TcpNet -------\r\n"
"# It generates a dynamic page to change MAC Address\r\n"
"#=====================================================================================\r\n"
"t <body text=#000000 BGCOLOR=#ccddff LINK=#0000FF VLINK=#0000FF ALINK=#FF0000>\r\n"
"t <br><H2 ALIGN=CENTER>MAC Address Configuration</H2>\r\n"
"t <FORM ACTION=oprresult.cgi METHOD=GET NAME=CGI>\r\n"
"t <TABLE ALIGN=\"CENTER\" BORDER=0 WIDTH=60%><TR BGCOLOR=#aaccff>\r\n"
"t <TH WIDTH=40%>Item</TH><TH WIDTH=60%>Setting</TH></TR>\r\n"
"# Here begin data setting which is formatted in HTTP_CGI.C module\r\n"
"t <TR><TD>MAC Address</TD>\r\n"
"c m 1 <TD><INPUT NAME=mac SIZE=12 MAXLENGTH=12 VALUE=\"%.2X%.2X%.2X%.2X%.2X%.2X\"></TD></TR>\r\n"
"t <TR><TD align=center colspan=2><br><br><br>\r\n"
"# Here begin button definitions\r\n"
"t <INPUT TYPE=SUBMIT NAME=set VALUE=\"Change\" id=\"sbm\">\r\n"
"t <INPUT TYPE=RESET VALUE=\"Undo\">\r\n"
"t </TD></TR></FORM></BODY></HTML>\r\n"
".\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
};
/*---------------------------------------------------------------------------*/
const U8 app_cgi[] = {
"t <body text=#000000 BGCOLOR=#ccddff LINK=#0000FF VLINK=#0000FF ALINK=#FF0000>\r\n"
"t <br><H2 ALIGN=CENTER>Application Settings</H2>\r\n"
"t <FORM ACTION=oprresult.cgi METHOD=POST NAME=CGI>\r\n"
"t <TABLE ALIGN=\"CENTER\" BORDER=0 WIDTH=60%><TR BGCOLOR=#aaccff>\r\n"
"t <TH WIDTH=40%>Item</TH><TH WIDTH=60%>Setting</TH></TR>\r\n"
"# Here begin data setting which is formatted in HTTP_CGI.C module\r\n"
"t <TR><TD>Device No</TD>\r\n"
"c a 1 <TD><INPUT NAME=dn SIZE=3 MAXLENGTH=3 VALUE=\"%d\"></TD></TR>\r\n"
"t <TR><TD> </TD><TD> </TD></TR>\r\n"
"t <TR><TD>Operation Mode</TD>\r\n"
"c a 2 1 <TD><table width=\"300%\" border=\"2\"><TR><TD><INPUT type=radio %s NAME=om"
" VALUE=\"153\">Normal</TD>\r\n"
"c a 2 2 <TD><INPUT type=radio %s NAME=om VALUE=\"136\">Read ID</TD></TR>\r\n"
"c a 2 3 <TR><TD><INPUT type=radio %s NAME=om VALUE=\"85\">ID(ASCII)</TD>\r\n"
"c a 2 4 <TD><INPUT type=radio %s NAME=om VALUE=\"119\">Read Block</TD></TR>\r\n"
"c a 2 5 <TR><TD><INPUT type=radio %s NAME=om VALUE=\"68\">BLOCK(ASCII)</TD>\r\n"
"c a 2 6 <TD><INPUT type=radio %s NAME=om VALUE=\"102\">Read Sector</TD></TR> </table></TD></TR>\r\n"
"t <TR><TD>MasterKey Type No</TD>\r\n"
"c a 3 <TD><INPUT NAME=kn SIZE=3 MAXLENGTH=3 VALUE=\"%d\"></TD></TR>\r\n"
"t <TR><TD>Block No</TD>\r\n"
"c a 4 <TD><INPUT NAME=bn SIZE=3 MAXLENGTH=3 VALUE=\"%d\"></TD></TR>\r\n"
"t <TR><TD>Sector No</TD>\r\n"
"c a 5 <TD><INPUT NAME=sn SIZE=3 MAXLENGTH=3 VALUE=\"%d\"></TD></TR>\r\n"
"t <TR><TD>Default Beep Time</TD>\r\n"
"c a 6 <TD><INPUT NAME=bt SIZE=3 MAXLENGTH=3 VALUE=\"%d\"></TD></TR>\r\n"
"t <TR><TD>Default Output Time</TD>\r\n"
"c a 7 <TD><INPUT NAME=rt SIZE=3 MAXLENGTH=3 VALUE=\"%d\" sec></TD></TR>\r\n"
"t <TR><TD> </TD></TR>\r\n"
"t <TR><TD> Inverted Output</TD><TD>\r\n"
"c a g <INPUT type=radio %s NAME=outinv VALUE=\"1\">Enable<INPUT type=radio %s"
" NAME=outinv VALUE=\"0\">Disable\r\n"
"t </TD></TR><TR><TD> White List Engine</TD><TD>\r\n"
"c a i <INPUT type=radio %s NAME=wlsten VALUE=\"1\">Enable<INPUT type=radio %s"
" NAME=wlsten VALUE=\"0\">Disable\r\n"
"t </TD></TR><TR><TD> </TD></TR>\r\n"
"t <TR><TD>UDP Log</TD><TD>\r\n"
"c a 8 <INPUT type=radio %s NAME=udplog VALUE=\"1\">Enable<INPUT type=radio %s"
" NAME=udplog VALUE=\"0\">Disable\r\n"
"t </TD></TR><TR><TD>Remote IP Address</TD>\r\n"
"c a a <TD><INPUT TYPE=TEXT NAME=udpip VALUE=\"%d.%d.%d.%d\" SIZE=18 MAXLENGTH=18></TD></TR>\r\n"
"t <TR><TD>Remote Port</TD>\r\n"
"c a b <TD><INPUT NAME=urp SIZE=5 MAXLENGTH=5 VALUE=\"%d\"></TD></TR>\r\n"
"# t <TR><TD>Local Port</TD>\r\n"
"# c a c <TD><INPUT NAME=ulp SIZE=5 MAXLENGTH=5 VALUE=\"%d\"></TD></TR>\r\n"
"t <TR><TD align=center colspan=2><br><br><br>\r\n"
"# Here begin button definitions\r\n"
"t <INPUT TYPE=SUBMIT NAME=set VALUE=\"Change\" id=\"sbm\">\r\n"
"t <INPUT TYPE=RESET VALUE=\"Undo\">\r\n"
"t </TD></TR></FORM></BODY></HTML>\r\n"
".\r\n"
};
/*---------------------------------------------------------------------------*/
const U8 frmupdate_cgi[] = {
"t <body text=#000000 BGCOLOR=#ccddff LINK=#0000FF VLINK=#0000FF ALINK=#FF0000>\r\n"
"t <br><H2 ALIGN=CENTER>Firmware Update</H2>\r\n"
"t <form action=oprresult.cgi method=POST enctype=\"multipart/form-data\" name=frmupdate>\r\n"
"t <p align=\"center\"><br><br><br>File to upload:\r\n"
"t <input name=\"File\" type=\"file\" size=\"100\" maxlength=\"1000\">\r\n"
"t </p><p align=\"center\"><br><br>\r\n"
"t <input type=button value=\"Send\" OnClick=\"this.form.submit()\">\r\n"
"t </p>\r\n"
".\r\n"
};
/*---------------------------------------------------------------------------*/
const U8 devoprs_htm[] = {
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\r\n"
"<body text=#000000 BGCOLOR=#ccddff LINK=#0000FF VLINK=#0000FF ALINK=#FF0000>\r\n"
"<br><H2 ALIGN=CENTER>Extra Device Operations</H2>\r\n"
"<FORM ACTION=oprresult.cgi METHOD=POST>\r\n"
"<p align=\"CENTER\"><input type=\"submit\" value=\"Set Factory Defaults\" name=\"sfdbtn\"><br>\r\n"
"<b>Set factory defaults operation lasts about 2 minutes</b><br><br><br><br>\r\n"
"<input type=\"submit\" value=\"Reboot Device\" name=\"rstbtn\"><br>\r\n"
"<b>After the operation, the device will be rebooted automatically. Please reconnect.</b></p>\r\n"
"</FORM></BODY>"
};
/*---------------------------------------------------------------------------*/
const U8 oprresult_cgi[] = {
"t <body text=#000000 BGCOLOR=#ccddff LINK=#0000FF VLINK=#0000FF ALINK=#FF0000>\r\n"
"t <br><H2 ALIGN=CENTER>Result Page</H2><br><br><br>\r\n"
"c r 1 <p align=\"center\"><font size=\"5\" color=\"#FF0000\">%s</font></p>\r\n"
".\r\n"
};
/*---------------------------------------------------------------------------*/
const U8 main_htm[] = {
"<body text=#000000 BGCOLOR=#ccddff><br><br><H2 ALIGN=CENTER>Welcome to RDR12ME</H2></body>\r\n"
};
/*---------------------------------------------------------------------------*/
const U8 menu_cgi[] = {
"t <body background=\"llblue.jpg\" style=\"background-repeat: repeat-y;\">\r\n"
"t <h2 align=\"center\"><font face=\"verdana\" color=\"#006699\">RDR12ME</font></h2><br><br>\r\n"
"t <p align=\"center\"><font face=\"Verdana\" size=3><b>\r\n"
"t <a href=\"/network.cgi\" target=\"main\">Network Settings</a><br><br>\r\n"
"t <a href=\"/system.cgi\" target=\"main\">System Password</a><br><br>\r\n"
"t <a href=\"/app.cgi\" target=\"main\">Application Settings</a><br><br>\r\n"
"#t <a href=\"/currinfo.cgi\" target=\"main\">Current Info</a><br><br>\r\n"
"t <a href=\"/devoprs.htm\" target=\"main\">Extra Device Operations</a><br><br>\r\n"
"t <a href=\"/frmupdate.cgi\" target=\"main\">Firmware Update</a></b></font></p><br><br><br><br>\r\n"
"t <p align=\"center\"><font face=\"Verdana\" size=2>\r\n"
"t <a href=\"http://www.idanddc.com/\" target=\"main\">www.idanddc.com</a><br><br><br><br><br><br>\r\n"
"c a d <B>FW Version :%s</B></font></p></body>\r\n"
"# This is end of script. It must be closed with period.\r\n"
".\r\n"
};
/*---------------------------------------------------------------------------*/
const struct http_file FileTab[FILECNT] = {
{ "index.htm", (U8 *)&index_htm, 252 },
{ "llblue.jpg", (U8 *)&llblue_jpg, 3008 },
{ "network.cgi", (U8 *)&network_cgi, 1878 },
{ "system.cgi", (U8 *)&system_cgi, 1161 },
{ "MACSetup.cgi", (U8 *)&MACSetup_cgi, 1013 },
{ "app.cgi", (U8 *)&app_cgi, 2567 },
{ "frmupdate.cgi", (U8 *)&frmupdate_cgi, 436 },
{ "devoprs.htm", (U8 *)&devoprs_htm, 570 },
{ "oprresult.cgi", (U8 *)&oprresult_cgi, 206 },
{ "main.htm", (U8 *)&main_htm, 92 },
{ "menu.cgi", (U8 *)&menu_cgi, 904 },
};
/*----------------------------------------------------------------------------
* end of file
*---------------------------------------------------------------------------*/
*---------------------------------------------------------------------------*/
u32 tip dönüşümü yapılmış. yani unsigned int tipi u32 olarak bir yerde (type.h) tanımlanmış. Onu dahil etmek lazım.
Ekli dostum.
/*----------------------------------------------------------------------------
* RL-ARM - A P I
*----------------------------------------------------------------------------
* Name: RTL.H
* Purpose: Application Programming Interface.
* Rev.: V4.21
*----------------------------------------------------------------------------
* This code is part of the RealView Run-Time Library.
* Copyright (c) 2004-2011 KEIL - An ARM Company. All rights reserved.
*---------------------------------------------------------------------------*/
#ifndef __RTL_H__
#define __RTL_H__
/* RL-ARM version number. */
#define __RL_ARM_VER 421
#define __task __declspec(noreturn)
#define __used __attribute__((used))
#ifndef NULL
#ifdef __cplusplus // EC++
#define NULL 0
#else
#define NULL ((void *) 0)
#endif
#endif
#ifndef EOF
#define EOF -1
#endif
#ifndef __size_t
#define __size_t 1
typedef unsigned int size_t;
#endif
typedef signed char S8;
typedef unsigned char U8;
typedef short S16;
typedef unsigned short U16;
typedef int S32;
typedef unsigned int U32;
typedef long long S64;
typedef unsigned long long U64;
typedef unsigned char BIT;
typedef unsigned int BOOL;
#ifndef __TRUE
#define __TRUE 1
#endif
#ifndef __FALSE
#define __FALSE 0
#endif
#ifdef __BIG_ENDIAN
#define U32_LE(v) (U32)(__rev(v))
#define U16_LE(v) (U16)(__rev(v) >> 16)
#define U32_BE(v) (U32)(v)
#define U16_BE(v) (U16)(v)
#else
#define U32_BE(v) (U32)(__rev(v))
#define U16_BE(v) (U16)(__rev(v) >> 16)
#define U32_LE(v) (U32)(v)
#define U16_LE(v) (U16)(v)
#endif
#define ntohs(v) U16_BE(v)
#define ntohl(v) U32_BE(v)
#define htons(v) ntohs(v)
#define htonl(v) ntohl(v)
/*----------------------------------------------------------------------------
* RTX Kernel API
*---------------------------------------------------------------------------*/
#ifdef __cplusplus // EC++
extern "C" {
#endif
/* Definition of Semaphore type */
typedef U32 OS_SEM[2];
/* Definition of Mailbox type */
#define os_mbx_declare(name,cnt) U32 name [4 + cnt]
typedef U32 OS_MBX[];
/* Definition of Mutex type */
typedef U32 OS_MUT[3];
/* Task Identification number. */
typedef U32 OS_TID;
/* Function return of system calls returning an object identification */
typedef void *OS_ID;
/* Function return of system calls indicating an event or completion state */
typedef U32 OS_RESULT;
/* Return codes */
#define OS_R_TMO 0x01
#define OS_R_EVT 0x02
#define OS_R_SEM 0x03
#define OS_R_MBX 0x04
#define OS_R_MUT 0x05
#define OS_R_OK 0x00
#define OS_R_NOK 0xff
#define OS_TCB_SIZE 48
#define OS_TMR_SIZE 8
/* Error Codes */
#define OS_ERR_STK_OVF 1
#define OS_ERR_FIFO_OVF 2
#define OS_ERR_MBX_OVF 3
#if !(__TARGET_ARCH_6S_M || __TARGET_ARCH_7_M || __TARGET_ARCH_7E_M)
/*----------------------------------------------------------------------------
* Functions ARM
*---------------------------------------------------------------------------*/
/* Task Management */
#define os_sys_init(tsk) os_sys_init0(tsk,0,NULL)
#define os_sys_init_prio(tsk,prio) os_sys_init0(tsk,prio,NULL)
#define os_sys_init_user(tsk,prio,stk,size) \
os_sys_init0(tsk,prio|(size<<8),stk)
#define os_tsk_create(tsk,prio) os_tsk_create0(tsk,prio,NULL,NULL)
#define os_tsk_create_user(tsk,prio,stk,size) \
os_tsk_create0(tsk,prio|(size<<8),stk,NULL)
#define os_tsk_create_ex(tsk,prio,argv) os_tsk_create_ex0(tsk,prio,NULL,argv)
#define os_tsk_create_user_ex(tsk,prio,stk,size,argv) \
os_tsk_create_ex0(tsk,prio|(size<<8),stk,argv)
#define os_tsk_delete_self() os_tsk_delete(0)
#define os_tsk_prio_self(prio) os_tsk_prio(0,prio)
#define isr_tsk_get() os_tsk_self()
extern void os_sys_init0 (void (*task)(void), U32 prio_stksz, void *stk);
extern OS_TID os_tsk_create0 (void (*task)(void), U32 prio_stksz,
void *stk, void *argv);
extern OS_TID os_tsk_create_ex0 (void (*task)(void *), U32 prio_stksz,
void *stk, void *argv);
extern OS_TID os_tsk_self (void);
extern void os_tsk_pass (void);
extern OS_RESULT os_tsk_prio (OS_TID task_id, U8 new_prio);
extern OS_RESULT os_tsk_delete (OS_TID task_id);
/* Event flag Management */
#define os_evt_wait_or(wflags,tmo) os_evt_wait(wflags,tmo,__FALSE)
#define os_evt_wait_and(wflags,tmo) os_evt_wait(wflags,tmo,__TRUE)
extern OS_RESULT os_evt_wait (U16 wait_flags, U16 timeout, BOOL and_wait);
extern void os_evt_set (U16 event_flags, OS_TID task_id);
extern void os_evt_clr (U16 clear_flags, OS_TID task_id);
extern void isr_evt_set (U16 event_flags, OS_TID task_id);
extern U16 os_evt_get (void);
/* Semaphore Management */
extern void os_sem_init (OS_ID semaphore, U16 token_count);
extern OS_RESULT os_sem_send (OS_ID semaphore);
extern OS_RESULT os_sem_wait (OS_ID semaphore, U16 timeout);
extern void isr_sem_send (OS_ID semaphore);
/* Mailbox Management */
#define isr_mbx_check(mbx) os_mbx_check(mbx)
extern void os_mbx_init (OS_ID mailbox, U16 mbx_size);
extern OS_RESULT os_mbx_send (OS_ID mailbox, void *message_ptr, U16 timeout);
extern OS_RESULT os_mbx_wait (OS_ID mailbox, void **message, U16 timeout);
extern OS_RESULT os_mbx_check (OS_ID mailbox);
extern void isr_mbx_send (OS_ID mailbox, void *message_ptr);
extern OS_RESULT isr_mbx_receive (OS_ID mailbox, void **message);
/* Mutex Management */
extern void os_mut_init (OS_ID mutex);
extern OS_RESULT os_mut_release (OS_ID mutex);
extern OS_RESULT os_mut_wait (OS_ID mutex, U16 timeout);
/* Time Management */
extern void os_dly_wait (U16 delay_time);
extern void os_itv_set (U16 interval_time);
extern void os_itv_wait (void);
/* User Timer Management */
extern OS_ID os_tmr_create (U16 tcnt, U16 info);
extern OS_ID os_tmr_kill (OS_ID timer);
/* System Functions */
extern void tsk_lock (void) __swi (5);
extern void tsk_unlock (void);
/* Fixed Memory Block Management Functions */
extern int _init_box (void *box_mem, U32 box_size, U32 blk_size);
extern void *_alloc_box (void *box_mem) __swi (1);
extern void *_calloc_box (void *box_mem);
extern int _free_box (void *box_mem, void *box) __swi (2);
#else
/*----------------------------------------------------------------------------
* Functions Cortex-M
*---------------------------------------------------------------------------*/
#define __SVC_0 __svc_indirect(0)
/* Task Management */
extern void os_set_env (void);
extern void rt_sys_init (void (*task)(void), U8 priority, void *stk);
extern void rt_tsk_pass (void);
extern OS_TID rt_tsk_self (void);
extern OS_RESULT rt_tsk_prio (OS_TID task_id, U8 new_prio);
extern OS_TID rt_tsk_create (void (*task)(void), U8 priority, void *stk, void *argv);
extern OS_RESULT rt_tsk_delete (OS_TID task_id);
#define os_sys_init(tsk) os_set_env(); \
_os_sys_init((U32)rt_sys_init,tsk,0,NULL)
#define os_sys_init_user(tsk,prio,stk,size) \
os_set_env(); \
_os_sys_init((U32)rt_sys_init,tsk,prio|(size<<8),stk)
#define os_sys_init_prio(tsk,prio) os_set_env(); \
_os_sys_init((U32)rt_sys_init,tsk,prio,NULL)
#define os_tsk_create(tsk,prio) _os_tsk_create((U32)rt_tsk_create,tsk,prio,NULL,NULL)
#define os_tsk_create_user(tsk,prio,stk,size) \
_os_tsk_create((U32)rt_tsk_create,tsk,prio|(size<<8),stk,NULL)
#define os_tsk_create_ex(tsk,prio,argv) _os_tsk_create_ex((U32)rt_tsk_create,tsk,prio,NULL,argv)
#define os_tsk_create_user_ex(tsk,prio,stk,size,argv) \
_os_tsk_create_ex((U32)rt_tsk_create,tsk,prio|(size<<8),stk,argv)
#define os_tsk_self() _os_tsk_self((U32)rt_tsk_self)
#define os_tsk_pass() _os_tsk_pass((U32)rt_tsk_pass)
#define os_tsk_prio(task_id,new_prio) _os_tsk_prio((U32)rt_tsk_prio,task_id,new_prio)
#define os_tsk_prio_self(prio) _os_tsk_prio((U32)rt_tsk_prio,0,prio)
#define os_tsk_delete(task_id) _os_tsk_delete((U32)rt_tsk_delete,task_id)
#define os_tsk_delete_self() _os_tsk_delete((U32)rt_tsk_delete, 0)
#define isr_tsk_get() rt_tsk_self()
extern void _os_sys_init(U32 p, void (*task)(void), U32 prio_stksz,
void *stk) __SVC_0;
extern OS_TID _os_tsk_create (U32 p, void (*task)(void), U32 prio_stksz,
void *stk, void *argv) __SVC_0;
extern OS_TID _os_tsk_create_ex (U32 p, void (*task)(void *), U32 prio_stksz,
void *stk, void *argv) __SVC_0;
extern OS_TID _os_tsk_self (U32 p) __SVC_0;
extern void _os_tsk_pass (U32 p) __SVC_0;
extern OS_RESULT _os_tsk_prio (U32 p, OS_TID task_id, U8 new_prio) __SVC_0;
extern OS_RESULT _os_tsk_delete (U32 p, OS_TID task_id) __SVC_0;
/* Event flag Management */
extern OS_RESULT rt_evt_wait (U16 wait_flags, U16 timeout, BOOL and_wait);
extern void rt_evt_set (U16 event_flags, OS_TID task_id);
extern void rt_evt_clr (U16 clear_flags, OS_TID task_id);
extern U16 rt_evt_get (void);
#define os_evt_wait_or(wflags,tmo) _os_evt_wait((U32)rt_evt_wait,wflags,tmo,__FALSE)
#define os_evt_wait_and(wflags,tmo) _os_evt_wait((U32)rt_evt_wait,wflags,tmo,__TRUE)
#define os_evt_set(evt_flags,task_id) _os_evt_set((U32)rt_evt_set,evt_flags,task_id)
#define os_evt_clr(clr_flags,task_id) _os_evt_clr((U32)rt_evt_clr,clr_flags,task_id)
#define os_evt_get() _os_evt_get((U32)rt_evt_get)
extern OS_RESULT _os_evt_wait(U32 p, U16 wait_flags, U16 timeout,
BOOL and_wait) __SVC_0;
extern void _os_evt_set (U32 p, U16 event_flags, OS_TID task_id) __SVC_0;
extern void _os_evt_clr (U32 p, U16 clear_flags, OS_TID task_id) __SVC_0;
extern U16 _os_evt_get (U32 p) __SVC_0;
extern void isr_evt_set (U16 event_flags, OS_TID task_id);
/* Semaphore Management */
extern void rt_sem_init (OS_ID semaphore, U16 token_count);
extern OS_RESULT rt_sem_send (OS_ID semaphore);
extern OS_RESULT rt_sem_wait (OS_ID semaphore, U16 timeout);
#define os_sem_init(sem,t_count) _os_sem_init((U32)rt_sem_init,sem,t_count)
#define os_sem_send(sem) _os_sem_send((U32)rt_sem_send,sem)
#define os_sem_wait(sem,tmo) _os_sem_wait((U32)rt_sem_wait,sem,tmo)
extern void _os_sem_init (U32 p, OS_ID semaphore,
U16 token_count) __SVC_0;
extern OS_RESULT _os_sem_send (U32 p, OS_ID semaphore) __SVC_0;
extern OS_RESULT _os_sem_wait (U32 p, OS_ID semaphore, U16 timeout) __SVC_0;
extern void isr_sem_send (OS_ID semaphore);
/* Mailbox Management */
extern void rt_mbx_init (OS_ID mailbox, U16 mbx_size);
extern OS_RESULT rt_mbx_send (OS_ID mailbox, void *p_msg, U16 timeout);
extern OS_RESULT rt_mbx_wait (OS_ID mailbox, void **message, U16 timeout);
extern OS_RESULT rt_mbx_check (OS_ID mailbox);
#define os_mbx_init(mbx,mbx_size) _os_mbx_init((U32)rt_mbx_init,mbx,mbx_size)
#define os_mbx_send(mbx,p_msg,tmo) _os_mbx_send((U32)rt_mbx_send,mbx,p_msg,tmo)
#define os_mbx_wait(mbx,message,tmo) _os_mbx_wait((U32)rt_mbx_wait,mbx,message,tmo)
#define os_mbx_check(mbx) _os_mbx_check((U32)rt_mbx_check,mbx)
#define isr_mbx_check(mbx) rt_mbx_check(mbx)
extern void _os_mbx_init (U32 p, OS_ID mailbox, U16 mbx_size) __SVC_0;
extern OS_RESULT _os_mbx_send (U32 p, OS_ID mailbox, void *message_ptr,
U16 timeout) __SVC_0;
extern OS_RESULT _os_mbx_wait (U32 p, OS_ID mailbox, void **message,
U16 timeout) __SVC_0;
extern OS_RESULT _os_mbx_check (U32 p, OS_ID mailbox) __SVC_0;
extern void isr_mbx_send (OS_ID mailbox, void *message_ptr);
extern OS_RESULT isr_mbx_receive (OS_ID mailbox, void **message);
/* Mutex Management */
extern void rt_mut_init (OS_ID mutex);
extern OS_RESULT rt_mut_release (OS_ID mutex);
extern OS_RESULT rt_mut_wait (OS_ID mutex, U16 timeout);
#define os_mut_init(mutex) _os_mut_init((U32)rt_mut_init,mutex)
#define os_mut_release(mutex) _os_mut_release((U32)rt_mut_release,mutex)
#define os_mut_wait(mutex,timeout) _os_mut_wait((U32)rt_mut_wait,mutex,timeout)
extern void _os_mut_init (U32 p, OS_ID mutex) __SVC_0;
extern OS_RESULT _os_mut_release (U32 p, OS_ID mutex) __SVC_0;
extern OS_RESULT _os_mut_wait (U32 p, OS_ID mutex, U16 timeout) __SVC_0;
/* Time Management */
extern void rt_dly_wait (U16 delay_time);
extern void rt_itv_set (U16 interval_time);
extern void rt_itv_wait (void);
#define os_dly_wait(delay_time) _os_dly_wait((U32)rt_dly_wait,delay_time)
#define os_itv_set(interval_time) _os_itv_set((U32)rt_itv_set,interval_time)
#define os_itv_wait() _os_itv_wait((U32)rt_itv_wait)
extern void _os_dly_wait (U32 p, U16 delay_time) __SVC_0;
extern void _os_itv_set (U32 p, U16 interval_time) __SVC_0;
extern void _os_itv_wait (U32 p) __SVC_0;
/* User Timer Management */
extern OS_ID rt_tmr_create (U16 tcnt, U16 info);
extern OS_ID rt_tmr_kill (OS_ID timer);
#define os_tmr_create(tcnt,info) _os_tmr_create((U32)rt_tmr_create,tcnt,info)
#define os_tmr_kill(timer) _os_tmr_kill((U32)rt_tmr_kill,timer)
extern OS_ID _os_tmr_create (U32 p, U16 tcnt, U16 info) __SVC_0;
extern OS_ID _os_tmr_kill (U32 p, OS_ID timer) __SVC_0;
/* System Functions */
extern void rt_tsk_lock (void);
extern void rt_tsk_unlock (void);
#define tsk_lock() _os_tsk_lock((U32)rt_tsk_lock)
#define tsk_unlock() _os_tsk_unlock((U32)rt_tsk_unlock)
extern void _os_tsk_lock (U32 p) __SVC_0;
extern void _os_tsk_unlock (U32 p) __SVC_0;
/* Fixed Memory Block Management Functions */
extern int _init_box (void *box_mem, U32 box_size, U32 blk_size);
extern void *_alloc_box (void *box_mem);
extern void *_calloc_box (void *box_mem);
extern int _free_box (void *box_mem, void *box);
#endif
#define BOX_ALIGN_8 0x80000000
#define _declare_box(pool,size,cnt) U32 pool[(((size)+3)/4)*(cnt) + 3]
#define _declare_box8(pool,size,cnt) U64 pool[(((size)+7)/8)*(cnt) + 2]
#define _init_box8(pool,size,bsize) _init_box (pool,size,bsize | BOX_ALIGN_8)
/* For compatibility with older configurations.*/
#define os_stk_overflow os_error
/*----------------------------------------------------------------------------
* Flash File System API
*---------------------------------------------------------------------------*/
typedef struct { /* RL Time format (FFS, TCPnet) */
U8 hr; /* Hours [0..23] */
U8 min; /* Minutes [0..59] */
U8 sec; /* Seconds [0..59] */
U8 day; /* Day [1..31] */
U8 mon; /* Month [1..12] */
U16 year; /* Year [1980..2107] */
} RL_TIME;
typedef struct { /* Search info record */
S8 name[256]; /* Name */
U32 size; /* File size in bytes */
U16 fileID; /* System Identification */
U8 attrib; /* Attributes */
RL_TIME time; /* Create/Modify Time */
} FINFO;
extern int finit (const char *drive);
extern int funinit (const char *drive);
extern int fdelete (const char *filename);
extern int frename (const char *oldname, const char *newname);
extern int ffind (const char *pattern, FINFO *info);
extern U64 ffree (const char *drive);
extern int fformat (const char *drive);
extern int fanalyse (const char *drive);
extern int fcheck (const char *drive);
extern int fdefrag (const char *drive);
/* The following macros provide for common functions */
#define unlink(fn) fdelete(fn);
/*----------------------------------------------------------------------------
* TCPnet API
*---------------------------------------------------------------------------*/
/* UDP Options */
#define UDP_OPT_SEND_CS 0x01 /* Calculate Checksum for UDP send frames */
#define UDP_OPT_CHK_CS 0x02 /* Verify Checksum for received UDP frames */
/* TCP Socket Types */
#define TCP_TYPE_SERVER 0x01 /* Socket Type Server (open for listening) */
#define TCP_TYPE_CLIENT 0x02 /* Socket Type Client (initiate connect) */
#define TCP_TYPE_DELAY_ACK 0x04 /* Socket Type Delayed Acknowledge */
#define TCP_TYPE_FLOW_CTRL 0x08 /* Socket Type Flow Control */
#define TCP_TYPE_KEEP_ALIVE 0x10 /* Socket Type Keep Alive */
#define TCP_TYPE_CLIENT_SERVER (TCP_TYPE_SERVER | TCP_TYPE_CLIENT)
/* TCP Callback Events */
#define TCP_EVT_CONREQ 0 /* Connect request received event */
#define TCP_EVT_CONNECT 1 /* Connection established event */
#define TCP_EVT_CLOSE 2 /* Connection was properly closed */
#define TCP_EVT_ABORT 3 /* Connection is for some reason aborted */
#define TCP_EVT_ACK 4 /* Previously send data acknowledged */
#define TCP_EVT_DATA 5 /* Data received event */
/* TCP States */
#define TCP_STATE_FREE 0 /* Entry is free and unused */
#define TCP_STATE_CLOSED 1 /* Entry allocated, socket still closed */
#define TCP_STATE_LISTEN 2 /* Socket waiting for incoming connection */
#define TCP_STATE_SYN_REC 3 /* SYN frame received */
#define TCP_STATE_SYN_SENT 4 /* SYN packet sent to establish a connect. */
#define TCP_STATE_FINW1 5 /* Tcp_close started FIN packet was sent */
#define TCP_STATE_FINW2 6 /* Our FIN ack-ed, waiting for remote FIN */
#define TCP_STATE_CLOSING 7 /* Received FIN independently of our FIN */
#define TCP_STATE_LAST_ACK 8 /* Waiting for last ACK for our FIN */
#define TCP_STATE_TWAIT 9 /* Timed waiting for 2MSL */
#define TCP_STATE_CONNECT 10 /* TCP Connection established */
/* BSD Socket Address Family */
#define AF_UNSPEC 0 /* Unspecified */
#define AF_INET 1 /* Internet Address Family (UDP, TCP) */
#define AF_NETBIOS 2 /* NetBios-style addresses */
/* BSD Protocol families, same as address families */
#define PF_UNSPEC AF_UNSPEC
#define PF_INET AF_INET
#define PF_NETBIOS AF_NETBIOS
/* BSD Socket Type */
#define SOCK_STREAM 1 /* Stream Socket (Connection oriented) */
#define SOCK_DGRAM 2 /* Datagram Socket (Connectionless) */
/* BSD Socket Protocol */
#define IPPROTO_TCP 1 /* TCP Protocol */
#define IPPROTO_UDP 2 /* UDP Protocol */
/* BSD Internet Addresses */
#define INADDR_ANY 0x00000000 /* All IP addresses accepted */
#define INADDR_NONE 0xffffffff /* No IP address accepted */
/* BSD Socket Return values */
#define SCK_SUCCESS 0 /* Success */
#define SCK_ERROR (-1) /* General Error */
#define SCK_EINVALID (-2) /* Invalid socket descriptor */
#define SCK_EINVALIDPARA (-3) /* Invalid parameter */
#define SCK_EWOULDBLOCK (-4) /* It would have blocked. */
#define SCK_EMEMNOTAVAIL (-5) /* Not enough memory in memory pool */
#define SCK_ECLOSED (-6) /* Connection is closed or aborted */
#define SCK_ELOCKED (-7) /* Socket is locked in RTX environment */
#define SCK_ETIMEOUT (-8) /* Socket, Host Resolver timeout */
#define SCK_EINPROGRESS (-9) /* Host Name resolving in progress */
#define SCK_ENONAME (-10) /* Host Name not existing */
/* BSD Socket flags parameter */
#define MSG_DONTWAIT 0x01 /* Enables non-blocking operation */
#define MSG_PEEK 0x02 /* Peeks at the incoming data */
/* DNS Callback Events */
#define DNS_EVT_SUCCESS 0 /* Host name successfully resolved */
#define DNS_EVT_NONAME 1 /* DNS Error, no such name */
#define DNS_EVT_TIMEOUT 2 /* Timeout resolving host */
#define DNS_EVT_ERROR 3 /* Erroneous response packet */
/* DNS 'get_host_by_name()' result codes */
#define DNS_RES_OK 0 /* Function finished OK */
#define DNS_ERROR_BUSY 1 /* DNS Client busy, can't process request */
#define DNS_ERROR_LABEL 2 /* Host name Label too long */
#define DNS_ERROR_NAME 3 /* Host name loo long */
#define DNS_ERROR_NOSRV 4 /* Prim. DNS server not specified (0.0.0.0)*/
#define DNS_ERROR_UDPSEND 5 /* UDP Send frame error */
/* SMTP Callback Events */
#define SMTP_EVT_SUCCESS 0 /* Email successfully sent */
#define SMTP_EVT_TIMEOUT 1 /* Timeout sending email */
#define SMTP_EVT_ERROR 2 /* Error when sending email */
/* ARP Cache Entry types */
#define ARP_FIXED_IP 0 /* Fixed IP adrs is refreshed after tout */
#define ARP_TEMP_IP 1 /* Temp adrs is removed after timeout */
/* BSD Socket typedef's */
typedef struct sockaddr { /* << Generic Socket Address structure >> */
U16 sa_family; /* Address family */
char sa_data[14]; /* Direct address (up to 14 bytes) */
} SOCKADDR;
#pragma push
#pragma anon_unions
typedef struct in_addr { /* << Generic IPv4 Address structure >> */
union {
struct {
U8 s_b1,s_b2,s_b3,s_b4; /* IP address, byte access */
};
struct {
U16 s_w1,s_w2; /* IP address, short int access */
};
U32 s_addr; /* IP address in network byte order */
};
} IN_ADDR;
#pragma pop
typedef struct sockaddr_in { /* << IPv4 Socket Address structure >> */
S16 sin_family; /* Socket domain */
U16 sin_port; /* Port */
IN_ADDR sin_addr; /* IP address */
S8 sin_zero[8]; /* reserved */
} SOCKADDR_IN;
typedef struct hostent { /* << BSD Host Entry structure >> */
char *h_name; /* Official name of host */
char **h_aliases; /* Pointer to an array of alias names */
S16 h_addrtype; /* Address Type: AF_INET, AF_NETBIOS */
S16 h_length; /* Length of address in bytes */
char **h_addr_list; /* Pointer to an array of IPv4 addresses */
} HOSTENT;
extern void init_TcpNet (void);
extern void main_TcpNet (void);
extern void timer_tick (void);
extern U8 udp_get_socket (U8 tos, U8 opt,
U16 (*listener)(U8 socket, U8 *remip, U16 port, U8 *buf, U16 len));
extern BOOL udp_release_socket (U8 socket);
extern BOOL udp_open (U8 socket, U16 locport);
extern BOOL udp_close (U8 socket);
extern BOOL udp_mcast_ttl (U8 socket, U8 ttl);
extern U8 *udp_get_buf (U16 size);
extern BOOL udp_send (U8 socket, U8 *remip, U16 remport, U8 *buf, U16 dlen);
extern U8 tcp_get_socket (U8 type, U8 tos, U16 tout,
U16 (*listener)(U8 socket, U8 event, U8 *buf, U16 len));
extern BOOL tcp_release_socket (U8 socket);
extern BOOL tcp_listen (U8 socket, U16 locport);
extern BOOL tcp_connect (U8 socket, U8 *remip, U16 remport, U16 locport);
extern U8 *tcp_get_buf (U16 size);
extern U16 tcp_max_dsize (U8 socket);
extern BOOL tcp_check_send (U8 socket);
extern U8 tcp_get_state (U8 socket);
extern BOOL tcp_send (U8 socket, U8 *buf, U16 dlen);
extern BOOL tcp_close (U8 socket);
extern BOOL tcp_abort (U8 socket);
extern void tcp_reset_window (U8 socket);
extern BOOL arp_cache_ip (U8 *ipadr, U8 type);
extern void ppp_listen (char const *user, char const *passw);
extern void ppp_connect (char const *dialnum, char const *user, char const *passw);
extern void ppp_close (void);
extern BOOL ppp_is_up (void);
extern void slip_listen (void);
extern void slip_connect (char const *dialnum);
extern void slip_close (void);
extern BOOL slip_is_up (void);
extern U8 get_host_by_name (U8 *hostn, void (*cbfunc)(U8 event, U8 *host_ip));
extern BOOL smtp_connect (U8 *ipadr, U16 port, void (*cbfunc)(U8 event));
extern void dhcp_disable (void);
extern BOOL igmp_join (U8 *group_ip);
extern BOOL igmp_leave (U8 *group_ip);
extern BOOL snmp_trap (U8 *manager_ip, U8 gen_trap, U8 spec_trap, U16 *obj_list);
extern BOOL snmp_set_community (const char *community);
/* BSD Socket API */
extern int socket (int family, int type, int protocol);
extern int bind (int sock, const SOCKADDR *addr, int addrlen);
extern int listen (int sock, int backlog);
extern int accept (int sock, SOCKADDR *addr, int *addrlen);
extern int connect (int sock, SOCKADDR *addr, int addrlen);
extern int send (int sock, const char *buf, int len, int flags);
extern int sendto (int sock, const char *buf, int len, int flags, SOCKADDR *to, int tolen);
extern int recv (int sock, char *buf, int len, int flags);
extern int recvfrom (int sock, char *buf, int len, int flags, SOCKADDR *from, int *fromlen);
extern int closesocket (int sock);
extern int getpeername (int sock, SOCKADDR *name, int *namelen);
extern int getsockname (int sock, SOCKADDR *name, int *namelen);
extern HOSTENT *gethostbyname (char *name, int *err);
#ifdef __cplusplus // EC++
}
#endif
/*----------------------------------------------------------------------------
* end of file
*---------------------------------------------------------------------------*/
#endif
Selam , aslında derlerken hata veriyor , web.inp dosyasından FCARM.exe dosyasının derleme hatası veriyor ,nedenini çözemedim hata aşağıda.
Build target 'MCB2300'
custom translating web.inp...
Custom: C:\Keil\ARM\bin\fcarm @Web\Web.inp
FCARM FILE CONVERTER V2.27
*** ERROR F204: INVALID KEYWORD
POS: 241
, xml_http.js, buttons.cgi, ad.cgx, buttons.cgx to Web.c nopr root Web
compiling HTTP_demo.c...
compiling HTTP_CGI.c...
compiling WEB.C...
Web\WEB.C(1396): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1396): error: #146: too many initializer values
Web\WEB.C(1397): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1397): error: #146: too many initializer values
Web\WEB.C(1398): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1398): error: #146: too many initializer values
Web\WEB.C(1399): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1399): error: #146: too many initializer values
Web\WEB.C(1400): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1400): error: #146: too many initializer values
Web\WEB.C(1401): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1401): error: #146: too many initializer values
Web\WEB.C(1402): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1402): error: #146: too many initializer values
Web\WEB.C(1403): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1403): error: #146: too many initializer values
Web\WEB.C(1404): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1404): error: #146: too many initializer values
Web\WEB.C(1405): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1405): error: #146: too many initializer values
Web\WEB.C(1406): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1406): error: #146: too many initializer values
Web\WEB.C(1407): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1407): error: #146: too many initializer values
Web\WEB.C(1408): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1408): error: #146: too many initializer values
Web\WEB.C(1409): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1409): error: #146: too many initializer values
Web\WEB.C(1410): error: #144: a value of type "char *" cannot be used to initialize an entity of type "const U32"
Web\WEB.C(1410): error: #146: too many initializer values
compiling Net_Config.c...
assembling LPC2300.s...
compiling LPC23_EMAC.c...
compiling LCD.c...
Target not created
Fakat başka bir örnek buldun orada hata vermiyor
Build target 'CGI_IN'
compiling main.c...
compiling LCD_4bit.c...
compiling Net_Config.c...
assembling LPC2300.s...
compiling HTTP_CGI.c...
compiling LPC23_EMAC.c...
custom translating web.inp...
Custom: C:\Keil\ARM\bin\fcarm @Web\Web.inp
FCARM FILE CONVERTER V2.27
Completed 8 File(s), Ratio 93%
compiling WEB.C...
linking...
Program Size: Code=23960 RO-data=10724 RW-data=80 ZI-data=21628
"CGI_IN.axf" - 0 Error(s), 0 Warning(s).
Her iki projede web.inp dosyası aşağıdaki şekilde.
C:\Keil\ARM\bin\fcarm @@Web\Web.inp ,
Arkadaşlar merhaba , keil'in sitesinde ethernetle ilgili bir örnek indirdim , kendime göre uyarladım incelemek isterseniz link http://turbobit.net/dxmf4d57adn3.html (http://turbobit.net/dxmf4d57adn3.html) user authentication 'serif' password yok yalnız üstadlara soracağım bir iki soru var.
1- HTML content klasörün altında tickbox.cgi dosyası var iki adet tickbox var biri ARM kitinde ledi diğeri buzzer çalıştırıyor. Var olan cgi dosyasını değiştirdim sıfırdan nasıl oluşturum çünkü html formatında değil satır başlarında harfler var.
#Tickbox control
#this page demonstrates how to build a tickbox group
#
t <html>
t <head>
t <title>Tickbox Control</title>
t </head>
i pg_header.inc
t <body>
#
# the post method is used to trigger the code on line 250 of HTTP_CGI.c
# Problem when all boxes are unchecked the code does not trigger
# Solution add a hidden variable which causes the code to trigger in all conditions
# Use the hidden variable to set a default condition see line 252 of HTTP_CGI.c
#
t <form action=tickbox.cgi method=post name=form1>
t <input type=hidden value="led" name=pg>
t <td><table><tr valign="center">
#
#The user script commands are defined as T for tickbox, 1 for tickgroup 1, 1,2,4,8, for LED's 5-8
#The %S is used to output the 'checked' option when thepage is loaded see lines 348 in HTTP_CGI.c
#
c T11 <input type=checkbox name=TICK1 value=LED5 OnClick="submit();" %s> LED5<br>
c T12 <input type=checkbox name=TICK1 value=LED6 OnClick="submit();" %s> LED6<br>
t </table></form>
t </body>
t </html>
i pg_footer.inc
.
2-HTTP_CGI.c dosyası içerisinde tickbox 'lara bastığımda aşağıda kodlar devreye giriyor.
do {dat = http_get_var (dat, var, 40);
if (var[0] != 0) {
if (str_scomp (var, "TICK1=") == __TRUE || str_scomp (var, "pg=") == __TRUE)
{ IODIR0=0x00200000; IOCLR0=0x00200000;
if (str_scomp (var, "pg=") == __TRUE)
{ LEDupper = LEDupper &0x0F;LEDupdate = __TRUE; }
if(*(var+9) =='5'){LEDupper |= 0x10;}
else if(*(var+9) =='6'){IODIR0=0x00200000;IOSET0=0x00200000;LEDupper |= 0x20;}
}
}
}while (dat);
İlk hataları verme sebebi RL-Arm versiyon uyumsuzluğundandır.
ARM 7 veya sonrası için. İnternet üzerinden bir butona basmak veya başka bir komut ip veya mac değiştirmek gibi durumları yapmak mümkün HTML olur adı veya Web den pek anlamadığım için başka bir dilde yazılmış olsun bunun hiç mi hiç önemi yok. ARM sizin ne gönderdiğinize bakar eğer gönderdiğiniz şeyi doğru göndermişseniz işlemini yapar. Barış Sarmacı nın yayınlarını ben de ilk başladığımda okumuştum fakat şunu belirtmek isterim arm kullananlar için "init=initializing" mantığını kesinlikle kullanmak gerekiyor(kolaylık için). Zira bu sitedeki tüm örnekleri inceleyip gördüğümde farkettiğim şöyle bir durum var; herkes yapmak istediği işin hex kodundaki karşılığı ile çağırmış tavsiyedir kesinlikle yanlış alamayın ukalalık gibi de görmeyin ama bunları biz eğer tanımlarsak yani rtc mi tanımlamalıyız bunu bir c dosyası yapıp sonra içindeki gerekenleri "init" edersek her seferinde hex karşıklarını çağırmak zorunda kalmayız, c ve keil derleyici kullanıyorsak konuşur gibi programımızı yazabiliriz. Anlatmak istediğim lpc2368 kılıf mı aldık önce datasheet imizdeki temel tanımlamaları programınızın definations=tanım koltuğuna oturtmalıyız ki her seferinde aynı teferruatlarla uğraşmayalım. ve led yakmak yerine bir lcd alabilirsek zira çok pahalı değil 32 karakterli olanlar daha verimli çalışıp daha enteresan işler ortaya koyabiliriz. Web sitesinden bilgi gönderip arm da led yakmak isteyen arkadaş tüm kodlarını bağlantı şemalarını gönderebilirse elimden geldiğince yardımcı olmaya çalışırım. Saygılarımla, hepinize iyi çalışmalar...
Yazdıklarınızdan açıkçası hiç bir şey anlamadım. Ben web üzerinden led yakmaya çalışıyordum problemlerle karşılaştım uğraştım daha sonrada çözdüm ve ilgilenen arkadaşlar olur diye kodu paylaştım. Anlamakta zorlandığım yalnızca cgi dosyası formatıydı , bukadar.
Selam armsistem konuyla ilgili geliştirmelerin oldumu ? bende araştırmaya devam ediyorum fakat benim istediğim led yakma olayı visual basic tabanlı olucak..Öte yandan Canbus protokolü can yakıyor inanki :( sürem daraldı iyice bişiler yapmalıyım :o Kodlarını incelemeye başladım.Paylaşımların için teşekkür ederim bu arada..