delete original app contents of xiuos
This commit is contained in:
parent
0e496a791f
commit
e603afa739
|
@ -0,0 +1,93 @@
|
|||
menu "Applications"
|
||||
|
||||
menu "config stack size and priority of main task"
|
||||
config MAIN_KTASK_STACK_SIZE
|
||||
int "Set main task stack size"
|
||||
default 1024
|
||||
config MAIN_KTASK_PRIORITY
|
||||
int
|
||||
default 4 if KTASK_PRIORITY_8
|
||||
default 10 if KTASK_PRIORITY_32
|
||||
default 85 if KTASK_PRIORITY_256
|
||||
endmenu
|
||||
|
||||
menuconfig APPLICATION_SENSOR
|
||||
bool "Using sensor apps"
|
||||
default n
|
||||
select PERCEPTION_SENSORDEVICE
|
||||
|
||||
if APPLICATION_SENSOR
|
||||
menuconfig APPLICATION_SENSOR_CO2
|
||||
bool "Using sensor CO2 apps"
|
||||
default n
|
||||
select PERCEPTION_CO2
|
||||
|
||||
if APPLICATION_SENSOR_CO2
|
||||
config APPLICATION_SENSOR_CO2_ZG09
|
||||
bool "Using sensor ZG09 apps"
|
||||
default n
|
||||
select PERCEPTION_ZG09
|
||||
endif
|
||||
|
||||
menuconfig APPLICATION_SENSOR_PM1_0
|
||||
bool "Using sensor PM1.0 apps"
|
||||
default n
|
||||
select PERCEPTION_PM
|
||||
|
||||
if APPLICATION_SENSOR_PM1_0
|
||||
config APPLICATION_SENSOR_PM1_0_PS5308
|
||||
bool "Using sensor PS5308 apps"
|
||||
default n
|
||||
select PERCEPTION_PS5308
|
||||
endif
|
||||
|
||||
menuconfig APPLICATION_SENSOR_VOICE
|
||||
bool "Using sensor voice apps"
|
||||
default n
|
||||
select PERCEPTION_VOICE
|
||||
|
||||
if APPLICATION_SENSOR_VOICE
|
||||
config APPLICATION_SENSOR_VOICE_D124
|
||||
bool "Using sensor D124 apps"
|
||||
default n
|
||||
select PERCEPTION_D124
|
||||
endif
|
||||
|
||||
menuconfig APPLICATION_SENSOR_HUMIDITY
|
||||
bool "Using sensor humidity apps"
|
||||
default n
|
||||
select PERCEPTION_HUMIDITY
|
||||
|
||||
if APPLICATION_SENSOR_HUMIDITY
|
||||
config APPLICATION_SENSOR_HUMIDITY_HS300X
|
||||
bool "Using sensor HS300x apps"
|
||||
default n
|
||||
select PERCEPTION_HS300X
|
||||
endif
|
||||
|
||||
menuconfig APPLICATION_SENSOR_TEMPERATURE
|
||||
bool "Using sensor temperature apps"
|
||||
default n
|
||||
select PERCEPTION_TEMPERATURE
|
||||
|
||||
if APPLICATION_SENSOR_TEMPERATURE
|
||||
config APPLICATION_SENSOR_TEMPERATURE_HS300X
|
||||
bool "Using sensor HS300x apps"
|
||||
default n
|
||||
select PERCEPTION_HS300X
|
||||
endif
|
||||
endif
|
||||
|
||||
menuconfig CONNECTION_COMMUNICATION_ZIGBEE
|
||||
bool "enable zigbee demo"
|
||||
default n
|
||||
select CONFIG_CONNECTION_COMMUNICATION_ZIGBEE
|
||||
if CONNECTION_COMMUNICATION_ZIGBEE
|
||||
source "$KERNEL_DIR/framework/connection/Adapter/zigbee/Kconfig"
|
||||
endif
|
||||
|
||||
|
||||
|
||||
source "$APP_DIR/Applications/app_test/Kconfig"
|
||||
|
||||
endmenu
|
|
@ -1,5 +1,45 @@
|
|||
SRC_FILES := main.c
|
||||
|
||||
SRC_DIR := general_functions
|
||||
|
||||
SRC_FILES := main.c framework_init.c
|
||||
|
||||
ifeq ($(CONFIG_RESOURCES_SDIO), y)
|
||||
SRC_FILES += sd_card_mount.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_RESOURCES_SPI_SD), y)
|
||||
SRC_FILES += spi_sd_card_mount.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_CONNECTION_COMMUNICATION_BOOTSTART_LORA_NET_SAMPLE), y)
|
||||
SRC_DIR += connection_demo/adhoc_lora_demo
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_CONNECTION_COMMUNICATION_ZIGBEE), y)
|
||||
SRC_DIR += connection_demo/zigbee_demo
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_CONNECTION_COMMUNICATION_ETHERNET), y)
|
||||
SRC_DIR += connection_demo/ethernet_demo
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_CONNECTION_COMMUNICATION_WIFI), y)
|
||||
SRC_DIR += connection_demo/wifi_demo
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_CONNECTION_COMMUNICATION_NB_IOT), y)
|
||||
SRC_DIR += connection_demo/nbiot_demo
|
||||
endif
|
||||
|
||||
# ifeq ($(CONFIG_CONNECTION_COMMUNICATION_4G), y)
|
||||
# SRC_DIR += connection_demo/4G_demo
|
||||
# endif
|
||||
|
||||
ifeq ($(CONFIG_CONNECTION_COMMUNICATION_BLUETOOTH), y)
|
||||
SRC_DIR += connection_demo/bluetooth_demo
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_APPLICATION_SENSOR),y)
|
||||
SRC_DIR += sensor_app
|
||||
endif
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
menuconfig USER_TEST
|
||||
bool "Enable application test function "
|
||||
default n
|
||||
|
||||
if USER_TEST
|
||||
config USER_TEST_LORA_ADHOC
|
||||
bool "Config test lora adhoc"
|
||||
default n
|
||||
|
||||
config USER_TEST_SPI_LORA
|
||||
bool "Config test spi lora"
|
||||
default n
|
||||
|
||||
config USER_TEST_SPI_FLASH
|
||||
bool "Config test spi flash"
|
||||
default n
|
||||
|
||||
endif
|
|
@ -0,0 +1,15 @@
|
|||
SRC_FILES :=
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_LORA_ADHOC),y)
|
||||
SRC_FILES += test_adhoc_lora.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_SPI_LORA),y)
|
||||
SRC_FILES += test_spi_lora.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USER_TEST_SPI_FLASH),y)
|
||||
SRC_FILES += test_spi_flash.c
|
||||
endif
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
|
@ -0,0 +1,20 @@
|
|||
#include <xiuos.h>
|
||||
|
||||
extern void net_lora_client(int argc, char *argv[]);
|
||||
extern void net_lora_gateway(int argc, char *argv[]);
|
||||
|
||||
void demo_lora_adhoc()
|
||||
{
|
||||
#ifdef CONNECTION_COMMUNICATION_SET_AS_LORA_CLIENT
|
||||
char pgk_count[32];
|
||||
char* param[3];
|
||||
param[0] = "xxx";
|
||||
param[1] = CONNECTION_COMMUNICATION_LORA_CLIENT_NAME;
|
||||
itoa(CONNECTION_COMMUNICATION_LORA_CLIENT_PKG_COUNT, pgk_count, 10);
|
||||
param[2] = pgk_count;
|
||||
net_lora_client(2, param);
|
||||
#endif
|
||||
#ifdef CONNECTION_COMMUNICATION_SET_AS_LORA_GATEWAY
|
||||
net_lora_gateway(0, 0);
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,175 @@
|
|||
/*
|
||||
* File : spi_flash_sfud.c
|
||||
* This file is part of RT-Thread RTOS
|
||||
* COPYRIGHT (C) 2006 - 2016, RT-Thread Development Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2016-09-28 armink first version.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file test_spi_flash.c
|
||||
* @brief support to test spi flash function
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021-05-17
|
||||
*/
|
||||
|
||||
/*************************************************
|
||||
File name: test_spi_flash.c
|
||||
Description: support spi flash function test
|
||||
Others: add spi flash test cmd from SFUD/blob/master/demo/stm32f2xx_rtt/RT-Thread-2.1.0/components/drivers/spi/spi_flash_sfud.c
|
||||
https://github.com/armink/SFUD/
|
||||
History:
|
||||
1. Date: 2021-05-17
|
||||
Author: AIIT XUOS Lab
|
||||
Modification:
|
||||
1. support spi flash open, read and write function
|
||||
*************************************************/
|
||||
|
||||
#include <xiuos.h>
|
||||
#include <device.h>
|
||||
#include <flash_spi.h>
|
||||
#include <user_api.h>
|
||||
|
||||
#define SPI_FLASH_PATH "/dev/spi1_W25Q64"
|
||||
#define FlashDataPrint(ch) ((unsigned int)((ch) - ' ') < 127u - ' ')
|
||||
|
||||
static int spi_flash_fd;
|
||||
|
||||
void FlashOpen(void)
|
||||
{
|
||||
x_err_t ret = EOK;
|
||||
|
||||
spi_flash_fd = open(SPI_FLASH_PATH, O_RDWR);
|
||||
if (spi_flash_fd < 0) {
|
||||
KPrintf("open spi flash fd error %d\n", spi_flash_fd);
|
||||
}
|
||||
|
||||
KPrintf("Spi Flash init succeed\n");
|
||||
|
||||
return;
|
||||
}
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
|
||||
FlashOpen, FlashOpen, open spi flash device);
|
||||
|
||||
void FlashRead(int argc, char *argv[])
|
||||
{
|
||||
x_size_t i, j = 0;
|
||||
uint32 addr;
|
||||
uint32 size;
|
||||
uint8 data[16];
|
||||
|
||||
struct BusBlockReadParam read_param;
|
||||
memset(&read_param, 0, sizeof(struct BusBlockReadParam));
|
||||
|
||||
memset(data, 0, 16);
|
||||
|
||||
if (3 != argc) {
|
||||
KPrintf("FlashRead cmd format: FlashRead addr size.\n");
|
||||
return;
|
||||
} else {
|
||||
addr = strtol(argv[1], NULL, 0);
|
||||
size = strtol(argv[2], NULL, 0);
|
||||
|
||||
read_param.buffer = data;
|
||||
read_param.pos = addr;
|
||||
read_param.size = size;
|
||||
|
||||
if (read_param.buffer) {
|
||||
read(spi_flash_fd, &read_param, size);
|
||||
if (size == read_param.read_length) {
|
||||
KPrintf("Read the %s flash data success. Start from 0x%08X, size is %ld. The data is:\n",
|
||||
SPI_FLASH_PATH, addr, size);
|
||||
KPrintf("Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");
|
||||
for (i = 0; i < size; i += 16) {
|
||||
KPrintf("[%08X] ", addr + i);
|
||||
/* dump hex */
|
||||
for (j = 0; j < 16; j++) {
|
||||
if (i + j < size) {
|
||||
KPrintf("%02X ", data[i + j]);
|
||||
} else {
|
||||
KPrintf(" ");
|
||||
}
|
||||
}
|
||||
/* dump char for hex */
|
||||
for (j = 0; j < 16; j++) {
|
||||
if (i + j < size) {
|
||||
KPrintf("%c", FlashDataPrint(data[i + j]) ? data[i + j] : '.');
|
||||
}
|
||||
}
|
||||
KPrintf("\n");
|
||||
}
|
||||
KPrintf("\n");
|
||||
}
|
||||
} else {
|
||||
KPrintf("SpiFlashRead alloc read buffer failed!\n");
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
|
||||
FlashRead, FlashRead, read data from spi flash device);
|
||||
|
||||
void FlashWrite(int argc, char *argv[])
|
||||
{
|
||||
x_err_t ret = EOK;
|
||||
x_size_t i, j = 0;
|
||||
uint32 addr;
|
||||
uint32 size;
|
||||
uint8 data[16];
|
||||
|
||||
struct BusBlockWriteParam write_param;
|
||||
memset(&write_param, 0, sizeof(struct BusBlockWriteParam));
|
||||
|
||||
memset(data, 0, 16);
|
||||
|
||||
if (argc < 3) {
|
||||
KPrintf("FlashWrite cmd format: FlashWrite addr data.\n");
|
||||
return;
|
||||
} else {
|
||||
addr = strtol(argv[1], NULL, 0);
|
||||
size = argc - 2;
|
||||
|
||||
write_param.buffer = data;
|
||||
write_param.pos = addr;
|
||||
write_param.size = size;
|
||||
|
||||
if (data) {
|
||||
for (i = 0; i < size; i++) {
|
||||
data[i] = strtol(argv[2 + i], NULL, 0);
|
||||
}
|
||||
|
||||
ret = write(spi_flash_fd, &write_param, size);
|
||||
if (EOK == ret) {
|
||||
KPrintf("Write the %s flash data success. Start from 0x%08X, size is %ld.\n",
|
||||
SPI_FLASH_PATH, addr, size);
|
||||
KPrintf("Write data: ");
|
||||
for (i = 0; i < size; i++) {
|
||||
KPrintf("%d ", data[i]);
|
||||
}
|
||||
KPrintf(".\n");
|
||||
}
|
||||
} else {
|
||||
KPrintf("SpiFlashWrite alloc write buffer failed!\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
|
||||
FlashWrite, FlashWrite, write data to spi flash device);
|
|
@ -0,0 +1,3 @@
|
|||
SRC_FILES := client.c gateway.c
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
|
@ -0,0 +1,108 @@
|
|||
#include <user_api.h>
|
||||
#include <string.h>
|
||||
#include <xs_adapter_lora.h>
|
||||
#include <xs_adapter_manager.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
char client_name[DEVNAME_LEN_MAX] = "lora_dev_123";
|
||||
|
||||
void success_cb(void *param)
|
||||
{
|
||||
printf("success_cb, param = %s\n", param);
|
||||
}
|
||||
|
||||
void invert_param(void *param)
|
||||
{
|
||||
printf("success_cb02 invoke, invert bool param.\n");
|
||||
bool *bparam = (bool *)param;
|
||||
if (*bparam)
|
||||
{
|
||||
*bparam = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
*bparam = true;
|
||||
}
|
||||
}
|
||||
|
||||
void net_lora_client(int argc, char *argv[])
|
||||
{
|
||||
int pkg_count = 10;
|
||||
if (argc >= 1)
|
||||
{
|
||||
memset(client_name, 0, DEVNAME_LEN_MAX);
|
||||
strncpy(client_name, argv[1], strlen(argv[1]));
|
||||
printf("lora client set clientName(%s).\n", client_name);
|
||||
}
|
||||
|
||||
if (argc >= 2)
|
||||
{
|
||||
pkg_count = atoi(argv[2]);
|
||||
printf("lora client set pkg_count(%d).\n", pkg_count);
|
||||
}
|
||||
|
||||
// 1.Create an adapter for a specific agreement (LORA)
|
||||
static struct AdapterLora lora_adapter;
|
||||
memset(&lora_adapter, 0, sizeof(lora_adapter));
|
||||
struct AdapterDone lora_example_done = {
|
||||
.NetAiitOpen = LoraAdapterOpen,
|
||||
.NetAiitClose = LoraAdapterCose,
|
||||
.NetAiitSend = LoraAdapterSendc2g,
|
||||
.NetAiitReceive = NULL,
|
||||
.NetAiitJoin = LoraAdapterJoin,
|
||||
.NetAiitIoctl = NULL,
|
||||
};
|
||||
lora_adapter.parent.done = lora_example_done; // Bind adapter operation
|
||||
lora_adapter.name = client_name; // Set adapter name
|
||||
lora_adapter.spi_lora_fd = -1; // Set adapter information
|
||||
lora_adapter.deve_ui = "xxx";
|
||||
lora_adapter.app_key = "yyy";
|
||||
|
||||
// 2.Register the adapter in the list
|
||||
LoraAdapterInit();
|
||||
LoraAdapterRegister((adapter_t)&lora_adapter);
|
||||
|
||||
// 3.Find from the list of registered adapters
|
||||
adapter_t padapter = LoraAdapterFind(client_name);
|
||||
if (NONE == padapter)
|
||||
{
|
||||
printf("adapter find failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// 4.Open adapter
|
||||
if (0 != padapter->done.NetAiitOpen(padapter))
|
||||
{
|
||||
printf("adapter open failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// 5.Join the specified network segment as client
|
||||
printf("NetAiitJoin start. \n");
|
||||
padapter->done.NetAiitJoin(padapter, ROLE_TYPE_SLAVE, CONNECTION_COMMUNICATION_LORA_NET_ID);
|
||||
printf("NetAiitJoin end. \n");
|
||||
|
||||
// 6.Point to point sending data to gateway
|
||||
int i = 0;
|
||||
while (i < pkg_count)
|
||||
{
|
||||
char data[120] = {0};
|
||||
sprintf(data, "***** I am %s, data_num = %d ******" ,client_name, i);
|
||||
|
||||
bool v = false;
|
||||
padapter->done.NetAiitSend(padapter, data, strlen(data) + 1, true, 10000, 0, invert_param, &v, NULL);
|
||||
while (!v) // Asynchronous analog synchronization
|
||||
{
|
||||
UserTaskDelay(100);
|
||||
}
|
||||
printf("send success(main thread)... %s\n" ,data);
|
||||
|
||||
i++;
|
||||
UserTaskDelay(800); // Contract interval
|
||||
}
|
||||
printf("all pkg send success(main thread), quit.\n");
|
||||
|
||||
padapter->done.NetAiitClose(padapter);
|
||||
printf("client quit.\n");
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
#include <user_api.h>
|
||||
#include <string.h>
|
||||
#include <xs_klist.h>
|
||||
#include <xs_adapter_lora.h>
|
||||
#include <xs_adapter_manager.h>
|
||||
|
||||
extern DoubleLinklistType online_user_head;
|
||||
|
||||
void net_lora_gateway(int argc, char *argv[])
|
||||
{
|
||||
// 1.New specific agreement (LORA) adapter
|
||||
static struct AdapterLora lora_adapter;
|
||||
memset(&lora_adapter, 0, sizeof(lora_adapter));
|
||||
struct AdapterDone lora_example_done = {
|
||||
.NetAiitOpen = LoraAdapterOpen,
|
||||
.NetAiitClose = NULL,
|
||||
.NetAiitSend = NULL,
|
||||
.NetAiitReceive = LoraAdapterReceive,
|
||||
.NetAiitJoin = LoraAdapterJoin,
|
||||
.NetAiitIoctl = NULL,
|
||||
};
|
||||
lora_adapter.parent.done = lora_example_done; // Bind adapter operation
|
||||
lora_adapter.name = "lora_dev_456"; // Set adapter name
|
||||
lora_adapter.spi_lora_fd = -1; // Set adapter information
|
||||
lora_adapter.deve_ui = "xxx";
|
||||
lora_adapter.app_key = "yyy";
|
||||
|
||||
// 2.Register the adapter in the list
|
||||
LoraAdapterInit();
|
||||
LoraAdapterRegister((adapter_t)&lora_adapter);
|
||||
|
||||
// 3.Find from the list of registered adapters
|
||||
adapter_t padapter = LoraAdapterFind("lora_dev_456");
|
||||
if (NONE == padapter)
|
||||
{
|
||||
printf("adapter find failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// 4.Open adapter
|
||||
if (0 != padapter->done.NetAiitOpen(padapter))
|
||||
{
|
||||
printf("adapter open failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// 5.Join the specified network segment as gateway
|
||||
padapter->done.NetAiitJoin(padapter, ROLE_TYPE_MASTER, CONNECTION_COMMUNICATION_LORA_NET_ID);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void net_lora_connectedlist(int argc, char *argv[])
|
||||
{
|
||||
DoubleLinklistType* pNode;
|
||||
printf("******** connected users *********\n");
|
||||
DOUBLE_LINKLIST_FOR_EACH(pNode, &online_user_head)
|
||||
{
|
||||
OnlineUser* pUser =CONTAINER_OF(pNode, OnlineUser, link);
|
||||
printf("%s\n", pUser->user_name);
|
||||
}
|
||||
printf("*********************************\n");
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
SRC_FILES := bluetooth_receive_demo.c bluetooth_send_demo.c
|
||||
# zigbee_send_demo.c zigbee_receive_demo.c
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: bluetooth_receive_demo.c
|
||||
* @brief: using bluetooth to receive message
|
||||
* @version: 1.0
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2021/4/30
|
||||
*
|
||||
*/
|
||||
#include <xs_adapter_bluetooth.h>
|
||||
#include <string.h>
|
||||
#include <xs_klist.h>
|
||||
#include <xs_adapter_manager.h>
|
||||
#include <user_api.h>
|
||||
#include <string.h>
|
||||
static int re_sem;
|
||||
|
||||
static int buff_sem;
|
||||
|
||||
|
||||
/*Critical zone protection function for*/
|
||||
void BluetoothWait(char *rev_buffer)
|
||||
{
|
||||
while(1){
|
||||
if (strlen(rev_buffer)>1){
|
||||
UserSemaphoreAbandon(re_sem);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* receive message from another bluetooth device*/
|
||||
void BluetoothReceiveDemo(int argc, char *argv[])
|
||||
{
|
||||
adapter_t padapter = BluetoothAdapterFind("Bluetooth");
|
||||
if (NONE == padapter){
|
||||
KPrintf("adapter find failed!\n");
|
||||
return;
|
||||
}
|
||||
/*Open adapter*/
|
||||
if (0 != padapter->done.NetAiitOpen(padapter)){
|
||||
KPrintf("adapter open failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
char rev_buffer[NAME_NUM_MAX];
|
||||
/* Initialize semaphore */
|
||||
re_sem = UserSemaphoreCreate(0);
|
||||
/* receive buffer from serial port */
|
||||
padapter->done.NetAiitReceive(padapter,rev_buffer,strlen(rev_buffer),10000,false,NULL);
|
||||
BluetoothWait(rev_buffer);
|
||||
UserSemaphoreObtain(re_sem,-1);
|
||||
|
||||
|
||||
printf("\n");
|
||||
for (int i=0;i<strlen(rev_buffer);i++)
|
||||
{
|
||||
if(rev_buffer[i] != 0Xff)
|
||||
printf("%c",rev_buffer[i]);
|
||||
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
|
||||
|
||||
}
|
||||
#ifndef SEPARATE_COMPILE
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
|
||||
BluetoothReceiveDemo, BluetoothReceiveDemo, bluetooth receive function );
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: bluetooth_send_demo.c
|
||||
* @brief: using bluetooth to send message
|
||||
* @version: 1.0
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2021/4/30
|
||||
*
|
||||
*/
|
||||
#include <xs_adapter_bluetooth.h>
|
||||
#include <string.h>
|
||||
#include <xs_klist.h>
|
||||
#include <xs_adapter_manager.h>
|
||||
#include <string.h>
|
||||
#include <user_api.h>
|
||||
adapter_t padapter;
|
||||
/* a demo function to send message through command line using bluetooth*/
|
||||
/* first open bluetooth to start demo*/
|
||||
void BluetoothOpenDemo()
|
||||
{
|
||||
/*Find from the list of registered adapters*/
|
||||
// adapter_t padapter = BluetoothAdapterFind("Bluetoot");
|
||||
padapter = BluetoothAdapterFind("Bluetooth");
|
||||
if (NONE == padapter){
|
||||
printf("adapter find failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/*Open adapter*/
|
||||
if (0 != padapter->done.NetAiitOpen(padapter)){
|
||||
printf("adapter open failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
#ifndef SEPARATE_COMPILE
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
|
||||
BluetoothOpenDemo, BluetoothOpenDemo, bluetooth send function );
|
||||
#endif
|
||||
|
||||
void BluetoothSendDemo(int argc, char *argv[])
|
||||
{
|
||||
/*Find from the list of registered adapters*/
|
||||
bool v = false;
|
||||
padapter->done.NetAiitSend(padapter, argv[1], strlen(argv[1]) ,true,10000,0, NULL,&v,NULL);
|
||||
|
||||
|
||||
}
|
||||
#ifndef SEPARATE_COMPILE
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
|
||||
BluetoothSendDemo, BluetoothSendDemo, bluetooth send function );
|
||||
#endif
|
||||
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
SRC_FILES := ethernet_demo.c
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
|
@ -0,0 +1,197 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ethernet_demo.c
|
||||
* @brief Demo for ethernet function
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021.04.22
|
||||
*/
|
||||
#include <string.h>
|
||||
#include <user_api.h>
|
||||
#include <xs_adapter_manager.h>
|
||||
#include <xs_adapter_at_ethernet.h>
|
||||
|
||||
static bool opened = false;
|
||||
|
||||
void OpenEthernetMsg()
|
||||
{
|
||||
struct AdapterAT *at_adapter = ATAdapterFind(ETHERNET_ADAPTER_ID);
|
||||
if (!at_adapter)
|
||||
printf("ATAdapterFind failed .\n");
|
||||
|
||||
if (!opened){
|
||||
opened = true;
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SendEthernetMsg(int argc, char *argv[])
|
||||
{
|
||||
char ethernet_msg[128];
|
||||
if (argc >= 1){
|
||||
memset(ethernet_msg, 0, 128);
|
||||
strncpy(ethernet_msg, argv[1], strlen(argv[1]));
|
||||
printf("SendEthernetMsg(%s).\n", ethernet_msg);
|
||||
}
|
||||
|
||||
struct AdapterAT *at_adapter = ATAdapterFind(ETHERNET_ADAPTER_ID);
|
||||
if (!at_adapter)
|
||||
printf("ATAdapterFind failed .\n");
|
||||
|
||||
if (!opened){
|
||||
opened = true;
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
}
|
||||
|
||||
at_adapter->parent.done.NetAiitSend(&at_adapter->parent, ethernet_msg, strlen(ethernet_msg), true, 1000, 0, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
void RecvEthernetMsg()
|
||||
{
|
||||
char ethernet_recv_msg[128];
|
||||
memset(ethernet_recv_msg, 0, sizeof(ethernet_recv_msg));
|
||||
struct AdapterAT *at_adapter = ATAdapterFind(ETHERNET_ADAPTER_ID);
|
||||
if (!at_adapter)
|
||||
printf("ATAdapterFind failed .\n");
|
||||
|
||||
if (!opened){
|
||||
opened = true;
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
}
|
||||
|
||||
while (1){
|
||||
memset(ethernet_recv_msg, 0, sizeof(ethernet_recv_msg));
|
||||
if (EOK == at_adapter->parent.done.NetAiitReceive(&at_adapter->parent, ethernet_recv_msg, 128, 40000, true, NULL))
|
||||
printf("ethernet_recv_msg (%s)\n", ethernet_recv_msg);
|
||||
else
|
||||
printf("ethernet_recv_msg failed .\n");
|
||||
}
|
||||
}
|
||||
|
||||
void DhcpEthernet()
|
||||
{
|
||||
struct AdapterAT *at_adapter = ATAdapterFind(ETHERNET_ADAPTER_ID);
|
||||
if (!at_adapter)
|
||||
printf("ATAdapterFind failed .\n");
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
|
||||
if (!opened){
|
||||
opened = true;
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
}
|
||||
|
||||
if (EOK != at_adapter->atdone.ATOperateDHCP(at_adapter, 1))
|
||||
printf("EthernetNetstat failed \n");
|
||||
}
|
||||
|
||||
void PingEthernet()
|
||||
{
|
||||
char ethernet_recv_msg[128];
|
||||
memset(ethernet_recv_msg, 0, sizeof(ethernet_recv_msg));
|
||||
|
||||
struct AdapterAT *at_adapter = ATAdapterFind(ETHERNET_ADAPTER_ID);
|
||||
if (!at_adapter)
|
||||
printf("ATAdapterFind failed .\n");
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
struct PingResult result;
|
||||
char *ip_str = "192.168.250.250";
|
||||
|
||||
if (!opened){
|
||||
opened = true;
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
}
|
||||
|
||||
if (EOK == at_adapter->atdone.ATPing(at_adapter, ip_str, &result))
|
||||
printf("EthernetPing success (%s)\n", result.ip_addr.ipv4);
|
||||
else
|
||||
printf("EthernetPing failed \n");
|
||||
}
|
||||
|
||||
void SetUpEthernet()
|
||||
{
|
||||
char ethernet_recv_msg[128];
|
||||
memset(ethernet_recv_msg, 0, sizeof(ethernet_recv_msg));
|
||||
|
||||
struct AdapterAT *at_adapter = ATAdapterFind(ETHERNET_ADAPTER_ID);
|
||||
if (!at_adapter)
|
||||
printf("ATAdapterFind failed .\n");
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
struct PingResult result;
|
||||
|
||||
if (!opened){
|
||||
opened = true;
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
}
|
||||
|
||||
if (EOK == at_adapter->atdone.ATOperateUp(at_adapter))
|
||||
printf("EthernetSetUp success (%s)\n", result.ip_addr.ipv4);
|
||||
else
|
||||
printf("EthernetSetUp failed \n");
|
||||
}
|
||||
|
||||
void NetstatEthernet()
|
||||
{
|
||||
struct AdapterAT *at_adapter = ATAdapterFind(ETHERNET_ADAPTER_ID);
|
||||
if (!at_adapter)
|
||||
printf("ATAdapterFind failed .\n");
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
|
||||
if (!opened){
|
||||
opened = true;
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
}
|
||||
|
||||
if (EOK != at_adapter->atdone.ATNetstat(at_adapter))
|
||||
printf("EthernetNetstat failed \n");
|
||||
}
|
||||
|
||||
void AtTestCmdEthernet(int argc, char *argv[])
|
||||
{
|
||||
char cmd[64];
|
||||
if (argc >= 1){
|
||||
memset(cmd, 0, sizeof(cmd));
|
||||
strncpy(cmd, argv[1], strlen(argv[1]));
|
||||
printf("AT cmd send(%s).\n", cmd);
|
||||
}
|
||||
|
||||
strcat(cmd,"\r");
|
||||
struct AdapterAT* at_adapter = ATAdapterFind(ETHERNET_ADAPTER_ID);
|
||||
|
||||
if (!opened){
|
||||
opened = true;
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
}
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
|
||||
// Send hfa21 handshake, start cmd mode.
|
||||
ATOrderSend(at_adapter->agent, REPLY_TIME_OUT, NULL, "+++");
|
||||
UserTaskDelay(100);
|
||||
|
||||
ATOrderSend(at_adapter->agent, REPLY_TIME_OUT, NULL, "a");
|
||||
|
||||
UserTaskDelay(2500);
|
||||
|
||||
ATOrderSend(at_adapter->agent,REPLY_TIME_OUT, NULL,cmd);
|
||||
UserTaskDelay(2500);
|
||||
|
||||
ATOrderSend(at_adapter->agent,REPLY_TIME_OUT, NULL,"AT+Z\r");
|
||||
UserTaskDelay(5000);
|
||||
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
SRC_FILES :=nbiot_demo.c
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file nbiot_demo.c
|
||||
* @brief Demo for NBIoT function
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021.04.22
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <user_api.h>
|
||||
#include <xs_adapter_at_agent.h>
|
||||
#include <xs_adapter_manager.h>
|
||||
#include <xs_adapter_at_nbiot.h>
|
||||
|
||||
extern void RegisterAdapterNBIoT(void);
|
||||
|
||||
void NbiotEnable(void)
|
||||
{
|
||||
struct AdapterAT* at_adapter = ATAdapterFind(NBIOT_ADAPTER_ID);
|
||||
|
||||
UserTaskDelay(5000);
|
||||
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
|
||||
at_adapter->atdone.ATSocketCreate(at_adapter, 1, SOCKET_TYPE_STREAM, NET_TYPE_AF_INET);
|
||||
UserTaskDelay(1000);
|
||||
|
||||
struct AddressIpv4 addr;
|
||||
addr.ipv4 = IpTint("115.236.53.226");
|
||||
at_adapter->atdone.ATSocketConnect(at_adapter, 1, addr, 8989, 0);
|
||||
|
||||
int socket_fd = 1;
|
||||
int count = 0;
|
||||
|
||||
while (1) {
|
||||
UserTaskDelay(1000);
|
||||
at_adapter->parent.done.NetAiitSend((struct Adapter *)at_adapter, "AB30313233", 5, 0, 0, 0, 0, 0, &socket_fd);
|
||||
count++;
|
||||
if (count == 10)
|
||||
break;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
SRC_FILES :=wifi_demo.c
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
|
@ -0,0 +1,179 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file wifi_demo.c
|
||||
* @brief Demo for wifi function
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021.04.22
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <user_api.h>
|
||||
#include <xs_adapter_manager.h>
|
||||
#include <xs_adapter_at_wifi.h>
|
||||
|
||||
void SendWiftMsg(int argc, char *argv[])
|
||||
{
|
||||
char wifi_msg[128];
|
||||
if (argc >= 1) {
|
||||
memset(wifi_msg, 0, 128);
|
||||
strncpy(wifi_msg, argv[1], strlen(argv[1]));
|
||||
printf("SendWiftMsg(%s).\n", wifi_msg);
|
||||
}
|
||||
|
||||
struct AdapterAT *at_adapter = ATAdapterFind(WIFI_ADAPTER_ID);
|
||||
if (!at_adapter) {
|
||||
printf("ATAdapterFind failed .\n");
|
||||
}
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
|
||||
at_adapter->parent.done.NetAiitSend(&at_adapter->parent, wifi_msg, strlen(wifi_msg), true, 1000, 0, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
void RecvWifiMsg()
|
||||
{
|
||||
char wifi_recv_msg[128];
|
||||
memset(wifi_recv_msg, 0, sizeof(wifi_recv_msg));
|
||||
struct AdapterAT *at_adapter = ATAdapterFind(WIFI_ADAPTER_ID);
|
||||
if (!at_adapter) {
|
||||
printf("ATAdapterFind failed .\n");
|
||||
}
|
||||
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
|
||||
while (1) {
|
||||
memset(wifi_recv_msg, 0, sizeof(wifi_recv_msg));
|
||||
if (EOK == at_adapter->parent.done.NetAiitReceive(&at_adapter->parent, wifi_recv_msg, 128, 40000, true, NULL)) {
|
||||
printf("wifi_recv_msg (%s)\n", wifi_recv_msg);
|
||||
} else {
|
||||
printf("wifi_recv_msg failed .\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetAddrWifi()
|
||||
{
|
||||
struct AdapterAT* at_adapter = ATAdapterFind(WIFI_ADAPTER_ID);
|
||||
if (!at_adapter) {
|
||||
printf("ATAdapterFind failed .\n");
|
||||
}
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
|
||||
if(EOK != at_adapter->atdone.ATOperateAddr(at_adapter, IpTint("10.10.100.222"), IpTint("255.255.255.0"), IpTint("255.255.255.0")))
|
||||
printf("WifiSetAddr failed \n");
|
||||
}
|
||||
|
||||
void DhcpWifi()
|
||||
{
|
||||
struct AdapterAT* at_adapter = ATAdapterFind(WIFI_ADAPTER_ID);
|
||||
if (!at_adapter) {
|
||||
printf("ATAdapterFind failed .\n");
|
||||
}
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
|
||||
if(EOK != at_adapter->atdone.ATOperateDHCP(at_adapter,1))
|
||||
printf("WifiDHCP failed \n");
|
||||
}
|
||||
|
||||
void PingWifi()
|
||||
{
|
||||
char wifi_recv_msg[128];
|
||||
memset(wifi_recv_msg, 0, sizeof(wifi_recv_msg));
|
||||
|
||||
struct AdapterAT *at_adapter = ATAdapterFind(WIFI_ADAPTER_ID);
|
||||
if (!at_adapter) {
|
||||
printf("ATAdapterFind failed .\n");
|
||||
}
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
struct PingResult result;
|
||||
//www.baidu.com
|
||||
char *ip_str = "36.152.44.95";
|
||||
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
|
||||
at_adapter->atdone.ATPing(at_adapter, ip_str, &result);
|
||||
}
|
||||
|
||||
void SetUpWifi()
|
||||
{
|
||||
char wifi_recv_msg[128];
|
||||
memset(wifi_recv_msg, 0, sizeof(wifi_recv_msg));
|
||||
|
||||
struct AdapterAT* at_adapter = ATAdapterFind(WIFI_ADAPTER_ID);
|
||||
if (!at_adapter) {
|
||||
printf("ATAdapterFind failed .\n");
|
||||
}
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
struct PingResult result;
|
||||
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
|
||||
if (EOK == at_adapter->atdone.ATOperateUp(at_adapter)) {
|
||||
printf("WifiSetUp success (%s)\n", result.ip_addr.ipv4);
|
||||
} else {
|
||||
printf("WifiSetUp failed \n");
|
||||
}
|
||||
}
|
||||
|
||||
void NetstatWifi()
|
||||
{
|
||||
struct AdapterAT* at_adapter = ATAdapterFind(WIFI_ADAPTER_ID);
|
||||
if (!at_adapter) {
|
||||
printf("ATAdapterFind failed .\n");
|
||||
}
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
|
||||
if (EOK != at_adapter->atdone.ATNetstat(at_adapter))
|
||||
printf("WifiNetstat failed \n");
|
||||
}
|
||||
|
||||
void AtTestCmdWifi(int argc, char *argv[])
|
||||
{
|
||||
char cmd[64];
|
||||
if (argc >= 1) {
|
||||
memset(cmd, 0, sizeof(cmd));
|
||||
strncpy(cmd, argv[1], strlen(argv[1]));
|
||||
printf("AT cmd send(%s).\n", cmd);
|
||||
}
|
||||
|
||||
strcat(cmd,"\r");
|
||||
struct AdapterAT* at_adapter = ATAdapterFind(WIFI_ADAPTER_ID);
|
||||
at_adapter->parent.done.NetAiitOpen(&at_adapter->parent);
|
||||
|
||||
printf("Waiting for msg...\n");
|
||||
|
||||
ATOrderSend(at_adapter->agent, REPLY_TIME_OUT, NULL, "+++");
|
||||
UserTaskDelay(100);
|
||||
|
||||
ATOrderSend(at_adapter->agent, REPLY_TIME_OUT, NULL, "a");
|
||||
|
||||
UserTaskDelay(2500);
|
||||
|
||||
ATOrderSend(at_adapter->agent,REPLY_TIME_OUT, NULL,cmd);
|
||||
UserTaskDelay(2500);
|
||||
|
||||
ATOrderSend(at_adapter->agent,REPLY_TIME_OUT, NULL,"AT+Z\r");
|
||||
UserTaskDelay(5000);
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
SRC_FILES := zigbee_receive_demo.c
|
||||
# zigbee_send_demo.c zigbee_receive_demo.c
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: zigbee_receive_demo.c
|
||||
* @brief: using zigbee to receive message
|
||||
* @version: 1.0
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2021/4/30
|
||||
*
|
||||
*/
|
||||
#include <xs_adapter_zigbee.h>
|
||||
#include <string.h>
|
||||
#include <xs_klist.h>
|
||||
#include <xs_adapter_manager.h>
|
||||
#include <user_api.h>
|
||||
#include <string.h>
|
||||
static int re_sem;
|
||||
|
||||
static int buff_sem;
|
||||
|
||||
|
||||
/*Critical zone protection function for*/
|
||||
void ZigbeeWait(char *rev_buffer)
|
||||
{
|
||||
while(1){
|
||||
if (strlen(rev_buffer)>1){
|
||||
UserSemaphoreAbandon(re_sem);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* receive message from another zigbee device*/
|
||||
void ZigbeeReceiveDemo(int argc, char *argv[])
|
||||
{
|
||||
adapter_t padapter = ZigbeeAdapterFind("zigbee");
|
||||
if (NONE == padapter){
|
||||
KPrintf("adapter find failed!\n");
|
||||
return;
|
||||
}
|
||||
/*Open adapter*/
|
||||
if (0 != padapter->done.NetAiitOpen(padapter)){
|
||||
KPrintf("adapter open failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
char rev_buffer[NAME_NUM_MAX];
|
||||
/* Initialize semaphore */
|
||||
re_sem = UserSemaphoreCreate(0);
|
||||
/* receive buffer from serial port */
|
||||
padapter->done.NetAiitReceive(padapter,rev_buffer,strlen(rev_buffer),10000,false,NULL);
|
||||
ZigbeeWait(rev_buffer);
|
||||
UserSemaphoreObtain(re_sem,-1);
|
||||
|
||||
|
||||
printf("\n");
|
||||
for (int i=0;i<strlen(rev_buffer);i++)
|
||||
{
|
||||
if(rev_buffer[i] != 0Xff)
|
||||
printf("%c",rev_buffer[i]);
|
||||
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
|
||||
|
||||
}
|
||||
#ifndef SEPARATE_COMPILE
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
|
||||
ZigbeeReceiveDemo, ZigbeeReceiveDemo, zigbee receive function );
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: zigbee_send_demo.c
|
||||
* @brief: using zigbee to send message
|
||||
* @version: 1.0
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2021/4/30
|
||||
*
|
||||
*/
|
||||
#include <xs_adapter_zigbee.h>
|
||||
#include <string.h>
|
||||
#include <xs_klist.h>
|
||||
#include <xs_adapter_manager.h>
|
||||
#include <string.h>
|
||||
#include <user_api.h>
|
||||
adapter_t padapter;
|
||||
/* a demo function to send message through command line using zigbee*/
|
||||
/* first open zigbee to start demo*/
|
||||
void ZigbeeOpenDemo()
|
||||
{
|
||||
/*Find from the list of registered adapters*/
|
||||
// adapter_t padapter = ZigbeeAdapterFind("zigbee");
|
||||
padapter = ZigbeeAdapterFind("zigbee");
|
||||
if (NONE == padapter){
|
||||
printf("adapter find failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/*Open adapter*/
|
||||
if (0 != padapter->done.NetAiitOpen(padapter)){
|
||||
printf("adapter open failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
#ifndef SEPARATE_COMPILE
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
|
||||
ZigbeeOpenDemo, ZigbeeOpenDemo, zigbee send function );
|
||||
#endif
|
||||
|
||||
void ZigbeeSendDemo(int argc, char *argv[])
|
||||
{
|
||||
/*Find from the list of registered adapters*/
|
||||
bool v = false;
|
||||
padapter->done.NetAiitSend(padapter, argv[1], strlen(argv[1]) ,true,10000,0, NULL,&v,NULL);
|
||||
|
||||
|
||||
}
|
||||
#ifndef SEPARATE_COMPILE
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
|
||||
ZigbeeSendDemo, ZigbeeSendDemo, zigbee send function );
|
||||
#endif
|
||||
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
#include <xiuos.h>
|
||||
#include <stdio.h>
|
||||
#include <cstdlib>
|
||||
using namespace std;
|
||||
extern "C" void KPrintf(const char *fmt, ...);
|
||||
|
||||
class Animal //parent class
|
||||
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
virtual void Eat()
|
||||
{
|
||||
|
||||
KPrintf("eat\n");
|
||||
|
||||
}
|
||||
|
||||
void Sleep()
|
||||
{
|
||||
KPrintf("sleep\n");
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
class Fish :public Animal //subclass
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
void Eat()
|
||||
{
|
||||
KPrintf("fish eat\n");
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
void Doeat(Animal& animal)
|
||||
{
|
||||
animal.Eat();
|
||||
}
|
||||
|
||||
void MemTest2()
|
||||
{
|
||||
int i;
|
||||
char *ptr = NULL; /* memory pointer */
|
||||
|
||||
for (i = 0; ; i++) {
|
||||
/* allocate (1<<i) bytes memory every single time */
|
||||
ptr = (char *)operator new(1 << i);
|
||||
|
||||
/* if allocate successfully */
|
||||
if (ptr != NULL) {
|
||||
KPrintf("get memory :%d byte\n", (1 << i));
|
||||
/* release the memory */
|
||||
operator delete(ptr);
|
||||
KPrintf("free memory :%d byte\n", (1 << i));
|
||||
ptr = NULL;
|
||||
} else {
|
||||
KPrintf("try to get %d byte memory failed!\n", (1 << i));
|
||||
break;
|
||||
//return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void OverLoadTest(int a)
|
||||
{
|
||||
KPrintf("output is a int number: %d\n", a);
|
||||
}
|
||||
|
||||
void OverLoadTestDouble(int a,int b )
|
||||
{
|
||||
KPrintf("output is 2 int number: %d and %d\n", a,b);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void MySwap(T& a, T& b)
|
||||
{
|
||||
T temp = a;
|
||||
a = b;
|
||||
b = temp;
|
||||
}
|
||||
|
||||
extern "C" int cppmain(void)
|
||||
{
|
||||
MemTest2();
|
||||
|
||||
class Fish fish;
|
||||
Doeat(fish);
|
||||
|
||||
int a = 3;
|
||||
int b = 5;
|
||||
void OverLoadTestDouble(int a, int b);
|
||||
OverLoadTestDouble(a, b);
|
||||
MySwap(a,b);
|
||||
KPrintf("with template the output is: %d and %d\n", a,b);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,162 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <user_api.h>
|
||||
|
||||
extern int SensorFrameworkInit(void);
|
||||
extern int RegisterAdapterEthernet(void);
|
||||
extern int RegisterAdapterWifi(void);
|
||||
extern int RegisterAdapterZigbee(void);
|
||||
extern int RegisterAdapterNBIoT(void);
|
||||
extern int RegisterAdapterBluetooth(void);
|
||||
extern int LoraSx12xxSpiDeviceInit();
|
||||
|
||||
extern int D124VoiceInit(void);
|
||||
extern int Hs300xTemperatureInit(void);
|
||||
extern int Hs300xHumidityInit(void);
|
||||
extern int Ps5308Pm1_0Init(void);
|
||||
extern int Zg09Co2Init(void);
|
||||
|
||||
typedef int (*InitFunc)(void);
|
||||
struct InitDesc
|
||||
{
|
||||
const char* fn_name;
|
||||
const InitFunc fn;
|
||||
};
|
||||
|
||||
static int AppInitDesc(struct InitDesc sub_desc[])
|
||||
{
|
||||
int i = 0;
|
||||
int ret = 0;
|
||||
for( i = 0; sub_desc[i].fn != NULL; i++ ) {
|
||||
ret = sub_desc[i].fn();
|
||||
printf("initialize %s %s\n",sub_desc[i].fn_name, ret == 0 ? "success" : "failed");
|
||||
if(0 != ret) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct InitDesc framework[] =
|
||||
{
|
||||
#ifdef SENSOR_SENSORDEVICE
|
||||
{ "perception_framework", SensorFrameworkInit },
|
||||
#endif
|
||||
|
||||
{ "NULL", NULL },
|
||||
};
|
||||
|
||||
static struct InitDesc perception_desc[] =
|
||||
{
|
||||
#ifdef PERCEPTION_D124
|
||||
{ "d124_voice", D124VoiceInit },
|
||||
#endif
|
||||
|
||||
#ifdef PERCEPTION_HS300X
|
||||
#ifdef SENSOR_QUANTITY_HS300X_TEMPERATURE
|
||||
{ "hs300x_temperature", Hs300xTemperatureInit },
|
||||
#endif
|
||||
#ifdef SENSOR_QUANTITY_HS300X_HUMIDITY
|
||||
{ "hs300x_humidity", Hs300xHumidityInit },
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef PERCEPTION_PS5308
|
||||
#ifdef SENSOR_QUANTITY_PS5308_PM1_0
|
||||
{ "ps5308_pm1_0", Ps5308Pm1_0Init },
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef PERCEPTION_ZG09
|
||||
{ "zg09_co2", Zg09Co2Init },
|
||||
#endif
|
||||
|
||||
{ "NULL", NULL },
|
||||
};
|
||||
|
||||
static struct InitDesc connection_desc[] =
|
||||
{
|
||||
#ifdef CONNECTION_COMMUNICATION_ETHERNET
|
||||
{ "ethernet adpter", RegisterAdapterEthernet },
|
||||
#endif
|
||||
|
||||
#ifdef CONNECTION_COMMUNICATION_WIFI
|
||||
{ "wifi adpter", RegisterAdapterWifi },
|
||||
#endif
|
||||
|
||||
#ifdef CONNECTION_COMMUNICATION_LORA
|
||||
{ "lora adpter", LoraSx12xxSpiDeviceInit},
|
||||
#endif
|
||||
|
||||
#ifdef CONNECTION_COMMUNICATION_ZIGBEE
|
||||
{ "zigbee adpter", RegisterAdapterZigbee},
|
||||
#endif
|
||||
|
||||
#ifdef CONNECTION_COMMUNICATION_NB_IOT
|
||||
{ "NB-IoT adpter", RegisterAdapterNBIoT},
|
||||
#endif
|
||||
#ifdef CONNECTION_COMMUNICATION_BLUETOOTH
|
||||
{ "bluetooth adpter", RegisterAdapterBluetooth},
|
||||
#endif
|
||||
{ "NULL", NULL },
|
||||
};
|
||||
|
||||
/**
|
||||
* This function will init perception framework and all sub perception sensors
|
||||
* @param sub_desc framework
|
||||
*
|
||||
*/
|
||||
static int PerceptionFrameworkInit(struct InitDesc sub_desc[])
|
||||
{
|
||||
int i = 0;
|
||||
int ret = 0;
|
||||
for ( i = 0; sub_desc[i].fn != NULL; i++ ) {
|
||||
if (0 == strncmp(sub_desc[i].fn_name, "perception_framework", strlen("perception_framework"))) {
|
||||
ret = sub_desc[i].fn();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 == ret) {
|
||||
printf("initialize perception_framework success.\n");
|
||||
AppInitDesc(perception_desc);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will init connection framework and all sub components
|
||||
* @param sub_desc framework
|
||||
*
|
||||
*/
|
||||
static int ConnectionFrameworkInit(struct InitDesc sub_desc[])
|
||||
{
|
||||
return AppInitDesc(connection_desc);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will init system framework
|
||||
*
|
||||
*/
|
||||
int FrameworkInit()
|
||||
{
|
||||
#ifdef SENSOR_SENSORDEVICE
|
||||
PerceptionFrameworkInit(framework);
|
||||
#endif
|
||||
|
||||
#ifdef CONNECTION_ADAPTER
|
||||
ConnectionFrameworkInit(framework);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -14,8 +14,14 @@
|
|||
#include <string.h>
|
||||
#include <user_api.h>
|
||||
|
||||
extern int FrameworkInit();
|
||||
|
||||
int main(void)
|
||||
{
|
||||
printf("hello world\n");
|
||||
printf("Hello, world!\n");
|
||||
FrameworkInit();
|
||||
return 0;
|
||||
}
|
||||
// int cppmain(void);
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file sd_card_mount.c
|
||||
* @brief Mount SD card when opened SDIO
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021.04.19
|
||||
*/
|
||||
|
||||
#include "user_api/switch_api/user_api.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(FS_VFS)
|
||||
#include <iot-vfs.h>
|
||||
|
||||
/**
|
||||
* @description: Mount SD card
|
||||
* @return 0
|
||||
*/
|
||||
int MountSDCard(void)
|
||||
{
|
||||
if (MountFilesystem(SDIO_BUS_NAME, SDIO_DEVICE_NAME, SDIO_DRIVER_NAME, FSTYPE_FATFS, "/") == 0)
|
||||
DBG("sd card mount to '/'");
|
||||
else
|
||||
SYS_WARN("sd card mount to '/' failed!");
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0),MountSDCard, MountSDCard, MountSDCard );
|
|
@ -0,0 +1,23 @@
|
|||
SRC_FILES :=
|
||||
|
||||
ifeq ($(CONFIG_APPLICATION_SENSOR_CO2_ZG09), y)
|
||||
SRC_FILES += co2_zg09.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_APPLICATION_SENSOR_PM1_0_PS5308), y)
|
||||
SRC_FILES += pm1_0_ps5308.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_APPLICATION_SENSOR_VOICE_D124), y)
|
||||
SRC_FILES += voice_d124.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_APPLICATION_SENSOR_HUMIDITY_HS300X), y)
|
||||
SRC_FILES += humidity_hs300x.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_APPLICATION_SENSOR_TEMPERATURE_HS300X), y)
|
||||
SRC_FILES += temperature_hs300x.c
|
||||
endif
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file co2_zg09.c
|
||||
* @brief ZG09 CO2 example
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021.04.23
|
||||
*/
|
||||
|
||||
#include <user_api.h>
|
||||
#include <sensor.h>
|
||||
|
||||
/**
|
||||
* @description: Read a CO2
|
||||
* @return 0
|
||||
*/
|
||||
void Co2Zg09(void)
|
||||
{
|
||||
struct SensorQuantity *co2 = SensorQuantityFind(SENSOR_QUANTITY_ZG09_CO2, SENSOR_QUANTITY_CO2);
|
||||
SensorQuantityOpen(co2);
|
||||
printf("CO2 : %d ppm\n", SensorQuantityRead(co2));
|
||||
SensorQuantityClose(co2);
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file humidity_hs300x.c
|
||||
* @brief HS300x humidity example
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021.04.23
|
||||
*/
|
||||
|
||||
#include <user_api.h>
|
||||
#include <sensor.h>
|
||||
|
||||
/**
|
||||
* @description: Read a himidity
|
||||
* @return 0
|
||||
*/
|
||||
void HumiHs300x(void)
|
||||
{
|
||||
struct SensorQuantity *humi = SensorQuantityFind(SENSOR_QUANTITY_HS300X_HUMIDITY, SENSOR_QUANTITY_HUMI);
|
||||
SensorQuantityOpen(humi);
|
||||
int32 humidity = SensorQuantityRead(humi);
|
||||
printf("Humidity : %d.%d %%RH\n", humidity/10, humidity%10);
|
||||
SensorQuantityClose(humi);
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file pm1_0_ps5308.c
|
||||
* @brief PS5308 PM1.0 example
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021.04.23
|
||||
*/
|
||||
|
||||
#include <user_api.h>
|
||||
#include <sensor.h>
|
||||
|
||||
/**
|
||||
* @description: Read a PM1.0
|
||||
* @return 0
|
||||
*/
|
||||
void Pm10Ps5308(void)
|
||||
{
|
||||
struct SensorQuantity *pm1_0 = SensorQuantityFind(SENSOR_QUANTITY_PS5308_PM1_0, SENSOR_QUANTITY_PM);
|
||||
SensorQuantityOpen(pm1_0);
|
||||
UserTaskDelay(2000);
|
||||
printf("PM1.0 : %d ug/m³\n", SensorQuantityRead(pm1_0));
|
||||
SensorQuantityClose(pm1_0);
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file temperature_hs300x.c
|
||||
* @brief HS300x temperature example
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021.04.23
|
||||
*/
|
||||
|
||||
#include <user_api.h>
|
||||
#include <sensor.h>
|
||||
|
||||
/**
|
||||
* @description: Read a temperature
|
||||
* @return 0
|
||||
*/
|
||||
void TempHs300x(void)
|
||||
{
|
||||
struct SensorQuantity *temp = SensorQuantityFind(SENSOR_QUANTITY_HS300X_TEMPERATURE, SENSOR_QUANTITY_TEMP);
|
||||
SensorQuantityOpen(temp);
|
||||
int32 temperature = SensorQuantityRead(temp);
|
||||
if (temperature > 0)
|
||||
printf("Temperature : %d.%d ℃\n", temperature/10, temperature%10);
|
||||
else
|
||||
printf("Temperature : %d.%d ℃\n", temperature/10, -temperature%10);
|
||||
SensorQuantityClose(temp);
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file voice_d124.c
|
||||
* @brief D124 voice example
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021.04.23
|
||||
*/
|
||||
|
||||
#include <user_api.h>
|
||||
#include <sensor.h>
|
||||
|
||||
/**
|
||||
* @description: Read a voice
|
||||
* @return 0
|
||||
*/
|
||||
void VoiceD124(void)
|
||||
{
|
||||
struct SensorQuantity *voice = SensorQuantityFind(SENSOR_QUANTITY_D124_VOICE, SENSOR_QUANTITY_VOICE);
|
||||
SensorQuantityOpen(voice);
|
||||
UserTaskDelay(2000);
|
||||
uint16 result = SensorQuantityRead(voice);
|
||||
printf("voice : %d.%d dB\n", result/(10*voice->value.decimal_places), result%(10*voice->value.decimal_places));
|
||||
SensorQuantityClose(voice);
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file spi_sd_card_mount.c
|
||||
* @brief Mount SD card when opened SPI SD card
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021.04.01
|
||||
*/
|
||||
|
||||
#include "user_api/switch_api/user_api.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(FS_VFS)
|
||||
#include <iot-vfs.h>
|
||||
|
||||
/**
|
||||
* @description: Mount SD card
|
||||
* @return 0
|
||||
*/
|
||||
int MountSDCard(void)
|
||||
{
|
||||
struct Bus *spi_bus;
|
||||
spi_bus = BusFind(SPI_BUS_NAME_1);
|
||||
|
||||
if (NONE == SpiSdInit(spi_bus, SPI_1_DEVICE_NAME_0, SPI_1_DRV_NAME, SPI_SD_NAME)) {
|
||||
KPrintf("MountSDCard SpiSdInit error!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (EOK == MountFilesystem(SPI_BUS_NAME_1, SPI_SD_NAME, SPI_1_DRV_NAME, FSTYPE_FATFS, "/"))
|
||||
KPrintf("SPI SD card fatfs mounted\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
|
@ -1,12 +1,5 @@
|
|||
menuconfig SUPPORT_SENSOR_FRAMEWORK
|
||||
bool "select sensor framework"
|
||||
default y
|
||||
if SUPPORT_SENSOR_FRAMEWORK
|
||||
source "$APP_DIR/Framework/sensor/Kconfig"
|
||||
endif
|
||||
|
||||
config TRANSFORM_LAYER_ATTRIUBUTE
|
||||
bool "select transform layer"
|
||||
bool "support transform layer"
|
||||
default y
|
||||
choice
|
||||
prompt "select os features"
|
||||
|
@ -22,3 +15,7 @@ config TRANSFORM_LAYER_ATTRIUBUTE
|
|||
bool "add rt_thread fetures"
|
||||
endchoice
|
||||
|
||||
|
||||
source "$APP_DIR/Framework/sensor/Kconfig"
|
||||
source "$APP_DIR/Framework/know/tflite_sin/Kconfig"
|
||||
source "$APP_DIR/Framework/know/tflite_mnist/Kconfig"
|
|
@ -1,6 +1,6 @@
|
|||
SRC_DIR := transform_layer
|
||||
|
||||
ifeq ($(CONFIG_SUPPORT_SENSOR_FRAMEWORK),y)
|
||||
ifeq ($(CONFIG_SENSOR_SENSORDEVICE),y)
|
||||
SRC_DIR += sensor
|
||||
endif
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
*.h5
|
||||
*.tflite
|
|
@ -0,0 +1,4 @@
|
|||
config USING_TFLITE_MNIST
|
||||
bool "mnist demo app for tflite micro"
|
||||
depends on INTELLIGENT_TFLITE
|
||||
default n
|
|
@ -0,0 +1,8 @@
|
|||
ifeq ($(CONFIG_USING_TFLITE_MNIST),y)
|
||||
SRC_FILES := \
|
||||
mnistapp.cpp \
|
||||
mnistmain.c
|
||||
CPPPATHS += -I.
|
||||
endif
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
|
@ -0,0 +1,19 @@
|
|||
# MNIST 说明
|
||||
|
||||
## 使用
|
||||
|
||||
tools/mnist-train.py 训练生成 mnist 模型。
|
||||
|
||||
tools/mnist-inference.py 使用 mnist 模型进行推理。
|
||||
|
||||
tools/mnist-c-model.py 将 mnist 模型转换成 C 的数组保存在 model.h 中。
|
||||
|
||||
tools/mnist-c-digit.py 将 mnist 数据集中的某个数字转成数组保存在 digit.h 中。
|
||||
|
||||
## 参考资料
|
||||
|
||||
https://tensorflow.google.cn/lite/performance/post_training_quantization
|
||||
|
||||
https://tensorflow.google.cn/lite/performance/post_training_integer_quant
|
||||
|
||||
https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/lite/micro/examples/hello_world/train/train_hello_world_model.ipynb
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: digit.h
|
||||
* @brief: store digits in this file
|
||||
* @version: 1.0
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2021/4/30
|
||||
*
|
||||
*/
|
||||
const float mnist_digit[] = {
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.33, 0.73, 0.62, 0.59, 0.24, 0.14, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.87, 1.00, 1.00, 1.00, 1.00, 0.95, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.67, 0.20, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.26, 0.45, 0.28, 0.45, 0.64, 0.89, 1.00, 0.88, 1.00, 1.00, 1.00, 0.98, 0.90, 1.00, 1.00, 0.55, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.07, 0.26, 0.05, 0.26, 0.26, 0.26, 0.23, 0.08, 0.93, 1.00, 0.42, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.33, 0.99, 0.82, 0.07, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.09, 0.91, 1.00, 0.33, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.51, 1.00, 0.93, 0.17, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.23, 0.98, 1.00, 0.24, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.52, 1.00, 0.73, 0.02, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.04, 0.80, 0.97, 0.23, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.49, 1.00, 0.71, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.29, 0.98, 0.94, 0.22, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.07, 0.87, 1.00, 0.65, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.01, 0.80, 1.00, 0.86, 0.14, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.15, 1.00, 1.00, 0.30, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.12, 0.88, 1.00, 0.45, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.52, 1.00, 1.00, 0.20, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.24, 0.95, 1.00, 1.00, 0.20, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.47, 1.00, 1.00, 0.86, 0.16, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.47, 1.00, 0.81, 0.07, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
|
||||
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
|
||||
};
|
||||
const int mnist_label = 7;
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: mnistapp.cpp
|
||||
* @brief: mnist function
|
||||
* @version: 1.0
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2021/4/30
|
||||
*
|
||||
*/
|
||||
#include <xiuos.h>
|
||||
|
||||
#include "tensorflow/lite/micro/all_ops_resolver.h"
|
||||
#include "tensorflow/lite/micro/micro_error_reporter.h"
|
||||
#include "tensorflow/lite/micro/micro_interpreter.h"
|
||||
#include "tensorflow/lite/schema/schema_generated.h"
|
||||
#include "tensorflow/lite/version.h"
|
||||
|
||||
#include "digit.h"
|
||||
#include "model.h"
|
||||
|
||||
namespace {
|
||||
tflite::ErrorReporter* error_reporter = nullptr;
|
||||
const tflite::Model* model = nullptr;
|
||||
tflite::MicroInterpreter* interpreter = nullptr;
|
||||
TfLiteTensor* input = nullptr;
|
||||
TfLiteTensor* output = nullptr;
|
||||
constexpr int kTensorArenaSize = 110 * 1024;
|
||||
//uint8_t *tensor_arena = nullptr;
|
||||
uint8_t tensor_arena[kTensorArenaSize];
|
||||
}
|
||||
|
||||
extern "C" void mnist_app() {
|
||||
tflite::MicroErrorReporter micro_error_reporter;
|
||||
error_reporter = µ_error_reporter;
|
||||
|
||||
model = tflite::GetModel(mnist_model);
|
||||
if (model->version() != TFLITE_SCHEMA_VERSION) {
|
||||
TF_LITE_REPORT_ERROR(error_reporter,
|
||||
"Model provided is schema version %d not equal "
|
||||
"to supported version %d.",
|
||||
model->version(), TFLITE_SCHEMA_VERSION);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
tensor_arena = (uint8_t *)rt_malloc(kTensorArenaSize);
|
||||
if (tensor_arena == nullptr) {
|
||||
TF_LITE_REPORT_ERROR(error_reporter, "malloc for tensor_arena failed");
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
||||
tflite::AllOpsResolver resolver;
|
||||
tflite::MicroInterpreter static_interpreter(
|
||||
model, resolver, tensor_arena, kTensorArenaSize, error_reporter);
|
||||
interpreter = &static_interpreter;
|
||||
|
||||
// Allocate memory from the tensor_arena for the model's tensors.
|
||||
TfLiteStatus allocate_status = interpreter->AllocateTensors();
|
||||
if (allocate_status != kTfLiteOk) {
|
||||
TF_LITE_REPORT_ERROR(error_reporter, "AllocateTensors() failed");
|
||||
return;
|
||||
}
|
||||
|
||||
input = interpreter->input(0);
|
||||
output = interpreter->output(0);
|
||||
|
||||
KPrintf("\n------- Input Digit -------\n");
|
||||
for (int i = 0; i < 28; i++) {
|
||||
for (int j = 0; j < 28; j++) {
|
||||
if (mnist_digit[i*28+j] > 0.3)
|
||||
KPrintf("#");
|
||||
else
|
||||
KPrintf(".");
|
||||
}
|
||||
KPrintf("\n");
|
||||
}
|
||||
|
||||
for (int i = 0; i < 28*28; i++) {
|
||||
input->data.f[i] = mnist_digit[i];
|
||||
}
|
||||
|
||||
TfLiteStatus invoke_status = interpreter->Invoke();
|
||||
if (invoke_status != kTfLiteOk) {
|
||||
TF_LITE_REPORT_ERROR(error_reporter, "Invoke failed on x_val\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// Read the predicted y value from the model's output tensor
|
||||
float max = 0.0;
|
||||
int index;
|
||||
for (int i = 0; i < 10; i++) {
|
||||
if(output->data.f[i]>max){
|
||||
max = output->data.f[i];
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
|
||||
KPrintf("\n------- Output Result -------\n");
|
||||
KPrintf("result is %d\n\n", index);
|
||||
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file: mnistmain.c
|
||||
* @brief: start mnist function
|
||||
* @version: 1.0
|
||||
* @author: AIIT XUOS Lab
|
||||
* @date: 2021/4/30
|
||||
*
|
||||
*/
|
||||
|
||||
#include <xiuos.h>
|
||||
|
||||
void mnist_app(void);
|
||||
|
||||
int tfmnist(void) {
|
||||
mnist_app();
|
||||
}
|
||||
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0), tfmnist, tfmnist, run mnist demo of tflite);
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,54 @@
|
|||
#!/usr/bin/env python3
|
||||
# ==========================================================================================
|
||||
# Copyright (c) 2020 AIIT XUOS Lab
|
||||
# XiOS is licensed under Mulan PSL v2.
|
||||
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
# You may obtain a copy of Mulan PSL v2 at:
|
||||
# http://license.coscl.org.cn/MulanPSL2
|
||||
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
# See the Mulan PSL v2 for more details.
|
||||
|
||||
# @file: mnist-c-digit.py
|
||||
# @brief: print image digit at command line
|
||||
# @version: 1.0
|
||||
# @author: AIIT XUOS Lab
|
||||
# @date: 2021/4/30
|
||||
# ==========================================================================================
|
||||
|
||||
|
||||
import tensorflow as tf
|
||||
|
||||
print("TensorFlow version %s" % (tf.__version__))
|
||||
|
||||
def show(image):
|
||||
for i in range(28):
|
||||
for j in range(28):
|
||||
if image[i][j] > 0.3:
|
||||
print('#', end = '')
|
||||
else:
|
||||
print('.', end = '')
|
||||
print()
|
||||
|
||||
digit_file_path = 'digit.h'
|
||||
digit_content = '''const float mnist_digit[] = {
|
||||
%s
|
||||
};
|
||||
const int mnist_label = %d;
|
||||
'''
|
||||
|
||||
if __name__ == '__main__':
|
||||
mnist = tf.keras.datasets.mnist
|
||||
(_, _), (test_images, test_labels) = mnist.load_data()
|
||||
index = 0
|
||||
shape = 28
|
||||
image = test_images[index].astype('float32')/255
|
||||
label = test_labels[index]
|
||||
print('label: %d' % label)
|
||||
#show(image)
|
||||
digit_data = (',\n ').join([ (', ').join([ '%.2f' % image[row][col] for col in range(shape)]) for row in range(shape)])
|
||||
digit_file = open(digit_file_path, 'w')
|
||||
digit_file.write(digit_content % (digit_data, label))
|
||||
digit_file.close()
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env python3
|
||||
# ==========================================================================================
|
||||
# Copyright (c) 2020 AIIT XUOS Lab
|
||||
# XiOS is licensed under Mulan PSL v2.
|
||||
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
# You may obtain a copy of Mulan PSL v2 at:
|
||||
# http://license.coscl.org.cn/MulanPSL2
|
||||
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
# See the Mulan PSL v2 for more details.
|
||||
|
||||
# @file: mnist-c-model.py
|
||||
# @brief: open file path and load model
|
||||
# @version: 1.0
|
||||
# @author: AIIT XUOS Lab
|
||||
# @date: 2021/4/30
|
||||
# ==========================================================================================
|
||||
|
||||
|
||||
#tflite_file_path = 'mnist-default-quan.tflite'
|
||||
tflite_file_path = 'mnist.tflite'
|
||||
model_file_path = 'model.h'
|
||||
|
||||
tflite_file = open(tflite_file_path, 'rb')
|
||||
tflite_data = tflite_file.read()
|
||||
tflite_file.close()
|
||||
tflite_array = [ '0x%02x' % byte for byte in tflite_data ]
|
||||
|
||||
model_content = '''unsigned char mnist_model[] = {
|
||||
%s
|
||||
};
|
||||
unsigned int mnist_model_len = %d;
|
||||
'''
|
||||
# 12 bytes in a line, the same with xxd
|
||||
bytes_of_line = 12
|
||||
model_data = (',\n ').join([ (', ').join(tflite_array[i:i+bytes_of_line]) for i in range(0, len(tflite_array), bytes_of_line) ])
|
||||
model_file = open(model_file_path, 'w')
|
||||
model_file.write(model_content % (model_data, len(tflite_array)))
|
||||
model_file.close()
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
#!/usr/bin/env python3
|
||||
# ==========================================================================================
|
||||
# Copyright (c) 2020 AIIT XUOS Lab
|
||||
# XiOS is licensed under Mulan PSL v2.
|
||||
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
# You may obtain a copy of Mulan PSL v2 at:
|
||||
# http://license.coscl.org.cn/MulanPSL2
|
||||
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
# See the Mulan PSL v2 for more details.
|
||||
|
||||
# @file: mnist-inference.py
|
||||
# @brief: load data amd start model omferemce
|
||||
# @version: 1.0
|
||||
# @author: AIIT XUOS Lab
|
||||
# @date: 2021/4/30
|
||||
# ==========================================================================================
|
||||
|
||||
|
||||
import tensorflow as tf
|
||||
|
||||
print("TensorFlow version %s" % (tf.__version__))
|
||||
|
||||
MODEL_NAME_H5 = 'mnist.h5'
|
||||
MODEL_NAME_TFLITE = 'mnist.tflite'
|
||||
DEFAULT_QUAN_MODEL_NAME_TFLITE = 'mnist-default-quan.tflite'
|
||||
FULL_QUAN_MODEL_NAME_TFLITE = 'mnist-full-quan.tflite'
|
||||
|
||||
|
||||
def show(image):
|
||||
for i in range(28):
|
||||
for j in range(28):
|
||||
if image[i][j][0] > 0.3:
|
||||
print('#', end = '')
|
||||
else:
|
||||
print(' ', end = '')
|
||||
print()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
mnist = tf.keras.datasets.mnist
|
||||
(_, _), (test_images, test_labels) = mnist.load_data()
|
||||
test_images = test_images.reshape(10000, 28, 28, 1)
|
||||
index = 0
|
||||
input_image = test_images[index].astype('float32')/255
|
||||
target_label = test_labels[index]
|
||||
|
||||
interpreter = tf.lite.Interpreter(model_path = DEFAULT_QUAN_MODEL_NAME_TFLITE)
|
||||
interpreter.allocate_tensors()
|
||||
input_details = interpreter.get_input_details()[0]
|
||||
output_details = interpreter.get_output_details()[0]
|
||||
interpreter.set_tensor(input_details['index'], [input_image])
|
||||
interpreter.invoke()
|
||||
output = interpreter.get_tensor(output_details['index'])[0]
|
||||
|
||||
show(input_image)
|
||||
print('target label: %d, predict label: %d' % (target_label, output.argmax()))
|
|
@ -0,0 +1,127 @@
|
|||
#!/usr/bin/env python3
|
||||
# ==========================================================================================
|
||||
# Copyright (c) 2020 AIIT XUOS Lab
|
||||
# XiOS is licensed under Mulan PSL v2.
|
||||
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
# You may obtain a copy of Mulan PSL v2 at:
|
||||
# http://license.coscl.org.cn/MulanPSL2
|
||||
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
# See the Mulan PSL v2 for more details.
|
||||
|
||||
# @file: mnist-train.py
|
||||
# @brief: model training
|
||||
# @version: 1.0
|
||||
# @author: AIIT XUOS Lab
|
||||
# @date: 2021/4/30
|
||||
# ==========================================================================================
|
||||
|
||||
|
||||
import os
|
||||
import tensorflow as tf
|
||||
|
||||
print("TensorFlow version %s" % (tf.__version__))
|
||||
|
||||
MODEL_NAME_H5 = 'mnist.h5'
|
||||
MODEL_NAME_TFLITE = 'mnist.tflite'
|
||||
DEFAULT_QUAN_MODEL_NAME_TFLITE = 'mnist-default-quan.tflite'
|
||||
FULL_QUAN_MODEL_NAME_TFLITE = 'mnist-full-quan.tflite'
|
||||
|
||||
def build_model(model_name):
|
||||
print('\n>>> load mnist dataset')
|
||||
mnist = tf.keras.datasets.mnist
|
||||
(train_images, train_labels),(test_images, test_labels) = mnist.load_data()
|
||||
print("train images shape: ", train_images.shape)
|
||||
print("train labels shape: ", train_labels.shape)
|
||||
print("test images shape: ", test_images.shape)
|
||||
print("test labels shape: ", test_labels.shape)
|
||||
|
||||
# transform label to categorical, like: 2 -> [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
|
||||
print('\n>>> transform label to categorical')
|
||||
train_labels = tf.keras.utils.to_categorical(train_labels)
|
||||
test_labels = tf.keras.utils.to_categorical(test_labels)
|
||||
print("train labels shape: ", train_labels.shape)
|
||||
print("test labels shape: ", test_labels.shape)
|
||||
|
||||
# transform color like: [0, 255] -> 0.xxx
|
||||
print('\n>>> transform image color into float32')
|
||||
train_images = train_images.astype('float32') / 255
|
||||
test_images = test_images.astype('float32') / 255
|
||||
|
||||
# reshape image like: (60000, 28, 28) -> (60000, 28, 28, 1)
|
||||
print('\n>>> reshape image with color channel')
|
||||
train_images = train_images.reshape((60000, 28, 28, 1))
|
||||
test_images = test_images.reshape((10000, 28, 28, 1))
|
||||
print("train images shape: ", train_images.shape)
|
||||
print("test images shape: ", test_images.shape)
|
||||
|
||||
print('\n>>> build model')
|
||||
model = tf.keras.models.Sequential([
|
||||
tf.keras.layers.Conv2D(32, (3, 3), activation=tf.nn.relu, input_shape=(28, 28, 1)),
|
||||
tf.keras.layers.MaxPooling2D((2, 2)),
|
||||
tf.keras.layers.Conv2D(64, (3, 3), activation=tf.nn.relu),
|
||||
tf.keras.layers.MaxPooling2D((2, 2)),
|
||||
tf.keras.layers.Conv2D(64, (3, 3), activation=tf.nn.relu),
|
||||
tf.keras.layers.Flatten(),
|
||||
tf.keras.layers.Dense(64, activation=tf.nn.relu),
|
||||
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
|
||||
])
|
||||
model.compile(optimizer='rmsprop',
|
||||
loss='categorical_crossentropy',
|
||||
metrics=['accuracy'])
|
||||
model.summary()
|
||||
|
||||
print('\n>>> train the model')
|
||||
early_stopping = tf.keras.callbacks.EarlyStopping(
|
||||
monitor='loss', min_delta=0.0005, patience=3, verbose=1, mode='auto',
|
||||
baseline=None, restore_best_weights=True
|
||||
)
|
||||
model.fit(train_images, train_labels, epochs=100, batch_size=64, callbacks=[early_stopping])
|
||||
|
||||
print('\n>>> evaluate the model')
|
||||
test_loss, test_acc = model.evaluate(test_images, test_labels)
|
||||
print("lost: %f, accuracy: %f" % (test_loss, test_acc))
|
||||
|
||||
print('\n>>> save the keras model as %s' % model_name)
|
||||
model.save(model_name)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
if not os.path.exists(MODEL_NAME_H5):
|
||||
build_model(MODEL_NAME_H5)
|
||||
|
||||
if not os.path.exists(MODEL_NAME_TFLITE):
|
||||
print('\n>>> save the tflite model as %s' % MODEL_NAME_TFLITE)
|
||||
converter = tf.lite.TFLiteConverter.from_keras_model(tf.keras.models.load_model(MODEL_NAME_H5))
|
||||
tflite_model = converter.convert()
|
||||
with open(MODEL_NAME_TFLITE, "wb") as f:
|
||||
f.write(tflite_model)
|
||||
|
||||
if not os.path.exists(DEFAULT_QUAN_MODEL_NAME_TFLITE):
|
||||
print('\n>>> save the default quantized model as %s' % DEFAULT_QUAN_MODEL_NAME_TFLITE)
|
||||
converter = tf.lite.TFLiteConverter.from_keras_model(tf.keras.models.load_model(MODEL_NAME_H5))
|
||||
converter.optimizations = [tf.lite.Optimize.DEFAULT]
|
||||
tflite_model = converter.convert()
|
||||
with open(DEFAULT_QUAN_MODEL_NAME_TFLITE, "wb") as f:
|
||||
f.write(tflite_model)
|
||||
|
||||
if not os.path.exists(FULL_QUAN_MODEL_NAME_TFLITE):
|
||||
mnist = tf.keras.datasets.mnist
|
||||
(train_images, _), (_, _) = mnist.load_data()
|
||||
train_images = train_images.astype('float32') / 255
|
||||
train_images = train_images.reshape((60000, 28, 28, 1))
|
||||
def representative_data_gen():
|
||||
for input_value in tf.data.Dataset.from_tensor_slices(train_images).batch(1).take(100):
|
||||
yield [input_value]
|
||||
print('\n>>> save the full quantized model as %s' % DEFAULT_QUAN_MODEL_NAME_TFLITE)
|
||||
converter = tf.lite.TFLiteConverter.from_keras_model(tf.keras.models.load_model(MODEL_NAME_H5))
|
||||
converter.optimizations = [tf.lite.Optimize.DEFAULT]
|
||||
converter.representative_dataset = representative_data_gen
|
||||
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
|
||||
converter.inference_input_type = tf.uint8
|
||||
converter.inference_output_type = tf.uint8
|
||||
tflite_model = converter.convert()
|
||||
with open(FULL_QUAN_MODEL_NAME_TFLITE, "wb") as f:
|
||||
f.write(tflite_model)
|
|
@ -0,0 +1,4 @@
|
|||
config USING_TFLITE_SIN
|
||||
bool "sin(x) demo app for tflite micro"
|
||||
depends on INTELLIGENT_TFLITE
|
||||
default n
|
|
@ -0,0 +1,11 @@
|
|||
ifeq ($(CONFIG_USING_TFLITE_SIN),y)
|
||||
SRC_FILES := \
|
||||
sinmain.c \
|
||||
main_functions.cc \
|
||||
model.cc \
|
||||
output_handler.cc \
|
||||
constants.cc
|
||||
CPPPATHS += -I.
|
||||
endif
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
|
@ -0,0 +1,19 @@
|
|||
/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==============================================================================*/
|
||||
|
||||
#include "constants.h"
|
||||
|
||||
// This is a small number so that it's easy to read the logs
|
||||
const int kInferencesPerCycle = 20;
|
|
@ -0,0 +1,32 @@
|
|||
/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==============================================================================*/
|
||||
|
||||
#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_CONSTANTS_H_
|
||||
#define TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_CONSTANTS_H_
|
||||
|
||||
// This constant represents the range of x values our model was trained on,
|
||||
// which is from 0 to (2 * Pi). We approximate Pi to avoid requiring additional
|
||||
// libraries.
|
||||
const float kXrange = 2.f * 3.14159265359f;
|
||||
|
||||
// This constant determines the number of inferences to perform across the range
|
||||
// of x values defined above. Since each inference takes time, the higher this
|
||||
// number, the more time it will take to run through the entire range. The value
|
||||
// of this constant can be tuned so that one full cycle takes a desired amount
|
||||
// of time. Since different devices take different amounts of time to perform
|
||||
// inference, this value should be defined per-device.
|
||||
extern const int kInferencesPerCycle;
|
||||
|
||||
#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_CONSTANTS_H_
|
|
@ -0,0 +1,119 @@
|
|||
/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==============================================================================*/
|
||||
|
||||
#include "main_functions.h"
|
||||
|
||||
#include "tensorflow/lite/micro/all_ops_resolver.h"
|
||||
#include "constants.h"
|
||||
#include "model.h"
|
||||
#include "output_handler.h"
|
||||
#include "tensorflow/lite/micro/micro_error_reporter.h"
|
||||
#include "tensorflow/lite/micro/micro_interpreter.h"
|
||||
#include "tensorflow/lite/schema/schema_generated.h"
|
||||
#include "tensorflow/lite/version.h"
|
||||
|
||||
// Globals, used for compatibility with Arduino-style sketches.
|
||||
namespace {
|
||||
tflite::ErrorReporter* error_reporter = nullptr;
|
||||
const tflite::Model* model = nullptr;
|
||||
tflite::MicroInterpreter* interpreter = nullptr;
|
||||
TfLiteTensor* input = nullptr;
|
||||
TfLiteTensor* output = nullptr;
|
||||
int inference_count = 0;
|
||||
|
||||
constexpr int kTensorArenaSize = 10240;
|
||||
uint8_t tensor_arena[kTensorArenaSize];
|
||||
} // namespace
|
||||
|
||||
// The name of this function is important for Arduino compatibility.
|
||||
void setup() {
|
||||
// Set up logging. Google style is to avoid globals or statics because of
|
||||
// lifetime uncertainty, but since this has a trivial destructor it's okay.
|
||||
// NOLINTNEXTLINE(runtime-global-variables)
|
||||
static tflite::MicroErrorReporter micro_error_reporter;
|
||||
error_reporter = µ_error_reporter;
|
||||
|
||||
// Map the model into a usable data structure. This doesn't involve any
|
||||
// copying or parsing, it's a very lightweight operation.
|
||||
model = tflite::GetModel(g_model);
|
||||
if (model->version() != TFLITE_SCHEMA_VERSION) {
|
||||
TF_LITE_REPORT_ERROR(error_reporter,
|
||||
"Model provided is schema version %d not equal "
|
||||
"to supported version %d.",
|
||||
model->version(), TFLITE_SCHEMA_VERSION);
|
||||
return;
|
||||
}
|
||||
|
||||
// This pulls in all the operation implementations we need.
|
||||
// NOLINTNEXTLINE(runtime-global-variables)
|
||||
static tflite::AllOpsResolver resolver;
|
||||
|
||||
// Build an interpreter to run the model with.
|
||||
static tflite::MicroInterpreter static_interpreter(
|
||||
model, resolver, tensor_arena, kTensorArenaSize, error_reporter);
|
||||
interpreter = &static_interpreter;
|
||||
|
||||
// Allocate memory from the tensor_arena for the model's tensors.
|
||||
TfLiteStatus allocate_status = interpreter->AllocateTensors();
|
||||
if (allocate_status != kTfLiteOk) {
|
||||
TF_LITE_REPORT_ERROR(error_reporter, "AllocateTensors() failed");
|
||||
return;
|
||||
}
|
||||
|
||||
// Obtain pointers to the model's input and output tensors.
|
||||
input = interpreter->input(0);
|
||||
output = interpreter->output(0);
|
||||
|
||||
// Keep track of how many inferences we have performed.
|
||||
inference_count = 0;
|
||||
}
|
||||
|
||||
// The name of this function is important for Arduino compatibility.
|
||||
void loop() {
|
||||
// Calculate an x value to feed into the model. We compare the current
|
||||
// inference_count to the number of inferences per cycle to determine
|
||||
// our position within the range of possible x values the model was
|
||||
// trained on, and use this to calculate a value.
|
||||
float position = static_cast<float>(inference_count) /
|
||||
static_cast<float>(kInferencesPerCycle);
|
||||
float x = position * kXrange;
|
||||
|
||||
// Quantize the input from floating-point to integer
|
||||
int8_t x_quantized = x / input->params.scale + input->params.zero_point;
|
||||
// Place the quantized input in the model's input tensor
|
||||
input->data.int8[0] = x_quantized;
|
||||
|
||||
// Run inference, and report any error
|
||||
TfLiteStatus invoke_status = interpreter->Invoke();
|
||||
if (invoke_status != kTfLiteOk) {
|
||||
TF_LITE_REPORT_ERROR(error_reporter, "Invoke failed on x: %f\n",
|
||||
static_cast<double>(x));
|
||||
return;
|
||||
}
|
||||
|
||||
// Obtain the quantized output from model's output tensor
|
||||
int8_t y_quantized = output->data.int8[0];
|
||||
// Dequantize the output from integer to floating-point
|
||||
float y = (y_quantized - output->params.zero_point) * output->params.scale;
|
||||
|
||||
// Output the results. A custom HandleOutput function can be implemented
|
||||
// for each supported hardware target.
|
||||
HandleOutput(error_reporter, x, y);
|
||||
|
||||
// Increment the inference_counter, and reset it if we have reached
|
||||
// the total number per cycle
|
||||
inference_count += 1;
|
||||
if (inference_count >= kInferencesPerCycle) inference_count = 0;
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==============================================================================*/
|
||||
|
||||
#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MAIN_FUNCTIONS_H_
|
||||
#define TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MAIN_FUNCTIONS_H_
|
||||
|
||||
// Expose a C friendly interface for main functions.
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// Initializes all data needed for the example. The name is important, and needs
|
||||
// to be setup() for Arduino compatibility.
|
||||
void setup();
|
||||
|
||||
// Runs one iteration of data gathering and inference. This should be called
|
||||
// repeatedly from the application code. The name needs to be loop() for Arduino
|
||||
// compatibility.
|
||||
void loop();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MAIN_FUNCTIONS_H_
|
|
@ -0,0 +1,237 @@
|
|||
/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==============================================================================*/
|
||||
|
||||
// Automatically created from a TensorFlow Lite flatbuffer using the command:
|
||||
// xxd -i model.tflite > model.cc
|
||||
|
||||
// This is a standard TensorFlow Lite model file that has been converted into a
|
||||
// C data array, so it can be easily compiled into a binary for devices that
|
||||
// don't have a file system.
|
||||
|
||||
// See train/README.md for a full description of the creation process.
|
||||
|
||||
#include "model.h"
|
||||
|
||||
// Keep model aligned to 8 bytes to guarantee aligned 64-bit accesses.
|
||||
alignas(8) const unsigned char g_model[] = {
|
||||
0x1c, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x14, 0x00, 0x20, 0x00,
|
||||
0x1c, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
|
||||
0x98, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x1c, 0x03, 0x00, 0x00,
|
||||
0x2c, 0x03, 0x00, 0x00, 0x30, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, 0xf7, 0xff, 0xff,
|
||||
0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
|
||||
0x44, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x73, 0x65, 0x72, 0x76,
|
||||
0x65, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x73, 0x65, 0x72, 0x76,
|
||||
0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbc, 0xff, 0xff, 0xff,
|
||||
0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
|
||||
0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x34, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x76, 0xfd, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
|
||||
0x0d, 0x00, 0x00, 0x00, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x32, 0x5f,
|
||||
0x69, 0x6e, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x13, 0x00, 0x00, 0x00, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x75, 0x6e, 0x74,
|
||||
0x69, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00,
|
||||
0x0c, 0x00, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00,
|
||||
0x34, 0x02, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00,
|
||||
0x6c, 0x01, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
|
||||
0x34, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0xfa, 0xfd, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x00, 0x00, 0x31, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0xfd, 0xff, 0xff,
|
||||
0x88, 0xfd, 0xff, 0xff, 0x8c, 0xfd, 0xff, 0xff, 0x22, 0xfe, 0xff, 0xff,
|
||||
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x21, 0xa5, 0x8b, 0xca,
|
||||
0x5e, 0x1d, 0xce, 0x42, 0x9d, 0xce, 0x1f, 0xb0, 0xdf, 0x54, 0x2f, 0x81,
|
||||
0x3e, 0xfe, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
|
||||
0xee, 0xfc, 0x00, 0xec, 0x05, 0x17, 0xef, 0xec, 0xe6, 0xf8, 0x03, 0x01,
|
||||
0x00, 0xfa, 0xf8, 0xf5, 0xdc, 0xeb, 0x27, 0x14, 0xf1, 0xde, 0xe2, 0xdb,
|
||||
0xf0, 0xde, 0x31, 0x06, 0x02, 0xe6, 0xee, 0xf9, 0x00, 0x16, 0x07, 0xe0,
|
||||
0xfe, 0xff, 0xe9, 0x06, 0xe7, 0xef, 0x81, 0x1b, 0x18, 0xea, 0xc9, 0x01,
|
||||
0x0f, 0x00, 0xda, 0xf7, 0x0e, 0xec, 0x13, 0x1f, 0x04, 0x13, 0xb4, 0xe6,
|
||||
0xfd, 0x06, 0xb9, 0xe0, 0x0d, 0xec, 0xf0, 0xde, 0xeb, 0xf7, 0x05, 0x26,
|
||||
0x1a, 0xe4, 0x6f, 0x1a, 0xea, 0x1e, 0x35, 0xdf, 0x1a, 0xf3, 0xf1, 0x19,
|
||||
0x0f, 0x03, 0x1b, 0xe1, 0xde, 0x13, 0xf6, 0x19, 0xff, 0xf6, 0x1b, 0x18,
|
||||
0xf0, 0x1c, 0xda, 0x1b, 0x1b, 0x20, 0xe5, 0x1a, 0xf5, 0xff, 0x96, 0x0b,
|
||||
0x00, 0x01, 0xcd, 0xde, 0x0d, 0xf6, 0x16, 0xe3, 0xed, 0xfc, 0x0e, 0xe9,
|
||||
0xfa, 0xeb, 0x5c, 0xfc, 0x1d, 0x02, 0x5b, 0xe2, 0xe1, 0xf5, 0x15, 0xec,
|
||||
0xf4, 0x00, 0x13, 0x05, 0xec, 0x0c, 0x1d, 0x14, 0x0e, 0xe7, 0x0b, 0xf4,
|
||||
0x19, 0x00, 0xd7, 0x05, 0x27, 0x02, 0x15, 0xea, 0xea, 0x02, 0x9b, 0x00,
|
||||
0x0c, 0xfa, 0xe8, 0xea, 0xfd, 0x00, 0x14, 0xfd, 0x0b, 0x02, 0xef, 0xee,
|
||||
0x06, 0xee, 0x01, 0x0d, 0x06, 0xe6, 0xf7, 0x11, 0xf7, 0x09, 0xf8, 0xf1,
|
||||
0x21, 0xff, 0x0e, 0xf3, 0xec, 0x12, 0x26, 0x1d, 0xf2, 0xe9, 0x28, 0x18,
|
||||
0xe0, 0xfb, 0xf3, 0xf4, 0x05, 0x1d, 0x1d, 0xfb, 0xfd, 0x1e, 0xfc, 0x11,
|
||||
0xe8, 0x07, 0x09, 0x03, 0x12, 0xf2, 0x36, 0xfb, 0xdc, 0x1c, 0xf9, 0xef,
|
||||
0xf3, 0xe7, 0x6f, 0x0c, 0x1d, 0x00, 0x45, 0xfd, 0x0e, 0xf0, 0x0b, 0x19,
|
||||
0x1a, 0xfa, 0xe0, 0x19, 0x1f, 0x13, 0x36, 0x1c, 0x12, 0xeb, 0x3b, 0x0c,
|
||||
0xb4, 0xcb, 0xe6, 0x13, 0xfa, 0xeb, 0xf1, 0x06, 0x1c, 0xfa, 0x18, 0xe5,
|
||||
0xeb, 0xcb, 0x0c, 0xf4, 0x4a, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x00, 0x00, 0x75, 0x1c, 0x11, 0xe1, 0x0c, 0x81, 0xa5, 0x42,
|
||||
0xfe, 0xd5, 0xd4, 0xb2, 0x61, 0x78, 0x19, 0xdf, 0x66, 0xff, 0xff, 0xff,
|
||||
0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x77, 0x0b, 0x00, 0x00, 0x53, 0xf6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x77, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xd3, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x72, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x07, 0x00, 0x00,
|
||||
0x67, 0xf5, 0xff, 0xff, 0x34, 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0xb2, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xb5, 0x04, 0x00, 0x00, 0x78, 0x0a, 0x00, 0x00,
|
||||
0x2d, 0x06, 0x00, 0x00, 0x71, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x9a, 0x0a, 0x00, 0x00, 0xfe, 0xf7, 0xff, 0xff, 0x0e, 0x05, 0x00, 0x00,
|
||||
0xd4, 0x09, 0x00, 0x00, 0x47, 0xfe, 0xff, 0xff, 0xb6, 0x04, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xac, 0xf7, 0xff, 0xff, 0x4b, 0xf9, 0xff, 0xff,
|
||||
0x4a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x04, 0x00,
|
||||
0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x8c, 0xef, 0xff, 0xff, 0x84, 0xff, 0xff, 0xff, 0x88, 0xff, 0xff, 0xff,
|
||||
0x0f, 0x00, 0x00, 0x00, 0x4d, 0x4c, 0x49, 0x52, 0x20, 0x43, 0x6f, 0x6e,
|
||||
0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00,
|
||||
0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
|
||||
0x14, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00,
|
||||
0xe0, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x84, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x96, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
|
||||
0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0xca, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||
0xba, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
|
||||
0x16, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x04, 0x00,
|
||||
0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
|
||||
0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
|
||||
0x08, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||
0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00,
|
||||
0xd0, 0x03, 0x00, 0x00, 0x68, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
|
||||
0x98, 0x02, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00,
|
||||
0x24, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0xf0, 0xfb, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x54, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
|
||||
0x6c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||
0x01, 0x00, 0x00, 0x00, 0xdc, 0xfb, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
|
||||
0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x4a, 0xce, 0x0a, 0x3c, 0x01, 0x00, 0x00, 0x00,
|
||||
0x34, 0x84, 0x85, 0x3f, 0x01, 0x00, 0x00, 0x00, 0xc5, 0x02, 0x8f, 0xbf,
|
||||
0x1e, 0x00, 0x00, 0x00, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c,
|
||||
0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x43,
|
||||
0x61, 0x6c, 0x6c, 0x3a, 0x30, 0x5f, 0x69, 0x6e, 0x74, 0x38, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x80, 0xfc, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x54, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
|
||||
0x64, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||
0x10, 0x00, 0x00, 0x00, 0x6c, 0xfc, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
|
||||
0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0x01, 0x00, 0x00, 0x00, 0x93, 0xd0, 0xc0, 0x3b, 0x01, 0x00, 0x00, 0x00,
|
||||
0xc2, 0x0f, 0xc0, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x14, 0x00, 0x00, 0x00, 0x74, 0x66, 0x6c, 0x2e, 0x66, 0x75, 0x6c, 0x6c,
|
||||
0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x31,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x00, 0x00, 0x08, 0xfd, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00,
|
||||
0x20, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x09, 0x64, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0xf4, 0xfc, 0xff, 0xff,
|
||||
0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0xe0, 0xdb, 0x47, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x04, 0x14, 0x47, 0x40,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
|
||||
0x74, 0x66, 0x6c, 0x2e, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x5f, 0x63, 0x6f,
|
||||
0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xff, 0xff,
|
||||
0x14, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x09, 0x50, 0x00, 0x00, 0x00, 0x6c, 0xfd, 0xff, 0xff,
|
||||
0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
|
||||
0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xfb, 0x4b, 0x0b, 0x3c,
|
||||
0x01, 0x00, 0x00, 0x00, 0x40, 0x84, 0x4b, 0x3f, 0x01, 0x00, 0x00, 0x00,
|
||||
0x63, 0x35, 0x8a, 0xbf, 0x0d, 0x00, 0x00, 0x00, 0x73, 0x74, 0x64, 0x2e,
|
||||
0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x32, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x72, 0xfe, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
|
||||
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x50, 0x00, 0x00, 0x00,
|
||||
0xdc, 0xfd, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||
0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x60, 0x01, 0x4f, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x47, 0x6d, 0xb3, 0x3f,
|
||||
0x01, 0x00, 0x00, 0x00, 0x5d, 0x63, 0xcd, 0xbf, 0x0d, 0x00, 0x00, 0x00,
|
||||
0x73, 0x74, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74,
|
||||
0x31, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x00, 0x00, 0xe2, 0xfe, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
|
||||
0x48, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
|
||||
0x50, 0x00, 0x00, 0x00, 0x4c, 0xfe, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
|
||||
0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0xd5, 0x6b, 0x8a, 0x3b, 0x01, 0x00, 0x00, 0x00,
|
||||
0xab, 0x49, 0x01, 0x3f, 0x01, 0x00, 0x00, 0x00, 0xfd, 0x56, 0x09, 0xbf,
|
||||
0x0c, 0x00, 0x00, 0x00, 0x73, 0x74, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x73,
|
||||
0x74, 0x61, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xff,
|
||||
0x14, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x44, 0xff, 0xff, 0xff,
|
||||
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x28, 0xb3, 0xd9, 0x38, 0x0c, 0x00, 0x00, 0x00,
|
||||
0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x32, 0x2f, 0x62, 0x69, 0x61, 0x73,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0xaa, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x00,
|
||||
0x9c, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0xdd, 0x9b, 0x21, 0x39, 0x0c, 0x00, 0x00, 0x00,
|
||||
0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x33, 0x2f, 0x62, 0x69, 0x61, 0x73,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00, 0x13, 0x00, 0x0c, 0x00,
|
||||
0x08, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
|
||||
0x48, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0xf4, 0xd4, 0x51, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x64, 0x65, 0x6e, 0x73,
|
||||
0x65, 0x5f, 0x34, 0x2f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x1c, 0x00,
|
||||
0x18, 0x00, 0x17, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||
0x2c, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x14, 0x00,
|
||||
0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x5d, 0x4f, 0xc9, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x86, 0xc8, 0x40,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
|
||||
0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x66, 0x61,
|
||||
0x75, 0x6c, 0x74, 0x5f, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x32, 0x5f,
|
||||
0x69, 0x6e, 0x70, 0x75, 0x74, 0x3a, 0x30, 0x5f, 0x69, 0x6e, 0x74, 0x38,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
|
||||
0x24, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff,
|
||||
0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
|
||||
0x0c, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
|
||||
0x0c, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72,
|
||||
0x0c, 0x00, 0x10, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00,
|
||||
0x0c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x09};
|
||||
const int g_model_len = 2488;
|
|
@ -0,0 +1,31 @@
|
|||
/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==============================================================================*/
|
||||
|
||||
// Automatically created from a TensorFlow Lite flatbuffer using the command:
|
||||
// xxd -i model.tflite > model.cc
|
||||
|
||||
// This is a standard TensorFlow Lite model file that has been converted into a
|
||||
// C data array, so it can be easily compiled into a binary for devices that
|
||||
// don't have a file system.
|
||||
|
||||
// See train/README.md for a full description of the creation process.
|
||||
|
||||
#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MODEL_H_
|
||||
#define TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MODEL_H_
|
||||
|
||||
extern const unsigned char g_model[];
|
||||
extern const int g_model_len;
|
||||
|
||||
#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MODEL_H_
|
|
@ -0,0 +1,24 @@
|
|||
/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==============================================================================*/
|
||||
|
||||
#include "output_handler.h"
|
||||
|
||||
void HandleOutput(tflite::ErrorReporter* error_reporter, float x_value,
|
||||
float y_value) {
|
||||
// Log the current X and Y values
|
||||
TF_LITE_REPORT_ERROR(error_reporter, "x_value: %f, y_value: %f\n",
|
||||
static_cast<double>(x_value),
|
||||
static_cast<double>(y_value));
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==============================================================================*/
|
||||
|
||||
#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_OUTPUT_HANDLER_H_
|
||||
#define TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_OUTPUT_HANDLER_H_
|
||||
|
||||
#include "tensorflow/lite/c/common.h"
|
||||
#include "tensorflow/lite/micro/micro_error_reporter.h"
|
||||
|
||||
// Called by the main loop to produce some output based on the x and y values
|
||||
void HandleOutput(tflite::ErrorReporter* error_reporter, float x_value,
|
||||
float y_value);
|
||||
|
||||
#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_OUTPUT_HANDLER_H_
|
|
@ -0,0 +1,33 @@
|
|||
/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==============================================================================*/
|
||||
|
||||
#include <xiuos.h>
|
||||
#include "main_functions.h"
|
||||
|
||||
// This is the default main used on systems that have the standard C entry
|
||||
// point. Other devices (for example FreeRTOS or ESP32) that have different
|
||||
// requirements for entry code (like an app_main function) should specialize
|
||||
// this main.cc file in a target-specific subfolder.
|
||||
int tfsin(void) {
|
||||
setup();
|
||||
int count = 10;
|
||||
while (count--) {
|
||||
loop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0), tfsin, tfsin, run sin demo of tflite);
|
|
@ -1,5 +1,5 @@
|
|||
menuconfig SENSOR_SENSORDEVICE
|
||||
bool "Using sensor devices"
|
||||
bool "support sensor framework"
|
||||
default y
|
||||
|
||||
if SENSOR_SENSORDEVICE
|
||||
|
|
|
@ -118,7 +118,7 @@ int SensorQuantityRegister(struct SensorQuantity *quant);
|
|||
int SensorQuantityUnregister(struct SensorQuantity *quant);
|
||||
int SensorQuantityOpen(struct SensorQuantity *quant);
|
||||
int SensorQuantityClose(struct SensorQuantity *quant);
|
||||
int32_t SensorQuantityRead(struct SensorQuantity *quant);
|
||||
int SensorQuantityRead(struct SensorQuantity *quant);
|
||||
int SensorQuantityControl(struct SensorQuantity *quant, int cmd);
|
||||
|
||||
uint32_t Crc16(uint8_t * data, uint8_t length);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SRC_DIR := posix_support
|
||||
SRC_DIR := switch_api posix_support
|
||||
|
||||
ifeq ($(CONFIG_SEPARATE_COMPILE),y)
|
||||
SRC_DIR += switch_api
|
||||
endif
|
||||
# # ifeq ($(CONFIG_SEPARATE_COMPILE),y)
|
||||
# SRC_DIR += switch_api
|
||||
# # endif
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
|
@ -1,10 +1,11 @@
|
|||
menu "APP_Framework"
|
||||
|
||||
config APP_DIR
|
||||
string
|
||||
option env="SRC_APP_DIR"
|
||||
default "."
|
||||
config APP_DIR
|
||||
string
|
||||
option env="SRC_APP_DIR"
|
||||
default "."
|
||||
|
||||
source "$APP_DIR/Applications/Kconfig"
|
||||
source "$APP_DIR/Framework/Kconfig"
|
||||
|
||||
endmenu
|
||||
|
|
Loading…
Reference in New Issue