за несколько десятилетий я так и не придумал куда можно
приспособить эту фичу, переменное число аргументов, кроме вариаций
на тему свой принтф. Даже в этом случае что у ТС было бы полезней
сделать не так как иранец сделал, а использовать переменное число
аргументов для формирования AT запроса в стиле принтф, а строки
возможных заголовков ответов передавать указателем на массив.
Правда тогда придется аргументы в функции сделать в обратном
порядке, сначала ответ, потом
Будь ты проклят, Перри-Утконос!
запрос.
примерно так
да и то в принципе надумано, можно тоже
int8_t atc_comm(atc_t *atc, char *answer, uint16_t answer_size, uint32_t timeout_ms, const char *response[], const char *command ...){
return 0;
}
atc_t atc;
void foo(void){
char answer[42];
static const char * stdResp[] = {"OK", "ERROR", NULL};
if(atc_comm(&atc, answer, 42, 500, stdResp, "ATI\n") != 1)
return;
if(atc_comm(&atc, answer, 42, 500, stdResp, "AT+CLIP=%d\n", 1) != 1)
return;
static const char * connectResp[] = {"OK", "ERROR", "CONNECT", NULL};
if(atc_comm(&atc, answer, 42, 500, connectResp, "AT+OPEN=\"TCP\",\"%s\",\"%i\"\n", "ya.ru", 80) != 3)
return;
}