Quectel M66 OpenCPU. Программирование. Что нового?

Что нового?

По сравнению с предыдущими решениями OpenCPU, новый OpenCPU модуль предоставляет RIL драйвер на уровне User API, который значительно облегчает разработку. Когда разработчик посылает AT команды ядру системы, полученные ответы обрабатываются сперва в RIL, а затем RIL возвращает данные в приложение. Следующий код демонстрирует различия в деталях. 

Новое OpenCPU решение:

s32 
RIL_NW_GetSignalQuality(u32 * rssi, u32 * ber)
{
    s32 retRes = 0;
    char strAT[] = "AT+CSQ\0";
    ST_CSQ_Reponse pCSQ_Reponse;
    // Здесь отправка “AT+CSQ” команды
    retRes = Ql_RIL_SendATCmd(strAT,Ql_strlen(strAT), ATResponse_CSQ_Handler,(void*)&pCSQ_Reponse,0);
    // Теперь ответ на “AT+CSQ” записывается в pCSQ_Reponse и из нее можно получить значение CSQ
    if(RIL_AT_SUCCESS == retRes)
    {
        *rssi = pCSQ_Reponse.rssi;
        *ber = pCSQ_Reponse.ber;
    }
    return retRes;
}

Ранее используемое OpenCPU решение:

// Здесь отправка “AT+CSQ” команды
void SendAtCmd()
{
    s32 ret;
    ret = Ql_SendToModem(ql_md_port1, (u8*)"AT+CSQ\r", Ql_strlen("AT+CSQ\r"));
}

//Здесь получаем ответ “AT+CSQ” в главном цикле программы. 
void ql_entry( )
{
    switch (g_cmd_idx)
    {
        case 1:// Echo mode off
        Ql_sprintf((char *)buffer, "ATE0\n");
        while(1)
        { 
            Ql_GetEvent(&g_event);
            switch(g_event.eventType)
            {
                case EVENT_MODEMDATA:
                {
                    //TODO: receive and handle data from CORE through virtual modem port
                    PortData_Event* pPortEvt = (PortData_Event*)&g_event.eventData.modemdata_evt;
                    // Here receive URC and the AT response
                    break;
                } 
            }
        }
    }
}

Поддержка GCC компилятора

M66 OpenCPU поддерживает бесплатный компилятор GCC от Sourcery CodeBench ARM EABI, а также поддерживает ARM RVCT компилятор. Предыдущий OpenCPU поддерживал лишь RVCT.

Поддержка IDE

M66 OpenCPU поддерживает большое количество инструментов таких, как Source Insight, Eclipse и Microsoft Visual Studio.

Простота конфигурации и инициализации GPIO

M66 OpenCPU предоставляет очень простой метод конфигурации и инициализации GPIO. Далее простой пример кода инициализации пина NETLIGHT. После подачи питания NETLIGHT пин должен быть сконфигурирован как выход с низким уровнем и подтяжкой к нулю.

Имя функции / Название пина / Направление вход-выход / Уровень / Подтяжка
GPIO_ITEM ( PINNAME_NETLIGHT, PINDIRECTION_OUT, PINLEVEL_LOW, PINPULLSEL_PULLDOWN)

Кроме того, разработчик может вызвать API функцию перепрограммирования GPIO. Например, вызов QI_GPIO_SetLevel() может изменить логический уровень на пине GPIO.

Простота добавления новой задачи (потока)

Добавить новую задачу стало еще проще, просто добавив ее в “custom_task_cfg.h” файл.
ID имя задачи: Разработчик может определить имя задачи и система будет автоматически определять и присваивать значение.
Размер стека задачи: Диапазон размера стека в пределах от 1 до 10 кбайт, если есть какие-либо операции с файлами в задаче, то размер стека должен быть установлен по меньшей мере в 5 кбайт, чтобы предотвратить переполнение стека.

TASK_ITEM (Proc_main_task, main_task_id, 4*1024, DEFAULT_VALUE1, DEFAULT_VALUE2)

Программирование пина Power Key в приложении

Дадим пример как включать и выключать питание модуля с помощью пина Power Key.

static const ST_PowerKeyCfg pwrkeyCfg = {
{
    TRUE, // включение питания по нажатию PWRKEY
    TRUE, // выключение питания по нажатию PWRKEY
};

Программирование пина Reset в приложении

EMERG_OFF пин может работать в двух режимах. Один режим “Power Down” и другой “Reset”, который как раз и есть режим по умолчанию:

static const ST_EmergOffCfg emergoffCfg = {
    EMERGOFF_RESET
};

В режиме EMERGOFF_RESET по низкому логическом уровню на пине EMERG_OFF модуль сбросится.
В режиме EMERGOFF_POWEROFF по низкому логическом уровню на пине EMERG_OFF модуль выключится.
Язык программирования для пользовательского приложения по умолчанию Си.

Один ответ в “Quectel M66 OpenCPU. Программирование. Что нового?”

  1. static const ST_PowerKeyCfg pwrkeyCfg = {
    {
    TRUE, // включение питания по низкому уровню на входе PWRKEY
    TRUE, // выключение питания по низкому уровню на входе PWRKEY
    };

Комментарии отключены.