alexsis_76 писал(а):попробывать увеличить размер буфераСкорее всего будет ошибка 401, т.к размер страницы будет слишком большой,
Ну да, увеличивал, но все равно там сильно не разгонишься, может где-то еще надо было подправить.
alexsis_76 писал(а):попробывать увеличить размер буфераСкорее всего будет ошибка 401, т.к размер страницы будет слишком большой,
ну да , хотя можно применить старшую мегу хотя указанный массив занимает немного местано все равно там сильно не разгонишься
Спасибо, как раз оттуда я и брал исходник для СVAVR, на котором писал свои страницы, но там не все переведено из оригинала Туксграфикса, а так все работает отлично. А WINAVR как-то не использовал, максимум готовый исходник могу компильнуть, ну и по мелочи подправить, CVAVR ближе.alexsis_76 писал(а):посмотрите на радиокототе http://radiokot.ru/forum/viewtopic.php?f=24&t=3761 там человек портировал на CodeVision я тожеа три назад когда делал такое устройство пробывал переписать на CodeVision но ничего путного из этого не вышло примерно через минуту пропадал пинг потом забил
p.s а чем WINAVR не устроил
си он и в африке си там как я помню правил в основном типы данных, функции записи чтения EEPROMCVAVR ближе
Как раз те функции которые отвечают за отправку на сервер самые сложные, плюс куча вложенных функций в итоге быстро наступает тупикalexsis_76 писал(а):си он и в африке си там как я помню правил в основном типы данных, функции записи чтения EEPROMCVAVR ближе
Этиalexsis_76 писал(а):эт какие
const prog_char *urlbuf
.это функции обратного вызоваособенно меня загоняют в тупик функции передаваемые в функцию, и всякие *callback не пойму как это функционирует
когда отработает client_browser_url при вызове browserresult_callback аргументы функции будут содержать statuscode ответ сервера если все нормально то 200 , собственно стек умеет обрабатывать 200 и не 200 (т е все остальные)которые впрочем можно определить самому uint16_t datapos позиция первого байта полезной нагрузки uint16_t len длинна ,тут собственно показана разборка всего этого безобразияvoid browserresult_callback(uint8_t statuscode,uint16_t datapos, uint16_t len)
{
uint16_t i=0;
uint8_t j=0;
uint8_t k=0;
char * srv_rep;
srv_rep = (char *)&(buf[datapos]);
char srv_cmd[30];
if (statuscode==0)
{
// Поскольку в этой функции у нас нет информации о том, какой именно вход сработал,
// сбрасываем таймаут по всем входам, предполагая, что если сервер ответил по одному,
// он ответит и по остальным.
for ( i = 0; i < IO_SIZE; i++ )
srv_timeout = 0;
for ( i = 0; i < len; i++ )
{
// Пропускаем все HTTP-заголовки
if ( *srv_rep == '\r' || *srv_rep == '\n' )
{
srv_rep++;
k++;
continue;
}
if ( k == 4 )
{
srv_cmd[j] = *srv_rep;
j++;
}
if ( k != 4 )
k = 0;
srv_rep++;
}
port_execute(srv_cmd);
}
// Если ответ сервера не 200, то выполняем команды по умолчанию
else
{
eeprom_read_block (temp, &ee_cmd[cur_input], 11);
if ( temp[0] != 'я' && strlen(temp) > 0 )
port_execute(temp);
}
send_eth_flag2 = 1;
}
где вы можете определить что именно будет передаваться на сервер вотuint16_t www_client_internal_datafill_callback(uint8_t fd){
char strbuf[5];
uint16_t len=0;
if (fd==www_fd){
if (browsertype==0){
// GET
len=fill_tcp_data_p(bufptr,0,PSTR("GET "));
len=fill_tcp_data_p(bufptr,len,client_urlbuf);
len=fill_tcp_data(bufptr,len,client_urlbuf_var);
// I would prefer http/1.0 but there is a funny
// bug in some apache webservers which causes
// them to send two packets (fragmented PDU)
// if we don't use HTTP/1.1 + Connection: close
len=fill_tcp_data_p(bufptr,len,PSTR(" HTTP/1.1\r\nHost: "));
len=fill_tcp_data_p(bufptr,len,client_hoststr);
len=fill_tcp_data_p(bufptr,len,PSTR("\r\nUser-Agent: tgr/1.0\r\nAccept: text/html\r\nConnection: close\r\n\r\n"));
}else{
// POST
len=fill_tcp_data_p(bufptr,0,PSTR("POST "));
len=fill_tcp_data_p(bufptr,len,client_urlbuf);
len=fill_tcp_data_p(bufptr,len,PSTR(" HTTP/1.1\r\nHost: "));
len=fill_tcp_data_p(bufptr,len,client_hoststr);
if (client_additionalheaderline){
len=fill_tcp_data_p(bufptr,len,PSTR("\r\n"));
len=fill_tcp_data_p(bufptr,len,client_additionalheaderline);
}
len=fill_tcp_data_p(bufptr,len,PSTR("\r\nUser-Agent: tgr/1.1\r\nAccept: */*\r\nConnection: close\r\n"));
len=fill_tcp_data_p(bufptr,len,PSTR("Content-Length: "));
itoa(strlen(client_postval),strbuf,10);
len=fill_tcp_data(bufptr,len,strbuf);
len=fill_tcp_data_p(bufptr,len,PSTR("\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n"));
len=fill_tcp_data(bufptr,len,client_postval);
}
return(len);
}
return(0);
}
uint16_t your_client_tcp_datafill_callback(uint8_t fd){...your code;return(len_of_data_filled_in);}
описаны выше все это находится в ip_arp_udp_tcp.cособенно меня загоняют в тупик функции передаваемые в функцию
alexsis_76 писал(а):а дошло что вам нужно чтобы вместо этогоКак изменить названия портов в 192.168.0.14были человеческие имена попробуйте так создайте массив имен что то типа этого{"D0", "D1", "D3", "D4", "D5", "D6", "D7", "C0", "C1", "C2", "C3", "C4", "C5"}затем это plen=fill_tcp_data(buf,plen,aio);заменить на это plen=fill_tcp_data(buf,plen,aion); напишите что будет#define IO_SIZE_NAME 13
char *aion[ IO_SIZE_NAME] = {"сдесь ваши 13 имен", "имя", "имя", "имя", "имя", "имя", "имя", "имя", "имя", "имя", "имя", "имя", "имя"};
for ( i = 0; i < IO_SIZE; i++ )
{
plen=fill_tcp_data_p(buf,plen,PSTR("<a href=/"));
plen=fill_tcp_data(buf,plen,password);
plen=fill_tcp_data_p(buf,plen,PSTR("/?pt="));
//char temp[2];
snprintf_P(temp,sizeof(temp),PSTR("%d"),i);
plen=fill_tcp_data(buf,plen, temp);
plen=fill_tcp_data_p(buf,plen,PSTR(">"));
plen=fill_tcp_data(buf,plen,aio);
plen=fill_tcp_data_p(buf,plen,PSTR("</a> "));
}
// ! ! !
//plen=fill_tcp_data_p(buf,plen,PSTR("<br>"));
//itoa(srv_fd, temp, 10);
// plen=fill_tcp_data(buf,plen,urlpar);
}
SENDTCP:
www_server_reply(buf,plen); // send data
if ( reset_flag == 1 )
RESET();
continue;
UDP:
continue;
}
return (0);
}
судя по всему зарисывает 13 названий портов в буфер ее поменяли , попробуйте удалить совсемplen=fill_tcp_data(buf,plen,aio);
#define name 14
char *n[name] = {"A", "B", "C", "D", "F", "6R", "J7", ".0", "A1", "882","F","6R", "J7", ".0"};
#define BUFFER_SIZE 560
plen=fill_tcp_data(buf,plen,n);
я тоже,не отображаются порты только Confпробовал удалять эту строку, без изменений
очень радalexsis_76, ОГРОМНОЕ спасибо. Все получилось!