微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解析 AT 命令响应和 C 中输出的字段之一

如何解决如何解析 AT 命令响应和 C 中输出的字段之一

我试图从 AT 命令响应中捕获数据,但我无法这样做。

我的方法

函数():

#define MAX_LINE_LENGTH (8 * 1024)
static char buf[MAX_LINE_LENGTH];
static char buf2[MAX_LINE_LENGTH];

static bool tr_lf_cr(const char *s)
 {
    char *p;
    p = strchr(s,'\n');
    if (p == NULL || p[1] != '\0') {
        return false;
    }
    *p = '\r';
    return true;
}

static void strip_cr(char *s)
{
    char *from,*to;
    from = to = s;
    while (*from != '\0') {
        if (*from == '\r') {
            from++;
            continue;
        }
        *to++ = *from++;
    }
    *to = '\0';
}

#define STARTS_WITH(a,b) ( strncmp((a),(b),strlen(b)) == 0)

main()

fd = fopen(*mp,"r+b");
    if (fd == NULL) {
        /* Could not open the port. */
        perror("open_port: Unable to open /dev/ttyUSB0\n");
    }
    char str = '\n';
    strncat(cmd,&str,1);
    success = tr_lf_cr(cmd);
    if (! success) {
        fprintf(stderr,"invalid string: '%s'\n",cmd);
        return EXIT_FAILURE;
    }
    int res = fputs(cmd,fd);
    if (res < 0) {
        fprintf(stderr,"Failed to send '%s' to modem (res = %d)\n",cmd,res);
        return EXIT_FAILURE;
    }

    do {
        line = fgets(buf,(int)sizeof(buf),fd);
        if (line == NULL) {
            fprintf(stderr,"EOF from modem\n");
            return EXIT_FAILURE;
        }
        strcpy(buf2,line);
        strip_cr(buf2);
        char delim[] = ",";
        char *ptr = strtok(buf2,delim);
        printf("\n0++++++++++++++++++++\n");
        while (ptr != NULL) {
            printf("'%s'\n",ptr);
            ptr = strtok(NULL,delim);
        }
        printf("\n1********************\n");
    } while (STARTS_WITH(line,"OK") == 0);

当我运行这个命令时,我得到以下输出AT^HCSQ?

0++++++++++++++++++++
'AT^HCSQ?
'

0++++++++++++++++++++
'^HCSQ: "WCDMA"'
'64'
'64'
'60'
'0
'

0++++++++++++++++++++
'
'

0++++++++++++++++++++
'OK

'

我想要实现的是将每个值与缓冲区分开存储

char p = WCDMA;

int RSSi = atoi[ptr];

[等等...]

我使用 strtok() 来实现这一点,但我无法跳过我从响应中得到的空行。我应该在这里做什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。