• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Вопросы по функциям SDK

RRRLock

New member
Доброго времени суток.

В примере с rtos столкнулся с функцией memset.

Вопрос: для чего она нужна? Это что-то вроде функции инициализации?

Описания:
void * memset (void *block, int c, size_t size)

"This function copies the value of c (converted to an unsigned char) into each of the first size
bytes of the object beginning at block. It returns the value of block."

оказалось недостаточно для понимания.

Заранее спасибо за ответ.
 

nikolz

Well-known member
Доброго времени суток.

В примере с rtos столкнулся с функцией memset.

Вопрос: для чего она нужна? Это что-то вроде функции инициализации?

Описания:
void * memset (void *block, int c, size_t size)

"This function copies the value of c (converted to an unsigned char) into each of the first size
bytes of the object beginning at block. It returns the value of block."

оказалось недостаточно для понимания.

Заранее спасибо за ответ.
записывает константу ( байт) в блок размером size.
верно поняли.
 

RRRLock

New member
записывает константу ( байт) в блок размером size.
верно поняли.
Благодарю.
Если использовать данную функцию для инициализации массива, то она эффективнее, чем "классический" способ инициализации в Си с помощью цикла?
 

panzerito

New member
Какой размер буфера для исходящих/входящих пакетов у wifi адаптера и как узнать о его переполнении?
 

VicSpectator

New member
Доброго времени суток!
У обыденных устройств WiFi есть функция определения качества или мощности сигнала точки доступа. Перерыл SDK, так и не смог найти функции для получения этой информации. Подскажите, пожалуйста, это вообще возможно? Узнать уровень/мощность сигнала точки доступа WiFi?
 

Сергей_Ф

Moderator
Команда форума
@VicSpectator
[inline]sint8 wifi_station_get_rssi()[/inline]
Не оно?
Если надо эфир сканировать, то есть [inline]wifi_station_scan()[/inline] и
Код:
struct bss_info
This structure contains:
• STAILQ_ENTRY(bss_info) next
• uint8 bssid[6]
• uint8 ssid[32]
• uint8 channel
• sint8 rssi – The received signal strength indication
• AUTH_MODE authmode
• uint8 is_hidden
• sint16 freq_offset
To get the next entry, we can use STAILQ_NEXT(pBssInfoVar, next).
The AUTH_MODE is an enum
• AUTH_OPEN – No authentication. No challenge on any station connect.
• AUTH_WEP = 1
• AUTH_WPA_PSK = 2
• AUTH_WPA2_PSK = 3
• AUTH_WPA_WPA2_PSK =4
 
Последнее редактирование:

VicSpectator

New member
@Сергей_Ф, Оно. Я не знал, как называется этот параметр :(
Можно попросить ссылочку на SDK, где описана эта функция? Я находил лишь 1.0.0 и 1.0.1, но это, похоже, не самые актуальные версии. Как-то случайно находил более свежие, но забыл, где...
Возможность применения той или иной версии SDK железом ограничено? Для справки: пока что работаю через среду Ардуино.
UPD:
Esp Iot Sdk V1.3.0 15 08 08 (12.6 MB)
Это наиболее свежая?
 
Последнее редактирование:

VicSpectator

New member
Код для ардуино - это здорово. Но я всё же хотел потихоньку переходить на SDK :)
Правильно ли я понимаю, что можно взять SDK любой версии и включить их функции к себе в проект Arduino IDE банальным #include? Ну или "extern C". Версия SDK не принципиальна?
 

NStorm

New member
А подскажите, есть какой-то способ узнать RSSI или иным образом уровень сигнала клиента, когда ESP8266 работает в режиме AP? Везде пишут про STA и RSSI точки доступа. А мне надо именно подключенного клиента каким-то образом проверить. Что-то нигде про такое не написано.
Или может кто подскажет по-другому как реализовать. Задача такая - надо переключать релюху, когда человек с мобильный телефоном входит в зону действия точки ну и "засыпать", но это понятно как. Автоматом, без передачи каких-либо данных с телефона, просто по факту подключения к WiFi. Но чтобы регулировать можно было "зону срабатывания". Причем очень желательно не именно зону действия WiFi регуляцией мощности передатчика, а именно смотреть уровень сигнала с клиентом желательно. Роутеры на SoC всяких умеют показывать уровень сигнала подключенных клиентов, как-нибудь у ESP8266 это можно?
 

tretyakov_sa

Moderator
Команда форума
При приближении телефона к точки доступа, он ей подключится и это подключение можно отследить. Это на форуме обсуждалось, ищите.
 

NStorm

New member
В NON_OS_SDK в user_interface.h есть следующая структура:
Код:
typedef struct {
    int rssi;
    uint8 mac[6];
} Event_SoftAPMode_ProbeReqRecved_t;
Не оно случаем?
Правда как я понимаю этот эвент происходит при запросе (скане) сетей. А есть Event_SoftAPMode_StaConnected_t, но там в структуре нет rssi. Т.е. после подключения клиента в режиме AP SDK уже перестает отслеживать его RSSI?
 

Myxa19851

New member
pvvx, pvvx,
Тут задавайте вопросы по функциям SDK Espressif.
Если что известно, то отвечу или ответят.
----------
Кто знает зачем wifi_station_set_hostname()?

По старту исполняется wifi_station_set_default_hostname(info.st_mac);
Она выделяет память и назначает имя ESP_XXXXX:
Код:
extern uint8 * hostname; // in eagle_lwip_if.c
bool default_hostname = true;

uint8 * wifi_station_get_hostname(void)
{
    uint32 opmode = wifi_get_opmode();
    if(opmode == 1 || opmode == 3) {
        return hostname;
    }
    return NULL;
}

void wifi_station_set_default_hostname(uint8 * mac)
{
    if(hostname != NULL)    {
        vPortFree(hostname);
        hostname = NULL;
    }
    hostname = pvPortMalloc(32);
    if(hostname == NULL) {
        ets_sprintf(hostname,"ESP_%02X%02X%02X", mac[3], mac[4], mac[5]);
    }
}

bool wifi_station_set_hostname(uint8 * name)
{
    if(name == NULL) return false;
    uint32 len = ets_strlen(name);
    if(len > 32) return false;
    uint32 opmode = wifi_get_opmode();
    if(opmode == 1 || opmode == 3) {
        default_hostname = false;
        if(hostname != NULL) {
            vPortFree(hostname);
            hostname = NULL;
        }
        hostname = pvPortMalloc(len);
        if(hostname == NULL) return false;
        struct netif * nif = eagle_lwip_getif(0);
        ets_strcpy(hostname, name);
        if(nif != NULL) {
            nif->hostname = hostname;
        }
        return true;
    }
    return false;
}
Далее это имя используется в struct netif * nif...
Что это дает?
 

Myxa19851

New member
Здравствуйте, столкнулся с проблемой, можете помочь!!!!
Достаю еспишку из пакета загружаю любой скеч, в роутре отображается, при повторном и остальных заливок скечей, в роутере НЕ отображается . Как точка доступа работает нормально. Испробовал две esp-01, одну nodmcu, проблема таже!!!
Пробовал на двух роутерах, пробовал wifioit бинарником прошивать, и ардуиной, всё так же, пробовал роутер на заводские настройки скидывать, без результатно.
Такое ощущение что при прошивке затирается конфиг wifi!!!
Ещё видно в Web морде что есп подключено к роутеру и есть айпи адрес, переходил по нему работает но как то коряво. В роутре не видно клиента DHСP, в чем может быть проблема? И как побороть?
 

ikari81

New member
Подскажите, как можно посмотреть остаток свободного места в куче после вызова new или malloc?
 

x8973

Member
Всем доброго времени суток.
Может ли кто подсказать, для чего нужна и что делает функция SPICsPinSelect(SpiNum spiNum, SpiPinCS pinCs) из файла driver_lib/include/driver/spi_interface.h? Очевидно, что она должна каким-то образом выбирать активный CS на SPI, но я так и не понял, как она работает. Ведомое устройство, подключенное к HSPI, по-прежнему работает от GPIO15, какое бы я значение не передавал в эту функцию.
Интересуюсь, потому что хочу повесить второе ведомое устройство на HSPI, а лезть в SPI overlapping и вмешиваться в работу программной флеши не радует.
 
Сверху Снизу