# Utils - [Overview](#section11660541593) - [Directory Structure](#section1464106163817) - [Usage](#section83091355151312) - [Repositories Involved](#section6250105871917) ## Overview The Utils repository stores basic components of OpenHarmony. These basic components are used by OpenHarmony subsystems and upper-layer applications. The Utils library provides the following capabilities on different platforms: - LiteOS Cortex-M \(Hi3861 platform\): key value \(KV\) store, file operations, timer, IoT peripheral control, and system attribute dumping - LiteOS Cortex-A \(Hi3516 or Hi3518 platform\): KV store, timer, JavaScript APIs for device query and data storage, and system attribute dumping **Table 1** Utils capabilities

Module

Platform

Description

KV store

LiteOS Cortex-M and LiteOS Cortex-A

Provides KV storage for applications.

File operation

LiteOS Cortex-M

Provides unified file operation interfaces that can be used on different underlying chip components.

Timer

LiteOS Cortex-M and LiteOS Cortex-A

Provides unified timer operation interfaces that can be used on different underlying chip components.

JavaScript API

LiteOS Cortex-A

Provides JavaScript APIs for obtaining device information and storing data.

IoT peripheral control

LiteOS Cortex-M

Provides the capability of performing operations for peripherals.

System attribute dumping

LiteOS Cortex-M and LiteOS Cortex-A

Provides the command line tool for dumping system attributes.

## Directory Structure ``` utils/native/lite/ # Root directory ├── file # Implementation of the file system APIs ├── hals # HAL directory │ └── file # Header files of the hardware abstraction layer for file operations ├── include # Header files of external APIs ├── js # JavaScript APIs │ └── builtin │ ├── common │ ├── deviceinfokit # Device information kit │ ├── filekit # File kit │ └── kvstorekit # KV store kit ├── kal # KAL directory │ └── timer # KAL implementation of the timer ├── kv_store # KV store implementation │ ├── innerkits # Internal KV store APIs │ └── src # KV store source file ├── memory │ └── include # Memory pool management APIs ├── os_dump # System attribute dumping ├── timer_task # Timer implementation └── unittest # Self-test cases base/iot_hardware # IoT peripheral control ├── frameworks │ └── wifiiot_lite # Implementation of the IoT peripheral control module ├── hals │ └── wifiiot_lite # HAL API declaration └── interfaces └── kits # APIs of the IoT peripheral control module vendor/hisi/hi3861/hi3861_adapter/hals/iot_hardware # HAL for IoT peripheral control └── wifiiot_lite # Implementation of the APIs at the HAL ``` ## Usage - **KV store** ``` // Store or update the value of a key. const char key1[] = "key_sample"; const char defValue[] = "test case of key value store."; int ret = UtilsSetValue(key1, defValue); // Obtain the value of the key. char value1[32] = {0}; ret = UtilsGetValue(key1, value1, 32); // Delete the value of the key. UtilsDeleteValue(key1); ``` - **File operation** ``` // Open or create a file. const char fileName[] = "testfile"; int fd = UtilsFileOpen(fileName, O_RDWR_FS | O_CREAT_FS | O_TRUNC_FS, 0); // Write a specified length of data into a file with the specified file descriptor. const char defValue[] = "test case of file system."; int ret = UtilsFileWrite(fd, defValue, strlen(defValue)); // Close a file with a specified file descriptor. UtilsFileClose(fd); // Obtain the file size. int fileLen = 0; ret = UtilsFileStat(fileName, &fileLen); printf("file size = %d\n", fileLen); // Adjust the read and write position offset in a file. int fd1 = UtilsFileOpen(fileName, O_RDWR_FS, 0); ret = UtilsFileSeek(fd1, 5, SEEK_SET_FS); // Read a specified length of data from a file with the specified file descriptor and write the data into the buffer. char buf[32] = {0}; int readLen = UtilsFileRead(fd1, buf, 32); ret = UtilsFileClose(fd1); printf("read len = %d : buf = %s\n", readLen, buf); // Delete a specified file. ret = UtilsFileDelete(fileName); ``` - **System attribute dumping** LiteOS Cortex-M kernel: Run the following command over the serial port to dump the current system parameters: ``` AT+SYSPARA ``` LiteOS Cortex-A kernel: Run the **os\_dump** command in the **bin** directory to dump the current system parameters: ``` ./bin/os_dump syspara ``` ## Repositories Involved iothardware\_frameworks\_wifiiot\_lite iothardware\_hals\_wifiiot\_lite iothardware\_interfaces\_kits\_wifiiot\_lite utils\_native\_lite