quarta-feira, 11 de dezembro de 2024

FIBOCOM - USO DA IDE DO QT - OPENCPU - AUTOCOMPLETE E GERAÇÃO PAC - WS2L UBUNTU 24

A construção de programas com C ou C++ para o dispositivo L610 bem explicada pelo s documentos:

  • Fibocom_L61x&LC61x&LG61x&MC61x&MG61x OpenCPU Programming Guide_V1.1.pdf 
  • Fibocom_L61x&LC61x&LG61x&MC61x&MG61x_Introduction to OpenCPU System Framework and Operating Process_V1.1.pdf

No entanto, embora o processo explicado nos exemplos seja bom para prova de conceito, realmente é melhor o conforto e a conveniência fornecidos pelo meu IDE. Neste exemplo será utilizado a IDE para pode digitar o programa em os recursos do AUTOCOMPLETE e então gerar o PAC, ou seja, sua aplicação como OPENCPU.

(Tradução, acertos e testes)

Resumo

Esta postagem explica como você pode configurar o QtCreator para criar um aplicativo C++ e fazer uso do AUTOCOMPLETE e gerar o PAC.

REQUISITOS:

Uma máquina de desenvolvimento Linux funcional (foi utilizado WSL2 com UBUNTU 24)

O modo OpenCPU garante a comunicação entre os aplicativos dos clientes e o módulo sem a necessidade de os conjuntos de comandos MCU ou AT. Os aplicativos dos clientes, como parte do programa de firmware principal, chamam APIs integradas para implementar as funções desejadas, por exemplo, iniciar/parar o protocolo integrado pilha para rede dial-up (DUN). Os aplicativos chamam APIs que encapsulam o LWIP interno interface para transmissão de dados, chamada encapsulada HTTP, MQTT, FTP e outras APIs para implementar diferentes requisitos de serviço, chame UART encapsulado, I2C, SPI e outras APIs para controlar periféricos dispositivos, incluindo o LCD e a câmera, chamam APIs de sistema operacional encapsuladas para criar threads, filas de mensagens, e semáforos, e chamar APIs GPIO encapsuladas para gerenciamento GPIO e outros requisitos. 
A função de implementação da API é a mesma que a função de implementação do comando AT. Quase todos as operações que os conjuntos de comandos AT podem executar podem ser desenvolvidas para APIs para que os aplicativos chamem assim quanto a atender requerimentos em diferentes cenários.

Configuração do ambiente de desenvolvimento OpenCPU e Compilação

Será necessário a execução da Virtualização do UBUNTU, no caso foi utilizado o WSL.


Depois de instalar o Ubuntu, conecte-se à Internet conforme necessário. Depois de se conectar à Internet com sucesso, use o privilégio de root do Ubuntu para executar os seguintes comandos: 

sudo apt install build-essential python3 python3-tk qtbase5-dev



sudo apt install libc6 libstdc++6 zlib1g


Os comandos anteriores são usados para instalar a biblioteca e o software necessários para compilar um programa do usuário.

Obtenha com a FIBOCOM  
o SDK core_sdk_16000.1000.00.88.15.03.tar.zip

ou Docker

Copie core_sdk.tar.gz para um diretório no Ubuntu, por exemplo, /home/user/. Rode o seguinte comando na interface de shell do Ubuntu.:

cd /home/ubuntu/
unzip core_sdk_16000.1000.00.88.15.03.tar.zip


Depois de descompactar o pacote, execute os seguintes comandos de compilação em sequência: 

cd core_sdk_16000.1000.00.88.15.03.tar/
tar xzvf core_sdk_16000.1000.00.88.15.03.tar.gz


Adicionando código a ser compilado

Depois de obter o pacote TAR e descompactá-lo em uma pasta , você verá arquivos mostrados na figura a seguir, pasta ROOT do CSDK.


Entre eles, hello_world.c e demo.c são códigos de exemplo.

Enfim, para o código exemplo abaixo, chamado de Uart Demo, crie um arquivo oc_uart_demo.c na pasta ROOT e copie o conteúdo para dentro.

Exemplo que utiliza UART
/* Copyright (C) 2018 RDA Technologies Limited and/or its affiliates("RDA"). * All rights reserved. * * This software is supplied "AS IS" without any warranties. * RDA assumes no responsibility or liability for the use of the software, * conveys no license or title under any patent, copyright, or mask work * right to the product. RDA reserves the right to make changes in the * software without notification. RDA also make no representation or * warranty that such application will be suitable for the specified use * without further testing or modification. */ #define OSI_LOG_TAG OSI_MAKE_LOG_TAG('M', 'Y', 'A', 'P') #include "fibo_opencpu.h" #include "oc_uart.h" #include "stdio.h" #include "stdlib.h" #include "string.h" void uart_recv(hal_uart_port_t uart_port, UINT8 *data, UINT16 len, void *arg) { OSI_PRINTFI("uartapi recv uart_port=%d len=%d, data=%s", uart_port, len, (char *)data); } static void prvThreadEntry(void *param) { OSI_LOGI(0, "application thread enter, param 0x%x", param); hal_uart_config_t drvcfg = {0}; drvcfg.baud = 115200; drvcfg.parity = HAL_UART_NO_PARITY; drvcfg.data_bits = HAL_UART_DATA_BITS_8; drvcfg.stop_bits = HAL_UART_STOP_BITS_1; drvcfg.rx_buf_size = UART_RX_BUF_SIZE; drvcfg.tx_buf_size = UART_TX_BUF_SIZE; int port = 0; uint8_t send_test[] = "uart testando"; fibo_hal_uart_init(port, &drvcfg, uart_recv, NULL); for (size_t i = 0; i < 3; i++) { fibo_hal_uart_put(port, send_test, sizeof(send_test) - 1); fibo_taskSleep(1 * 1000); } OSI_LOGI(0, "application thread exit, param 0x%x", param); fibo_hal_uart_deinit(port); fibo_thread_delete(); } void* appimg_enter(void *param) { OSI_LOGI(0, "application image enter, param 0x%x", param); fibo_thread_create(prvThreadEntry, "mythread", 1024, NULL, OSI_PRIORITY_NORMAL); return 0; } void appimg_exit(void) { OSI_LOGI(0, "application image exit"); }

Você só precisa adicionar código à macro CONFIG_APPIMG_LOAD_FLASH em CMakeLists.txt e adicionar o caminho do arquivo de cabeçalho recém-adicionado.

Execute

. tools/core_launch.sh 
cout
cd ..
cmake .. /.. -G Ninja
adicione em CMakeLists.txt (root do sdk) o fonte que voce quer testar

if(CONFIG_APPIMG_LOAD_FLASH)
    set(target hello_flash)
    add_appimg(${target} ${flash_ldscript} 
     ###hello_world.c
     ###demo.c
### pingpong.c
oc_uart_demo )

ninja
ubuntu@DESKTOP-UHGFA4M:~/core_sdk_16000.1000.00.88.15.03.tar/out$ ninja clean
[1/1] Cleaning all built files...
Cleaning... 8 files.
ubuntu@DESKTOP-UHGFA4M:~/core_sdk_16000.1000.00.88.15.03.tar/out$ ninja
[6/6] Generating hex/hello_flash.pac
ubuntu@DESKTOP-UHGFA4M:~/core_sdk_16000.1000.00.88.15.03.tar/out$


QT COMO IDE

Instale o QT
sudo apt install -y qtcreator qtbase5-dev qt5-qmake cmake

Execute QT

qtcreator

Inicie o QtCreator e selecione "Edit" → "Preferences" na barra de menu principal. Ele pode se mover entre as versões.

  1.  Edit-->Preferences--> "Kits"
  2. "Compilers"
  3. "Add▾" e selecione "GCC" → "C++"
  4. Navegue ou insira o caminho completo para c++
  5. Selecione "gcc-arm-none-eabi"
    /home/ubuntu/core_sdk_16000.1000.00.88.15.03.tar/prebuilts/linux/gcc-arm-none-eabi/bin/arm-none-eabi-gcc
  6. Digite um nome de sua preferência que permita que você se lembre de que este é o compilador C++ para seu Fibocom L610, no caso fibocom-gcc.

Repita o processo acima, mas selecione "GCC" → "C" e navegue até o compilador C 


/home/ubuntu/core_sdk_16000.1000.00.88.15.03.tar/prebuilts/linux/gcc-arm-none-eabi/bin/arm-none-eabi-g++

Digite também um nome de sua preferência que permita que você se lembre de que este é o compilador C++ para seu Fibocom L610, no caso fibocom-g++

Apply e Ok


Agora você pode fechar a caixa de diálogo de preferências.

O QtCreator entende vários tipos de dispositivos: Desktop, celulares e dispositivos embarcados, para citar alguns. 'Dispositivos' contêm informações sobre como implementar um binário e como se conectar ao dispositivo. Criaremos um dispositivo 'fibocom'.

Abra a caixa de diálogo 'Preferences' novamente. Agora você já deve estar familiarizado com como fazer isso. Clique

  1. Devices
  2. A aba "Devices".
  3. "Add…"

Na caixa de diálogo pop-up

  1. "Desktop"

Agora será apresentada uma caixa de diálogo.

  1.  Insira  o nome do novo dispositivo, no caso fibocom
  2. Atenção em Compilers (Manage), selecione os mapeados anteriormente




Finalmente em QT Version coloque
none, a configuração final ficará


Click em Apply e OK

Agorá vá em
File-->Open File or Project-->Pasta /home/ubuntu/core_sdk_16000.1000.00.88.15.03.tar e abra o arquivo CMakeLists.txt


Selecione o Kit fibocom e clique em Configure Project


Aguarde a configuração, o QT tentará enxergar o ambiente do SDK (CMake) do FIBOCOM



Click em hello_world.c, caso de um erro, no ubuntu execute 
rm .clang-format

Na base da IDE, selecione 4 Compile Output


Mas o importante que voce foi criado o binário PAC (hello_flash.pac) e também tem  uma IDE com AUTOCOMPLETE.

ubuntu@DESKTOP-UHGFA4M:~/core_sdk_16000.1000.00.88.15.03.tar/build/fibocom-Debug/hex$ ls appimg_flash_delete.pac fdl2.img hello_flash.img hello_flash.pac fdl1.img hello_flash.elf hello_flash.map hello_flash.sign.img ubuntu@DESKTOP-UHGFA4M:~/core_sdk_16000.1000.00.88.15.03.tar/build/fibocom-Debug/hex$




Para ter certeza que está funcionando o compilador...foi colado no demo.c o código tcp_ok_demo.c que se encontra na pasta demo.


Ao tentar compilar, passou pelo teste :)


E o melhor, AUTCOMPLETE ainda OK


Para gravar, execute Fibocom UpgradeDL
Não esquecer de instalar o PAC original do SDK antes



Último teste (exemplo da UART) acima


Neste exemplo abaixo, é enviado o comando ATI (clássico exemplo  OPENCPU)

/* Copyright (C) 2018 RDA Technologies Limited and/or its affiliates("RDA"). * All rights reserved. * * This software is supplied "AS IS" without any warranties. * RDA assumes no responsibility or liability for the use of the software, * conveys no license or title under any patent, copyright, or mask work * right to the product. RDA reserves the right to make changes in the * software without notification. RDA also make no representation or * warranty that such application will be suitable for the specified use * without further testing or modification. */ #define OSI_LOG_TAG OSI_MAKE_LOG_TAG('F', 'I', 'B', 'O') #include "osi_api.h" #include "osi_log.h" #include "osi_pipe.h" #include "at_engine.h" #include <string.h> #include "fibo_opencpu.h" static void at_res_callback(UINT8 *buf, UINT16 len) { OSI_PRINTFI("FIBO <--%s", buf); } static void prvVirtAtEntry(void *param) { const uint8_t *cmd = (const uint8_t *)"ATI\r\n"; fibo_at_send(cmd, strlen((const char *)cmd)); fibo_thread_delete(); } static FIBO_CALLBACK_T user_callback = { .at_resp = at_res_callback}; void *appimg_enter(void *param) { OSI_LOGI(0, "application image enter, param 0x%x", param); //init fibo_thread_create(prvVirtAtEntry, "at", 1024, NULL, OSI_PRIORITY_NORMAL); return (void *)&user_callback; } void appimg_exit(void) { OSI_LOGI(0, "application image exit"); }





































Utilizando a ferramenta COOLWATCHER pode-se ver o comando ATI sendo enviado e a resposta dele





Erro com LibCU

wget http://security.ubuntu.com/ubuntu/pool/main/i/icu/libicu55_55.1-7_amd64.deb
sudo dpkg -i libicu55_55.1-7_amd64.deb
sudo apt-get -f install
rm libicu55_55.1-7_amd64.deb


REFERÊNCIAS

Fibocom_cat1_L610&LC610N&LG610&MC615_Log Capture Guide_Windows_V1.0.2.pdf


Sobre a SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portfólio inclui modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS / GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e sensores.

Mais detalhes em www.smartcore.com.br

Nenhum comentário:

Postar um comentário