编辑代码

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

/**
 * @brief 判断 Context 1 是否激活
 * @param at_response 从模块读取的 AT+QIACT? 响应字符串(需包含完整响应,如 "+QIACT: 1,1,1,...")
 * @return 1:已激活, 0:未激活, -1:解析失败
 */
int is_context1_active(const char *at_response) {
    if (at_response == NULL) {
        return -1;
    }

    // 查找 "+QIACT:" 关键字
    const char *p = strstr(at_response, "+QIACT:");
    if (p == NULL) {
        return -1; // 响应格式错误
    }

    // 提取 Context 1 的状态(假设格式为 "+QIACT: 1,<state>,...")
    int context_id, state;
    if (sscanf(p, "+QIACT: %d,%d", &context_id, &state) != 2) {
        return -1; // 解析失败
    }

    // 检查是否为 Context 1 且状态为 1(激活)
    return (context_id == 1 && state == 1) ? 1 : 0;
}

// 示例用法
int main() {
    // 模拟 AT+QIACT? 响应(实际应从模块读取)
    const char *response_activated = 
        "AT+QIACT?\r\n"
        "+QIACT: 1,1,1,\"10.73.40.161\"\r\n"
        "OK\r\n";

    const char *response_deactivated = 
        "AT+QIACT?\r\n"
        "+QIACT: 1,0,0,\"0.0.0.0\"\r\n"
        "OK\r\n";

    // 测试
    printf("Context 1状态: %d (1=激活, 0=未激活, -1=错误)\n", 
           is_context1_active(response_activated)); // 应输出 1

    printf("Context 1状态: %d\n", 
           is_context1_active(response_deactivated)); // 应输出 0

    return 0;
}