git@gitee.com:ez-iot/prj2018_smart_locker.git
偶然在手机APP看到的这个代码,有点儿意思,和我的简约风格比较起来另外一个门派,学习一下。
1--如何做一个函数传递不确定参数?
//函数
//就是TX以后等待RX 它可能的RX数据
bool Wifi_WaitForString(uint32_t TimeOut_ms,uint8_t *result,uint8_t CountOfParameter,...)
{
if (result == NULL)
return false;
if (CountOfParameter == 0)
return false;
*result=0;
va_list tag;
char *arg[CountOfParameter];
va_start(tag, CountOfParameter);
for(uint8_t i=0; i<CountOfParameter; i++)
arg[i] = va_arg (tag, char *);
va_end(tag);
//
for (uint32_t t = 0; t < TimeOut_ms; t += 50)
{
rt_thread_delay(rt_tick_from_millisecond(50));
for (uint8_t mx = 0; mx < CountOfParameter; mx++)
{
if (strstr((char*) Wifi.RxBuffer, arg[mx]) != NULL)
{
*result = mx + 1;
return true;
}
}
}
// timeout
return false;
}
下面是使用
do
{
Wifi_RxClear();
if (Wifi.TcpIpMultiConnection == false)
sprintf((char*) Wifi.TxBuffer, "AT+CIPSERVER=0\r\n");
else
sprintf((char*) Wifi.TxBuffer, "AT+CIPSEND=%d,%d\r\n", LinkId, dataLen);
if (Wifi_SendString((char*) Wifi.TxBuffer) == false)
break;
if (Wifi_WaitForString(_WIFI_WAIT_TIME_LOW, &result, 2, ">", "ERROR") == false)
break;
if (result == 2)
break;
Wifi_RxClear();
Wifi_SendRaw(data, dataLen);
if (Wifi_WaitForString(_WIFI_WAIT_TIME_LOW, &result, 2, "OK", "ERROR") == false)
break;
returnVal = true;
} while (0);