0
Отлично, еще если добавить ещё 1-2 IR с разной частотой, то можно сделать управление выбором песен справа на лева провел, следующая песня, слева на право предыдущая, поддержал руку пару секунд выключился.
  • avatar
  • pokk
  • 03 августа 2017, 05:34
0
Решил сделать обработку cgi запросов, но с толкнулся с небольшой проблемой, если в обработчике cgi есть какие-то задержки не связанные с wiznet, как их выдержать?
Пока что придумал сделать примерно так, внутри wizneta сделать установку обработчика cgi, а выполнение запроса вызывать в главном цикле, и вот тут встал вопрос как обратно отправить ответ запросу? Единственное решение которое приходит в голову это как-то синхронизироваться с wiznet флагами когда он там закончил все передавать/принимать и в этот момент устанавливать отправку ответа, но я считаю это как-кто не правильно.
  • avatar
  • pokk
  • 10 ноября 2016, 13:29
0
… что регистры записи и чтения равны..
Вы имели ввиду регистры Sn_TX_WR,Sn_TX_RD? Даже если они равны и есть флаг SEND_OK, то Sn_TX_FSR выдает что буфер не пуст (Sn_TX_FSR!=Socket.TX_Size). Это как так?
  • avatar
  • pokk
  • 21 сентября 2016, 13:36
0
Благодарю, за ответ. Возникло ещё пару вопросов:
1) как у вас происходит ожидание, освобождения буфера WIZNET? После установки флага Send_OK буфер должен быть пуст и TX_Free_Size=2048(размер буфера 2кб)?

Дело вот в чем переписываю вашу библиотеку на W5500, но тут данных на передачу гораздо больше чем размер буфера W5500 сделал дробление данных на пакеты по размеру буфера или по TX_Free_Size в обработчике Http ->Send_OK, но после отправки пары пакетов флаг Send_OK перестает выставятся и http виснет на статусе SOCK_ESTABLISHED, с одним флагом OPEN. Причем если установить точку остановки в обработчик Send_OK, то все нормально отправляется.

2) В w5500 в SPI Frame, отсутствует длина посылки(он её определяет по переключению CS), по этому если передавать
данные в режиме Variable Length Data Mode, то

Ok = W5200_Add_Write_Data(s, Source, Length);
Ok &= W5200_Add_To_Buff_Byte_Const(Sn_CR(s), Sn_CR_SEND);

команда Sn_CR_SEND в данном случае будет интерпретирована как данные и она не вызовется
На данный момент я просто сделал вызов Sn_CR_SEND внутри W5200_Add_Write_Dat, но всё же контролировать порядок записи 1-4 байтных данных и переменных данных(мак адрес), не сильно хорошо.
Если ли тут какие либо идеи как это решить?
  • avatar
  • pokk
  • 14 сентября 2016, 14:06
0
Добрый день начал разбираюсь в вашем проекте появились некоторые вопросы.
В частности в функции Interrupt_Callback, в самом конце есть такой кусок.
if((Sn_Ir & Sn_IR_SEND_OK) && (Sn_TX_WR != Sn_TX_RD) && Socket[Socket_Interrupt].Protocol == Sn_MR_TCP)	//errata
        W5200_Add_To_Buff_Byte_Const(Sn_CR(Socket_Interrupt), Sn_CR_SEND);
    else
        if(Socket_CallBack[Socket_Interrupt])
        {
            Socket_CallBack[Socket_Interrupt](0, 0, &Socket[Socket_Interrupt].Param);
            *(uint8_t*)&Socket[Socket_Interrupt].Param.Event &= 0xE0;
        }
W5200_Send_CallBack(0, 0);


Вот тут не понятно:
1)Зачем тут нужен вызов Socket_CallBack если он уже есть в «maine»
if(Eth_GetInterrupt()){
...
}else{
.....
    Socket[Socket_Current].Param.Event.Request = 1;
    Socket_CallBack[Socket_Current](&Header, RBuffer, &Socket[Socket_Current].Param);
    Socket[Socket_Current].Param.Event.Request = 0;
.....
}


2) Даже если она и запустила HTTP_Handler, и даже если там что-то надо сделать допустим Socket_Disconnect(Param->Index); то после выхода из обработчика(HTTP_Handler) следующая функция W5200_Send_CallBack(0, 0); напрочь перетрет вызванные функции в Socket_Disconnect.
  • avatar
  • pokk
  • 01 сентября 2016, 13:28
0
Скажите чем такой вариант таймера лучше, от простого инкремента временной переменной в таймере?
Я вижу несколько преимуществ, но они не критичны.
1) Выделение в отдельный модуль.
2) Легко добавить новую временную переменную.
3) Просто запустить функции на циклический опрос.
Если ли ещё какие то преимущества, которые я не замечаю?

До недавнего времени использовал модуль в котором объявлен массив временных переменных, который инкриминируются в таймере по 1ms и с функциями взаимодействия ResetTimers(index) GetTimers(index).

Но в последнее время мне надоело что при подключения библиотек надо в модуле timer прописывать/корректировать переменные. По этому решил в каждом модуле заводить некоторую функцию SystemTimerModul, в ней прописывать инкремент временных переменных используемых данным модулем а саму функцию закидывать в таймер.
  • avatar
  • pokk
  • 24 июня 2016, 13:22
0
Добрый день, столкнулся с такой проблемой, что если при выключенном питании подать ping(или периодически get запросы), то после включения питания и инициализации wiznet, иногда ответ на поданный ping не приходит. Это также касается и GET запросов. Т.е сервер находится в состоянии SOCK_LISTEN, отправляешь get запрос а он его не принимает. Не замечали ли вы подобного?
  • avatar
  • pokk
  • 10 марта 2016, 09:32
0
Если бы на форуме кто-нибудь отвечал то не вопрос.
forum.easyelectronics.ru/viewtopic.php?f=7&t=16506
У меня сложилось мнения что там не кого нету.
  • avatar
  • pokk
  • 12 декабря 2013, 11:04