Как я понял, вы ссылались на какой-то архив(не исходники MegaD), где можно посмотреть работу веб клиента..alexsis_76 писал(а):с чемА можно и мне архив с исходником, а то у меня теже проблемы
Проблемы при программировании AVR на Си
Re: Проблемы при программировании AVR на Си
Re: Проблемы при программировании AVR на Си
в этой теме речь шла об устройстве netalarm , стек там точно такой же как и в megad, в варианте с картой совсем другое, а что именно не идет?
Re: Проблемы при программировании AVR на Си
Есть задача: нужно кардинально переделять megad. Я взял за основу тот проект, что и Андрей брал. Все было нормально, пока не стала необходимость отправлять данные на сервер. Как я понял, изначально в исходном проекте не было поддержки веб клиента. Начал вытягивать функции с рабочего проекта Андрея, тоже заштопорился на функции client_browse_url - компилятор выдает ошибку, что функция не объявлена, но делал и по вашим рекомендациях, но так и понял почему не идет! Закинул эту идею, думаю возьму за основу проект Андрея - взял, сейчас хочу просто отправить что-то на сервер, все лишнее в главном цикле затер, осталось только вот что:alexsis_76 писал(а):в этой теме речь шла об устройстве netalarm , стек там точно такой же как и в megad, в варианте с картой совсем другое, а что именно не идет?
Код: Выделить всё
while(1)
{
plen=enc28j60PacketReceive(BUFFER_SIZE, buf);
buf[BUFFER_SIZE]='\0';
//--- dat_p=packetloop_icmp_tcp(buf,plen);
dat_p=packetloop_arp_icmp_tcp(buf,plen);
if ((PINC & (1<<5)) != 0)
{
uint8_t _eth_addr[4];
_sip_addr[0]=192;
_sip_addr[1]=168;
_sip_addr[2]=1;
_sip_addr[3]=2;
get_mac_with_arp(_sip_addr,TRANS_NUM_WEBMAC,&arpresolver_result_callback2);
arp_timeout = 5000;
while(get_mac_with_arp_wait() && arp_timeout > 0 )
{
// to process the ARP reply we must call the packetloop
plen=enc28j60PacketReceive(BUFFER_SIZE, buf);
packetloop_arp_icmp_tcp(buf,plen);
arp_timeout--;
}
uint8_t www_gwmac2[6] = {0x54,0x55,0xc0,0xa8,0x00,0x0e};
uint16_t _na_port = 80;
client_browse_url(PSTR("/"),"rom.php","192.168.1.2",&browserresult_callback_empty, _eth_addr, www_gwmac2, _na_port);
// PORTC|= (1<<4);
}//else PORTC&= ~(1<<4);
SENDTCP:
LEDON;
www_server_reply(buf,plen); // send data
LEDOFF;
if ( reset_flag == 1 )
RESET();
if ( reset_flag == 2 )
Bootloader();
continue;
UDP:
continue;
}
Re: Проблемы при программировании AVR на Си
ну да в исходном вроде бы нет
оригинальная client_browser_url отличается от той что у вас сейчас гляну
оригинальная client_browser_url отличается от той что у вас сейчас гляну
Последний раз редактировалось alexsis_76 06 апр 2015, 17:39, всего редактировалось 1 раз.
Re: Проблемы при программировании AVR на Си
Чего именно нет?alexsis_76 писал(а):ну да в исходном вроде бы нет
Как я думал, что этот кусок кода должет отправлять (вызывать страницу) на сервере.
Re: Проблемы при программировании AVR на Си
для атмега 8 для клиента не хватает памяти,потому и нет
сейчас посмотрим кто и куда должен отправлять
во первых вы должны определить browserresult_callback_empty
вот она void browserresult_callback_empty(uint ... g2 = -1; }
во вторых определить
определить
в данном случае 80
и
сейчас посмотрим кто и куда должен отправлять
во первых вы должны определить browserresult_callback_empty
вот она void browserresult_callback_empty(uint ... g2 = -1; }
во вторых определить
Код: Выделить всё
client_ifconfig(myip,netmask);
Код: Выделить всё
_na_port
и
куда будете слатьwww_gwmac2
Последний раз редактировалось alexsis_76 06 апр 2015, 17:53, всего редактировалось 4 раза.
Re: Проблемы при программировании AVR на Си
Я год назад парился с той же проблемой , мне тогда alexsis_76 прислал свой исходник, отправлять то у меня просто строки получилось, но вот то что хотел так и не реализовал, забросил. И как раз сегодня решил опять вернуться к этому вопросу, и наконец получилось то что хотел. Вся запара в том что библиотеки немного отличаются та что используется в Megad и которая Tuxsgraphics изначально. Надо лезть в файл ip_arp_udp_tcp.c и там смотреть типы переменных и все отличия. Как раз сегодня я этим и занимался. Ну и надо объявить в файле ip_config.h define WWW_client
Re: Проблемы при программировании AVR на Си
С горя, я уже взял последний исходник Андрея.Urbas81 писал(а):Я год назад парился с той же проблемой , мне тогда alexsis_76 прислал свой исходник, отправлять то у меня просто строки получилось, но вот то что хотел так и не реализовал, забросил. И как раз сегодня решил опять вернуться к этому вопросу, и наконец получилось то что хотел. Вся запара в том что библиотеки немного отличаются та что используется в Megad и которая Tuxsgraphics изначально. Надо лезть в файл ip_arp_udp_tcp.c и там смотреть типы переменных и все отличия. Как раз сегодня я этим и занимался. Ну и надо объявить в файле ip_config.h define WWW_client
Re: Проблемы при программировании AVR на Си
У меня мега 328p. Все функции и начало функции маин до главного цикла - не изменены!alexsis_76 писал(а):для атмега 8 для клиента не хватает памяти,потому и нет
сейчас посмотрим кто и куда должен отправлять
во первых вы должны определить browserresult_callback_empty
вот она void browserresult_callback_empty(uint ... g2 = -1; }
во вторых определитьопределитьКод: Выделить всё
client_ifconfig(myip,netmask);
в данном случае 80Код: Выделить всё
_na_port
Re: Проблемы при программировании AVR на Си
Да и еще, при отладке использовал Wiresharck, без него б тяжко было.
Re: Проблемы при программировании AVR на Си
ну тогда посмотрите варезшарком что отправляет
если ошибок нет client_browse_url должна отработать может шлет не то и не туда , естественно сервер не видит
вот взгляните когда то упражнялся там тоже есть client_browse_url правда в обертке правда оно под мега32
если ошибок нет client_browse_url должна отработать может шлет не то и не туда , естественно сервер не видит
вот взгляните когда то упражнялся там тоже есть client_browse_url правда в обертке правда оно под мега32
Re: Проблемы при программировании AVR на Си
Спасибо оргомное! Все с коментариями! Оч. интересно!alexsis_76 писал(а):ну тогда посмотрите варезшарком что отправляет
если ошибок нет client_browse_url должна отработать может шлет не то и не туда , естественно сервер не видит
вот взгляните когда то упражнялся там тоже есть client_browse_url правда в обертке правда оно под мега32
Вот нашел туже функцию
client_browse_url(PSTR("/www/test.php?"),display_string,PSTR("alex_test"),&browserresult_callback);// передаем
Подскажите пожалуйста, за что отвечають параметры в моей функции:
client_browse_url(PSTR("/rom.php"),"","192.168.1.2",&browserresult_callback_empty, _eth_addr, www_gwmac2, _na_port);
1)имя страницы на сервере
2) параметры вызываемой страницы
3)адрес самого сервера
4)Функция, куда возвращается ответ от сервера
5)???
6)как я понял, прокси-сервер, если нет что туде пишем?
7) порт, у меня 80!
Re: Проблемы при программировании AVR на Си
изначатьно она имела такой вид
2 строка параметров которые вы хотите передать скрипту
3 имя хоста
4 функция обратного вызова(определяется пользователем)позволяет выполнить какие нибудь действия может быть пустой ,но присутствовать должна
к оригиналу андрей добавил еще несколько параметров
_eth_addr ip адрес
www_gwmac2 мас целевого хоста(видимо в данном случае шлюза , послали а он пускай сам разбирается)
порт назначения
щас гляну как client_browse_url работает
изначально работала следующим образом сначала делалось
затем сохраняли результат резольвинга ап адреса(мак шлюза)
затем посылали на адрес шлюза а он пересылал куда нужно
_eth_addr ip адрес вот это не могу понять как используется возможно нужно для работы с подсетями
1 указатель на скрипт обработчика// call this function externally like this:
//
// Declare a callback function: void browserresult(uint8_t statuscode,uint16_t datapos,uint16_t len){...your code}
// client_browser_url(PSTR("/cgi-bin/checkip"),NULL,PSTR("tuxgraphics.org"),&browserresult);
// urlbuf_varpart is a pointer to a string buffer that contains the second
// non constant part of the url. You must keep this buffer allocated until the
// callback function is executed or until you can be sure that the server side
// has timed out.
// hoststr is the name of the host. This is needed because many sites host several
// sites on the same physical machine with only one IP address. The web server needs
// to know to which site you want to go.
// statuscode is zero if the answer from the web server is 200 OK (e.g HTTP/1.1 200 OK)
// statuscode==1 means there is a valid tcp data but not a "200 OK"
// answer. Any other statuscode than 0 and 1 is a total communication failure.
//
void client_browse_url(prog_char *urlbuf, char *urlbuf_varpart, prog_char *hoststr,void (*callback)(uint8_t,uint16_t,uint16_t))
{
client_urlbuf=urlbuf;
client_urlbuf_var=urlbuf_varpart;
client_hoststr=hoststr;
browsertype=0;
client_browser_callback=callback;
www_fd=client_tcp_req(&www_client_internal_result_callback,&www_client_internal_datafill_callback,80);
}
2 строка параметров которые вы хотите передать скрипту
3 имя хоста
4 функция обратного вызова(определяется пользователем)позволяет выполнить какие нибудь действия может быть пустой ,но присутствовать должна
к оригиналу андрей добавил еще несколько параметров
_eth_addr ip адрес
www_gwmac2 мас целевого хоста(видимо в данном случае шлюза , послали а он пускай сам разбирается)
порт назначения
щас гляну как client_browse_url работает
изначально работала следующим образом сначала делалось
арп запрос на ап шлюзаclient_arp_whohas(buf,gwip);
затем сохраняли результат резольвинга ап адреса(мак шлюза)
затем посылали на адрес шлюза а он пересылал куда нужно
_eth_addr ip адрес вот это не могу понять как используется возможно нужно для работы с подсетями