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:
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"
voiduart_recv(hal_uart_port_tuart_port,UINT8*data,UINT16len,void*arg){OSI_PRINTFI("uartapi recv uart_port=%d len=%d, data=%s",uart_port,len,(char*)data);}staticvoidprvThreadEntry(void*param){OSI_LOGI(0,"application thread enter, param 0x%x",param);hal_uart_config_tdrvcfg={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;intport=0;uint8_tsend_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
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
Devices
A aba "Devices".
"Add…"
Na caixa de diálogo pop-up
"Desktop"
Agora será apresentada uma caixa de diálogo.
Insira o nome do novo dispositivo, no caso fibocom
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.
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
Nenhum comentário:
Postar um comentário