AT COMMAND IN OPEN CPU

با سلام
بنده میخوام داخل open cpu از دستورات at command استفاده کنم از دستور زیر استفاده کردم

QI_RIL_SendATCmd("AT+QNITZ=1", Ql_strlen("AT+QNITZ=1"), NULL, NULL, 0)

دستوری که نتیجه حاصل از این AT COMMAND بتونم داخلش ببینم چی هست؟
ارور های UART دریافت میکنم
در اصل بنده میخوام نتیجه را به صورت اس ام اس دریافت کنم توابع اس ام اس دارم اما تو زمینه ارسال و دریافت AT COMMAND مشکل دارم
ممنون میشم راهنمایی کنید

1 پسندیده

سلام
شما میتونید اطلاعات بیشتر رو داخل داکیومنت “Quectel_OpenCPU_RIL_Application_Note” بررسی کنید

همونطور که در تصویر بالا مشخص هست پارامتر سوم برای مشخص کردن تابعی که جواب رو دریافت میکنه استفاده میشه
در ادامه توضیحات هم یک تابع نمونه رو برای استفاده معرفی کرده

4 پسندیده

ممنون از پاسختان
بنده فایل مطالعه کردم کدی که نوشتم به صورت زیر

  ret = Ql_RIL_SendATCmd("AT+CBC", Ql_strlen("AT+CBC"), NULL, NULL, 0);

            break;
        case MSG_ID_URC_INDICATION:
            APP_DEBUG("Received URC: type: %d\r\n", msg.param1);
            switch (msg.param1)
            {
            case  URC_MODULE_VOLTAGE_IND:
                APP_DEBUG("batteryStatus:%d\r\n", msg.param2);
                break;

قسمت اول که تابع at command میفرستم قسمت دوم با توجه به چیزی که متوجه شدم جواب دستور مورد نظر
حالا سوال بنده اینه که این کد درسته؟
اگه درسته چجوری جواب at command به طور مثال به صورت اس ام اس ارسال کنم؟
توابع اس ام اس دارم مشکل با دریافت at command و جدا سازی اون دارم

1 پسندیده

در حقیقت کد شما اصلا مطابق جوابی که بهتون دادم نیست!
پارامتر سوم از تابع Ql_RIL_SendATCmd برای دریافت جواب at command هست که شما مقدار اون رو NULL گذاشتید. باید کد شما به این صورت باشه:
(این مثال در فایل ‍‍ril/src/ril_system.c در داخل sdk موجود هست)

s32 RIL_GetPowerSupply(u32* capacity, u32* voltage)
{
    s32 ret;
    ST_SysPower PowerSupply;

    ret = Ql_RIL_SendATCmd("AT+CBC", 6, Power_ATResponse_Hanlder, (void *)&PowerSupply, 0);
    if (RIL_AT_SUCCESS == ret)
    {
        *capacity = PowerSupply.capacity;
        *voltage  = PowerSupply.voltage;
    }
    return ret;
}

static s32 Power_ATResponse_Hanlder(char* line, u32 len, void* userdata)
{
    ST_SysPower *PowerSupply;

    PowerSupply = (ST_SysPower *)userdata;
    char *head = Ql_RIL_FindString(line, len, "+CBC:"); //continue wait
    if(head)
    {
        char strTmp[10];
        char *p1,*p2;
        p1 = Ql_strstr(head, ":");
        p2 = Ql_strstr(p1 + 1, ",");
        if (p1 && p2)
        {
            p1 = p2;
            p2 = Ql_strstr(p1 + 1, ",");
            if (p1 && p2)
            {
                Ql_memset(strTmp, 0x0, sizeof(strTmp));
                Ql_memcpy(strTmp, p1 + 1, p2 - p1 - 1);
                PowerSupply->capacity = Ql_atoi(strTmp);
                p1 = p2;
                p2 = Ql_strstr(p1 + 1, "\r\n");
                if (p1 && p2)
                {
                    Ql_memset(strTmp, 0x0, sizeof(strTmp));
                    Ql_memcpy(strTmp, p1 + 1, p2 - p1 - 1);
                    PowerSupply->voltage = Ql_atoi(strTmp);
                }
            } 
        }             
        //    Ql_sscanf(head,"%*[^ ]%d,%d,%[^\r\n]",&PowerSupply->capacity,&PowerSupply->voltage);
        return  RIL_ATRSP_CONTINUE;
    }

    head = Ql_RIL_FindLine(line, len, "OK"); // find <CR><LF>OK<CR><LF>, <CR>OK<CR>£¬<LF>OK<LF>
    if(head)
    {  
        return  RIL_ATRSP_SUCCESS;
    }

    head = Ql_RIL_FindLine(line, len, "ERROR");// find <CR><LF>ERROR<CR><LF>, <CR>ERROR<CR>£¬<LF>ERROR<LF>
    if(head)
    {  
        return  RIL_ATRSP_FAILED;
    } 

    head = Ql_RIL_FindString(line, len, "+CME ERROR:");//fail
    if(head)
    {
        return  RIL_ATRSP_FAILED;
    }

    return RIL_ATRSP_CONTINUE; //continue wait

}




در مورد ارسال پیامک هم باید یک موضوع جدید باز کنید و سوالتون رو اونجا بپرسید🙏
2 پسندیده

ممنون از راهنمایی تون بنده از کدی که فرستادین در ادامه کد هام استفاده کردم ولی هنگام کامپایل کردن به ارور هایی که تو عکس هست بر میخورم
تابعی که مقدار جواب atcommand در آن کدوم تابع میشه؟

1 پسندیده

سلام وقتتون بخیر
من طبق داکیومنت Quectel_MC65_GNSS_AGPS_Application_Note_V1.0 برای ماژول MC65 رفتم جلو و بعد از دستور AT+QGAGPS میزنم QGAGPS : 5+ بر میگردونه و توی داکیومنت نوشته بود که این مربوط به ارور DNS هست!!!

توی زمان های مختلف و با سیمکارت های مختلف تست کردم اما متاسفانه باز همین برمیگردونه چجور باید همچین باگ هایی و مشکلاتی رو فیکس کرد؟

یک موضوع جدید باز کنید و سوالتون رو اونجا بپرسید.

سلام من کماکان مشکل دارم تو جواب گرفتن از تابع call back
لطف کنید کمک کنید

بهتره یه پورت سریال مجازی باز کنی و کلا با Atcommand کار کنی. RIL و این چیزا رو بزار کنار.