From 2732812b1506a1b74624e97426d79c46c727e9cf Mon Sep 17 00:00:00 2001 From: Annie_wang Date: Tue, 24 May 2022 14:41:17 +0800 Subject: [PATCH] update docs Signed-off-by: Annie_wang --- .../database-distributedobject-guidelines.md | 40 +- .../database/database-mdds-guidelines.md | 18 +- .../database-relational-guidelines.md | 9 +- .../reference/apis/js-apis-data-ability.md | 3 +- .../apis/js-apis-data-distributedobject.md | 4 +- .../reference/apis/js-apis-data-rdb.md | 898 +++++++++--------- .../reference/apis/js-apis-data-resultset.md | 2 +- .../reference/apis/js-apis-data-storage.md | 86 +- .../apis/js-apis-distributed-data.md | 5 +- .../reference/apis/js-apis-system-storage.md | 4 +- .../driver/driver-platform-adc-des.md | 19 +- .../driver/driver-platform-dac-des.md | 25 +- .../driver/driver-platform-gpio-des.md | 735 +++++++++----- .../driver/driver-platform-i2c-des.md | 44 +- .../driver/driver-platform-mipicsi-des.md | 7 +- .../driver/driver-platform-mipidsi-des.md | 51 +- .../driver/driver-platform-pin-des.md | 47 +- .../driver/driver-platform-pwm-des.md | 22 +- .../driver/driver-platform-regulator-des.md | 27 +- .../driver/driver-platform-rtc-des.md | 110 +-- .../driver/driver-platform-sdio-des.md | 83 +- .../driver/driver-platform-spi-des.md | 61 +- .../driver/driver-platform-uart-des.md | 67 +- .../driver/driver-platform-watchdog-des.md | 33 +- .../driver/figures/ADC_flowchart.png | Bin 3730 -> 0 bytes ...tion-process.png => HCB-using-process.png} | Bin .../figures/en-us_image_0000001206372673.png | Bin 10830 -> 0 bytes .../driver/figures/pin_auth_architecture.png | Bin 0 -> 15812 bytes ...in_auth_service_and_driver_interaction.png | Bin 0 -> 25183 bytes .../driver/figures/process-of-using-DAC.png | Bin 3296 -> 0 bytes .../driver/figures/process-of-using-PWM.png | Bin 7448 -> 0 bytes .../figures/process-of-using-a-gpio.png | Bin 16528 -> 0 bytes .../process-of-using-a-mipi-dsi-device.png | Bin 9260 -> 0 bytes .../process-of-using-a-uart-device.png | Bin 9482 -> 0 bytes .../figures/process-of-using-a-watchdog.png | Bin 8908 -> 0 bytes .../process-of-using-an-i2c-device.png | Bin 6110 -> 0 bytes .../process-of-using-an-rtc-device.png | Bin 6650 -> 0 bytes .../process-of-using-an-spi-device.png | Bin 9061 -> 0 bytes .../figures/process-of-using-regulator.png | Bin 13439 -> 0 bytes .../driver/figures/using-ADC-process.png | Bin 0 -> 3844 bytes .../driver/figures/using-DAC-process.png | Bin 0 -> 4154 bytes .../driver/figures/using-GPIO-process.png | Bin 0 -> 7918 bytes .../driver/figures/using-I2C-process.png | Bin 0 -> 4013 bytes ...IPI-CSI.png => using-MIPI-CSI-process.png} | Bin .../driver/figures/using-MIPI-DSI-process.png | Bin 0 -> 7275 bytes .../driver/figures/using-PWM-process.png | Bin 0 -> 12209 bytes .../driver/figures/using-RTC-process.png | Bin 0 -> 6431 bytes .../driver/figures/using-SDIO-process.png | Bin 0 -> 11371 bytes .../driver/figures/using-SPI-process.png | Bin 0 -> 5495 bytes .../driver/figures/using-UART-process.png | Bin 0 -> 6618 bytes ...of-using-pin.png => using-pin-process.png} | Bin .../figures/using-regulator-process.png | Bin 0 -> 8502 bytes .../driver/figures/using-watchdog-process.png | Bin 0 -> 6321 bytes 53 files changed, 1320 insertions(+), 1080 deletions(-) delete mode 100644 en/device-dev/driver/figures/ADC_flowchart.png rename en/device-dev/driver/figures/{configuration-process.png => HCB-using-process.png} (100%) delete mode 100644 en/device-dev/driver/figures/en-us_image_0000001206372673.png create mode 100644 en/device-dev/driver/figures/pin_auth_architecture.png create mode 100644 en/device-dev/driver/figures/pin_auth_service_and_driver_interaction.png delete mode 100644 en/device-dev/driver/figures/process-of-using-DAC.png delete mode 100644 en/device-dev/driver/figures/process-of-using-PWM.png delete mode 100644 en/device-dev/driver/figures/process-of-using-a-gpio.png delete mode 100644 en/device-dev/driver/figures/process-of-using-a-mipi-dsi-device.png delete mode 100644 en/device-dev/driver/figures/process-of-using-a-uart-device.png delete mode 100644 en/device-dev/driver/figures/process-of-using-a-watchdog.png delete mode 100644 en/device-dev/driver/figures/process-of-using-an-i2c-device.png delete mode 100644 en/device-dev/driver/figures/process-of-using-an-rtc-device.png delete mode 100644 en/device-dev/driver/figures/process-of-using-an-spi-device.png delete mode 100644 en/device-dev/driver/figures/process-of-using-regulator.png create mode 100644 en/device-dev/driver/figures/using-ADC-process.png create mode 100644 en/device-dev/driver/figures/using-DAC-process.png create mode 100644 en/device-dev/driver/figures/using-GPIO-process.png create mode 100644 en/device-dev/driver/figures/using-I2C-process.png rename en/device-dev/driver/figures/{process-of-using-MIPI-CSI.png => using-MIPI-CSI-process.png} (100%) create mode 100644 en/device-dev/driver/figures/using-MIPI-DSI-process.png create mode 100644 en/device-dev/driver/figures/using-PWM-process.png create mode 100644 en/device-dev/driver/figures/using-RTC-process.png create mode 100644 en/device-dev/driver/figures/using-SDIO-process.png create mode 100644 en/device-dev/driver/figures/using-SPI-process.png create mode 100644 en/device-dev/driver/figures/using-UART-process.png rename en/device-dev/driver/figures/{process-of-using-pin.png => using-pin-process.png} (100%) create mode 100644 en/device-dev/driver/figures/using-regulator-process.png create mode 100644 en/device-dev/driver/figures/using-watchdog-process.png diff --git a/en/application-dev/database/database-distributedobject-guidelines.md b/en/application-dev/database/database-distributedobject-guidelines.md index 46246572c2..a3f5d13676 100644 --- a/en/application-dev/database/database-distributedobject-guidelines.md +++ b/en/application-dev/database/database-distributedobject-guidelines.md @@ -2,7 +2,7 @@ ## When to Use -The distributed data objects allow data across devices to be processed like local variables by shielding complex data interaction between devices. For the devices that form a Super Device, when data in the distributed data object of an application is added, deleted, or modified on a device, the data for the same application is also updated on the other devices. The devices can listen for the data changes and online and offline states of other devices. The distributed data objects support basic data types, such as number, string, and Boolean, as well as complex data types, such as array and nested basic types. +The distributed data objects allow data across devices to be processed like local variables by shielding complex data interaction between devices. For the devices that form a Super Device, when data in the distributed data object of an application is added, deleted, or modified on a device, the data for the same application is also updated on the other devices. The devices can listen for the data changes and online and offline status of other devices. The distributed data objects support basic data types, such as number, string, and Boolean, as well as complex data types, such as array and nested basic types. ## Available APIs @@ -15,7 +15,7 @@ Call **createDistributedObject()** to create a distributed data object instance. **Table 1** API for creating a distributed data object instance | Package| API| Description| | -------- | -------- | -------- | -| ohos.data.distributedDataObject| createDistributedObject(source: object): DistributedObject | Creates a distributed data object instance for data operations.
-  **source**: attributes of the **distributedObject** set.
-  **DistributedObject**: returns the distributed object created.| +| ohos.data.distributedDataObject| createDistributedObject(source: object): DistributedObject | Creates a distributed data object instance for data operations.
- **source**: attributes of the **distributedObject** set.
- **DistributedObject**: returns the distributed object created.| ### Generating a Session ID @@ -28,12 +28,12 @@ Call **genSessionId()** to generate a session ID randomly. The generated session ### Setting a SessionID for Distributed Data Objects -Call setSessionId() to set the session ID for a distributed data object. The session ID is a unique identifier for one collaboration across devices. The distributed data objects to be synchronized must be associated with the same session ID. +Call **setSessionId()** to set a session ID for a distributed data object. The session ID is a unique identifier for one collaboration across devices. The distributed data objects to be synchronized must be associated with the same session ID. **Table 3** API for setting a session ID | Class| API| Description| | -------- | -------- | -------- | -| DistributedDataObject | setSessionId(sessionId?: string): boolean | Sets a session ID for distributed data objects.
 **sessionId**: ID of a distributed object in a trusted network. To remove a distributed data object from the network, set this parameter to "" or leave it empty.| +| DistributedDataObject | setSessionId(sessionId?: string): boolean | Sets a session ID for distributed data objects.
 **sessionId**: session ID of a distributed object in a trusted network. To remove a distributed data object from the network, set this parameter to "" or leave it empty.| ### Observing Data Changes @@ -43,7 +43,7 @@ Call **on()** to subscribe to data changes of a distributed data object. When th | Class| API| Description| | -------- | -------- | -------- | | DistributedDataObject| on(type: 'change', callback: Callback<{ sessionId: string, fields: Array<string> }>): void | Subscribes to data changes.| -| DistributedDataObject| off(type: 'change', callback?: Callback<{ sessionId: string, fields: Array<string> }>): void | Unsubscribes from data changes. Callback used to return changes of the distributed object. If this parameter is not specified, all callbacks related to data changes will be unregistered.| +| DistributedDataObject| off(type: 'change', callback?: Callback<{ sessionId: string, fields: Array<string> }>): void | Unsubscribes from data changes.
**Callback**: specifies callback used to return changes of the distributed data object. If this parameter is not specified, all callbacks related to data changes will be unregistered.| ### Observing Online or Offline Status @@ -90,10 +90,10 @@ The following example shows how to implement a distributed data object synchroni var remote_object = distributedObject.createDistributedObject({name:undefined, age:undefined, isVis:true, parent:undefined, list:undefined}); remote_object.setSessionId(sessionId); - // After obtaining that the device status goes online, the remote object synchronizes data. That is, name changes to jack and age to 18. + // After learning that the device goes online, the remote object synchronizes data. That is, name changes to jack and age to 18. ``` -4. Observe the data changes of the distributed data object. Subscribe to data changes of the remote end. When the data is the peer end changes, a callback will be called to return the data changes. +4. Observe the data changes of the distributed data object. You can subscribe to data changes of the remote object. When the data in the remote object changes, a callback will be called to return the data changes. The sample code is as follows: @@ -107,9 +107,9 @@ The following example shows how to implement a distributed data object synchroni }); } } - - // To refresh the page in changeCallback, correctly set this.changeCallback.bind(this) in - changeCallback. + + // To refresh the page in changeCallback, correctly bind (this) to the changeCallback. + local_object.on("change", this.changeCallback.bind(this)); ``` 5. Modify object attributes. The object attributes support basic data types (such as number, Boolean, and string) and complex data types (array and nested basic types). @@ -123,7 +123,7 @@ The following example shows how to implement a distributed data object synchroni local_object.list = [{mother:"jack mom"}, {father:"jack Dad"}]; ``` - > ![icon-note.gif](../public_sys-resources/icon-note.gif) **NOTE**
+ > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE**
> For the distributed data object of the complex type, only the root attribute can be modified. The subordinate attributes cannot be modified. Example: ```js // Supported modification. @@ -142,7 +142,7 @@ The following example shows how to implement a distributed data object synchroni The sample code is as follows: ```js - // Unsubscribe from changeCallback. + // Unsubscribe from the specified data change callback. local_object.off("change", changeCallback); // Unsubscribe from all data change callbacks. local_object.off("change"); @@ -156,27 +156,27 @@ The following example shows how to implement a distributed data object synchroni local_object.on("status", this.statusCallback); ``` -9. Unsubscribe from the status changes of the distributed data object. You can specify the callback to unsubscribe from. If you do not specify the callback, all status change callbacks will be unsubscribe from. +9. Unsubscribe from the status changes of the distributed data object. You can specify the callback to unsubscribe from. If you do not specify the callback, this API unsubscribes from all callbacks of this distributed data object. The sample code is as follows: ```js - // Unsubscribe from the online status change callback. + // Unsubscribe from the specified status change callback. local_object.off("status", statusCallback); - // Unsubscribe from all online status change callbacks. + // Unsubscribe from all status change callbacks. local_object.off("status"); ``` -10. Remove a distributed data object from the synchronization network. After the distributed data object is removed from the network, the data changes on the local end will not be synchronized to the remote end. +10. Remove a distributed data object from the synchronization network. Data changes on the local object will not be synchronized to the removed distributed data object. The sample code is as follows: ```js local_object.setSessionId(""); ``` -## Development Example +## Samples -The following example is provided for you to better understand the development of distributed data object: +The following example is provided for you to better understand the development of distributed data objects: - [Distributed Notepad](https://gitee.com/openharmony/distributeddatamgr_objectstore/tree/master/samples/distributedNotepad) -When an event occurs on a device, for example, a note is added, the tile or content of a note is changed, or the event list is cleared, the change will be synchronized to other devices in the trusted network by the Notepad app. - +When an event of the Notepad app occurs on a device, such as a note is added, the tile or content of a note is changed, or the event list is cleared, the change will be synchronized to other devices in the trusted network. + diff --git a/en/application-dev/database/database-mdds-guidelines.md b/en/application-dev/database/database-mdds-guidelines.md index b63d065efb..ce4f1ad79d 100644 --- a/en/application-dev/database/database-mdds-guidelines.md +++ b/en/application-dev/database/database-mdds-guidelines.md @@ -2,24 +2,24 @@ ## When to Use -The Distributed Data Service (DDS) implements synchronization of application data across user devices. When data is added, deleted, or modified for an application on a device, the same application on another device can obtain the updated data. The DDS applies to the distributed gallery, messages, Contacts, and file manager. +The Distributed Data Service (DDS) implements synchronization of application data across user devices. When data is added, deleted, or modified for an application on a device, the same application on another device can obtain the updated data. The DDS applies to the distributed gallery, messages, contacts, and file manager. ## Available APIs The table below describes the APIs provided by the OpenHarmony DDS module. -**Table 1** APIs provided by the DDS +**Table 1** APIs provided by the DDS | Category | API | Description | | -------------------------- | ------------------------------------------------------------ | ----------------------------------------------- | | Creating a distributed database | createKVManager(config: KVManagerConfig, callback: AsyncCallback<KVManager>): void
createKVManager(config: KVManagerConfig): Promise<KVManager> | Creates a **KVManager** object for database management.| -| Obtaining a distributed KV store | getKVStore<T extends KVStore>(storeId: string, options: Options, callback: AsyncCallback<T>): void
getKVStore<T extends KVStore>(storeId: string, options: Options): Promise<T> | Obtains the KV store with the specified **Options** and **storeId**.| -| Managing data in a distributed KV store| put(key: string, value: Uint8Array \| string \| number \| boolean, callback: AsyncCallback<void>): void
put(key: string, value: Uint8Array \| string \| number \| boolean): Promise<void> | Inserts or updates data. | +| Obtaining a distributed KV store | getKVStore<T extends KVStore>(storeId: string, options: Options, callback: AsyncCallback<T>): void
getKVStore<T extends KVStore>(storeId: string, options: Options): Promise<T> | Obtains the KV store with the specified **Options** and **storeId**.| +| Managing data in a distributed KV store| put(key: string, value: Uint8Array \| string \| number \| boolean, callback: AsyncCallback<void>): void
put(key: string, value: Uint8Array \| string \| number \| boolean): Promise<void> | Inserts and updates data. | | Managing data in a distributed KV store| delete(key: string, callback: AsyncCallback<void>): void
delete(key: string): Promise<void> | Deletes data. | | Managing data in a distributed KV store| get(key: string, callback: AsyncCallback<Uint8Array \| string \| boolean \| number>): void
get(key: string): Promise<Uint8Array \| string \| boolean \| number> | Queries data. | | Subscribing to changes in the distributed data | on(event: 'dataChange', type: SubscribeType, observer: Callback<ChangeNotification>): void
on(event: 'syncComplete', syncCallback: Callback<Array<[string, number]>>): void | Subscribes to data changes in the KV store. | -| Synchronizing data across devices | sync(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number): void | Triggers database synchronization in manual mode. | +| Synchronizing data across devices | sync(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number): void | Triggers database synchronization in manual mode. | @@ -63,7 +63,7 @@ The following uses a single KV store as an example to describe the development p 3. Create and obtain a single KV store. 1. Declare the ID of the single KV store to create. - 2. Create a single KV store. You are advised to disable automatic synchronization (**autoSync:false**) and call **sync** if a synchronization is required. + 2. Create a single KV store. You are advised to disable automatic synchronization (**autoSync:false**) and call **sync** when a synchronization is required. The sample code is as follows: ```js @@ -159,7 +159,7 @@ The following uses a single KV store as an example to describe the development p deviceManager.createDeviceManager("bundleName", (err, value) => { if (!err) { devManager = value; - // get deviceIds + // Obtain deviceIds. let deviceIds = []; if (devManager != null) { var devices = devManager.getTrustedDeviceListSync(); @@ -177,5 +177,5 @@ The following uses a single KV store as an example to describe the development p ``` ## Samples The following samples are provided to help you better understand the distributed data development: -- [`KvStore`: distributed database (eTS) (API8)](https://gitee.com/openharmony/app_samples/tree/master/data/Kvstore) -- [Distributed Database](https://gitee.com/openharmony/codelabs/tree/master/Data/JsDistributedData) +- [`KvStore`: Distributed Data Management (eTS) (API8)](https://gitee.com/openharmony/app_samples/tree/master/data/Kvstore) +- [Distributed Data Service](https://gitee.com/openharmony/codelabs/tree/master/Data/JsDistributedData) diff --git a/en/application-dev/database/database-relational-guidelines.md b/en/application-dev/database/database-relational-guidelines.md index d23f0c0c57..d43b11ff62 100644 --- a/en/application-dev/database/database-relational-guidelines.md +++ b/en/application-dev/database/database-relational-guidelines.md @@ -116,8 +116,8 @@ The RDB provides **RdbPredicates** for you to set database operation conditions. A result set can be regarded as a row of data in the queried results. It allows you to traverse and access the data you have queried. The following table describes the external APIs of **ResultSet**. -> ![icon-notice.gif](../public_sys-resources/icon-notice.gif) **NOTICE**
-> After a result set is used, you must call the **close()** method to close it explicitly.** +> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **NOTICE**
+> After a result set is used, you must call the **close()** method to close it explicitly. **Table 7** APIs for using the result set @@ -306,3 +306,8 @@ You can obtain the distributed table name for a remote device based on the local let tableName = rdbStore.obtainDistributedTableName(deviceId, "test"); let resultSet = rdbStore.querySql("SELECT * FROM " + tableName) ``` +## Samples +The following samples are provided for you to better understand the RDB development: +- [`Rdb`: eTS RDB (API8)](https://gitee.com/openharmony/app_samples/tree/master/data/Rdb) +- [`DistributedRdb`: eTS Distributed Relational Database (API8)](https://gitee.com/openharmony/app_samples/tree/master/data/DistributedRdb) +- [Relational Database](https://gitee.com/openharmony/codelabs/tree/master/Data/JSRelationshipData) diff --git a/en/application-dev/reference/apis/js-apis-data-ability.md b/en/application-dev/reference/apis/js-apis-data-ability.md index 14fba24573..7149bdeeaa 100644 --- a/en/application-dev/reference/apis/js-apis-data-ability.md +++ b/en/application-dev/reference/apis/js-apis-data-ability.md @@ -1,6 +1,6 @@ # DataAbilityPredicates -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE**
+> **NOTE**
> The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version. @@ -22,6 +22,7 @@ Creates an **RdbPredicates** object based on a **DataAabilityPredicates** object **System capability**: SystemCapability.DistributedDataManager.DataShare.Core **Parameters** + | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | name | string | Yes| Table name in the RDB store.| diff --git a/en/application-dev/reference/apis/js-apis-data-distributedobject.md b/en/application-dev/reference/apis/js-apis-data-distributedobject.md index 5ac7b6707c..36761408ca 100644 --- a/en/application-dev/reference/apis/js-apis-data-distributedobject.md +++ b/en/application-dev/reference/apis/js-apis-data-distributedobject.md @@ -1,6 +1,6 @@ # Distributed Data Object -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE**
+> **NOTE**
> The initial APIs of this module are supported since API version 8. Newly added APIs will be marked with a superscript to indicate their earliest API version. @@ -10,8 +10,6 @@ import distributedObject from '@ohos.data.distributedDataObject'; ``` - - ## distributedDataObject.createDistributedObject createDistributedObject(source: object): DistributedObject diff --git a/en/application-dev/reference/apis/js-apis-data-rdb.md b/en/application-dev/reference/apis/js-apis-data-rdb.md index 73a87a94f2..f1211dc922 100644 --- a/en/application-dev/reference/apis/js-apis-data-rdb.md +++ b/en/application-dev/reference/apis/js-apis-data-rdb.md @@ -29,11 +29,12 @@ Obtains a relational database (RDB) store. This API uses an asynchronous callbac ```js const STORE_CONFIG = { name: "RdbTest.db"} -const SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)" data_rdb.getRdbStore(STORE_CONFIG, 1, function (err, rdbStore) { - rdbStore.executeSql(SQL_CREATE_TABLE, null, function() { - console.info('create table done.') - }) + if (err) { + console.info("Failed to get RdbStore, err: " + err) + return + } + console.log("Got RdbStore successfully.") }) ``` ## data_rdb.getRdbStore @@ -61,17 +62,11 @@ Obtains an RDB store. This API uses a promise to return the result. You can set ```js const STORE_CONFIG = { name: "RdbTest.db" } -const SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)" -let promisegetRdb = data_rdb.getRdbStore(STORE_CONFIG, 1); -promisegetRdb.then(async (rdbStore) => { - let promiseExecSql = rdbStore.executeSql(SQL_CREATE_TABLE, null) - promiseExecSql.then(() => { - console.info('executeSql creat done.') - }).catch((err) => { - console.log("executeSql creat err.") - }) +let promise = data_rdb.getRdbStore(STORE_CONFIG, 1); +promise.then(async (rdbStore) => { + console.log("Got RdbStore successfully.") }).catch((err) => { - console.log("getRdbStore err.") + console.log("Failed to get RdbStore, err: " + err) }) ``` @@ -97,11 +92,12 @@ Obtains a relational database (RDB) store. This API uses an asynchronous callbac ```js const STORE_CONFIG = { name: "RdbTest.db"} -const SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)" data_rdb.getRdbStore(this.context, STORE_CONFIG, 1, function (err, rdbStore) { - rdbStore.executeSql(SQL_CREATE_TABLE, null, function() { - console.info('create table done.') - }) + if (err) { + console.info("Failed to get RdbStore, err: " + err) + return + } + console.log("Got RdbStore successfully.") }) ``` @@ -131,17 +127,11 @@ Obtains an RDB store. This API uses a promise to return the result. You can set ```js const STORE_CONFIG = { name: "RdbTest.db" } -const SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)" -let promisegetRdb = data_rdb.getRdbStore(this.context, STORE_CONFIG, 1); -promisegetRdb.then(async (rdbStore) => { - let promiseExecSql = rdbStore.executeSql(SQL_CREATE_TABLE, null) - promiseExecSql.then(() => { - console.info('executeSql creat done.') - }).catch((err) => { - console.log("executeSql creat err.") - }) +let promise = data_rdb.getRdbStore(this.context, STORE_CONFIG, 1); +promise.then(async (rdbStore) => { + console.log("Got RdbStore successfully.") }).catch((err) => { - console.log("getRdbStore err.") + console.log("Failed to get RdbStore, err: " + err) }) ``` @@ -160,11 +150,15 @@ Deletes an RDB store. This API uses a callback to return the result. | callback | AsyncCallback<void> | Yes| Callback invoked to return the result.| **Example** - ```js - data_rdb.deleteRdbStore("RdbTest.db", function (err, rdbStore) { - console.info('delete store done.') - }) - ``` +```js +data_rdb.deleteRdbStore("RdbTest.db", function (err, rdbStore) { + if (err) { + console.info("Failed to delete RdbStore, err: " + err) + return + } + console.log("Deleted RdbStore successfully.") +}) +``` ## data_rdb.deleteRdbStore deleteRdbStore(name: string): Promise<void> @@ -184,14 +178,14 @@ Deletes an RDB store. This API uses a promise to return the result. | Promise<void> | Promise used to return the result.| **Example** - ```js - let promisedeleteRdb = data_rdb.deleteRdbStore("RdbTest.db") - promisedeleteRdb.then(()=>{ - console.info('delete store done.') - }).catch((err) => { - console.log("deleteRdbStore err.") - }) - ``` +```js +let promise = data_rdb.deleteRdbStore("RdbTest.db") +promise.then(()=>{ + console.log("Deleted RdbStore successfully.") +}).catch((err) => { + console.info("Failed to delete RdbStore, err: " + err) +}) +``` ## data_rdb.deleteRdbStore8+ @@ -209,11 +203,15 @@ Deletes an RDB store. This API uses a callback to return the result. | callback | AsyncCallback<void> | Yes| Callback invoked to return the result.| **Example** - ```js - data_rdb.deleteRdbStore(this.context, "RdbTest.db", function (err, rdbStore) { - console.info('delete store done.') - }) - ``` +```js +data_rdb.deleteRdbStore(this.context, "RdbTest.db", function (err, rdbStore) { + if (err) { + console.info("Failed to delete RdbStore, err: " + err) + return + } + console.log("Deleted RdbStore successfully.") +}) +``` ## data_rdb.deleteRdbStore8+ @@ -235,14 +233,14 @@ Deletes an RDB store. This API uses a promise to return the result. | Promise<void> | Promise used to return the result.| **Example** - ```js - let promisedeleteRdb = data_rdb.deleteRdbStore("RdbTest.db") - promisedeleteRdb.then(()=>{ - console.info('delete store done.') - }).catch((err) => { - console.log("deleteRdbStore err.") - }) - ``` +```js +let promise = data_rdb.deleteRdbStore("RdbTest.db") +promise.then(()=>{ + console.log("Deleted RdbStore successfully.") +}).catch((err) => { + console.info("Failed to delete RdbStore, err: " + err) +}) +``` ## RdbPredicates @@ -265,9 +263,9 @@ A constructor used to create an **RdbPredicates** object. | name | string | Yes| Database table name.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +``` ### inDevices8+ @@ -289,10 +287,10 @@ Specifies a remote device on the network during distributed database synchroniza | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.inDevices(['12345678abcde']) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.inDevices(['12345678abcde']) +``` ### inAllDevices8+ @@ -309,10 +307,10 @@ Connects to all remote devices on the network during distributed database synchr | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.inAllDevices() - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.inAllDevices() +``` ### equalTo @@ -335,10 +333,10 @@ Sets the **RdbPredicates** to match the field with data type **ValueType** and v | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "lisi") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "lisi") +``` ### notEqualTo @@ -362,10 +360,10 @@ Sets the **RdbPredicates** to match the field with data type **ValueType** and v | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.notEqualTo("NAME", "lisi") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.notEqualTo("NAME", "lisi") +``` ### beginWrap @@ -383,15 +381,15 @@ Adds a left parenthesis to the **RdbPredicates**. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** with a left parenthesis.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "lisi") - .beginWrap() - .equalTo("AGE", 18) - .or() - .equalTo("SALARY", 200.5) - .endWrap() - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "lisi") + .beginWrap() + .equalTo("AGE", 18) + .or() + .equalTo("SALARY", 200.5) + .endWrap() +``` ### endWrap @@ -409,15 +407,15 @@ Adds a right parenthesis to the **RdbPredicates**. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** with a right parenthesis.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "lisi") - .beginWrap() - .equalTo("AGE", 18) - .or() - .equalTo("SALARY", 200.5) - .endWrap() - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "lisi") + .beginWrap() + .equalTo("AGE", 18) + .or() + .equalTo("SALARY", 200.5) + .endWrap() +``` ### or @@ -435,12 +433,12 @@ Adds the OR condition to the **RdbPredicates**. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** with the OR condition.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "Lisa") - .or() - .equalTo("NAME", "Rose") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "Lisa") + .or() + .equalTo("NAME", "Rose") +``` ### and @@ -458,12 +456,12 @@ Adds the AND condition to the **RdbPredicates**. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** with the AND condition.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "Lisa") - .and() - .equalTo("SALARY", 200.5) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "Lisa") + .and() + .equalTo("SALARY", 200.5) +``` ### contains @@ -486,10 +484,10 @@ Sets the **RdbPredicates** to match a string containing the specified value. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.contains("NAME", "os") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.contains("NAME", "os") +``` ### beginsWith @@ -513,10 +511,10 @@ Sets the **RdbPredicates** to match a string that starts with the specified valu | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.beginsWith("NAME", "os") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.beginsWith("NAME", "os") +``` ### endsWith @@ -540,10 +538,10 @@ Sets the **RdbPredicates** to match a string that ends with the specified value. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.endsWith("NAME", "se") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.endsWith("NAME", "se") +``` ### isNull @@ -566,10 +564,10 @@ Sets the **RdbPredicates** to match the field whose value is null. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| - Example - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.isNull("NAME") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.isNull("NAME") +``` ### isNotNull @@ -592,10 +590,10 @@ Sets the **RdbPredicates** to match the field whose value is not null. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.isNotNull("NAME") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.isNotNull("NAME") +``` ### like @@ -619,10 +617,10 @@ Sets the **RdbPredicates** to match a string that is similar to the specified va | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.like("NAME", "%os%") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.like("NAME", "%os%") +``` ### glob @@ -646,10 +644,10 @@ Sets the **RdbPredicates** to match the specified string. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.glob("NAME", "?h*g") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.glob("NAME", "?h*g") +``` ### between @@ -674,10 +672,10 @@ Sets the **RdbPredicates** to match the field with data type **ValueType** and v | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.between("AGE", 10, 50) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.between("AGE", 10, 50) +``` ### notBetween @@ -702,10 +700,10 @@ Sets the **RdbPredicates** to match the field with data type **ValueType** and v | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.notBetween("AGE", 10, 50) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.notBetween("AGE", 10, 50) +``` ### greaterThan @@ -728,10 +726,10 @@ Sets the **RdbPredicates** to match the field with data type **ValueType** and v | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.greaterThan("AGE", 18) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.greaterThan("AGE", 18) +``` ### lessThan @@ -755,10 +753,10 @@ Sets the **RdbPredicates** to match the field with data type **ValueType** and v | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.lessThan("AGE", 20) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.lessThan("AGE", 20) +``` ### greaterThanOrEqualTo @@ -783,10 +781,10 @@ Sets the **RdbPredicates** to match the field with data type **ValueType** and v | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.greaterThanOrEqualTo("AGE", 18) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.greaterThanOrEqualTo("AGE", 18) +``` ### lessThanOrEqualTo @@ -811,10 +809,10 @@ Sets the **RdbPredicates** to match the field with data type **ValueType** and v | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.lessThanOrEqualTo("AGE", 20) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.lessThanOrEqualTo("AGE", 20) +``` ### orderByAsc @@ -838,10 +836,10 @@ Sets the **RdbPredicates** to match the column with values sorted in ascending o | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.orderByAsc("NAME") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.orderByAsc("NAME") +``` ### orderByDesc @@ -865,10 +863,10 @@ Sets the **RdbPredicates** to match the column with values sorted in descending | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.orderByDesc("AGE") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.orderByDesc("AGE") +``` ### distinct @@ -886,17 +884,17 @@ Sets the **RdbPredicates** to filter out duplicate records. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that can filter out duplicate records.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "Rose").distinct("NAME") - let promisequery = rdbStore.query(predicates, ["NAME"]) - promisequery.then((resultSet) => { - console.log("resultSet column names:" + resultSet.columnNames) - console.log("resultSet column count:" + resultSet.columnCount) - }).catch((err) => { - console.log("query err.") - }) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "Rose").distinct("NAME") +let promise = rdbStore.query(predicates, ["NAME"]) +promise.then((resultSet) => { + console.log("resultSet column names:" + resultSet.columnNames) + console.log("resultSet column count:" + resultSet.columnCount) +}).catch((err) => { + console.log("query err.") +}) +``` ### limitAs @@ -919,10 +917,10 @@ Sets the **RdbPredicates** to specify the maximum number of records. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that specifies the maximum number of records.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "Rose").limitAs(3) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "Rose").limitAs(3) +``` ### offsetAs @@ -945,10 +943,10 @@ Sets the **RdbPredicates** to specify the start position of the returned result. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that specifies the start position of the returned result.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "Rose").offsetAs(3) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "Rose").offsetAs(3) +``` ### groupBy @@ -971,10 +969,10 @@ Sets the **RdbPredicates** to group rows that have the same value into summary r | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that groups rows with the same value.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.groupBy(["AGE", "NAME"]) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.groupBy(["AGE", "NAME"]) +``` ### indexedBy @@ -997,10 +995,10 @@ Sets the **RdbPredicates** object to specify the index column. | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that specifies the index column.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.indexedBy("SALARY_INDEX") - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.indexedBy("SALARY_INDEX") +``` ### in @@ -1025,10 +1023,10 @@ Sets the **RdbPredicates** to match the field with data type **Array<ValueTy | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.in("AGE", [18, 20]) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.in("AGE", [18, 20]) +``` ### notIn @@ -1053,10 +1051,10 @@ Sets the **RdbPredicates** to match the field with data type **Array<ValueTy | [RdbPredicates](#rdbpredicates) | **RdbPredicates** object that matches the specified field.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.notIn("NAME", ["Lisa", "Rose"]) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.notIn("NAME", ["Lisa", "Rose"]) +``` ## RdbStore @@ -1080,17 +1078,21 @@ Inserts a row of data into a table. This API uses a callback to return the resul | callback | AsyncCallback<number> | Yes| Callback invoked to return the result. If the operation is successful, the row ID will be returned. Otherwise, **-1** will be returned.| **Example** - ```js - const valueBucket = { - "NAME": "Lisa", - "AGE": 18, - "SALARY": 100.5, - "CODES": new Uint8Array([1, 2, 3, 4, 5]), - } - rdbStore.insert("EMPLOYEE", valueBucket, function (err, ret) { - console.log("insert first done: " + ret) - }) - ``` +```js +const valueBucket = { + "NAME": "Lisa", + "AGE": 18, + "SALARY": 100.5, + "CODES": new Uint8Array([1, 2, 3, 4, 5]), +} +rdbStore.insert("EMPLOYEE", valueBucket, function (err, ret) { + if (err) { + console.info("Failed to insert data, err: " + err) + return + } + console.log("Insert first done: " + ret) +}) +``` ### insert @@ -1113,20 +1115,20 @@ Inserts a row of data into a table. This API uses a promise to return the result | Promise<number> | Promise used to return the result. If the operation is successful, the row ID will be returned. Otherwise, **-1** will be returned.| **Example** - ```js - const valueBucket = { - "NAME": "Lisa", - "AGE": 18, - "SALARY": 100.5, - "CODES": new Uint8Array([1, 2, 3, 4, 5]), - } - let promiseinsert = rdbStore.insert("EMPLOYEE", valueBucket) - promiseinsert.then(async (ret) => { - console.log("insert first done: " + ret) - }).catch((err) => { - console.log("insert err.") - }) - ``` +```js +const valueBucket = { + "NAME": "Lisa", + "AGE": 18, + "SALARY": 100.5, + "CODES": new Uint8Array([1, 2, 3, 4, 5]), +} +let promise = rdbStore.insert("EMPLOYEE", valueBucket) +promise.then(async (ret) => { + console.log("Insert first done: " + ret) +}).catch((err) => { + console.log("Failed to insert data, err: " + err) +}) +``` ### update @@ -1145,18 +1147,23 @@ Updates data in the database based on the specified RdbPredicates object. This A | callback | AsyncCallback<number> | Yes| Callback used to return the number of rows updated.| **Example** - ```js - const valueBucket = { - "NAME": "Rose", - "AGE": 22, - "SALARY": 200.5, - "CODES": new Uint8Array([1, 2, 3, 4, 5]), - } - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "Lisa") - rdbStore.update(valueBucket, predicates, function (err, ret) { - console.log("updated row count: " + ret)}) - ``` +```js +const valueBucket = { + "NAME": "Rose", + "AGE": 22, + "SALARY": 200.5, + "CODES": new Uint8Array([1, 2, 3, 4, 5]), +} +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "Lisa") +rdbStore.update(valueBucket, predicates, function (err, ret) { + if (err) { + console.info("Failed to update data, err: " + err) + return + } + console.log("Updated row count: " + ret) +}) +``` ### update @@ -1179,22 +1186,22 @@ Updates data in the database based on the specified RdbPredicates object. This A | Promise<number> | Promise used to return the number of rows updated.| **Example** - ```js - const valueBucket = { - "NAME": "Rose", - "AGE": 22, - "SALARY": 200.5, - "CODES": new Uint8Array([1, 2, 3, 4, 5]), - } - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "Lisa") - let promiseupdate = rdbStore.update(valueBucket, predicates) - promiseupdate.then(async (ret) => { - console.log("updated row count: " + ret) - }).catch((err) => { - console.log("update err.") - }) - ``` +```js +const valueBucket = { + "NAME": "Rose", + "AGE": 22, + "SALARY": 200.5, + "CODES": new Uint8Array([1, 2, 3, 4, 5]), +} +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "Lisa") +let promise = rdbStore.update(valueBucket, predicates) +promise.then(async (ret) => { + console.log("Updated row count: " + ret) +}).catch((err) => { + console.info("Failed to update data, err: " + err) +}) +``` ### delete @@ -1213,13 +1220,17 @@ Deletes data from the database based on the specified RdbPredicates object. This | callback | AsyncCallback<number> | Yes| Callback invoked to return the number of rows updated.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "Lisa") - rdbStore.delete(predicates, function (err, rows) { - console.log("delete rows: " + rows) - }) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "Lisa") +rdbStore.delete(predicates, function (err, rows) { + if (err) { + console.info("Failed to delete data, err: " + err) + return + } + console.log("Delete rows: " + rows) +}) +``` ### delete @@ -1241,16 +1252,16 @@ Deletes data from the database based on the specified RdbPredicates object. This | Promise<number> | Promise used to return the number of rows updated.| **Example** - ```js - let predicatesdelete = new data_rdb.RdbPredicates("EMPLOYEE") - predicatesdelete.equalTo("NAME", "Lisa") - let promisedelete = rdbStore.delete(predicates) - promisedelete.then((rows) => { - console.log("delete rows: " + rows) - }).catch((err) => { - console.log("delete err.") - }) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "Lisa") +let promise = rdbStore.delete(predicates) +promise.then((rows) => { + console.log("Delete rows: " + rows) +}).catch((err) => { + console.info("Failed to delete data, err: " + err) +}) +``` ### query @@ -1269,14 +1280,18 @@ Queries data in the database based on specified conditions. This API uses a call | callback | AsyncCallback<[ResultSet](js-apis-data-resultset.md)> | Yes| Callback invoked to return the result. If the operation is successful, a **ResultSet** object will be returned.| **Example** - ```js - let predicates = new data_rdb.RdbPredicates("EMPLOYEE") - predicates.equalTo("NAME", "Rose") - rdbStore.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"], function (err, resultSet) { - console.log("resultSet column names:" + resultSet.columnNames) - console.log("resultSet column count:" + resultSet.columnCount) - }) - ``` +```js +let predicates = new data_rdb.RdbPredicates("EMPLOYEE") +predicates.equalTo("NAME", "Rose") +rdbStore.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"], function (err, resultSet) { + if (err) { + console.info("Query failed, err: " + err) + return + } + console.log("resultSet column names:" + resultSet.columnNames) + console.log("resultSet column count:" + resultSet.columnCount) +}) +``` ### query @@ -1302,12 +1317,12 @@ Queries data in the database based on specified conditions. This API uses a prom ```js let predicates = new data_rdb.RdbPredicates("EMPLOYEE") predicates.equalTo("NAME", "Rose") - let promisequery = rdbStore.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"]) - promisequery.then((resultSet) => { + let promise = rdbStore.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"]) + promise.then((resultSet) => { console.log("resultSet column names:" + resultSet.columnNames) console.log("resultSet column count:" + resultSet.columnCount) }).catch((err) => { - console.log("query err.") + console.info("Query failed, err: " + err) }) ``` @@ -1328,12 +1343,16 @@ Queries data in the RDB store using the specified SQL statement. This API uses a | callback | AsyncCallback<[ResultSet](js-apis-data-resultset.md)> | Yes| Callback invoked to return the result. If the operation is successful, a **ResultSet** object will be returned.| **Example** - ```js - rdbStore.querySql("SELECT * FROM EMPLOYEE CROSS JOIN BOOK WHERE BOOK.NAME = ?", ['sanguo'], function (err, resultSet) { - console.log("resultSet column names:" + resultSet.columnNames) - console.log("resultSet column count:" + resultSet.columnCount) - }) - ``` +```js +rdbStore.querySql("SELECT * FROM EMPLOYEE CROSS JOIN BOOK WHERE BOOK.NAME = ?", ['sanguo'], function (err, resultSet) { + if (err) { + console.info("Query failed, err: " + err) + return + } + console.log("resultSet column names:" + resultSet.columnNames) + console.log("resultSet column count:" + resultSet.columnCount) +}) +``` ### querySql8+ @@ -1356,15 +1375,15 @@ Queries data in the RDB store using the specified SQL statement. This API uses a | Promise<[ResultSet](../apis/js-apis-data-resultset.md)> | Promise used to return the result. If the operation is successful, a **ResultSet** object will be returned.| **Example** - ```js - let promisequerySql = rdbStore.querySql("SELECT * FROM EMPLOYEE CROSS JOIN BOOK WHERE BOOK.NAME = ?", ['sanguo']) - promisequerySql.then((resultSet) => { - console.log("resultSet column names:" + resultSet.columnNames) - console.log("resultSet column count:" + resultSet.columnCount) - }).catch((err) => { - console.log("querySql err.") - }) - ``` +```js +let promise = rdbStore.querySql("SELECT * FROM EMPLOYEE CROSS JOIN BOOK WHERE BOOK.NAME = ?", ['sanguo']) +promise.then((resultSet) => { + console.log("resultSet column names:" + resultSet.columnNames) + console.log("resultSet column count:" + resultSet.columnCount) +}).catch((err) => { + console.info("Query failed, err: " + err) +}) +``` ### executeSql @@ -1383,11 +1402,16 @@ Runs the SQL statement that contains the specified parameters but does not retur | callback | AsyncCallback<void> | Yes| Callback invoked to return the result.| **Example** - ```js - rdbStore.executeSql("DELETE FROM EMPLOYEE", null, function () { - console.info('delete done.') - }) - ``` +```js +const SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)" +rdbStore.executeSql(SQL_CREATE_TABLE, null, function(err) { + if (err) { + console.info("executeSql failed, err: " + err) + return + } + console.info('create table done.') +}) +``` ### executeSql @@ -1410,14 +1434,15 @@ Runs the SQL statement that contains the specified parameters but does not retur | Promise<void> | Promise used to return the result.| **Example** - ```js - let promiseexecuteSql = rdbStore.executeSql("DELETE FROM EMPLOYEE") - promiseexecuteSql.then(() => { - console.info('delete done.') - }).catch((err) => { - console.log("executeSql err.") - }) - ``` +```js +const SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)" +let promise = rdbStore.executeSql(SQL_CREATE_TABLE) +promise.then(() => { + console.info('create table done.') +}).catch((err) => { + console.info("ExecuteSql failed, err: " + err) +}) +``` ### beginTransaction8+ @@ -1429,17 +1454,21 @@ Starts the transaction before executing an SQL statement. **Example** ```js - rdbStore.beginTransaction() - const valueBucket = { - "name": "lisi", - "age": 18, - "salary": 100.5, - "blobType": new Uint8Array([1, 2, 3]), - } - rdbStore.insert("test", valueBucket, function (err, ret) { - console.log("insert done: " + ret) - }) - rdbStore.commit() +rdbStore.beginTransaction() +const valueBucket = { + "name": "lisi", + "age": 18, + "salary": 100.5, + "blobType": new Uint8Array([1, 2, 3]), +} +rdbStore.insert("test", valueBucket, function (err, ret) { + if (err) { + console.info("Failed to insert data, err: " + err) + return + } + console.log("Inserted data successfully: " + ret) +}) +rdbStore.commit() ``` @@ -1453,18 +1482,22 @@ Commits the executed SQL statements. **Example** ```js - rdbStore.beginTransaction() - const valueBucket = { - "name": "lisi", - "age": 18, - "salary": 100.5, - "blobType": new Uint8Array([1, 2, 3]), - } - - rdbStore.insert("test", valueBucket, function (err, ret) { - console.log("insert done: " + ret) - }) - rdbStore.commit() +rdbStore.beginTransaction() +const valueBucket = { + "name": "lisi", + "age": 18, + "salary": 100.5, + "blobType": new Uint8Array([1, 2, 3]), +} + +rdbStore.insert("test", valueBucket, function (err, ret) { + if (err) { + console.info("Failed to insert data, err: " + err) + return + } + console.log("Inserted data successfully: " + ret) +}) +rdbStore.commit() ``` @@ -1478,22 +1511,26 @@ Rolls back the SQL statements that have been executed. **Example** ```js - try { - rdbStore.beginTransaction() - const valueBucket = { - "id": 1, - "name": "lisi", - "age": 18, - "salary": 100.5, - "blobType": new Uint8Array([1, 2, 3]), - } - rdbStore.insert("test", valueBucket, function (err, ret) { - console.log("insert done: " + ret) - }) - rdbStore.commit() - } catch (e) { - rdbStore.rollBack() - } +try { + rdbStore.beginTransaction() + const valueBucket = { + "id": 1, + "name": "lisi", + "age": 18, + "salary": 100.5, + "blobType": new Uint8Array([1, 2, 3]), + } + rdbStore.insert("test", valueBucket, function (err, ret) { + if (err) { + console.info("Failed to insert data, err: " + err) + return + } + console.log("Inserted data successfully: " + ret) + }) + rdbStore.commit() +} catch (e) { + rdbStore.rollBack() +} ``` @@ -1512,14 +1549,14 @@ Sets a list of distributed tables. This API uses a callback to return the result | callback | AsyncCallback<void> | Yes| Callback invoked to return the result.| **Example** - ```js - rdbStore.setDistributedTables(["EMPLOYEE"], function (err) { - if (err) { - console.info('setDistributedTables failed.') - return - } - console.info('setDistributedTables success.') - }) +```js +rdbStore.setDistributedTables(["EMPLOYEE"], function (err) { + if (err) { + console.info('setDistributedTables failed, err: ' + err) + return + } + console.info('setDistributedTables successful.') +}) ``` @@ -1542,14 +1579,14 @@ Sets a list of distributed tables. This API uses a promise to return the result. | Promise<void> | Promise used to return the result.| **Example** - ```js - let promiseset = rdbStore.setDistributedTables(["EMPLOYEE"]) - promiseset.then(() => { - console.info("setDistributedTables success.") - }).catch((err) => { - console.info("setDistributedTables failed.") - }) - ``` +```js +let promise = rdbStore.setDistributedTables(["EMPLOYEE"]) +promise.then(() => { + console.info("setDistributedTables successful.") +}).catch((err) => { + console.info("setDistributedTables failed, err: " + err) +}) +``` ### obtainDistributedTableName8+ @@ -1567,15 +1604,15 @@ Obtains the distributed table name for a remote device based on the local table | callback | AsyncCallback<string> | Yes| Callback invoked to return the result. If the operation succeeds, the distributed table name of the remote device is returned.| **Example** - ```js - rdbStore.obtainDistributedTableName(deviceId, "EMPLOYEE", function (err, tableName) { - if (err) { - console.info('obtainDistributedTableName failed.') - return - } - console.info('obtainDistributedTableName success, tableName=.' + tableName) - }) - ``` +```js +rdbStore.obtainDistributedTableName(deviceId, "EMPLOYEE", function (err, tableName) { + if (err) { + console.info('obtainDistributedTableName failed, err: ' + err) + return + } + console.info('obtainDistributedTableName successful, tableName=.' + tableName) +}) +``` ### obtainDistributedTableName8+ @@ -1598,14 +1635,14 @@ Obtains the distributed table name for a remote device based on the local table | Promise<string> | Promise used to return the result. If the operation succeeds, the distributed table name of the remote device is returned.| **Example** - ```js - let promiseDistr = rdbStore.obtainDistributedTableName(deviceId, "EMPLOYEE") - promiseDistr.then((tableName) => { - console.info('obtainDistributedTableName success, tableName=' + tableName) - }).catch((err) => { - console.info('obtainDistributedTableName failed.') - }) - ``` +```js +let promise = rdbStore.obtainDistributedTableName(deviceId, "EMPLOYEE") +promise.then((tableName) => { + console.info('obtainDistributedTableName successful, tableName=' + tableName) +}).catch((err) => { + console.info('obtainDistributedTableName failed, err: ' + err) +}) +``` ### sync8+ @@ -1623,20 +1660,20 @@ Synchronizes data between devices. This API uses a callback to return the result | callback | AsyncCallback<Array<[string, number]>> | Yes| Callback invoked to send the synchronization result to the caller.
**string** indicates the device ID.
**number** indicates the synchronization status of each device. The value **0** indicates a successful synchronization. Other values indicate a synchronization failure. | **Example** - ```js - let predicate = new rdb.RdbPredicates('EMPLOYEE') - predicate.inDevices(['12345678abcde']) - rdbStore.sync(rdb.SyncMode.SYNC_MODE_PUSH, predicate, function (err, result) { - if (err) { - console.log('sync failed') - return - } - console.log('sync done.') - for (let i = 0; i < result.length; i++) { - console.log('device=' + result[i][0] + ' status=' + result[i][1]) - } - }) - ``` +```js +let predicates = new rdb.RdbPredicates('EMPLOYEE') +predicates.inDevices(['12345678abcde']) +rdbStore.sync(rdb.SyncMode.SYNC_MODE_PUSH, predicates, function (err, result) { + if (err) { + console.log('sync failed, err: ' + err) + return + } + console.log('sync done.') + for (let i = 0; i < result.length; i++) { + console.log('device=' + result[i][0] + ' status=' + result[i][1]) + } +}) +``` ### sync8+ @@ -1660,19 +1697,19 @@ Synchronizes data between devices. This API uses a promise to return the result. | Promise<Array<[string, number]>> | Promise used to return the synchronization result to the caller.
**string** indicates the device ID.
**number** indicates the synchronization status of each device. The value **0** indicates a successful synchronization. Other values indicate a synchronization failure. | **Example** - ```js - let predicatesync = new data_rdb.RdbPredicates('EMPLOYEE') - predicatesync.inDevices(['12345678abcde']) - let promisesync = rdbStore.sync(data_rdb.SyncMode.SYNC_MODE_PUSH, predicatesync) - promisesync.then((result) =>{ - console.log('sync done.') - for (let i = 0; i < result.length; i++) { - console.log('device=' + result[i][0] + ' status=' + result[i][1]) - } - }).catch((err) => { - console.log('sync failed') - }) - ``` +```js +let predicates = new data_rdb.RdbPredicates('EMPLOYEE') +predicates.inDevices(['12345678abcde']) +let promise = rdbStore.sync(data_rdb.SyncMode.SYNC_MODE_PUSH, predicates) +promise.then((result) =>{ + console.log('sync done.') + for (let i = 0; i < result.length; i++) { + console.log('device=' + result[i][0] + ' status=' + result[i][1]) + } +}).catch((err) => { + console.log('sync failed') +}) +``` ### on('dataChange')8+ @@ -1691,18 +1728,18 @@ Registers an observer for this RDB store. When the data in the RDB store changes | observer | Callback<Array<string>> | Yes| Observer that listens for the data changes in the RDB store.| **Example** - ```js - function storeObserver(devices) { - for (let i = 0; i < devices.length; i++) { - console.log('device=' + devices[i] + ' data changed') - } - } - try { - rdbStore.on('dataChange', data_rdb.SubscribeType.SUBSCRIBE_TYPE_REMOTE, storeObserver) - } catch (err) { - console.log('register observer failed') - } - ``` +```js +function storeObserver(devices) { + for (let i = 0; i < devices.length; i++) { + console.log('device=' + devices[i] + ' data changed') + } +} +try { + rdbStore.on('dataChange', data_rdb.SubscribeType.SUBSCRIBE_TYPE_REMOTE, storeObserver) +} catch (err) { + console.log('Failed to register observer') +} +``` ### off('dataChange')8+ @@ -1721,19 +1758,18 @@ Deletes the specified observer of the RDB store. This API uses a callback to ret | observer | Callback<Array<string>> | Yes| Data change observer registered.| **Example** - - ```js - function storeObserver(devices) { - for (let i = 0; i < devices.length; i++) { - console.log('device=' + devices[i] + ' data changed') - } - } - try { - rdbStore.off('dataChange', data_rdb.SubscribeType.SUBSCRIBE_TYPE_REMOTE, storeObserver) - } catch (err) { - console.log('unregister observer failed') - } - ``` +```js +function storeObserver(devices) { + for (let i = 0; i < devices.length; i++) { + console.log('device=' + devices[i] + ' data changed') + } +} +try { + rdbStore.off('dataChange', data_rdb.SubscribeType.SUBSCRIBE_TYPE_REMOTE, storeObserver) +} catch (err) { + console.log('Failed to unregister observer') +} +``` ## StoreConfig diff --git a/en/application-dev/reference/apis/js-apis-data-resultset.md b/en/application-dev/reference/apis/js-apis-data-resultset.md index 3dca6cfcb0..613e793255 100644 --- a/en/application-dev/reference/apis/js-apis-data-resultset.md +++ b/en/application-dev/reference/apis/js-apis-data-resultset.md @@ -1,6 +1,6 @@ # Result Set -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE**
+> **NOTE**
> The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version. diff --git a/en/application-dev/reference/apis/js-apis-data-storage.md b/en/application-dev/reference/apis/js-apis-data-storage.md index 844b24576a..63ae9d95bc 100644 --- a/en/application-dev/reference/apis/js-apis-data-storage.md +++ b/en/application-dev/reference/apis/js-apis-data-storage.md @@ -3,7 +3,7 @@ Lightweight storage provides applications with data processing capability and allows applications to perform lightweight data storage and query. Data is stored in key-value (KV) pairs. Keys are of the string type, and values can be of the number, string, or Boolean type. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE**
+> **NOTE**
> > - The initial APIs of this module are supported since API version 6. Newly added APIs will be marked with a superscript to indicate their earliest API version. > @@ -30,7 +30,7 @@ import dataStorage from '@ohos.data.storage'; getStorageSync(path: string): Storage -Reads a file and loads the data to the **Storage** instance in synchronous mode. +Reads the specified file and load its data to the **Storage** instance for data operations. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -67,7 +67,7 @@ Reads a file and loads the data to the **Storage** instance in synchronous mode. getStorage(path: string, callback: AsyncCallback<Storage>): void -Reads a file and loads the data to the **Storage** instance. This API uses an asynchronous callback to return the execution result. +Reads the specified file and loads its data to the **Storage** instance for data operations. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -105,7 +105,7 @@ Reads a file and loads the data to the **Storage** instance. This API uses an as getStorage(path: string): Promise<Storage> -Reads a file and loads the data to the **Storage** instance. This API uses a promise to return the execution result. +Reads the specified file and loads its data to the **Storage** instance for data operations. This API uses a promise to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -146,7 +146,7 @@ Reads a file and loads the data to the **Storage** instance. This API uses a pro deleteStorageSync(path: string): void -Deletes the singleton **Storage** instance of a file from the memory, and deletes the specified file, its backup file, and damaged files. After the specified files are deleted, the **Storage** instance cannot be used for data operations. Otherwise, data inconsistency will occur. This API uses a synchronous mode. +Deletes the singleton **Storage** instance of a file from the memory, and deletes the specified file, its backup file, and damaged files. After the specified files are deleted, the **Storage** instance cannot be used for data operations. Otherwise, data inconsistency will occur. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -165,7 +165,7 @@ Deletes the singleton **Storage** instance of a file from the memory, and delete deleteStorage(path: string, callback: AsyncCallback<void>): void -Deletes the singleton **Storage** instance of a file from the memory, and deletes the specified file, its backup file, and damaged files. After the specified files are deleted, the **Storage** instance cannot be used for data operations. Otherwise, data inconsistency will occur. This API uses an asynchronous callback to return the execution result. +Deletes the singleton **Storage** instance of a file from the memory, and deletes the specified file, its backup file, and damaged files. After the specified files are deleted, the **Storage** instance cannot be used for data operations. Otherwise, data inconsistency will occur. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -191,7 +191,7 @@ Deletes the singleton **Storage** instance of a file from the memory, and delete deleteStorage(path: string): Promise<void> -Deletes the singleton **Storage** instance of a file from the memory, and deletes the specified file, its backup file, and damaged files. After the specified files are deleted, the **Storage** instance cannot be used for data operations. Otherwise, data inconsistency will occur. This API uses a promise to return the execution result. +Deletes the singleton **Storage** instance of a file from the memory, and deletes the specified file, its backup file, and damaged files. After the specified files are deleted, the **Storage** instance cannot be used for data operations. Otherwise, data inconsistency will occur. This API uses a promise to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -222,8 +222,6 @@ removeStorageFromCacheSync(path: string): void Removes the singleton **Storage** instance of a file from the cache. The removed instance cannot be used for data operations. Otherwise, data inconsistency will occur. -This API uses a synchronous mode. - **System capability**: SystemCapability.DistributedDataManager.Preferences.Core **Parameters** @@ -241,9 +239,7 @@ This API uses a synchronous mode. removeStorageFromCache(path: string, callback: AsyncCallback<void>): void -Removes the singleton **Storage** instance of a file from the cache. The removed instance cannot be used for data operations. Otherwise, data inconsistency will occur. - -This API uses an asynchronous callback to return the result. +Removes the singleton **Storage** instance of a file from the cache. The removed instance cannot be used for data operations. Otherwise, data inconsistency will occur. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -269,9 +265,7 @@ This API uses an asynchronous callback to return the result. removeStorageFromCache(path: string): Promise<void> -Removes the singleton **Storage** instance of a file from the cache. The removed instance cannot be used for data operations. Otherwise, data inconsistency will occur. - -This API uses a promise to return the result. +Removes the singleton **Storage** instance of a file from the cache. The removed instance cannot be used for data operations. Otherwise, data inconsistency will occur. This API uses a promise to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -307,8 +301,6 @@ getSync(key: string, defValue: ValueType): ValueType Obtains the value corresponding to a key. If the value is null or not in the default value format, the default value is returned. -This API uses a synchronous mode. - **System capability**: SystemCapability.DistributedDataManager.Preferences.Core **Parameters** @@ -333,9 +325,7 @@ This API uses a synchronous mode. get(key: string, defValue: ValueType, callback: AsyncCallback<ValueType>): void -Obtains the value corresponding to a key. If the value is null or not in the default value format, the default value is returned. - -This API uses an asynchronous callback to return the result. +Obtains the value corresponding to a key. If the value is null or not in the default value format, the default value is returned. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -362,9 +352,7 @@ This API uses an asynchronous callback to return the result. get(key: string, defValue: ValueType): Promise<ValueType> -Obtains the value corresponding to a key. If the value is null or not in the default value format, the default value is returned. - -This API uses a promise to return the result. +Obtains the value corresponding to a key. If the value is null or not in the default value format, the default value is returned. This API uses a promise to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -397,8 +385,6 @@ putSync(key: string, value: ValueType): void Obtains the **Storage** instance corresponding to the specified file, writes data to the **Storage** instance using a **Storage** API, and saves the modification using **flush()** or **flushSync()**. -This API uses a synchronous mode. - **System capability**: SystemCapability.DistributedDataManager.Preferences.Core **Parameters** @@ -417,9 +403,7 @@ This API uses a synchronous mode. put(key: string, value: ValueType, callback: AsyncCallback<void>): void -Obtains the **Storage** instance corresponding to the specified file, writes data to the **Storage** instance using a **Storage** API, and saves the modification using **flush()** or **flushSync()**. - -This API uses an asynchronous callback to return the result. +Obtains the **Storage** instance corresponding to the specified file, writes data to the **Storage** instance using a **Storage** API, and saves the modification using **flush()** or **flushSync()**. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -446,9 +430,7 @@ This API uses an asynchronous callback to return the result. put(key: string, value: ValueType): Promise<void> -Obtains the **Storage** instance corresponding to the specified file, writes data to the **Storage** instance using a **Storage** API, and saves the modification using **flush()** or **flushSync()**. - -This API uses a promise to return the result. +Obtains the **Storage** instance corresponding to the specified file, writes data to the **Storage** instance using a **Storage** API, and saves the modification using **flush()** or **flushSync()**. This API uses a promise to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -480,8 +462,6 @@ hasSync(key: string): boolean Checks whether the storage object contains data with a given key. -This API uses a synchronous mode. - **System capability**: SystemCapability.DistributedDataManager.Preferences.Core **Parameters** @@ -507,9 +487,7 @@ This API uses a synchronous mode. has(key: string, callback: AsyncCallback<boolean>): boolean -Checks whether the storage object contains data with a given key. - -This API uses an asynchronous callback to return the result. +Checks whether the storage object contains data with a given key. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -542,9 +520,7 @@ This API uses an asynchronous callback to return the result. has(key: string): Promise<boolean> -Checks whether the storage object contains data with a given key. - -This API uses a promise to return the result. +Checks whether the storage object contains data with a given key. This API uses a promise to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -577,8 +553,6 @@ deleteSync(key: string): void Deletes data with the specified key from this storage object. -This API uses a synchronous mode. - **System capability**: SystemCapability.DistributedDataManager.Preferences.Core **Parameters** @@ -592,13 +566,11 @@ This API uses a synchronous mode. ``` -### deletej +### delete delete(key: string, callback: AsyncCallback<void>): void -Deletes data with the specified key from this storage object. - -This API uses an asynchronous callback to return the result. +Deletes data with the specified key from this storage object. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -624,9 +596,7 @@ This API uses an asynchronous callback to return the result. delete(key: string): Promise<void> -Deletes data with the specified key from this storage object. - -This API uses a promise to return the result. +Deletes data with the specified key from this storage object. This API uses a promise to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -657,8 +627,6 @@ flushSync(): void Saves the modification of this object to the **Storage** instance and synchronizes the modification to the file. -This API uses a synchronous mode. - **System capability**: SystemCapability.DistributedDataManager.Preferences.Core **Example** @@ -671,9 +639,7 @@ This API uses a synchronous mode. flush(callback: AsyncCallback<void>): void -Saves the modification of this object to the **Storage** instance and synchronizes the modification to the file. - -This API uses an asynchronous callback to return the result. +Saves the modification of this object to the **Storage** instance and synchronizes the modification to the file. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -698,9 +664,7 @@ This API uses an asynchronous callback to return the result. flush(): Promise<void> -Saves the modification of this object to the **Storage** instance and synchronizes the modification to the file. - -This API uses a promise to return the result. +Saves the modification of this object to the **Storage** instance and synchronizes the modification to the file. This API uses a promise to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -726,8 +690,6 @@ clearSync(): void Clears this **Storage** object. -This API uses a synchronous mode. - **System capability**: SystemCapability.DistributedDataManager.Preferences.Core **Example** @@ -740,9 +702,7 @@ This API uses a synchronous mode. clear(callback: AsyncCallback<void>): void -Clears this **Storage** object. - -This API uses an asynchronous callback to return the result. +Clears this **Storage** object. This API uses an asynchronous callback to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core @@ -767,9 +727,7 @@ This API uses an asynchronous callback to return the result. clear(): Promise<void> -Clears this **Storage** object. - -This API uses a promise to return the result. +Clears this **Storage** object. This API uses a promise to return the result. **System capability**: SystemCapability.DistributedDataManager.Preferences.Core diff --git a/en/application-dev/reference/apis/js-apis-distributed-data.md b/en/application-dev/reference/apis/js-apis-distributed-data.md index 8f5b800d57..6bbe4a0111 100644 --- a/en/application-dev/reference/apis/js-apis-distributed-data.md +++ b/en/application-dev/reference/apis/js-apis-distributed-data.md @@ -2,7 +2,7 @@ Distributed data management provides collaboration between databases of different devices for applications. The APIs provided by distributed data management can be used to save data to the distributed database and perform operations such as adding, deleting, modifying, and querying data in the distributed database. ->![](../../public_sys-resources/icon-note.gif) **NOTE**
+>**NOTE**
>The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version. @@ -2922,6 +2922,7 @@ These value types can be used only by internal applications. | BOOLEAN |4 |Boolean. | | DOUBLE |5 |Double (double-precision floating point). | + ## SingleKVStore Provides methods to query and synchronize data in a single KV store. This class inherits from **KVStore**. Before calling any method in **SingleKVStore**, you must use [getKVStore](#getkvstore) to obtain a **SingleKVStore** object. @@ -3447,7 +3448,7 @@ Closes the **KvStoreResultSet** object obtained by **getResultSet**. This API us | Name | Type| Mandatory | Description | | ----- | ------ | ---- | ----------------------- | | resultSet |[KvStoreResultSet](#kvstoreresultset8) | Yes |**KvStoreResultSet** object to close. | -| callback |AsyncCallback<void> | Yes |Callback used to return the execution result. | +| callback |AsyncCallback<void> | Yes |Callback used to return the result. | **Example** diff --git a/en/application-dev/reference/apis/js-apis-system-storage.md b/en/application-dev/reference/apis/js-apis-system-storage.md index d80bf1ea12..37e8dc5de7 100644 --- a/en/application-dev/reference/apis/js-apis-system-storage.md +++ b/en/application-dev/reference/apis/js-apis-system-storage.md @@ -1,6 +1,6 @@ # Data Storage -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE**
+> **NOTE**
> > - The APIs of this module are no longer maintained since API Version 6, and you are advised to use [`@ohos.data.storage`](js-apis-data-storage.md). From API Version 9, you are advised to use [`@ohos.data.preferences`](js-apis-data-preferences.md). > @@ -67,7 +67,7 @@ Sets the value in the cache based on the specified key. | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | -| key | string | Yes| Key of the value to set.| +| key | string | Yes| Key of the data to set.| | value | string | Yes| New value to set. The maximum length is 128 bytes.| | success | Function | No| Called when **storage.set()** is successful.| | fail | Function | No| Called when **storage.set()** fails. In the callback, **data** indicates the error information, and **code** indicates the error code.| diff --git a/en/device-dev/driver/driver-platform-adc-des.md b/en/device-dev/driver/driver-platform-adc-des.md index 63da8cd7e0..0ee388c29a 100644 --- a/en/device-dev/driver/driver-platform-adc-des.md +++ b/en/device-dev/driver/driver-platform-adc-des.md @@ -2,13 +2,14 @@ ## Overview -- An analog-to-digital converter (ADC) is a device that converts analog signals into digital signals. +An analog-to-digital converter (ADC) is a device that converts analog signals into digital signals. -- The ADC APIs provide a set of common functions for ADC data transfer, including: - - Opening or closing an ADC device - - Obtaining the analog-to-digital (AD) conversion result +The ADC APIs provide a set of common functions for ADC data transfer, including: +- Opening or closing an ADC device - **Figure 1** ADC physical connection +- Obtaining the analog-to-digital (AD) conversion result + + **Figure 1** ADC physical connection
![](figures/ADC_physical_connection.png "ADC_physical_connection") @@ -51,11 +52,11 @@ ### How to Use -[Figure 2](#fig2) shows how an ADC device works. +The figure below illustrates how to use the APIs. + + **Figure 2** Using ADC driver APIs
- **Figure 2** How ADC works - -![](figures/ADC_flowchart.png "ADC_flowchart") +![](figures/using-ADC-process.png "using-ADC-process.png") ### Opening an ADC Device diff --git a/en/device-dev/driver/driver-platform-dac-des.md b/en/device-dev/driver/driver-platform-dac-des.md index 9088d3b689..0805a66507 100644 --- a/en/device-dev/driver/driver-platform-dac-des.md +++ b/en/device-dev/driver/driver-platform-dac-des.md @@ -42,7 +42,8 @@ The DAC module is divided into the following layers: - The core layer provides the capabilities of binding, initializing, and releasing devices. - The adaptation layer implements other functions. -![](../public_sys-resources/icon-note.gif)NOTE
The core layer can call the functions of the interface layer and uses the hook to call functions of the adaptation layer. In this way, the adaptation layer can indirectly call the functions of the interface layer, but the interface layer cannot call the functions of the adaptation layer. +>![](../public_sys-resources/icon-note.gif) **NOTE**
+>The core layer can call the functions of the interface layer and uses the hook to call functions of the adaptation layer. In this way, the adaptation layer can indirectly call the functions of the interface layer, but the interface layer cannot call the functions of the adaptation layer. **Figure 1** Unified service mode @@ -68,15 +69,15 @@ The table below describes the APIs of the DAC module. For more details, see API | :------------------------------------------------------------| :------------ | | DevHandle DacOpen(uint32_t number) | Opens a DAC device. | | void DacClose(DevHandle handle) | Closes a DAC device. | -| int32_t DacWrite(DevHandle handle, uint32_t channel, uint32_t val) | Sets the target DA value. | +| int32_t DacWrite(DevHandle handle, uint32_t channel, uint32_t val) | Sets a target DA value. | ### How to Develop -The figure below illustrates the process of using a DAC device. +The figure below illustrates how to use the APIs. -**Figure 2** Process of using a DAC device - -![](figures/process-of-using-DAC.png "Process of using a DAC") +**Figure 2** Using DAC driver APIs
+ +![](figures/using-DAC-process.png "using-DAC-process.png") #### Opening a DAC Device @@ -88,10 +89,10 @@ DevHandle DacOpen(uint32_t number); **Table 2** Description of DacOpen -| **Parameter** | Description | +| **Parameter** | Description | | ---------- | ----------------- | | number | DAC device number. | -| **Return Value**| **Description** | +| **Return Value**| **Description** | | NULL | Failed to open the DAC device. | | Device handle | Handle of the DAC device opened.| @@ -110,7 +111,7 @@ if (dacHandle == NULL) { } ``` -#### Setting the Target DA Value +#### Setting a Target DA Value ``` int32_t DacWrite(DevHandle handle, uint32_t channel, uint32_t val); @@ -119,7 +120,7 @@ int32_t DacWrite(DevHandle handle, uint32_t channel, uint32_t val); **Table 3** Description of DacWrite -| **Parameter** | Description | +| **Parameter** | Description | | ---------- | -------------- | | handle | DAC device handle. | | channel | DAC channel number. | @@ -148,7 +149,7 @@ void DacClose(DevHandle handle); **Table 4** Description of DacClose -| **Parameter** | Description | +| **Parameter** | Description | | ---------- | -------------- | | handle | DAC device handle. | | **Return Value**| **Description**| @@ -208,4 +209,4 @@ static int32_t TestCaseDac(void) return 0; } -``` +``` \ No newline at end of file diff --git a/en/device-dev/driver/driver-platform-gpio-des.md b/en/device-dev/driver/driver-platform-gpio-des.md index 094fa48fc3..04a850623e 100644 --- a/en/device-dev/driver/driver-platform-gpio-des.md +++ b/en/device-dev/driver/driver-platform-gpio-des.md @@ -1,258 +1,495 @@ -# GPIO +# GPIO -## Overview +## Overview -A general-purpose input/output (GPIO) controller manages all GPIO pins by group. Each group of GPIO pins is associated with one or more registers. The GPIO controller manages the pins by reading data from and writing data to the registers. +Generally, a general-purpose input/output \(GPIO\) controller manages all GPIO pins by group. Each group of GPIO pins is associated with one or more registers. The GPIO pins are operated by reading data from and writing data to the registers. The GPIO APIs define a set of standard functions for performing operations on GPIO pins, including: -- Setting the pin direction, which can be input or output (high impedance is not supported currently) +- Setting the pin direction, which can be input or output \(high impedance is not supported currently\) + +- Reading and writing level values, which can be low or high +- Setting an interrupt service routine \(ISR\) function and interrupt trigger mode for a pin +- Enabling or disabling interrupts for a pin + +## Available APIs + +**Table 1** APIs available for the GPIO driver + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Capability

+

Function

+

Description

+

GPIO read/write

+

GpioRead

+

Reads the level value of a GPIO pin.

+

GpioWrite

+

Writes the level value of a GPIO pin.

+

GPIO settings

+

GpioSetDir

+

Sets the direction for a GPIO pin.

+

GpioGetDir

+

Obtains the direction for a GPIO pin.

+

GPIO interrupt settings

+

GpioSetIrq

+

Sets the ISR function for a GPIO pin.

+

GpioUnSetIrq

+

Cancels the setting of the ISR function for a GPIO pin.

+

GpioEnableIrq

+

Enables GPIO interrupts for a pin.

+

GpioDisableIrq

+

Disables GPIO interrupts for a pin.

+
+ + +>![](../public_sys-resources/icon-note.gif) **NOTE**
+>All functions provided in this document can be called only in kernel mode. + +## Usage Guidelines + +### How to Use + +The GPIO APIs use the GPIO pin number to specify a pin. The figure below illustrates how to use the APIs. + +**Figure 1** Using GPIO driver APIs + +![](figures/using-gpio-process.png "using-gpio-process.png") + +### Determining the GPIO Pin Number + +The method for converting GPIO pin numbers varies depending on the GPIO controller model, parameters, and controller driver of different system on chips \(SoCs\). -- Reading and writing level values, which can be low or high - -- Setting an interrupt service routine (ISR) function and interrupt trigger mode for a pin - -- Enabling or disabling pin interrupts - - -## Available APIs - - **Table 1** GPIO driver APIs - -| Category| Description| -| -------- | -------- | -| GPIO read/write| - **GpioRead**: reads the pin level.
- **GpioWrite**: writes the pin level.| -| GPIO settings| - **GpioSetDir**: sets the pin direction.
- **GpioGetDir**: obtains the pin direction.| -| GPIO interrupt settings| - **GpioSetIrq**: sets the ISR function for a GPIO pin.
- **GpioUnsetIrq**: cancels the setting of the ISR function for a GPIO pin.
- **GpioEnableIrq**: enables interrupts for a pin.
- **GpioDisableIrq**: disables interrupts for a pin.| - -> ![icon-note.gif](../public_sys-resources/icon-note.gif) **NOTE**
-> All APIs described in this document can be called only in the kernel space. - - -## Usage Guidelines - - -### How to Use - -The figure below shows the general GPIO development process. In the APIs, a GPIO pin is specified by the pin number. - - **Figure 1** GPIO development process +- Hi3516DV300 - ![](figures/process-of-using-a-gpio.png "process-of-using-a-gpio") + A controller manages 12 groups of GPIO pins. Each group contains 8 GPIO pins. + GPIO pin number = GPIO group index x Number of GPIO pins in each group + Offset in the group -### Determining the GPIO Pin Number + The group index ranges from 0 to 11. + + Example: + + GPIO pin number of GPIO10\_3 = 10 x 8 + 3 = 83 + +- Hi3518EV300 + + A controller manages 10 groups of GPIO pins. Each group contains 10 GPIO pins. + + GPIO pin number = GPIO group index \(0–9\) x Number of GPIO pins in each group \(10\) + Offset in the group + + The group index ranges from 0 to 9. + + Example: + + GPIO pin number of GPIO7\_3 = 7 x 10 + 3 = 73 + + +### Using APIs to Operate GPIO Pins + +- Set the direction for a GPIO pin. + + Before performing read/write operations on a GPIO pin, call **GpioSetDir**() to set the direction. + + int32\_t GpioSetDir\(uint16\_t gpio, uint16\_t dir\); + + **Table 2** Description of GpioSetDir + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

gpio

+

GPIO pin number.

+

dir

+

Direction to set.

+

Return Value

+

Description

+

0

+

The operation is successful.

+

Negative value

+

The operation failed.

+
+ + +- Read or write the level value for a GPIO pin. + + Call **GpioRead**() to read the level value of a GPIO pin. + + int32\_t GpioRead\(uint16\_t gpio, uint16\_t \*val\); + + **Table 3** Description of GpioRead + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

gpio

+

GPIO pin number.

+

val

+

Pointer to the level value.

+

Return Value

+

Description

+

0

+

The operation is successful.

+

Negative value

+

The operation failed.

+
+ + + Call **GpioWrite()** to write the level value for a GPIO pin. + + int32\_t GpioWrite\(uint16\_t gpio, uint16\_t val\); + + **Table 4** Description of GpioWrite + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

gpio

+

GPIO pin number.

+

val

+

Level value to write.

+

Return Value

+

Description

+

0

+

The operation is successful.

+

Negative value

+

The operation failed.

+
+ + Example: + + ``` + int32_t ret; + uint16_t val; + /* Set the output direction for GPIO3. */ + ret = GpioSetDir(3, GPIO_DIR_OUT); + if (ret != 0) { + HDF_LOGE("GpioSerDir: failed, ret %d\n", ret); + return; + } + /* Write the low level GPIO_VAL_LOW for GPIO3. */ + ret = GpioWrite(3, GPIO_VAL_LOW); + if (ret != 0) { + HDF_LOGE("GpioWrite: failed, ret %d\n", ret); + return; + } + /* Set the input direction for GPIO6. */ + ret = GpioSetDir(6, GPIO_DIR_IN); + if (ret != 0) { + HDF_LOGE("GpioSetDir: failed, ret %d\n", ret); + return; + } + /* Read the level value of GPIO6. */ + ret = GpioRead(6, &val); + ``` + + +- Set the ISR function for a GPIO pin. + + Call **GpioSetIrq()** to set the ISR function for a GPIO pin. + + int32\_t GpioSetIrq\(uint16\_t gpio, uint16\_t mode, GpioIrqFunc func, void \*arg\); + + **Table 5** Description of GpioSetIrq + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

gpio

+

GPIO pin number.

+

mode

+

Interrupt trigger mode.

+

func

+

ISR function to set.

+

arg

+

Pointer to the parameters passed to the ISR function.

+

Return Value

+

Description

+

0

+

The operation is successful.

+

Negative value

+

The operation failed.

+
+ + >![](../public_sys-resources/icon-caution.gif) **CAUTION**
+ >Only one ISR function can be set for a GPIO pin at a time. If **GpioSetIrq** is called repeatedly, the previous IRS function will be replaced. + + If the ISR function is no longer required, call **GpioUnSetIrq()** to cancel the setting. + + int32\_t GpioUnSetIrq\(uint16\_t gpio\); + + **Table 6** Description of GpioUnSetIrq + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

gpio

+

GPIO pin number.

+

Return Value

+

Description

+

0

+

The operation is successful.

+

Negative value

+

The operation failed.

+
+ + After the ISR function is set, call **GpioEnableIrq()** to enable interrupts. + + int32\_t GpioEnableIrq\(uint16\_t gpio\); + + **Table 7** Description of GpioEnableIrq + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

gpio

+

GPIO pin number.

+

Return Value

+

Description

+

0

+

The operation is successful.

+

Negative value

+

The operation failed.

+
+ + >![](../public_sys-resources/icon-caution.gif) **CAUTION**
+ >The configured ISR function can be responded only after the GPIO interrupt is enabled. + + Call **GpioDisableIrq()** to disable interrupts. + + int32\_t GpioDisableIrq\(uint16\_t gpio\); + + **Table 8** Description of GpioDisableIrq + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

gpio

+

GPIO pin number.

+

Return Value

+

Description

+

0

+

The operation is successful.

+

Negative value

+

The operation failed.

+
+ + Example: + + ``` + /* ISR function */ + */ + int32_t MyCallBackFunc(uint16_t gpio, void *data) + { + HDF_LOGI("%s: gpio:%u interrupt service in! data=%p\n", __func__, gpio, data); + return 0; + } + + int32_t ret; + /* Set the ISR function to MyCallBackFunc, the parameter to NULL, and the interrupt trigger mode to rising edge. */ + ret = GpioSetIrq(3, OSAL_IRQF_TRIGGER_RISING, MyCallBackFunc, NULL); + if (ret != 0) { + HDF_LOGE("GpioSetIrq: failed, ret %d\n", ret); + return; + } + + /* Enable an interrupt for GPIO3. */ + ret = GpioEnableIrq(3); + if (ret != 0) { + HDF_LOGE("GpioEnableIrq: failed, ret %d\n", ret); + return; + } + + /* Disable the interrupt for GPIO3. */ + ret = GpioDisableIrq(3); + if (ret != 0) { + HDF_LOGE("GpioDisableIrq: failed, ret %d\n", ret); + return; + } + + /* Cancel the ISR function for GPIO3. */ + ret = GpioUnSetIrq(3); + if (ret != 0) { + HDF_LOGE("GpioUnSetIrq: failed, ret %d\n", ret); + return; + } + ``` -The method for determining the GPIO pin number varies depending on the GPIO controller model, parameters, and controller driver of the system on chip (SoC). -- Hi3516DV300 - A controller manages 12 groups of GPIO pins. Each group contains 8 GPIO pins. The group index ranges from 0 to 11. +## Usage Example - GPIO pin number = GPIO group index x Number of GPIO pins in each group + Offset in the group +The procedure is as follows: - Example: GPIO number of GPIO10_3 = 10 x 8 + 3 = 83 +1. Select an idle GPIO pin. -- Hi3518EV300 - A controller manages 10 groups of GPIO pins. Each group contains 10 GPIO pins. The group index ranges from 0 to 9. + This example uses pin GPIO10\_3 on a Hi3516D V300 development board as an example. The pin number is 83. You can select an idle GPIO pin as required. - GPIO pin number = GPIO group index x Number of GPIO pins in each group + Offset in the group +2. Set the ISR function for the pin, with the trigger mode of rising edge and failing edge. - Example: GPIO pin number of GPIO7_3 = 7 x 10 + 3 = 73 - - -### Using APIs to Operate GPIO Pins - -- Set the GPIO pin direction. - - Before performing read/write operations on a GPIO pin, call **GpioSetDir** to set the pin direction. - - int32_t GpioSetDir(uint16_t gpio, uint16_t dir); - - **Table 2** Description of GpioSetDir - - | **Parameter**| **Description**| - | -------- | -------- | - | gpio | GPIO pin number.| - | dir | Direction to set.| - | **Return Value**| **Description**| - | 0 | The operation is successful.| - | Negative value| The operation failed.| - -- Read or write the pin level. - - Call **GpioRead** to read the level of a GPIO pin. - - int32_t GpioRead(uint16_t gpio, uint16_t \*val); - - **Table 3** Description of GpioRead - - | **Parameter**| **Description**| - | -------- | -------- | - | gpio | GPIO pin number.| - | val | Pointer to the level value to read.| - | **Return Value**| **Description**| - | 0 | The operation is successful.| - | Negative value| The operation failed.| - - Call **GpioWrite** to write the level value for a GPIO pin. - - int32_t GpioWrite(uint16_t gpio, uint16_t val); - - **Table 4** Description of GpioWrite - - | **Parameter**| **Description**| - | -------- | -------- | - | gpio | GPIO pin number.| - | val | Level value to write.| - | **Return Value**| **Description**| - | 0 | The operation is successful.| - | Negative value| The operation failed.| - - Sample code: - - - ``` - int32_t ret; - uint16_t val; - /* Set the direction of GPIO pin 3 to output. */ - ret = GpioSetDir(3, GPIO_DIR_OUT); - if (ret != 0) { - HDF_LOGE("GpioSerDir: failed, ret %d\n", ret); - return; - } - /* Write the low level GPIO_VAL_LOW for GPIO pin 3. */ - ret = GpioWrite(3, GPIO_VAL_LOW); - if (ret != 0) { - HDF_LOGE("GpioWrite: failed, ret %d\n", ret); - return; - } - /* Set the direction of GPIO pin 6 to input. */ - ret = GpioSetDir(6, GPIO_DIR_IN); - if (ret != 0) { - HDF_LOGE("GpioSetDir: failed, ret %d\n", ret); - return; - } - /* Read the level value of GPIO pin 6. */ - ret = GpioRead(6, &val); - ``` - -- Set the ISR function for a GPIO pin. - - Call **GpioSetIrq** to set the ISR function for a GPIO pin. - - int32_t GpioSetIrq(uint16_t gpio, uint16_t mode, GpioIrqFunc func, void \*arg); - - **Table 5** Description of GpioSetIrq - - | **Parameter**| **Description**| - | -------- | -------- | - | gpio | GPIO pin number.| - | mode | Interrupt trigger mode.| - | func | ISR function to set.| - | arg | Pointer to the parameters passed to the ISR function.| - | **Return Value**| **Description**| - | 0 | The operation is successful.| - | Negative value| The operation failed.| - - > ![icon-caution.gif](../public_sys-resources/icon-caution.gif)**CAUTION**
- > Only one ISR function can be set for a GPIO pin at a time. If **GpioSetIrq** is called repeatedly, the previous IRS function will be replaced. - - If the ISR function is no longer required, call **GpioUnsetIrq** to cancel it. - - int32_t GpioUnsetIrq(uint16_t gpio, void \*arg); - - **Table 6** Description of GpioUnsetIrq - - | **Parameter**| **Description**| - | -------- | -------- | - | gpio | GPIO pin number.| - | arg | Pointer to the GPIO interrupt parameters.| - | **Return Value**| **Description**| - | 0 | The operation is successful.| - | Negative value| The operation failed.| - - After the ISR function is set, call **GpioEnableIrq** to enable interrupts for the GPIO pin. - - int32_t GpioEnableIrq(uint16_t gpio); - - **Table 7** Description of GpioEnableIrq - - | **Parameter**| **Description**| - | -------- | -------- | - | gpio | GPIO pin number.| - | **Return Value**| **Description**| - | 0 | The operation is successful.| - | Negative value| The operation failed.| - - > ![icon-caution.gif](../public_sys-resources/icon-caution.gif)**CAUTION**
- > The configured ISR function can be responded only after interrupts are enabled for the GPIO pin. - - You can call **GpioDisableIrq** to disable interrupts for the pin. - - int32_t GpioDisableIrq(uint16_t gpio); - - **Table 8** Description of GpioDisableIrq - - | **Parameter**| **Description**| - | -------- | -------- | - | gpio | GPIO pin number.| - | **Return Value**| **Description**| - | 0 | The operation is successful.| - | Negative value| The operation failed.| - - Sample code: - - - ``` - /* ISR function */ - int32_t MyCallBackFunc(uint16_t gpio, void *data) - { - HDF_LOGI("%s: gpio:%u interrupt service in! data=%p\n", __func__, gpio, data); - return 0; - } - - int32_t ret; - /* Set the ISR function to MyCallBackFunc, with input parameter of NULL and the interrupt trigger mode of rising edge. */ - ret = GpioSetIrq(3, OSAL_IRQF_TRIGGER_RISING, MyCallBackFunc, NULL); - if (ret != 0) { - HDF_LOGE("GpioSetIrq: failed, ret %d\n", ret); - return; - } - - /* Enable interrupts for GPIO pin 3. */ - ret = GpioEnableIrq(3); - if (ret != 0) { - HDF_LOGE("GpioEnableIrq: failed, ret %d\n", ret); - return; - } - - /* Disable interrupts for GPIO pin 3. */ - ret = GpioDisableIrq(3); - if (ret != 0) { - HDF_LOGE("GpioDisableIrq: failed, ret %d\n", ret); - return; - } - - /* Cancel the ISR function for GPIO pin 3. */ - ret = GpioUnsetIrq(3, NULL); - if (ret != 0) { - HDF_LOGE("GpioUnSetIrq: failed, ret %d\n", ret); - return; - } - ``` - - -## Example - -The following example shows how to trigger an interrupt for a GPIO pin. The procedure is as follows: - -1. Select an idle GPIO pin. This example uses a Hi3516D V300 development board and pin GPIO10_3 as an example. The pin number of GPIO10_3 is 83. You can select an idle GPIO pin as required. -2. Set an ISR function. -3. Set the interrupt trigger mode to edge triggering, and enable high and low levels to be written to the pin alternately to trigger the interrupt. -4. Observe the execution of the ISR function. - -The sample code is as follows: +3. Write high and low levels to the pin alternately, and observe the execution of the ISR function. ``` #include "gpio_if.h" @@ -266,7 +503,7 @@ static uint32_t g_irqCnt; static int32_t TestCaseGpioIrqHandler(uint16_t gpio, void *data) { HDF_LOGE("%s: irq triggered! on gpio:%u, data=%p", __func__, gpio, data); - g_irqCnt++; /* If the IRQ function is triggered, the global interrupt counter is incremented by 1. */ + g_irqCnt++; /* If the ISR function is triggered, the number of global interrupts is incremented by 1. */ return GpioDisableIrq(gpio); } @@ -276,24 +513,24 @@ static int32_t TestCaseGpioIrqEdge(void) int32_t ret; uint16_t valRead; uint16_t mode; - uint16_t gpio = 83; // Number of the GPIO pin to test + uint16_t gpio = 83; /* Number of the GPIO pin to test */ uint32_t timeout; - /* Set the pin direction to output. */ + /* Set the output direction for the pin. */ ret = GpioSetDir(gpio, GPIO_DIR_OUT); if (ret != HDF_SUCCESS) { HDF_LOGE("%s: set dir fail! ret:%d\n", __func__, ret); return ret; } - /* Disable interrupts of the pin. */ + /* Disable the interrupt of the pin. */ ret = GpioDisableIrq(gpio); if (ret != HDF_SUCCESS) { HDF_LOGE("%s: disable irq fail! ret:%d\n", __func__, ret); return ret; } - /* Set the IRR function for the pin. The trigger mode is both rising edge and falling edge. */ + /* Set the ISR function for the pin. The trigger mode is both rising edge and falling edge. */ mode = OSAL_IRQF_TRIGGER_RISING | OSAL_IRQF_TRIGGER_FALLING; HDF_LOGE("%s: mode:%0x\n", __func__, mode); ret = GpioSetIrq(gpio, mode, TestCaseGpioIrqHandler, NULL); @@ -302,7 +539,7 @@ static int32_t TestCaseGpioIrqEdge(void) return ret; } - /* Enable interrupts for the pin. */ + /* Enable the interrupt for this pin. */ ret = GpioEnableIrq(gpio); if (ret != HDF_SUCCESS) { HDF_LOGE("%s: enable irq fail! ret:%d\n", __func__, ret); @@ -310,9 +547,9 @@ static int32_t TestCaseGpioIrqEdge(void) return ret; } - g_irqCnt = 0; /* Reset the global interrupt counter. */ - timeout = 0; /* Clear the waiting time. */ - /* Wait for the IRQ function to trigger for this pin. The timeout duration is 1000 ms. */ + g_irqCnt = 0; /* Reset the global counter. */ + timeout = 0; /* Reset the waiting time. */ + /* Wait for the ISR function of this pin to trigger. The timeout duration is 1000 ms. */ while (g_irqCnt <= 0 && timeout < 1000) { (void)GpioRead(gpio, &valRead); (void)GpioWrite(gpio, (valRead == GPIO_VAL_LOW) ? GPIO_VAL_HIGH : GPIO_VAL_LOW); @@ -320,7 +557,7 @@ static int32_t TestCaseGpioIrqEdge(void) OsalMDelay(200); /* wait for irq trigger */ timeout += 200; } - (void)GpioUnsetIrq(gpio, NULL); + (void)GpioUnSetIrq(gpio); return (g_irqCnt > 0) ? HDF_SUCCESS : HDF_FAILURE; } -``` +``` \ No newline at end of file diff --git a/en/device-dev/driver/driver-platform-i2c-des.md b/en/device-dev/driver/driver-platform-i2c-des.md index 16b1d22f7a..be20c1bf72 100644 --- a/en/device-dev/driver/driver-platform-i2c-des.md +++ b/en/device-dev/driver/driver-platform-i2c-des.md @@ -2,19 +2,20 @@ ## Overview -- The Inter-Integrated Circuit \(I2C\) is a simple, bidirectional, and synchronous serial bus that uses merely two wires. -- In an I2C communication, one controller communicates with one or more devices through the serial data line \(SDA\) and serial clock line \(SCL\), as shown in [Figure 1](#fig1135561232714). +The Inter-Integrated Circuit \(I2C\) is a simple, bidirectional, and synchronous serial bus that uses merely two wires. -- I2C data transfer must begin with a **START** condition and end with a **STOP** condition. Data is transmitted byte-by-byte from the most significant bit to the least significant bit. -- Each I2C node is recognized by a unique address and can serve as either a controller or a device. When the controller needs to communicate with a device, it writes the device address to the bus through broadcast. A device matching this address sends a response to set up a data transfer channel. +In an I2C communication, one controller communicates with one or more devices through the serial data line \(SDA\) and serial clock line \(SCL\), as shown in [Figure 1](#fig1135561232714). -- The I2C APIs define a set of common functions for I2C data transfer, including: +I2C data transfer must begin with a **START** condition and end with a **STOP** condition. Data is transmitted byte-by-byte from the most significant bit to the least significant bit. - - I2C controller management: opening or closing an I2C controller - - I2C message transfer: custom transfer by using a message array +Each I2C node is recognized by a unique address and can serve as either a controller or a device. When the controller needs to communicate with a device, it writes the device address to the bus through broadcast. A device matching this address sends a response to set up a data transfer channel. - **Figure 1** Physical connection diagram for I2C - ![](figures/physical-connection-diagram-for-i2c.png "physical-connection-diagram-for-i2c") +The I2C APIs define a set of common functions for I2C data transfer, including: + +- I2C controller management: opening or closing an I2C controller +- I2C message transfer: custom transfer by using a message array + +**Figure 1** Physical connection diagram for I2C
![](figures/physical-connection-diagram-for-i2c.png "physical-connection-diagram-for-i2c") ## Available APIs @@ -52,21 +53,22 @@ ->![](../public_sys-resources/icon-note.gif) **NOTE:** +>![](../public_sys-resources/icon-note.gif) **NOTE**
>All functions provided in this document can be called only in kernel mode. ## Usage Guidelines ### How to Use -[Figure 2](#fig183017194234) illustrates the process of an I2C device. +The figure below illustrates how to use the APIs. -**Figure 2** Process of using an I2C device -![](figures/process-of-using-an-i2c-device.png "process-of-using-an-i2c-device") +**Figure 2** Using I2C driver APIs + +![](figures/using-i2c-process.png "process-of-using-an-i2c-device") ### Opening an I2C Controller -Call the following function to open an I2C controller: +Call the **I2cOpen()** function to open an I2C controller. DevHandle I2cOpen\(int16\_t number\); @@ -117,7 +119,7 @@ if (i2cHandle == NULL) { ### Performing I2C Communication -Use the following function for message transfer: +Call the **I2cTransfer()** function to transfer messages. int32\_t I2cTransfer\(DevHandle handle, struct I2cMsg \*msgs, int16\_t count\); @@ -186,15 +188,14 @@ if (ret != 2) { } ``` ->![](../public_sys-resources/icon-caution.gif) **CAUTION:** +>![](../public_sys-resources/icon-caution.gif) **CAUTION**
>- The device address in the **I2cMsg** structure does not contain the read/write flag bit. The read/write information is transferred by the read/write control bit in the member variable **flags**. ->- The **I2cTransfer** function does not limit the number of message structures, which is determined by the I2C controller. ->- The **I2cTransfer** function does not limit the data length of each message structure, which is determined by the I2C controller. +>- The **I2cTransfer** function does not limit the number of message structures and the data length of each message structure, which are determined by the I2C controller. >- The **I2cTransfer** function may cause the system to sleep and therefore cannot be called in the interrupt context. ### Closing an I2C Controller -Call the following function to close the I2C controller after the communication is complete: +Call the **I2cClose()** function to close the I2C controller after the communication is complete. void I2cClose\(DevHandle \*handle\); @@ -209,12 +210,13 @@ void I2cClose\(DevHandle \*handle\);

handle

-

Handle of an I2C controller.

+

Handle of the I2C controller to close.

+ ``` I2cClose(i2cHandle); /* Close the I2C controller. */ ``` @@ -233,7 +235,7 @@ This example shows a simple register read/write operation on TouchPad on a Hi351 In this example, first we reset Touch IC. \(The development board supplies power to Touch IC by default after being powered on, and this use case does not consider the power supply\). Then, we perform a read/write operation on an internal register to test whether the I2C channel is normal. ->![](../public_sys-resources/icon-note.gif) **NOTE:** +>![](../public_sys-resources/icon-note.gif) **NOTE**
>The example focuses on I2C device access and verifies the I2C channel. The read and write values of the device register are not concerned. The behavior caused by the read and write operations on the register is determined by the device itself. Example: diff --git a/en/device-dev/driver/driver-platform-mipicsi-des.md b/en/device-dev/driver/driver-platform-mipicsi-des.md index cd877612d2..90a319f03d 100644 --- a/en/device-dev/driver/driver-platform-mipicsi-des.md +++ b/en/device-dev/driver/driver-platform-mipicsi-des.md @@ -59,12 +59,11 @@ The figure below shows a simplified CSI. The D-PHY transmits data by using one p ### How to Use -The figure below shows the process of using a MIPI CSI device. +The figure below illustrates how to use the APIs. -**Figure 2** MIPI CSI usage process +**Figure 2** Using MIPI CSI driver APIs - -![](figures/process-of-using-MIPI-CSI.png) +![](figures/using-MIPI-CSI-process.png) ### Opening the MIPI CSI Controller Operation Handle diff --git a/en/device-dev/driver/driver-platform-mipidsi-des.md b/en/device-dev/driver/driver-platform-mipidsi-des.md index c7cecdc8e1..889a4ff840 100644 --- a/en/device-dev/driver/driver-platform-mipidsi-des.md +++ b/en/device-dev/driver/driver-platform-mipidsi-des.md @@ -1,19 +1,19 @@ -# MIPI DSI +# MIPI DSI -## Overview +## Overview -- The Display Serial Interface \(DSI\) is a specification stipulated by the Mobile Industry Processor Interface \(MIPI\) Alliance, aiming to reduce the cost of display controllers in a mobile device. It defines a serial bus and communication protocol among the host, the source of image data, and the target device. In this way, the DSI can send pixel data or commands to peripherals \(usually LCDs or similar display devices\) in serial mode, or reads information such as status and pixel from the peripherals. +The Display Serial Interface \(DSI\) is a specification stipulated by the Mobile Industry Processor Interface \(MIPI\) Alliance, aiming to reduce the cost of display controllers in a mobile device. It defines a serial bus and communication protocol among the host, the source of image data, and the target device. In this way, the DSI can send pixel data or commands to peripherals \(usually LCDs or similar display devices\) in serial mode, or reads information such as status and pixel from the peripherals. -- MIPI DSI is capable of working in both high speed \(HS\) mode and low power \(LP\) mode. All data lanes can only travel from the DSI host to a peripheral in HS mode, except the first data lane, which can also receive data such as status information and pixels from the peripheral in LP mode. The clock lane is dedicated to transmitting synchronization clock signals in HS mode. -- [Figure 1](#fig1122611461203) shows a simplified DSI interface. Conceptually, a DSI-compliant interface has the same features as interfaces complying with DBI-2 and DPI-2 standards. It sends pixels or commands to a peripheral and can read status or pixel information from the peripheral. The main difference is that the DSI serializes all pixel data, commands, and events that, in traditional interfaces, are conveyed to and from the peripheral on a parallel data bus with additional control signals. +MIPI DSI is capable of working in both high speed \(HS\) mode and low power \(LP\) mode. All data lanes can only travel from the DSI host to a peripheral in HS mode, except the first data lane, which can also receive data such as status information and pixels from the peripheral in LP mode. The clock lane is dedicated to transmitting synchronization clock signals in HS mode. +[Figure 1](#fig1122611461203) shows a simplified DSI interface. Conceptually, a DSI-compliant interface has the same features as interfaces complying with DBI-2 and DPI-2 standards. It sends pixels or commands to a peripheral and can read status or pixel information from the peripheral. The main difference is that the DSI serializes all pixel data, commands, and events that, in traditional interfaces, are conveyed to and from the peripheral on a parallel data bus with additional control signals. - **Figure 1** DSI transmitting and receiving interface + **Figure 1** DSI transmitting and receiving interface ![](figures/dsi-transmitting-and-receiving-interface.png "dsi-transmitting-and-receiving-interface") -## Available APIs +## Available APIs -**Table 1** APIs for MIPI DSI +**Table 1** APIs for MIPI DSI

Capability

@@ -75,25 +75,25 @@
->![](../public_sys-resources/icon-note.gif) **NOTE:** ->All functions described in this document can be called only in kernel space. +>![](../public_sys-resources/icon-note.gif) **NOTE**
All functions described in this document can be called only in kernel space. -## Usage Guidelines +## Usage Guidelines -### How to Use +### How to Use -[Figure 2](#fig129103491241) shows the process of using a MIPI DSI device. +The figure below illustrates how to use the APIs. -**Figure 2** Process of using a MIPI DSI device -![](figures/process-of-using-a-mipi-dsi-device.png) +**Figure 2** Using MIPI DSI driver APIs + + ![](figures/using-mipi-dsi-process.png) ### Obtaining a MIPI DSI Device Handle -Before performing MIPI DSI communication, obtain a MIPI DSI device handle by calling **MipiDsiOpen**. This function returns a MIPI DSI device handle with a specified channel ID. +Before performing MIPI DSI communication, obtain a MIPI DSI device handle by calling **MipiDsiOpen**. This function returns a MIPI DSI device handle with a specified channel ID. DevHandle MipiDsiOpen\(uint8\_t id\); -**Table 2** Description of **MipiDsiOpen** +**Table 2** Description of **MipiDsiOpen**

Parameter

@@ -125,7 +125,7 @@ DevHandle MipiDsiOpen\(uint8\_t id\);
-The following example shows how to obtain a MIPI DSI device handle with the channel ID **0**: +The following example shows how to obtain a MIPI DSI device handle with the channel ID **0**: ``` DevHandle mipiDsiHandle = NULL; /* Device handle */ @@ -145,7 +145,7 @@ if (mipiDsiHandle == NULL) { int32\_t MipiDsiSetCfg\(DevHandle handle, struct MipiCfg \*cfg\); -**Table 3** Description of **MipiDsiSetCfg** +**Table 3** Description of **MipiDsiSetCfg**

Parameter

@@ -213,7 +213,7 @@ if (ret != 0) { int32\_t MipiDsiGetCfg\(DevHandle handle, struct MipiCfg \*cfg\); -**Table 4** Description of **MipiDsiGetCfg** +**Table 4** Description of **MipiDsiGetCfg**

Parameter

@@ -267,7 +267,7 @@ if (ret != HDF_SUCCESS) { int32\_t MipiDsiTx\(PalHandle handle, struct DsiCmdDesc \*cmd\); -**Table 5** Description of **MipiDsiTx** +**Table 5** Description of **MipiDsiTx**

Parameter

@@ -335,7 +335,7 @@ HdfFree(cmd); int32\_t MipiDsiRx\(DevHandle handle, struct DsiCmdDesc \*cmd, uint32\_t readLen, uint8\_t \*out\); -**Table 6** Description of **MipiDsiRx** +**Table 6** Description of **MipiDsiRx**

Parameter

@@ -417,9 +417,9 @@ After the MIPI DSI communication, release the MIPI DSI device handle by calling void MipiDsiClose\(DevHandle handle\); -This function releases the resources requested by **MipiDsiOpen**. +This function releases the resources requested by **MipiDsiOpen**. -**Table 7** Description of **MipiDsiClose** +**Table 7** Description of **MipiDsiClose**

Parameter

@@ -536,5 +536,4 @@ void PalMipiDsiTestSample(void) /* Release the MIPI DSI device handle. */ MipiDsiClose(handle); } -``` - +``` \ No newline at end of file diff --git a/en/device-dev/driver/driver-platform-pin-des.md b/en/device-dev/driver/driver-platform-pin-des.md index 91e05c5f19..607807085a 100644 --- a/en/device-dev/driver/driver-platform-pin-des.md +++ b/en/device-dev/driver/driver-platform-pin-des.md @@ -5,12 +5,12 @@ ### Pin -- The pin, also called pin controller, manages pin resources of system on a chip (SoC) vendors and provides the pin multiplexing function. -- The pin module defines a set of common methods for managing pins, including: +The pin module, also called pin controller, manages pin resources of system on a chip (SoC) vendors and provides the pin multiplexing function. +The module defines a set of common methods for managing pins, including: - Obtaining or releasing the pin description handle: The kernel compares the pin name passed in with the pin names of each controller in the linked list. If a match is found, a pin description handle is obtained. After the operation on the pin is complete, the pin description handle will be released. - - Setting or obtaining the pull type of a pin: The pull type can be pull-up, pull-down, or floating. - - Setting or obtaining the pull strength of a pin: You can set the pull strength as required. - - Setting or obtaining the functions of a pin to implement pin multiplexing +- Setting or obtaining the pull type of a pin: The pull type can be pull-up, pull-down, or floating. +- Setting or obtaining the pull strength of a pin: You can set the pull strength as required. +- Setting or obtaining the functions of a pin to implement pin multiplexing ### Basic Concepts Pin, as a software concept, provides APIs for uniformly managing the pins from different SoC vendors, providing the pin multiplexing function, and configuring the electrical features of pins. @@ -52,7 +52,7 @@ The table below describes the APIs of the pin module. For more details, see API **Table 1** Pin driver APIs -| **API** | **Description** | +| **API** | **Description** | | ------------------------------------------------------------ | ---------------- | | DevHandle PinGet(const char *pinName); | Obtains the pin description handle.| | void PinPut(DevHandle handle); | Releases the pin description handle.| @@ -68,10 +68,11 @@ The table below describes the APIs of the pin module. For more details, see API ### How to Develop -The figure below shows the process. +The figure below illustrates how to use the APIs. - **Figure 2** Process of using the pin module -![](figures/process-of-using-pin.png "Process of using the pin module") + **Figure 2** Using the pin driver APIs + +![](figures/using-pin-process.png "Process of using the pin module") #### Obtaining the Pin Description Handle @@ -88,7 +89,7 @@ DevHandle PinGet(const char *pinName); | Parameter | Description | | ---------- | ----------------------- | | pinName | Pointer to the pin name. | -| **Return Value**| **Description** | +| **Return Value**| **Description** | | NULL | Failed to obtain the pin description handle.| | handle | Pin description handle obtained. | @@ -120,9 +121,9 @@ int32_t PinSetPull(DevHandle handle, enum PinPullType pullType); | ---------- | ----------------------- | | handle | Pin description handle. | | pullType | Pull type to set. | -| **Return Value**| **Description** | +| **Return Value**| **Description** | | 0 | The operation is successful.| -| Negative value | The operation fails.| +| Negative value | The operation failed.| Example: Set the pull type to pull-up. @@ -154,9 +155,9 @@ int32_t PinGetPull(DevHandle handle, enum PinPullType *pullType); | ---------- | ------------------------- | | handle | Pin description handle. | | pullType | Pointer to the pull type obtained.| -| **Return Value**| **Description** | +| **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative value | The operation fails. | +| Negative value | The operation failed. | Example: Obtain the pull type of a pin. @@ -187,9 +188,9 @@ int32_t PinSetStrength(DevHandle handle, uint32_t strength); | ---------- | ----------------------- | | handle | Pin description handle. | | strength | Pull strength to set. | -| **Return Value**| **Description** | +| **Return Value**| **Description** | | 0 | The operation is successful.| -| Negative value | The operation fails.| +| Negative value | The operation failed.| Example: Set the pull strength of the pin to 2. @@ -221,9 +222,9 @@ int32_t PinGetStrength(DevHandle handle, uint32_t *strength); | ---------- | ------------------------- | | handle | Pin description handle. | | strength | Pointer to the pull strength obtained.| -| **Return Value**| **Description** | +| **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative value | The operation fails. | +| Negative value | The operation failed. | Example: Obtain the pull strength of a pin. @@ -256,9 +257,9 @@ int32_t PinSetFunc(DevHandle handle, const char *funcName); | ---------- | ------------------- | | handle | Pin description handle. | | funcName | Pointer to the pin function to set. | -| **Return Value**| **Description** | +| **Return Value**| **Description** | | 0 | The operation is successful.| -| Negative value | The operation fails.| +| Negative value | The operation failed.| Example: Set the pin function to LSADC_CH1 (ADC channel 1). @@ -289,9 +290,9 @@ int32_t PinGetFunc(DevHandle handle, const char **funcName); | ---------- | --------------------- | | handle | Pin description handle. | | funcName | Pointer to the function name obtained.| -| **Return Value**| **Description** | +| **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative value | The operation fails. | +| Negative value | The operation failed. | Example: Obtain the pin function. @@ -406,4 +407,4 @@ ERR: /* Release the pin description handle. */ PinPut(handle); return ret; -} +} \ No newline at end of file diff --git a/en/device-dev/driver/driver-platform-pwm-des.md b/en/device-dev/driver/driver-platform-pwm-des.md index c87a2deeb1..6330ccc91b 100644 --- a/en/device-dev/driver/driver-platform-pwm-des.md +++ b/en/device-dev/driver/driver-platform-pwm-des.md @@ -48,11 +48,11 @@ Pulse width modulation (PWM) is a technology that digitally encodes analog signa ### How to Use -The figure below shows the general process of using the PWM. +The figure below illustrates how to use the APIs. - **Figure 1** Process of using the PWM module +**Figure 1** Using the PWM driver APIs -![](figures/process-of-using-PWM.png) +![](figures/using-PWM-process.png) ### Opening a PWM Device Handle @@ -71,7 +71,7 @@ DevHandle PwmOpen(uint32_t num); | num | PWM device number. | | **Return Value** | **Description** | | handle | Handle of the PWM device obtained.| -| NULL | The operation fails. | +| NULL | The operation failed. | Example: Open the device handle of PWM device 0. @@ -126,7 +126,7 @@ int32_t PwmEnable(DevHandle handle); | handle | PWM device handle. | | **Return Value** | **Description** | | 0 | The operation is successful. | -| Negative number | The operation fails. | +| Negative number | The operation failed. | ``` @@ -156,7 +156,7 @@ int32_t PwmDisable(DevHandle handle); | handle | PWM device handle. | | **Return Value** | **Description** | | 0 | The operation is successful. | -| Negative number | The operation fails. | +| Negative number | The operation failed. | ``` @@ -187,7 +187,7 @@ int32_t PwmSetPeriod(DevHandle handle, uint32_t period); | period | PWM period to set, in ns.| | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative number | The operation fails. | +| Negative number | The operation failed. | ``` @@ -218,7 +218,7 @@ int32_t PwmSetDuty(DevHandle handle, uint32_t duty); | duty | Time that the signal is in the ON state, in ns.| | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative number | The operation fails. | +| Negative number | The operation failed. | ``` @@ -249,7 +249,7 @@ int32_t PwmSetPolarity(DevHandle handle, uint8_t polarity); | polarity | Polarity to set, which can be **PWM\_NORMAL\_POLARITY** or **PWM\_INVERTED\_POLARITY**.| | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative number | The operation fails. | +| Negative number | The operation failed. | ``` @@ -280,7 +280,7 @@ int32_t PwmSetConfig(DevHandle handle, struct PwmConfig *config); | \*config | Pointer to PWM parameters. | | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative number | The operation fails. | +| Negative number | The operation failed. | ``` @@ -317,7 +317,7 @@ int32_t PwmGetConfig(DevHandle handle, struct PwmConfig *config); | \*config | Pointer to PWM parameters. | | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative number | The operation fails. | +| Negative number | The operation failed. | ``` diff --git a/en/device-dev/driver/driver-platform-regulator-des.md b/en/device-dev/driver/driver-platform-regulator-des.md index 0131dae050..eacf890176 100644 --- a/en/device-dev/driver/driver-platform-regulator-des.md +++ b/en/device-dev/driver/driver-platform-regulator-des.md @@ -42,7 +42,8 @@ The regulator module is divided into the following layers: - The core layer provides the capabilities of binding, initializing, and releasing devices. - The adaptation layer implements other functions. -![](../public_sys-resources/icon-note.gif)NOTE
The core layer can call the functions of the interface layer and uses the hook to call functions of the adaptation layer. In this way, the adaptation layer can indirectly call the functions of the interface layer, but the interface layer cannot call the functions of the adaptation layer. +> ![icon-note.gif](../public_sys-resources/icon-note.gif) **NOTE**
+> The core layer can call the functions of the interface layer and uses the hook to call functions of the adaptation layer. In this way, the adaptation layer can indirectly call the functions of the interface layer, but the interface layer cannot call the functions of the adaptation layer. **Figure 1** Unified service mode @@ -84,11 +85,11 @@ Regulators are used to: During the OS startup process, the driver management module loads the regulator driver based on the configuration file. Then, the regulator driver detects the regulator devices and initializes the driver. -The figure below illustrates the process of using a regulator. +The figure below illustrates how to use the APIs. -**Figure 2** Process of using a regulator +**Figure 2** Using regulator driver APIs -![](figures/process-of-using-regulator.png) +![](figures/using-regulator-process.png) #### Opening a Regulator Device Handle @@ -105,7 +106,7 @@ DevHandle RegulatorOpen(const char *name); | name | Name of the target regulator. | | **Return Value**| **Description** | | handle | The regulator device handle is returned if the operation is successful.| -| NULL | The operation fails. | +| NULL | The operation failed. | @@ -155,7 +156,7 @@ int32_t RegulatorEnable(DevHandle handle); | handle | Device handle of the target regulator.| | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative value | The operation fails. | +| Negative value | The operation failed. | @@ -184,7 +185,7 @@ int32_t RegulatorDisable(DevHandle handle); | handle | Device handle of the target regulator.| | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative value | The operation fails. | +| Negative value | The operation failed. | ``` int32_t ret; @@ -212,7 +213,7 @@ int32_t RegulatorForceDisable(DevHandle handle); | handle | Device handle of the target regulator.| | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative value | The operation fails. | +| Negative value | The operation failed. | ``` int32_t ret; @@ -241,7 +242,7 @@ int32_t RegulatorSetVoltage(DevHandle handle, uint32_t minUv, uint32_t maxUv); | maxUv | Maximum voltage to set. | | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative value | The operation fails. | +| Negative value | The operation failed. | ``` int32_t ret; @@ -272,7 +273,7 @@ int32_t RegulatorGetVoltage(DevHandle handle, uint32_t *voltage); | *voltage | Pointer to the regulator voltage information. | | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative value | The operation fails. | +| Negative value | The operation failed. | ``` int32_t ret; @@ -302,7 +303,7 @@ int32_t RegulatorSetCurrent(DevHandle handle, uint32_t minUa, uint32_t maxUa); | maxUa | Maximum current to set. | | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative value | The operation fails. | +| Negative value | The operation failed. | ``` int32_t ret; @@ -332,7 +333,7 @@ int32_t RegulatorGetCurrent(DevHandle handle, uint32_t *regCurrent); | *regCurrent | Pointer to the regulator current information. | | **Return Value** | **Description** | | 0 | The operation is successful. | -| Negative value | The operation fails. | +| Negative value | The operation failed. | ``` int32_t ret; @@ -361,7 +362,7 @@ int32_t RegulatorGetStatus(DevHandle handle, uint32_t *status); | *status | Pointer to the regulator status information. | | **Return Value**| **Description** | | 0 | The operation is successful. | -| Negative value | The operation fails. | +| Negative value | The operation failed. | ``` int32_t ret; diff --git a/en/device-dev/driver/driver-platform-rtc-des.md b/en/device-dev/driver/driver-platform-rtc-des.md index b124a0cd79..abfde56ba3 100644 --- a/en/device-dev/driver/driver-platform-rtc-des.md +++ b/en/device-dev/driver/driver-platform-rtc-des.md @@ -6,7 +6,7 @@ The real-time clock \(RTC\) driver provides precise real time for the operating ## Available APIs -**Table 1** APIs provided by the RTC driver +**Table 1** APIs provided by the RTC driver

Capability

@@ -95,7 +95,7 @@ The real-time clock \(RTC\) driver provides precise real time for the operating
->![](../public_sys-resources/icon-note.gif) **NOTE:** +>![](../public_sys-resources/icon-note.gif) **NOTE**
>All functions provided in this document can be called only in kernel mode. ## Usage Guidelines @@ -104,21 +104,21 @@ The real-time clock \(RTC\) driver provides precise real time for the operating During the OS startup, the HDF loads the RTC driver based on the configuration file. The RTC driver detects the RTC component and initializes the driver. -[Figure 1](#fig1610020107333) illustrates the process of using an RTC device. +The figure below illustrates how to use the APIs. -**Figure 1** Process of using an RTC device -![](figures/process-of-using-an-rtc-device.png "process-of-using-an-rtc-device") +**Figure 1** Process of using an RTC device +![](figures/using-rtc-process.png "process-of-using-an-rtc-device") -### Creating an RTC Device Handle +### Opening the RTC Device Handle After the RTC driver is loaded, you can use the API provided by the HDF and call APIs of the RTC driver. ->![](../public_sys-resources/icon-note.gif) **NOTE:** +>![](../public_sys-resources/icon-note.gif) **NOTE**
>Currently, only one RTC device is supported in the OS. DevHandle RtcOpen\(void\); -**Table 2** Description of RtcOpen +**Table 2** Description of RtcOpen - -

Parameter

@@ -138,17 +138,18 @@ DevHandle RtcOpen\(void\);

handle

Returns the if the operation is successful.

+

The operation is successful.

NULL

The operation fails.

+

The operation failed.

+ ``` DevHandle handle = NULL; @@ -161,11 +162,11 @@ if (handle == NULL) { ### Releasing the RTC Device Handle -You can call the following function to release the RTC device handle, thereby releasing resources of the device: +You can call **RtcClose()** function to release the RTC device handle, thereby releasing resources of the device. void RtcClose\(DevHandle handle\); -**Table 3** Description of RtcClose +**Table 3** Description of RtcClose

Parameter

@@ -186,13 +187,13 @@ void RtcClose\(DevHandle handle\); RtcClose(handle); ``` -### Registering RtcAlarmCallback +### Registering RtcAlarmCallback -After the OS is started, call the following function to register **RtcAlarmCallback**, which will be invoked when an alarm is generated at the specified time: +After the OS is started, call the following function to register **RtcAlarmCallback**, which will be invoked when an alarm is generated at the specified time: int32\_t RtcRegisterAlarmCallback\(DevHandle handle, enum RtcAlarmIndex alarmIndex, RtcAlarmCallback cb\); -**Table 4** Description of RtcRegisterAlarmCallback +**Table 4** Description of RtcRegisterAlarmCallback -

Parameter

@@ -228,13 +229,13 @@ int32\_t RtcRegisterAlarmCallback\(DevHandle handle, enum RtcAlarmIndex alarmInd

Negative value

The operation fails.

+

The operation failed.

-The following is an example of registering **RtcAlarmCallback** for processing alarm **RTC\_ALARM\_INDEX\_A**: +The following is an example of registering **RtcAlarmCallback** for processing alarm **RTC\_ALARM\_INDEX\_A**: ``` /* Register an RTC alarm callback. */ @@ -257,15 +258,15 @@ if (ret != 0) { } ``` -### Performing RTC-related Operations +### Performing RTC-related Operations - Reading RTC time -Call the following function to read time information from the RTC driver, including the year, month, the day of the week, day, hour, minute, second, and millisecond: +Call the **RtcReadTime()** function to read time information from the RTC driver, including the year, month, the day of the week, day, hour, minute, second, and millisecond. int32\_t RtcReadTime\(DevHandle handle, struct RtcTime \*time\); -**Table 5** Description of RtcReadTime +**Table 5** Description of RtcReadTime - @@ -314,11 +315,11 @@ if (ret != 0) { - Setting RTC time -Call the following function to set the RTC time: +Call the **RtcWriteTime()** function to set the RTC time. int32\_t RtcWriteTime\(DevHandle handle, struct RtcTime \*time\); -**Table 6** Description of RtcWriteTime +**Table 6** Description of RtcWriteTime

Parameter

@@ -295,7 +296,7 @@ int32\_t RtcReadTime\(DevHandle handle, struct RtcTime \*time\);

Negative value

The operation fails.

+

The operation failed.

-

Parameter

@@ -348,14 +349,14 @@ int32\_t RtcWriteTime\(DevHandle handle, struct RtcTime \*time\);

Negative value

The operation fails.

+

The operation failed.

->![](../public_sys-resources/icon-note.gif) **NOTE:** ->The RTC start time is 1970/01/01 Thursday 00:00:00 \(UTC\). The maximum value of **year** must be set based on the requirements specified in the product manual of the in-use component. You do not need to configure the day of the week. +>![](../public_sys-resources/icon-note.gif) **NOTE**
+>The RTC start time is 1970/01/01 Thursday 00:00:00 \(UTC\). The maximum value of **year** must be set based on the requirements specified in the product manual of the in-use component. You do not need to configure the day of the week. ``` int32_t ret; @@ -378,11 +379,11 @@ if (ret != 0) { - Reading the RTC alarm time -Call the following function to read the alarm time: +Call the **RtcReadAlarm()** function to read the alarm time. int32\_t RtcReadAlarm\(DevHandle handle, enum RtcAlarmIndex alarmIndex, struct RtcTime \*time\); -**Table 7** Description of RtcReadAlarm +**Table 7** Description of RtcReadAlarm - @@ -436,11 +437,11 @@ if (ret != 0) { - Setting RTC alarm time -Call the following function to set the RTC alarm time based on the alarm index: +Call the **RtcWriteAlarm()** function to set the RTC alarm time based on the alarm index. int32\_t RtcWriteAlarm\(DevHandle handle, enum RtcAlarmIndex alarmIndex, struct RtcTime \*time\); -**Table 8** Description of RtcWriteAlarm +**Table 8** Description of RtcWriteAlarm

Parameter

@@ -417,7 +418,7 @@ int32\_t RtcReadAlarm\(DevHandle handle, enum RtcAlarmIndex alarmIndex, struct R

Negative value

The operation fails.

+

The operation failed.

-

Parameter

@@ -475,14 +476,14 @@ int32\_t RtcWriteAlarm\(DevHandle handle, enum RtcAlarmIndex alarmIndex, struct

Negative value

The operation fails.

+

The operation failed.

->![](../public_sys-resources/icon-note.gif) **NOTE:** ->The RTC start time is 1970/01/01 Thursday 00:00:00 \(UTC\). The maximum value of **year** must be set based on the requirements specified in the product manual of the in-use component. You do not need to configure the day of the week. +>![](../public_sys-resources/icon-note.gif) **NOTE**
+>The RTC start time is 1970/01/01 Thursday 00:00:00 \(UTC\). The maximum value of **year** must be set based on the requirements specified in the product manual of the in-use component. You do not need to configure the day of the week. ``` int32_t ret; @@ -505,11 +506,11 @@ if (ret != 0) { - Enabling or disabling alarm interrupts -Before performing alarm operations, use the following function to enable alarm interrupts, so that **RtcAlarmCallback** will be called when the alarm is not generated upon a timeout: +Before performing alarm operations, use the **RtcAlarmInterruptEnable()** function to enable alarm interrupts, so that **RtcAlarmCallback** will be called when the alarm is not generated upon a timeout. int32\_t RtcAlarmInterruptEnable\(DevHandle handle, enum RtcAlarmIndex alarmIndex, uint8\_t enable\); -**Table 9** Description of RtcAlarmInterruptEnable +**Table 9** Description of RtcAlarmInterruptEnable - @@ -562,11 +563,11 @@ if (ret != 0) { - Reading RTC external frequency -Call the following function to read the frequency of the external crystal oscillator connected to the RTC driver: +Call the **RtcGetFreq()** function to read the frequency of the external crystal oscillator connected to the RTC driver. int32\_t RtcGetFreq\(DevHandle handle, uint32\_t \*freq\); -**Table 10** Description of RtcGetFreq +**Table 10** Description of RtcGetFreq

Parameter

@@ -544,7 +545,7 @@ int32\_t RtcAlarmInterruptEnable\(DevHandle handle, enum RtcAlarmIndex alarmInde

Negative value

The operation fails.

+

The operation failed.

- @@ -615,11 +616,11 @@ if (ret != 0) { - Setting the frequency of the external crystal oscillator connected to the RTC driver -Call the following function to set the frequency of the external crystal oscillator connected to the RTC driver: +Call the **RtcSetFreq()** function to set the frequency of the external crystal oscillator connected to the RTC driver. int32\_t RtcSetFreq\(DevHandle handle, uint32\_t freq\); -**Table 11** Description of RtcSetFreq +**Table 11** Description of RtcSetFreq

Parameter

@@ -596,7 +597,7 @@ int32\_t RtcGetFreq\(DevHandle handle, uint32\_t \*freq\);

Negative value

The operation fails.

+

The operation failed.

- @@ -668,11 +669,11 @@ if (ret != 0) { - Resetting the RTC driver -Call the following function to perform a reset on the RTC driver \(after the reset, the registers are restored to the default values\): +Call the **RtcReset()** function to perform a reset on the RTC driver \(after the reset, the registers are restored to the default values\). int32\_t RtcReset\(DevHandle handle\); -**Table 12** Description of RtcReset +**Table 12** Description of RtcReset

Parameter

@@ -649,7 +650,7 @@ int32\_t RtcSetFreq\(DevHandle handle, uint32\_t freq\);

Negative value

The operation fails.

+

The operation failed.

- @@ -715,11 +716,11 @@ if (ret != 0) { - Reading the configuration of a custom RTC register -Call the following function to read the configuration of a custom RTC register based on the register index \(one index corresponds to one byte of the configuration value\): +Call the **RtcReadReg()** function to read the configuration of a custom RTC register based on the register index \(one index corresponds to one byte of the configuration value\): int32\_t RtcReadReg\(DevHandle handle, uint8\_t usrDefIndex, uint8\_t \*value\); -**Table 13** Description of RtcReadReg +**Table 13** Description of RtcReadReg

Parameter

@@ -697,7 +698,7 @@ int32\_t RtcReset\(DevHandle handle\);

Negative value

The operation fails.

+

The operation failed.

- @@ -774,11 +775,11 @@ if (ret != 0) { - Setting the configuration of a custom RTC register -Call the following function to configure a register based on the specified register index \(one index corresponds to one byte of the configuration value\): +Call the **RtcWriteReg()** function to configure a register based on the specified register index \(one index corresponds to one byte of the configuration value\). int32\_t RtcWriteReg\(DevHandle handle, uint8\_t usrDefIndex, uint8\_t value\); -**Table 14** Description of RtcWriteReg +**Table 14** Description of RtcWriteReg

Parameter

@@ -754,7 +755,7 @@ int32\_t RtcReadReg\(DevHandle handle, uint8\_t usrDefIndex, uint8\_t \*value\);

Negative value

The operation fails.

+

The operation failed.

- @@ -838,7 +839,7 @@ This section describes the process of using RTC APIs: 1. During the OS startup, the HDF identifies the RTC component in the system. 2. The HDF initializes and creates the RTC device. 3. You can perform operations on the RTC device by calling different APIs. -4. Call the **RtcClose** function to release the device handle and device resources. +4. Call the **RtcClose** function to release the device handle and device resources. Example: @@ -926,5 +927,4 @@ void RtcTestSample(void) /* Release the RTC device handle. */ RtcClose(handle); } -``` - +``` \ No newline at end of file diff --git a/en/device-dev/driver/driver-platform-sdio-des.md b/en/device-dev/driver/driver-platform-sdio-des.md index 98c11950f2..3957f2a902 100644 --- a/en/device-dev/driver/driver-platform-sdio-des.md +++ b/en/device-dev/driver/driver-platform-sdio-des.md @@ -1,27 +1,27 @@ -# SDIO +# SDIO ## Overview -- Secure Digital Input/Output \(SDIO\) is a peripheral interface evolved from the Secure Digital \(SD\) memory card interface. The SDIO interface is compatible with SD memory cards and can be connected to devices that support the SDIO interface. -- SDIO is widely used. Currently, many smartphones support SDIO, and many SDIO peripherals are developed for connections to smartphones. Common SDIO peripherals include WLAN, GPS, cameras, and Bluetooth. -- The SDIO bus has two ends, named host and device. All communication starts when the host sends a command. The device can communicate with the host as long as it can parse the command of the host. An SDIO host can connect to multiple devices, as shown in the figure below. +Secure Digital Input/Output \(SDIO\) is a peripheral interface evolved from the Secure Digital \(SD\) memory card interface. The SDIO interface is compatible with SD memory cards and can be connected to devices that support the SDIO interface. - - CLK signal: clock signal sent from the host to the device - - VDD signal: power signal - - VSS signal: ground signal - - D0-3 signal: four data lines. The DAT1 signal cable is multiplexed as the interrupt line. In 1-bit mode, DAT0 is used to transmit data. In 4-bit mode, DAT0 to DAT3 are used to transmit data. - - CMD signal: used by the host to send commands and the device to respond to commands. +SDIO is widely used. Currently, many smartphones support SDIO, and many SDIO peripherals are developed for connections to smartphones. Common SDIO peripherals include WLAN, GPS, cameras, and Bluetooth. - **Figure 1** Connections between the host and devices in SDIO - +The SDIO bus has two ends, named host and device. All communication starts when the host sends a command. The device can communicate with the host as long as it can parse the command of the host. An SDIO host can connect to multiple devices, as shown in the figure below. +- CLK signal: clock signal sent from the host to the device +- VDD signal: power signal +- VSS signal: ground signal +- D0-3 signal: four data lines. The DAT1 signal cable is multiplexed as the interrupt line. In 1-bit mode, DAT0 is used to transmit data. In 4-bit mode, DAT0 to DAT3 are used to transmit data. +- CMD signal: used by the host to send commands and the device to respond to commands. + +**Figure 1** Connections between the host and devices in SDIO - ![](figures/en-us_image_0000001160971556.png) +![](figures/en-us_image_0000001160971556.png) -- The SDIO interface defines a set of common methods for operating an SDIO device, including opening and closing an SDIO controller, exclusively claiming and releasing the host, enabling and disabling devices, claiming and releasing an SDIO IRQ, reading and writing data based on SDIO, and obtaining and setting common information. +The SDIO interface defines a set of common methods for operating an SDIO device, including opening and closing an SDIO controller, exclusively claiming and releasing the host, enabling and disabling devices, claiming and releasing an SDIO IRQ, reading and writing data based on SDIO, and obtaining and setting common information. ## Available APIs -**Table 1** APIs available for the SDIO driver +**Table 1** APIs available for the SDIO driver

Parameter

@@ -813,7 +814,7 @@ int32\_t RtcWriteReg\(DevHandle handle, uint8\_t usrDefIndex, uint8\_t value\);

Negative value

The operation fails.

+

The operation failed.

Capability

@@ -141,27 +141,29 @@
->![](../public_sys-resources/icon-note.gif) **NOTE:** +>![](../public_sys-resources/icon-note.gif) **NOTE:**
>All functions provided in this document can be called only in kernel mode. ## Usage Guidelines ### How to Use -[Figure 2](#fig1343742311264) illustrates the process of using an SDIO. +The figure below illustrates how to use the APIs. + +**Figure 2** Using SDIO driver APIs -**Figure 2** Process of using an SDIO + -![](figures/en-us_image_0000001206291517.png) +![](figures/using-SDIO-process.png) ### Opening an SDIO Controller -Before performing SDIO communication, obtain the device handle of an SDIO controller by calling **SdioOpen**. This function returns the device handle of the SDIO controller with a specified bus number. +Before performing SDIO communication, obtain the device handle of an SDIO controller by calling **SdioOpen**. This function returns the device handle of the SDIO controller with a specified bus number. DevHandle SdioOpen\(int16\_t mmcBusNum, struct SdioFunctionConfig \*config\); -**Table 2** Parameters and return values of SdioOpen +**Table 2** Parameters and return values of SdioOpen

Parameter

@@ -219,7 +221,7 @@ After obtaining the device handle of an SDIO controller, exclusively claim the h void SdioClaimHost\(DevHandle handle\); -**Table 3** Parameter description of SdioClaimHost +**Table 3** Parameter description of SdioClaimHost

Parameter

@@ -248,7 +250,7 @@ Before accessing a register, enable the SDIO device. int32\_t SdioEnableFunc\(DevHandle handle\); -**Table 4** Parameters and return values of SdioEnableFunc +**Table 4** Parameters and return values of SdioEnableFunc

Parameter

@@ -297,7 +299,7 @@ Before SDIO communication, claim an SDIO IRQ. int32\_t SdioClaimIrq\(DevHandle handle, SdioIrqHandler \*handler\); -**Table 5** Parameters and return values of SdioClaimIrq +**Table 5** Parameters and return values of SdioClaimIrq

Parameter

@@ -357,13 +359,13 @@ if (ret != 0) { ### Performing SDIO Communication -- Incrementally write a given length of data into the SDIO device. +- Incrementally write a given length of data into the SDIO device. The corresponding function is as follows: int32\_t SdioWriteBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); -**Table 6** Parameters and return values of SdioWriteBytes +**Table 6** Parameters and return values of SdioWriteBytes

Parameter

@@ -423,13 +425,13 @@ if (ret != 0) { } ``` -- Incrementally read a given length of data from the SDIO device. +- Incrementally read a given length of data from the SDIO device. The corresponding function is as follows: int32\_t SdioReadBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); -**Table 7** Parameters and return values of SdioReadBytes +**Table 7** Parameters and return values of SdioReadBytes

Parameter

@@ -489,13 +491,13 @@ if (ret != 0) { } ``` -- Write a given length of data into the fixed address of an SDIO device. +- Write a given length of data into the fixed address of an SDIO device. The corresponding function is as follows: int32\_t SdioWriteBytesToFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t scatterLen\); - **Table 8** Parameters and return values of SdioWriteBytesToFixedAddr + **Table 8** Parameters and return values of SdioWriteBytesToFixedAddr

Parameter

@@ -560,13 +562,13 @@ if (ret != 0) { } ``` -- Read a given length of data from the fixed address of an SDIO device. +- Read a given length of data from the fixed address of an SDIO device. The corresponding function is as follows: int32\_t SdioReadBytesFromFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t scatterLen\); - **Table 9** Parameters and return values of SdioReadBytesFromFixedAddr + **Table 9** Parameters and return values of SdioReadBytesFromFixedAddr

Parameter

@@ -632,13 +634,13 @@ if (ret != 0) { ``` -- Writes a given length of data into the address space of SDIO function 0. +- Writes a given length of data into the address space of SDIO function 0. Currently, only 1-byte data can be written. The corresponding function is as follows: int32\_t SdioWriteBytesToFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); -**Table 10** Parameters and return values of SdioWriteBytesToFunc0 +**Table 10** Parameters and return values of SdioWriteBytesToFunc0

Parameter

@@ -697,13 +699,13 @@ if (ret != 0) { } ``` -- Reads a given length of data from the address space of SDIO function 0. +- Reads a given length of data from the address space of SDIO function 0. Currently, only 1-byte data can be read. The corresponding function is as follows: int32\_t SdioReadBytesFromFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); -**Table 11** Parameters and return values of SdioReadBytesFromFunc0 +**Table 11** Parameters and return values of SdioReadBytesFromFunc0

Parameter

@@ -768,7 +770,7 @@ After the SDIO communication, release the SDIO IRQ. int32\_t SdioReleaseIrq\(DevHandle handle\); -**Table 12** Parameters and return values of SdioReleaseIrq +**Table 12** Parameters and return values of SdioReleaseIrq

Parameter

@@ -817,7 +819,7 @@ After the SDIO communication, disable the SDIO device. int32\_t SdioDisableFunc\(DevHandle handle\); -**Table 13** Parameters and return values of SdioDisableFunc +**Table 13** Parameters and return values of SdioDisableFunc

Parameter

@@ -866,7 +868,7 @@ After the SDIO communication, release the exclusively claimed host. void SdioReleaseHost\(DevHandle handle\); -**Table 14** Parameter description of SdioReleaseHost +**Table 14** Parameter description of SdioReleaseHost

Parameter

@@ -897,7 +899,7 @@ void SdioClose\(DevHandle handle\); This function releases the resources requested. -**Table 15** Parameter description of SdioClose +**Table 15** Parameter description of SdioClose

Parameter

@@ -1047,5 +1049,4 @@ ENABLE_ERR: /* Close an SDIO controller. */ SdioClose(handle); } -``` - +``` \ No newline at end of file diff --git a/en/device-dev/driver/driver-platform-spi-des.md b/en/device-dev/driver/driver-platform-spi-des.md index 4388fdd99b..066b92ea23 100644 --- a/en/device-dev/driver/driver-platform-spi-des.md +++ b/en/device-dev/driver/driver-platform-spi-des.md @@ -2,46 +2,46 @@ ## Overview -- Serial Peripheral Interface \(SPI\) is a serial bus specification used for high-speed, full-duplex, and synchronous communication. -- SPI is developed by Motorola. It is commonly used for communication with flash memory, real-time clocks, sensors, and analog-to-digital \(A/D\) converters. -- SPI works in controller/device mode. Generally, there is one SPI controller that controls one or more SPI devices. They are connected via four wires: - - SCLK: clock signals output from the SPI controller - - MOSI: data output from the SPI controller and input into an SPI device - - MISO: data output from an SPI device and input into the SPI controller - - CS: signals enabled by an SPI device and controlled by the SPI controller +Serial Peripheral Interface \(SPI\) is a serial bus specification used for high-speed, full-duplex, and synchronous communication. +SPI is developed by Motorola. It is commonly used for communication with flash memory, real-time clocks, sensors, and analog-to-digital \(A/D\) converters. +SPI works in controller/device mode. Generally, there is one SPI controller that controls one or more SPI devices. They are connected via four wires: +- SCLK: clock signals output from the SPI controller +- MOSI: data output from the SPI controller and input into an SPI device +- MISO: data output from an SPI device and input into the SPI controller +- CS: signals enabled by an SPI device and controlled by the SPI controller -- [Figure 1](#fig89085710359) shows the connection between one SPI controller and two SPI devices \(device A and device B\). In this figure, device A and device B share three pins \(SCLK, MISO, and MOSI\) of the controller. CS0 of device A and CS1 of device B are connected to CS0 and CS1 of the controller, respectively. +[Figure 1](#fig89085710359) shows the connection between one SPI controller and two SPI devices \(device A and device B\). In this figure, device A and device B share three pins \(SCLK, MISO, and MOSI\) of the controller. CS0 of device A and CS1 of device B are connected to CS0 and CS1 of the controller, respectively. -**Figure 1** SPI controller/device connection +**Figure 1** SPI controller/device connection ![](figures/spi-controller-device-connection.png "spi-controller-device-connection") -- SPI communication is usually initiated by the SPI controller and is operated as follows: +SPI communication is usually initiated by the SPI controller and is operated as follows: 1. A single SPI device is selected at a time via the CS to communicate with the SPI controller. 2. Clock signals are provided for the selected SPI device via the SCLK. 3. The SPI controller sends data to SPI devices via the MOSI, and receives data from SPI devices via the MISO. - SPI can work in one of the following four modes, equivalent to one of the four possible states for Clock Polarity \(CPOL\) and Clock Phase \(CPHA\): - - If both CPOL and CPHA are **0**, the clock signal level is low in the idle state and data is sampled on the first clock edge. - - If CPOL is **0** and CPHA is **1**, the clock signal level is low in the idle state and data is sampled on the second clock edge. - - If CPOL is **1** and CPHA is **0**, the clock signal level is high in the idle state and data is sampled on the first clock edge. - - If both CPOL and CPHA are **1**, the clock signal level is high in the idle state and data is sampled on the second clock edge. + - If both CPOL and CPHA are **0**, the clock signal level is low in the idle state and data is sampled on the first clock edge. + - If CPOL is **0** and CPHA is **1**, the clock signal level is low in the idle state and data is sampled on the second clock edge. + - If CPOL is **1** and CPHA is **0**, the clock signal level is high in the idle state and data is sampled on the first clock edge. + - If both CPOL and CPHA are **1**, the clock signal level is high in the idle state and data is sampled on the second clock edge. - SPI defines a set of common functions for operating an SPI device, including those for: - Obtaining and releasing the handle of an SPI device. - Reading or writing data of a specified length from or into an SPI device. - - Customizing data reading or writing via **SpiMsg**. + - Customizing data reading or writing via **SpiMsg**. - Obtaining and setting SPI device configuration parameters. ->![](../public_sys-resources/icon-note.gif) **NOTE:** +>![](../public_sys-resources/icon-note.gif) **NOTE**
>Currently, these functions are only applicable in the communication initiated by the SPI controller. ## Available APIs -**Table 1** APIs for the SPI driver +**Table 1** APIs for the SPI driver

Capability

@@ -104,18 +104,18 @@ ### How to Use -[Figure 2](#fig1586912310348) shows the process of using an SPI device. +The figure below illustrates how to use the APIs. -**Figure 2** Process of using an SPI device -![](figures/process-of-using-an-spi-device.png "process-of-using-an-spi-device") +**Figure 2** Using SPI driver APIs +![](figures/using-spi-process.png "process-of-using-an-spi-device") ### Obtaining an SPI Device Handle -Before performing SPI communication, obtain an SPI device handle by calling **SpiOpen**. This function returns an SPI device handle with a specified bus number and CS number. +Before performing SPI communication, obtain an SPI device handle by calling **SpiOpen**. This function returns an SPI device handle with a specified bus number and CS number. DevHandle SpiOpen\(const struct SpiDevInfo \*info\); -**Table 2** Description of SpiOpen +**Table 2** Description of SpiOpen

Parameter

@@ -146,7 +146,7 @@ DevHandle SpiOpen\(const struct SpiDevInfo \*info\);
-The following example shows how to obtain an SPI device handle based on the assumption that both the bus number and CS number of the SPI device are **0**. +The following example shows how to obtain an SPI device handle based on the assumption that both the bus number and CS number of the SPI device are **0**. ``` struct SpiDevInfo spiDevinfo; /* SPI device descriptor */ @@ -168,7 +168,7 @@ After obtaining the SPI device handle, obtain the SPI device configuration param int32\_t SpiGetCfg\(DevHandle handle, struct SpiCfg \*cfg\); -**Table 3** Description of SpiGetCfg +**Table 3** Description of SpiGetCfg

Parameter

@@ -219,7 +219,7 @@ After obtaining the SPI device handle, set SPI device configuration parameters b int32\_t SpiSetCfg\(DevHandle handle, struct SpiCfg \*cfg\); -**Table 4** Description of SpiSetCfg +**Table 4** Description of SpiSetCfg

Parameter

@@ -276,7 +276,7 @@ To write data into an SPI device only once, call the following function: int32\_t SpiWrite\(DevHandle handle, uint8\_t \*buf, uint32\_t len\); -**Table 5** Description of SpiWrite +**Table 5** Description of SpiWrite

Parameter

@@ -333,7 +333,7 @@ To read data from an SPI device only once, call the following function: int32\_t SpiRead\(DevHandle handle, uint8\_t \*buf, uint32\_t len\); -**Table 6** Description of SpiRead +**Table 6** Description of SpiRead

Parameter

@@ -390,7 +390,7 @@ To launch a custom transfer, call the following function: int32\_t SpiTransfer\(DevHandle handle, struct SpiMsg \*msgs, uint32\_t count\); -**Table 7** Description of SpiTransfer +**Table 7** Description of SpiTransfer

Parameter

@@ -457,7 +457,7 @@ void SpiClose\(DevHandle handle\); This function will release the resources previously obtained. -**Table 8** Description of SpiClose +**Table 8** Description of SpiClose

Parameter

@@ -545,5 +545,4 @@ err: /* Destroy the SPI device handle. */ SpiClose(spiHandle); } -``` - +``` \ No newline at end of file diff --git a/en/device-dev/driver/driver-platform-uart-des.md b/en/device-dev/driver/driver-platform-uart-des.md index 0d8809f05b..20340bfd49 100644 --- a/en/device-dev/driver/driver-platform-uart-des.md +++ b/en/device-dev/driver/driver-platform-uart-des.md @@ -2,27 +2,29 @@ ## Overview -- The Universal Asynchronous Receiver/Transmitter \(UART\) is a universal serial data bus used for asynchronous communication. It enables bi-directional communication between devices in full-duplex mode. -- UART is widely used to print information for debugging or to connect to various external modules such as GPS and Bluetooth. -- A UART is connected to other modules through two wires \(as shown in [Figure 1](#fig68294715408)\) or four wires \(as shown in [Figure 2](#fig179241542163112)\). - - TX: TX pin of the transmitting UART. It is connected to the RX pin of the peer UART. - - RX: RX pin of the receiving UART. It is connected to the TX pin of the peer UART. - - RTS: Request to Send signal pin. It is connected to the CTS pin of the peer UART and is used to indicate whether the local UART is ready to receive data. - - CTS: Clear to Send signal pin. It is connected to the RTS pin of the peer UART and is used to indicate whether the local UART is allowed to send data to the peer end. - - **Figure 1** 2-wire UART communication +The Universal Asynchronous Receiver/Transmitter \(UART\) is a universal serial data bus used for asynchronous communication. It enables bi-directional communication between devices in full-duplex mode. +UART is widely used to print information for debugging or to connect to various external modules such as GPS and Bluetooth. +A UART is connected to other modules through two wires \(as shown in [Figure 1](#fig68294715408)\) or four wires \(as shown in [Figure 2](#fig179241542163112)\). +- TX: TX pin of the transmitting UART. It is connected to the RX pin of the peer UART. +- RX: RX pin of the receiving UART. It is connected to the TX pin of the peer UART. +- RTS: Request to Send signal pin. It is connected to the CTS pin of the peer UART and is used to indicate whether the local UART is ready to receive data. +- CTS: Clear to Send signal pin. It is connected to the RTS pin of the peer UART and is used to indicate whether the local UART is allowed to send data to the peer end. + + **Figure 1** 2-wire UART communication ![](figures/2-wire-uart-communication.png "2-wire-uart-communication") - **Figure 2** 4-wire UART communication + **Figure 2** 4-wire UART communication ![](figures/4-wire-uart-communication.png "4-wire-uart-communication") -- The transmitting and receiving UARTs must ensure that they have the same settings on particular attributes such as the baud rate and data format \(start bit, data bit, parity bit, and stop bit\) before they start to communicate. During data transmission, a UART sends data to the peer end over the TX pin and receives data from the peer end over the RX pin. When the size of the buffer used by a UART for storing received data reaches the preset threshold, the RTS signal of the UART changes to **1** \(data cannot be received\), and the peer UART stops sending data to it because its CTS signal does not allow it to send data. -- The UART interface defines a set of common functions for operating a UART port, including obtaining and releasing device handles, reading and writing data of a specified length, and obtaining and setting the baud rate, as well as the device attributes. +The transmitting and receiving UARTs must ensure that they have the same settings on particular attributes such as the baud rate and data format \(start bit, data bit, parity bit, and stop bit\) before they start to communicate. During data transmission, a UART sends data to the peer end over the TX pin and receives data from the peer end over the RX pin. When the size of the buffer used by a UART for storing received data reaches the preset threshold, the RTS signal of the UART changes to **1** \(data cannot be received\), and the peer UART stops sending data to it because its CTS signal does not allow it to send data. + ## Available APIs -**Table 1** APIs for the UART driver +The UART interface defines a set of common functions for operating a UART port, including obtaining and releasing device handles, reading and writing data of a specified length, and obtaining and setting the baud rate, as well as the device attributes. + +**Table 1** APIs for the UART driver

Capability

@@ -94,25 +96,25 @@
->![](../public_sys-resources/icon-note.gif) **NOTE:** +>![](../public_sys-resources/icon-note.gif) **NOTE**
>All functions provided in this document can be called only in kernel space. ## Usage Guidelines ### How to Use -[Figure 3](#fig99673244388) shows the process of using a UART device. +The figure below illustrates how to use the APIs. -**Figure 3** Process of using a UART device -![](figures/process-of-using-a-uart-device.png "process-of-using-a-uart-device") +**Figure 3** Using UART driver APIs +![](figures/using-uart-process.png "process-of-using-a-uart-device") ### Obtaining a UART Device Handle -Before performing UART communication, call **UartOpen** to obtain a UART device handle. This function returns the pointer to the UART device handle with a specified port number. +Before performing UART communication, call **UartOpen** to obtain a UART device handle. This function returns the pointer to the UART device handle with a specified port number. DevHandle UartOpen\(uint32\_t port\); -**Table 2** Description of UartOpen +**Table 2** Description of UartOpen

Parameter

@@ -144,7 +146,7 @@ DevHandle UartOpen\(uint32\_t port\);
-The following example shows how to obtain a UART device handle based on the assumption that the UART port number is **3**: +The following example shows how to obtain a UART device handle based on the assumption that the UART port number is **3**: ``` DevHandle handle = NULL; /* The UART device handle */ @@ -162,7 +164,7 @@ After obtaining the UART device handle, set the UART baud rate by calling the fo int32\_t UartSetBaud\(DevHandle handle, uint32\_t baudRate\); -**Table 3** Description of UartSetBaud +**Table 3** Description of UartSetBaud

Parameter

@@ -199,7 +201,7 @@ int32\_t UartSetBaud\(DevHandle handle, uint32\_t baudRate\);
-The following example shows how to set the UART baud rate to **9600**: +The following example shows how to set the UART baud rate to **9600**: ``` int32_t ret; @@ -216,7 +218,7 @@ After setting the UART baud rate, obtain the current baud rate by calling the fo int32\_t UartGetBaud\(DevHandle handle, uint32\_t \*baudRate\); -**Table 4** Description of UartGetBaud +**Table 4** Description of UartGetBaud

Parameter

@@ -271,7 +273,7 @@ Before performing UART communication, set the UART device attributes by calling int32\_t UartSetAttribute\(DevHandle handle, struct UartAttribute \*attribute\); -**Table 5** Description of UartSetAttribute +**Table 5** Description of UartSetAttribute

Parameter

@@ -333,7 +335,7 @@ After setting the UART device attributes, obtain the current device attributes b int32\_t UartGetAttribute\(DevHandle handle, struct UartAttribute \*attribute\); -**Table 6** Description of UartGetAttribute +**Table 6** Description of UartGetAttribute

Parameter

@@ -388,7 +390,7 @@ Before performing UART communication, set the UART transmission mode by calling int32\_t UartSetTransMode\(DevHandle handle, enum UartTransMode mode\); -**Table 7** Description of UartSetTransMode +**Table 7** Description of UartSetTransMode

Parameter

@@ -425,7 +427,7 @@ int32\_t UartSetTransMode\(DevHandle handle, enum UartTransMode mode\);
-The following example shows how to set the transmission mode to **UART\_MODE\_RD\_BLOCK**: +The following example shows how to set the transmission mode to **UART\_MODE\_RD\_BLOCK**: ``` int32_t ret; @@ -442,7 +444,7 @@ To write data into a UART device, call the following function: int32\_t UartWrite\(DevHandle handle, uint8\_t \*data, uint32\_t size\); -**Table 8** Description of UartWrite +**Table 8** Description of UartWrite

Parameter

@@ -502,7 +504,7 @@ To write data into a UART device, call the following function: int32\_t UartRead\(DevHandle handle, uint8\_t \*data, uint32\_t size\); -**Table 9** Description of UartRead +**Table 9** Description of UartRead

Parameter

@@ -557,7 +559,7 @@ if (ret < 0) { ``` >![](../public_sys-resources/icon-caution.gif) **CAUTION:** ->Data is successfully read from the UART device if a non-negative value is returned. If the return value is **0**, no valid data can be read from the UART device. If the return value is greater than **0**, the return value is the length of the data actually read from the UART device. The length is less than or equal to the value of **size** and does not exceed the maximum length of data to read at a time specified by the UART controller in use. +>Data is successfully read from the UART device if a non-negative value is returned. If the return value is **0**, no valid data can be read from the UART device. If the return value is greater than **0**, the return value is the length of the data actually read from the UART device. The length is less than or equal to the value of **size** and does not exceed the maximum length of data to read at a time specified by the UART controller in use. ### Destroying the UART Device Handle @@ -567,7 +569,7 @@ void UartClose\(DevHandle handle\); This function will release the resources previously obtained. -**Table 10** Description of UartClose +**Table 10** Description of UartClose

Parameter

@@ -655,5 +657,4 @@ _ERR: /* Destroy the UART device handle. */ UartClose(handle); } -``` - +``` \ No newline at end of file diff --git a/en/device-dev/driver/driver-platform-watchdog-des.md b/en/device-dev/driver/driver-platform-watchdog-des.md index e571e6fc34..deb85133a3 100644 --- a/en/device-dev/driver/driver-platform-watchdog-des.md +++ b/en/device-dev/driver/driver-platform-watchdog-des.md @@ -6,7 +6,7 @@ A watchdog, also called a watchdog timer, is a hardware timing device. If an err ## Available APIs -**Table 1** Watchdog APIs +**Table 1** Watchdog APIs

Capability

@@ -70,25 +70,25 @@ A watchdog, also called a watchdog timer, is a hardware timing device. If an err
->![](../public_sys-resources/icon-note.gif) **NOTE:** +>![](../public_sys-resources/icon-note.gif) **NOTE**
>All watchdog functions provided in this document can be called only in kernel mode. ## Usage Guidelines ### How to Use -[Figure 1](#fig430533913392) illustrates the process of using a watchdog. +The figure below illustrates how to use the APIs. -**Figure 1** Process of using a watchdog -![](figures/process-of-using-a-watchdog.png "process-of-using-a-watchdog") +**Figure 1** Using watchdog driver APIs +![](figures/using-watchdog-process.png "process-of-using-a-watchdog") ### Opening a Watchdog -Use **WatchdogOpen** to open a watchdog. A system may have multiple watchdogs. You can open the specified watchdog by using the ID. +Use **WatchdogOpen** to open a watchdog. A system may have multiple watchdogs. You can open the specified watchdog by using the ID. int32\_t WatchdogOpen\(int16\_t wdtId\); -**Table 2** Description of WatchdogOpen +**Table 2** Description of WatchdogOpen

Parameter

@@ -133,7 +133,7 @@ if (handle == NULL) { int32\_t WatchdogGetStatus\(DevHandle handle, int32\_t \*status\); -**Table 3** Description of WatchdogGetStatus +**Table 3** Description of WatchdogGetStatus

Parameter

@@ -185,7 +185,7 @@ if (ret != 0) { int32\_t WatchdogSetTimeout\(PalHandle \*handle, uint32\_t seconds\); -**Table 4** Description of WatchdogSetTimeout +**Table 4** Description of WatchdogSetTimeout

Parameter

@@ -237,7 +237,7 @@ if (ret != 0) { int32\_t WatchdogGetTimeout\(PalHandle \*handle, uint32\_t \*seconds\); -**Table 5** Description of WatchdogGetTimeout +**Table 5** Description of WatchdogGetTimeout

Parameter

@@ -289,7 +289,7 @@ if (ret != 0) { int32\_t WatchdogStart\(DevHandle handle\); -**Table 6** Description of WatchdogStart +**Table 6** Description of WatchdogStart

Parameter

@@ -335,7 +335,7 @@ if (ret != 0) { int32\_t WatchdogFeed\(DevHandle handle\); -**Table 7** Description of WatchdogFeed +**Table 7** Description of WatchdogFeed

Parameter

@@ -381,7 +381,7 @@ if (ret != 0) { int32\_t WatchdogStop\(DevHandle handle\); -**Table 8** Description of WatchdogStop +**Table 8** Description of WatchdogStop

Parameter

@@ -425,11 +425,11 @@ if (ret != 0) { ### Closing a Watchdog -If the watchdog is no longer required, call **WatchdogClose** to close the watchdog handle. +If the watchdog is no longer required, call **WatchdogClose** to close the watchdog handle. void WatchdogClose\(DevHandle handle\); -**Table 9** Description of WatchdogClose +**Table 9** Description of WatchdogClose

Parameter

@@ -535,5 +535,4 @@ static int32_t TestCaseWatchdog(void) WatchdogClose(handle); return -1; } -``` - +``` \ No newline at end of file diff --git a/en/device-dev/driver/figures/ADC_flowchart.png b/en/device-dev/driver/figures/ADC_flowchart.png deleted file mode 100644 index cc8e6494c3ddcf5def7962020210e127f68aec5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3730 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 D^wmNV diff --git a/en/device-dev/driver/figures/configuration-process.png b/en/device-dev/driver/figures/HCB-using-process.png similarity index 100% rename from en/device-dev/driver/figures/configuration-process.png rename to en/device-dev/driver/figures/HCB-using-process.png diff --git a/en/device-dev/driver/figures/en-us_image_0000001206372673.png b/en/device-dev/driver/figures/en-us_image_0000001206372673.png deleted file mode 100644 index f33d6dbfa31952eb162568bd5e81ff2e9387d3a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10830 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 JaPZ9a{{?%NRg?e# diff --git a/en/device-dev/driver/figures/pin_auth_architecture.png b/en/device-dev/driver/figures/pin_auth_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..aeba4a173a2e26cbdaa9c5a1aabe0220ef7b2a59 GIT binary patch literal 15812 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 CU8&Ci literal 0 HcmV?d00001 diff --git a/en/device-dev/driver/figures/process-of-using-DAC.png b/en/device-dev/driver/figures/process-of-using-DAC.png deleted file mode 100644 index 7a62db53a3683922d4033ae4cde5e29d3d50fa22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3296 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 BqUrzu diff --git a/en/device-dev/driver/figures/process-of-using-PWM.png b/en/device-dev/driver/figures/process-of-using-PWM.png deleted file mode 100644 index 7d2c8befd805532d94f9742cc3b28248db5f76e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7448 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 Dhq|Pa diff --git a/en/device-dev/driver/figures/process-of-using-a-gpio.png b/en/device-dev/driver/figures/process-of-using-a-gpio.png deleted file mode 100644 index 69b779798c759a78a0139ed052a6f6187ba83660..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16528 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 JeS7iN{{c%x-Rl4V diff --git a/en/device-dev/driver/figures/process-of-using-a-uart-device.png b/en/device-dev/driver/figures/process-of-using-a-uart-device.png deleted file mode 100644 index 6c1997d120e03bc66658b7bb8107c8605c8ad5ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9482 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 diff --git a/en/device-dev/driver/figures/process-of-using-an-i2c-device.png b/en/device-dev/driver/figures/process-of-using-an-i2c-device.png deleted file mode 100644 index 7eda062addfe07011d62763355028964a6fb511f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6110 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 diff --git a/en/device-dev/driver/figures/process-of-using-an-rtc-device.png b/en/device-dev/driver/figures/process-of-using-an-rtc-device.png deleted file mode 100644 index fdba48eb6ad079dbf0ca1d8675903703b94e4ab0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6650 zcmbVRcQjnlx4vqW5G7jlh!%{JK_WvCqD2?I_lb-WBpIC`N|dNkqDCjW=p`6N2}TXk zGin${8Ets-ervsd-+J$^b2*)>^6mQdi@;M)MG^S+lWp^QK`gag-M}B-dkdcU2Ql0HE&q*9ek@s96Dk zB~DFA!Qh?c&KK=hw@m{20yzZjle&e~sC`wF1Y}{%cV1W1#RVllyyy5TK9dDH#QhkB$E4v{C3_E|`?&q=xQNGh2n0l}c9&Idw1~P_ zH0^bzR+6pK*%PdaurPaa2{C)RT9@zKw1>3XwG&+j;rfvW$s_+G0e>ixZvID<|Mq|V zC=+zld`buabAZ6Vd5~v2Qub;61M@Z{#ZHn=xp5TEw=@?Qp_E(V%!|BhJ9wO5K6d+k zY>l6K4>fIwzoa-61gy^qc!`24KE4OynYK07i+w!DE(opHtJ>d%g_FjOjh-;1Gh-Yb zax#)bx*;4`npmbyME`@Ww&rJU?SUF@S>|~Ok5J^`?_WAR=X{O1Wn_LgGPSlN`gk=b zq&gh+B#yQXWPc18gyDSQ)LWOWBo;(LFp_JJ8^l0_@^TZK8T-(5_S1BZ4B6_cnuE^_ z39&W(gz=HJUROwcpTkfF0z*BCsFX_GRM4;JMcD`LQO|MrgS;TZI8Mg>N$;1}BY%r^;>p0Rh0hLVtBq^Zflz zUMf9$QQ*(hG*FfM(aQPUgwt`4UUm+*p{iv@Ht1>c4-9-S{7ro=PtF_2C>&c@?1@}ig z6L6UVC}ss^@_P_R`@bisNNa4fn(h(y0F^Oc6BrQo#HbkbBUXE9Olg`&-I*|Fl~xG< z&9!|x3Z;|(h`bD2QTa}G1h?YiH_W+=e~&9Z#xleek;`0Jr<1tlp=tfIE%y)ipBXC#wkSvZ{oP}BAMicE#v_ETMF7k{} zoA6@XR&hoyAy9=DG(>I?Pj95u6#w9*qWEzafcGiq&>F5+7B?Q`c16Zi=O_K%C-IDB z3<@_0;KM_|ES?P~g2fL$cF5+7=PyYS7ySug2H44k$m~W=IUoYKd6{_`ivsk6Tc?)3 z8GJ>q2kTE|j#|~%@!L|4rC?l1dE1gNc7k_nd)@18t8Y`gw)U}xA`-(q%#rz(sV43q zmX@FwkK*xJbmV^(J*-phIT~!@PfmC+@82f z*GV~S8*wnX(Mz0&Od+Er%1{?G<(a(ml;g3j^{}jcqb!62w6T1P+TTp6?s=|yc$o`$ z!G{HQblaflH-yOp(xxmKb%MQseZpiS8cQs&)P$*ERjto}HGR;KM~A#!D4mRPF3y{8 zSlGW}pwSJRc(@QUiRvvnOwKHey+QIX2H%WES;|L=7jc}6Nsm^=b~rK%E!$Hj>n*Hu z9u>HI9k6xbeCxf(7v3ukiu!XnHXU0Kdx~~cuWfgL-9s1>pr(5t6rZ8tYZ4ZFJ0Ne) zr4EAL9P{Oitg%w>sIZY{lydm?c=>2@3UfY>^>7@Hehp9o=x6K;le&x6&& zTU@{>A857DfZdhPeIw`Pf{T^a-LzJ^K;k+FD?p$k++02f2=73|`pnv@DiJDAcbM^2TH@ZMoShe_q zdTe1yOaPNh5qM7$;;>E=6K7F4R!vkY+m?;J(3_xn;rW14v|VKJ$RVc|%3S1is7&i} z^Kp=7WKASy?rxq#l)gkl^E0#Z)Hh{C#?N`%8opvZHj~z`?R1QO37ElIhkoZzin~S+ z%o&F|eY1PBbuL3l(vEOM zFncul<8-sN$yPU*KdCceP$ykZV8;sf zGR1YDZi-)O;F)edYr8Y^3(mlQ_N=SdIHl?Z7xmNhvjzaRYDv+PY-*gHd%slj;4 z`g2wbl(iY%ePD)|YrXNWyE;DASx>~$;*;38GnTOj*tk8A>YPO4T(Bf6`OVFNUDLDa z1G*0mcPR>}DM`UgSj6wU?q7TulRk>qLgGvAY9r}Zvlc|d<*M)UAIAp4sI8bHr6{0N`FM;El-KEqzfEWH^xiVAjnM^qzOoHJUW`V<7vFG>mQ&bETRi0Cbse4 z=MdWU!>6BXsfkEX39!Q{Z2>PDe|-q&-jRsQ9^`3KO)TQ&!kB6R4u86T@!-1^$InrM zTTkQT`6N|%{aKa)O}Vk1bcXF$z1u~ucYLbuerKp!MK&VDR5^6T2jm&6NyRJsnV;Oy z9#y%Hu|+$#K71!GMQ}86dG`)guj7%y>}?^6>>{#SRXg2bJxhw&`AFL9XaiwjXJB17ot&#^vQ)1uR0i zMZsY1=rZ230xmUsgeY&)SLS`k4ZF?R8Xo(kUU#^tr*kyGrRTSX#=%~FoN56 zK*>nSfh&WS$?-~oi0yTIjT60g#uvWuQ-V}*)hY<+p_DgZq|E<2-lz1LT&~%W9F)cI zf?PN&ehFQWz|sgojwDSQyCv(<5Lr{^PSJhFz^h=>yw<}c&bbki;U1gwc?K)fTznPU zhNzV3OXswZX?uIm7=)>;axHku)c@~2k-shFppSg1x|WPDrm@%_BR+E!m*@%!7smKY zJACh>^HtVKMhYF>5Khc?VBmTg13;C(YW?-p{L~c}aiJMkLfCT`VP_dc#>2xF-%LB# z9Z4)~ZJM}93zsn6s5`0?tn^}>6f+;7gi#7n#yxDi>QzsF`luXlw<_p%X;5MVf zs^S3Flzh`nB|&MhP64@>Tb?DJ@aCq6;fS$Dsmk9|q;RPg+MAB$jQw`EXyB1cy*EW3 zTSxKrcGyKR)=m-gbDQ6+r!R-7O7djH>LUA;6mY)L6!VC&^gS(mgK82EhipNXPSk3A z06WA+RhKI~ub&dTJAeo?K!?$yzPmQ640`RbTlt@lf0A9}2YUCHCyfs0nHr};(ScW- zXMZ`bq604YJ1QD*3$Q8NlM^h1jd_T$b*p6j{vnd{DoE~p3^R(sFG&wAIQ|Fu-sy>H zg7l>uk95cMdz%(b;m0=7pL-*Q)=MFFs2((D)St9_{y{xxhTttGSQU|hmtzl9A?1GoIsX5;HtV4sa~crIYW z=$G!O(tg}_o674h`;#?!n`^3IO|MpA&OF6bIXb!|e&i{=s)jt@+?&mNG2 zgq^e3BuMpJ+3UVcRO-LD9THXfWP<0C`t6%G1+y865H0_ZaAWrXSO6hko%Z45D$CGT zD+(`C9gzH7@=cG$HE1sVTWE4vQQpj}Xj{)f@0>~IuZphiCP~qbKT&vo?M+&@Er(AB zPEh!o@quS$Eg9&DB;7Y4!UvtUFfDU9Ye%x`T%cYHR>Pqk(lqfNsd6>4lEklEYA9s3 z2Q&m0w=TXU|Kbb#!tm~ww4X&A+n|(DajN5dQmSQm!FubO(TQi+7VCnVzmlEM;Dp-= z8>iLRY0+U zdO>KQmZ)frOr8}pU-=?LjsC&N39HZ{g7y271${%!(0V>D%=|v^ z#E6qEKg$BkXXS6Kv-8AXFZIa?I?z`eu9*QTOgU3NvPqGH`)jtQP`1mtzlttZVJa%~ zXl6LltIdjO*nor^Job8WoVfsbx@t%=Ktj{dm_YDW5RkGZVS11&#fM%BZC0gxpj3na zv7jB&`Gnp0>dC1TlR9a60X7GMi+!!Dhu%J>?4|4!D6;rHYOO@U`YfDVTzwR+ic@*HDVA=oZexPXO zLob0p-1+cc}mR*{zdJg?wZ?V(ycF)VFaTpDqt z<2?!Et`yO*8ZW=EF|88Y@vD$>{X5}n%+tf@$HVwuJKMy3tJxg;cT;jZZ*IO_3~w?< zL#kgkER@SeXPsHTbx)OIkA1T~yJu$je!a=eb@jkwyOL{jj<|u=C4`jYSW>U})G{^V)hMW@rFn_Yb1S2TCs1&o25$8^{U8X(1_mja z!#4RQ6Atz@y8e}UokFnVC)b-boi@8>BD<)E+d0GYY-%yCC&Fa|_tQpSLf?)_K!4Ad zTnFXWIN0lt7&{s!ZAJNXu|`7Ib8pv#gq|_M z6>7}iIB|Ol)e}%yVySRsAVg7s6@s@{9Awbs<~GEG9t;#FT@Pg*R^0yRzAZ8X-jXz3 zi~F^o=ymC3my!Qe-I}WHhQ`CVJ4F_b+lAuo)a5e+dVROX7UGw0YfQk=vIfg>Gafc5 z0n}lb%B&oDLV-xYK4TkdyzFrzrZ116ta=}Mn5Nk`!U6vZ^Mm`rFfI)&Jfe{kl_N(>#^k}JLv+QDI`m9aw_G~Z_U33JZLH4Y`CfrZWqlu zesV7k$nmZ-#(G>zk|qy=mDF86gs#zcDsSwJZ=qMAw3lg3w$>#T&stMKY_DKi=A z2%&L9L$-fVRc^YpArCkS(sgK@KsBJao9N#GfrqM*~z z&~(JopdG{=5%As$)xOt{;#a7t;|6pDI3Uk4rJH(5p=Y1bnex?ZA4FL&;yi?g3RH&#fB)=L zF)4A1@7}nMECtoijrzL*7+V45sbSH7>*sEg;3@*Jpy9r;fc%;77x~N~CPCmxBjzfm zMyE8};XWpH#HhV`<0^abtRzvyQ&}zS25G3NnMsy{7URQ=?wZb{iwNZDa(`Ntf$L;y5D|%}{^{p1#e~_1_y!HUbp1A7vD|IYYb*?;I>(-D zP$_i~p9`smOBH;jqU?a}*|V+M!c6NX>&PUj_8kiHEvCi6I zthfzbk}Pc!m$YtXtgsdc7%{-j9iFPjH$-SOkI9+MhwPBMSOK(+_B&Dh?t;STo+E!6 ztuk4I`8C~4h_3wTCfQlxiRH+ZO0}5JGd_o0@KqlU7pbFDkYyo!aef&mv!iA@^VVdT zK{IRpQWqvrym1kme&y+BBC+dmQ`I@{k(6bwF73mtY1_p(p3?=~`ryH@-vPAdgqGgz zMg7roZQ%L`!_Zg$wCV^s@|E8y4^#LW7n<27NsmTJM8gAP44tyZgzu7I`*_p48QX$4 zQs33o3G!ZNB|?vByWP8bEe&Z5y5nCBX3TA%NzK+Uf%Xr|Y@w_aqF&O^%+`?=eAIOR z_1U1MWc@IdF+JaP==ov}WM0keqaL~5HPubjt_u<$l-AK!-6-)IAAQfjQIy$J?W(y$ zeyWLmEZ}}h!qWHp$GP0b)^r3~^MIHSJUyw(4lG19BW$bN)!NBUW`9iAjwP|l zBZWn6@Q7Zpl%^j(?@UZ1yBLyjo6Oftal6azm^QUy_bvYWB)n9(Qj0ZQbJy+>qmM|? z^F}34<9ulvJe|fTSX7QYZ+DmfAkkcJZz*wlnjILNA9kvGaSF?$5=LM9s#ApL4LnERdw4bpP65dg6$*ueF*36{oIS#1+J$8x%9!jIXqf zJ9<;O8;=zngUJA(K>{?!1{z~UoJ4J;(nP(~zuEf@>Hd0A%IqKnWEfNZn?%@Gv8-2g zR%XM{@PQ4ZGE5oP$}CimmWq$l_#Z{rrEjSPPCr##U#t^-6c9l)CW@T7J0=Pr!0=G$Cf-8+lfc-)Anh`Bu%x zv6b!k&3=vp`k5N#{EaQUu#Sg28%RZRo_k=n9_X_;B&D zEWs+tLk3er45zS_LqN>}!#G9rGz07*b;v}5|E}=|QAu|(jfrwJG>37zsT@-N|4aYZ zzx!Wr4!rQ2R+Vjdbmc#cufv9EJEs;g^7QRRHx$0D(fSYbL3Vy7GU@v4Nn{6e+FNMB bj9w9S@7*IxojK+GXR(^HmeMyx>yZBfS(eFS diff --git a/en/device-dev/driver/figures/process-of-using-an-spi-device.png b/en/device-dev/driver/figures/process-of-using-an-spi-device.png deleted file mode 100644 index aba1a6b3053728121092e634d5ed007b51fbb6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9061 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 DW65o{ diff --git a/en/device-dev/driver/figures/process-of-using-regulator.png b/en/device-dev/driver/figures/process-of-using-regulator.png deleted file mode 100644 index 6dddc62b20eba787ee3ca469718a930e2174ca51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13439 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 Bi~j%s diff --git a/en/device-dev/driver/figures/using-ADC-process.png b/en/device-dev/driver/figures/using-ADC-process.png new file mode 100644 index 0000000000000000000000000000000000000000..e4390a3d7cb3d7ac985f1703d49c02217a0696d2 GIT binary patch literal 3844 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 literal 0 HcmV?d00001 diff --git a/en/device-dev/driver/figures/using-GPIO-process.png b/en/device-dev/driver/figures/using-GPIO-process.png new file mode 100644 index 0000000000000000000000000000000000000000..adfdc259524a89b0aca5d99ecc183c516f92f25f GIT binary patch literal 7918 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 literal 0 HcmV?d00001 diff --git a/en/device-dev/driver/figures/using-I2C-process.png b/en/device-dev/driver/figures/using-I2C-process.png new file mode 100644 index 0000000000000000000000000000000000000000..cb92407de96a64d9aab0425f80bf824616a32d3d GIT binary patch literal 4013 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 literal 0 HcmV?d00001 diff --git a/en/device-dev/driver/figures/process-of-using-MIPI-CSI.png b/en/device-dev/driver/figures/using-MIPI-CSI-process.png similarity index 100% rename from en/device-dev/driver/figures/process-of-using-MIPI-CSI.png rename to en/device-dev/driver/figures/using-MIPI-CSI-process.png diff --git a/en/device-dev/driver/figures/using-MIPI-DSI-process.png b/en/device-dev/driver/figures/using-MIPI-DSI-process.png new file mode 100644 index 0000000000000000000000000000000000000000..eaab316ff409064eee64fc06d4f3cc5508221fd1 GIT binary patch literal 7275 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 literal 0 HcmV?d00001 diff --git a/en/device-dev/driver/figures/using-PWM-process.png b/en/device-dev/driver/figures/using-PWM-process.png new file mode 100644 index 0000000000000000000000000000000000000000..3d70498418c65576fb3dd79046ccb7793a291eab GIT binary patch literal 12209 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 R5H))wC3!WuQsDEz{|AY1P~!jq literal 0 HcmV?d00001 diff --git a/en/device-dev/driver/figures/using-RTC-process.png b/en/device-dev/driver/figures/using-RTC-process.png new file mode 100644 index 0000000000000000000000000000000000000000..850703fbe375ae95d5deb2774aa38d0a45e1ee7f GIT binary patch literal 6431 zcmb7}cT`i^qK89Kuz+AgsVbl%O*(`wNa(%yUJVF@76@gKCK6=mAidWJ(xj?@NQZ

wLfc`x2wA38FdAcpd-%(5NUY>XOC- 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 literal 0 HcmV?d00001 diff --git a/en/device-dev/driver/figures/using-SDIO-process.png b/en/device-dev/driver/figures/using-SDIO-process.png new file mode 100644 index 0000000000000000000000000000000000000000..d7da373cb17d2ee02ebc9a98cfba156cde761d87 GIT binary patch literal 11371 zcmb7~cT`i`y7ob(OGiK;ARy9<1?eCiL^{&DB2{_~Btd!yrHNGOO^Se__g;qBo&X z@{yr*9#4JZISX>B|B+TH9n11W?Cgi~F7TbOG{o_&Lp zG3UT73VQBrMfjc@19||Ppr9k+p+P1k5l3dQpU=RFnZh9@1j$YYEr@(LzkspmY z$LHm58#|#0nIwcWrTC%BxoEn^cA=vD`fUB_AW^EOijbQfaO!m7@nTYC!x0NG862{G zJL&NAj3r^Rf}wzOqiQIdG6R@BF#r7?{^x4u$D@ID&Dz*58#QH0R7dRSIX2_8?Ka6O zN_&d8CN`e{9cTRk%6bO+Rm>I$W9ZbYhXrvYu3j~QqGHwD5R<|?9`C1~WG4NXJ4;B= zz4`5_ne3JAQ;&WYbuRd4b{6#S$(qWI!TUF?^ z9FmsA~ISTH@Zk63fh3W;4#jXL!{|d$lD4z+v2609D!2o8}yR@+0Yn zj(9ku?KD7x1b^G#(`Oxz#@QTddlceAj(*A|jgP@_v1bTn))HgnmB zM|6oP$uHfe8C{Q=!*<|Fw#I&YTVhduc;ak#=o!tOEg z(_+cB*L|f`muLQ7M0FlJNUU%nxbdUAdTsQ4NKPQ{$FpDAaCTFokHY(+^%A<}IO%We z^&V(v=O{3XR>2*7PzDAj@nhp!08>(}yzrKQ7qPFZMFMji>t4jNdJ!2g!y5547i|-? z)~Fpk@cgq8xMVrJ2M8mXi*QrV?4LZ66Kyi>^dh6*@r_&ZzWBR8u8}uch|%;I%p>p9 z5{>9#YZ|HEhhsl8RE%9G>tt~p#!Wbr+_1BCkw)TZEJ~k9L~HdsbnGqg_Q4;L}5WU#GW)(6Kfx?;cJjovihgs-nIPsQCUw{WE{= zl76GyUn(UG6LrX(G74A!+d1X}1b5w^=WV%jPb7KB0P0beJF^Rcqa+LMAIOH(9zvMB z*FRF%bin<^T2kBTLDS#oM|C-Ht%?SW;qRyV$mU*@FN}5O9^Jx~%V@MG(n>4OVhTw$ z@vqAN{=}QbeAv*?#3!!o$brtudqau8wCD&c=dv9){Ta*Lk?Yu(*G5wWMx?89 zu%hAm^iNMyc>DPs?X-MuZXs*(&HeXeRtXwzn0NaLOxxXTln$A)O_ zW@!#}5k%5d(&MIw;OHV3o=f8-X0Lt!%5K;6!ta9e^RQR;ql%)W6o40~)zWy{wtljDpbjUiB&bIv zvB;}$1^x3fe_#0TGbeUmtj_(mDCg>+QFXB`GUMa1#jgq=#~|^#J&PLk4JJe2fCiHR zSwM1cOD4!CHUN4%0`};V_w*yo&1T`U7RLJR*{D&sI#fJ_n6!MHIRd7@0UU@6fG}5T zZnJ0Tmp`?np=t_l{IM98p$k)E(LK=F2Av%f2ghGbvwtmeT(PM5*aU? zIv$E&8HK)caVV@X8VLF#x|Lnp{gOd#qayt9c0m3O#?6l%Kj$~&7(etxd2_`e>jm0( zC_~7lB)-Hd5BioZtO9z)QO+ab?*tON8A4oInWSRF;#(ZMSoP^ z0|k)!OZiy24>WlpBDEwwG?* zR4kCKnwj;09k=7)-OWrYO|h);G$!NLck}zA_gq%EhM5{eF2`e@y-_Q8*CuZ)$wIle zDnG}XI$~|yzV8q>7dpIVVeE>RfYAv#Tt%afgSTJTYaLQuMzZ!UgYDrvHscmzg;$uz z0$)0eB;G|L5F-Fn4btu?CRv$nL38^ma$UdyonuHuZS@%zFRgHynAIb;TP1z-GE;}I zbwr7JSCRHBpN|+E&0G%X-%*WjJ^vKWTAt(Uc^kRue%!cP8lLM*y3~4f8>SmTqf}mO z5HUiKB!$PHw0_?dScj8CIow+HL=d;Jku;p;beQsq4ej(#8BiqnX(Z{9Bab+rUBgGl zQVO>D0`k7BA|<{^kyv(CJSM#-uI4GXMCW{iYG>amO-u1ODKqTQz`DbBb@l@@$QG6Z zU=2*mt0JRQ!TFoepgYOBbZ`eZZg#E(KJ38mMS@Lg{7t>X{{6c-K*l8nTn`S;&Iwvk z6O>l{Hd;r%XabZwiMnkUSt~Ld@Z}V{eUF1d?`Ik{m2CZ`BW&f3+RbVr$t8~kO5$iB z5*+^CdPzR*2XpC3wflC%u9l>e=BcT)4|abSij?kHqbI4ESP`$Q5N5%rFXAQ@%e}$E zTVV0h8mQMdrne#4$E%bQ_{p$#0>P!u;_z9`Qtjq#!a1{)7;f=`ov(q&CFjkDjc!l*SZoxZM&I{$VeBbt!(l*}!<>xJ|7?Fdi<3EaYn?XLBkwEFBDL`1dcMDnefUk(A z&v8y;En}MVG!@G}pfiJHN&YZgoKBl6+<1QEicYg?5OP8IqL50@xh$6M(KU(_AtJsYL8yh|m)oFx6X z0r{z%srG|V{^m=C-z6+xk+I!a6dfF(G#Zay9U_(N;m?G~godepZ-P>B0xjA9d6~a2 z{P&qQJ$v3?>#s5whnuVhLFacqWq@@6Vi#4&UwzS}B_OSmbIn0nfJMKARti-`oYjFMQLkDl~bP~|f=QIkIhX5#U)T$0ZbK^lC9<;z7&B zeCA$Brk{GKQq%6-BJbRZNA(--b=ckAkg7q!XW@ohoq-C&Q+ za7C#h+ydgzKgANp$!|$pan_cleN|&_0@DoBK{u`oyIxRn(ER=7P~rhXe2I$z=l(N#E=Y$V*heHh& zS2yZxJDq#lcMN#S8R;r&PU+CCB9EMZ%u@~ydfD8nyd31f(MQ#pk}Cl=ymj zokI;@`)>ddJ5nJ*Gxi&M!7E&|iABe7Z{^2F^pv zQrWx2vgo{rcQH)C&mT7h=WN0KGgu=c!~}2T()mdgo11cR3EN3?c1ye(1>U&1+lws3`(cFpEjTE zQC*NjegQzpOq(vNOxNjN`RUvJ`<;J&6v{ER%qXv)8Z2HJT$WT{+djId{x*}!qC9a6 z_P$HaN0Lo+b#b}Bkt4P$3zwP7!%Q$+p){kX)>?c8l#FS$XZkW>|7x`_(Js`@d`x@9 zrhH%46WDr_6&(R&Q`KQOiQ_~y`m4qVL>4uArONL`wcG|7)9?r5g-q7(-Vowvn`+A4 zLdSBMk!hYjE!2mEne*;w-jWPaQ36zci(R6SvAgjPu;0um0HM@7LlZYEu&%_jQyP*THEPfJb@!J67^TXOyvY^L zs+ZojB;9ylZVJ;DE1Wx}-`zsQl>-$(CxH_f%w`)*Q+u_u2tLv;1#UX@BrRH_^bj6u zS`r$E9)0~)^E;k)XW7UG+)iB%bbY6OZ#?oal68$foZz&$272D# z(wqy!)OU*!qxk-Mq&p-g9=T!N;QTOe{Q}V5&fU3qFQ#rm>LbD=o&W0xJiLVh_TU%l z7Wp;Nd|={s6hhfYW7k79H_z!`EKlzR^x50G>bkl# zy8=j^??8{pEh+!-K44lqb2)+5+!z8-f?ihfW7_#j;{U!GFqvH6t3I>KGTF|j|Ar<+ zr?6KG?U`2#Qtn|taOIttH(P2*ysp|75O0J3ARQtfzYf`xO+d4f)%DuFLX{`SxlOyg zVv#2unU^6~RfmZ)E6Bre_Ng2M0=bwxBK7$d8GTkBG^|I+kH`tUTSw92cMRV7RleJS zlq?;gFv9#zGKR-YSBqkzE4wn5Ie&1C!g?&@w6Dg^)_8hb#9It>L>+IZRxDYpYa8(2 zXM70>H^JyFv)+zLaz-|kG6E)ZEaa%=*aQKqZ~13K$!rl<>sLQ=F;~X|DOkALQLNoV z001mOI%2aKGyZ#enWLZ0PnaC>i&(GUnQ{IXkh%Uy;V4|v3)gqLykjlkEzR(ndm2Rw zV$ya?GLQ}Au-&_~|mIPr7l7ysN+?AN_J7j>0OT6w(p8DAcd-WyIrd9W$#!=>RSLCaghNv8R zqTW-yx<9=t?cGmuMl_$^^z4EsTH%~6Wt7Pk^_)d~&%;V$PG^RRH!rGW8`A7MlTdy) z%ExUZhqNCc?%Z8Z^NnndN7B@%y|+c9mGztLf@a7s4ml6k#TvHsG1ijPwYAimRz5;P z6kjk8E3GJ=0S#A+MyGp4PA0V3z|TFn0~ngH8hL*aCO7!X)vlH!DqeW4ye9WD)IZ`z zi$ZU%c4^+WZspi@a5Wed#E=^aP{~o6P!kqcex7~%CkgaienUayxyhVaQ{C-fEU@uY zf&;&ZgrbhUh`A?OJG|nYDWsG97;$+=qhHFmyix)z(i#;@65*$+^WX{dsiV#rnPH1* zjB$(&wr`ud=Ve-l4oT#x$Pb?OKs9V)X$2_=*O8`I=F?{f_6>i2`U)$I_mc3DM9k>g z?U?#iA&Ho54{bw}IY^VT;rE~U^!HOJScvZxzo_3i7{B*2pSBauE`RW{YhqZ&v@Ohm zEY4)6}|*vXt;q=74YuYjnB~jT_)v^cvSwu&?Mss+4?Am6Z7HB??M) zo6lW0pY>)ZgqNS&RrWW%`Ld}nc5NftVa21)aq5>1EJ?|&T=7hNj2$pURd&8r()8sr z!D&|~!Hi~Ky28$EXnp!$kx|0_e<6?e>MMd)t|!ZzPJg)Cz!m1fyc{!%Fe-^6 zGuZi}+xh+}JEjib!k91bv)Mgm{su&U=a&Cr#;<1T5m@q=U}w&#d#=aqGXkMFSvf9s zCYdpJQZd7RM9SM_RT#^I-=?y%Fw)$p*k*(&{&%mE{9YhMs+}OlNb>74{j0!;u_GjO z8bK!S#7fmxF7CFV`%vy-6GS7#u=Z#(Mf;?kro2PRt6Yo@ z>@CV?iUl@pPFuLOdE!47eSUuf{n3T#R$_l&1KNkMX%SrC0HJ4;5j->IABW3lG-v;_d~60GRS+C8~d^$w+lO~-E4 z2D$v6hcjtyqq=~nKgLIIMn%!I=;?!Ooz}L#mz~!&$tqY3ZDJ6mjjVkcEs!E-8`lgJg9|^^QhOcBTk#r<-$&Cvs)3)Z|HqrzReajPX^WceZBY>Uh~s(AEjN z$NKwqYJtW2Hp*x?WT=U6r-|)t@9W^2mt{~}i>`YDl~Ry}Q4*+j;s;NcK~W<^V=PYx z>2{G-wiF5<9t9nc^0isNIx=*WK4!IVD%1kP&e`xLbNQuEqh9HEm;_%%s#zUf2Oy*BgTRIjv$j=!&NN7KC?Zp&<{P#8a0wdlML zo@3djOi||_adaB>1wVHPeYBBpSSX1yEt?@swyExrDnBmQ^`$A)#Sdqv@2mPCfuK)M zA2mwXMhUHZxFAhP?kI^B4(A@FsQ!v>6b@1;UN3%3+3^g#K_xSaCVaq*m-;b*LZ}+_ zd~p3QO3{+JzJ^H|k6}dc8RjXiN%S#tWfDydb?Mt~wM!t@cL<{Wb!V7QHeW<^J|^oGNDveguzVrZ9#&k=;TJeG_PuX+bGbX(E|d0@ z0r1^}WlThnVo^S6=K66;)Tkly@r6<36u`;ECW~z-Ld$7)(&?-M!5z_I(-?rswlJaD znK)J^pE{7U;-nwV9GfnZXBE1rMNJiw-0x%`BlP3wlnu9~X*06EA%Yt6T(WF7#`L$A zEBwXHEaZWaA01zNq=4U*;d9eIcGNlR?6pS4@Obtg6g?5Bt$jo@qHQUbU?Mb$o!JCU zL~ssPe@m2TjoSzsfyFy>c-w#ehq!S1)~N&ZQlxi&Fj-~-+1`9$dC*u$emLvW=COL- z&CfJLa7x@r+XWtZ@RC5j1^3UEYOi{l1-A@(2E#p&B42A{pg@Nt`3-OHZLYFEA&g2PI#><}NE?x*5?hftu{IlNl{1Xn&b3qmlX$tCJdn6AlcO zIBeSgjqF#9=&=df-F-g$|!!9rW)YJBk=S)Lo!?wRyK$U0n&#hC&c9O9JV(kPfr%+)$%=^sFA#rSeqf^YQ) zAqJ<^9sNGK0VDtIx#kUW12%ky|9SW;wf@)iN?-H>g&P`ziJX4Z+hR!#^+VL2p5+<+ zgR2w0RoK;T!$Nl?G5ubD%Vm6ww1a;V?9p}azyku)WS*}g?a1QV**&F4jpQ)-5>Sqh z=Fn8hVS?F`2&3Qbmp1V*H(YG6M2{pUI{FK=|AON^=!HuM5ymchsuWyyO;8%E5PdkXK`Rg(`q z@VT9g%;;bQlycgMAT>*+nT+qCz$1INKVA34p#;p69dtv8yi}^5qu4MZkP_3h5i&uN zc{lB#;T7AQ7$z19N?yiD_;qB&xtz~S5YzCaS|up@tmr)$a7==@DazmniCz#r>99EZ z)qT*Th-p3=P+X?nDW)#N4y5n6l93-ng;zfW)ikh=h_=Woe0r4OL#l4d(*GJ(?q$rx zBcp${oA9tv{YzRTJn+uzmvT~WhOf^T!P~$-TwA;c4AT&>Gjr!rYy>-3&MVq^^xSqh zqxs6pb9oOQ^Lv{a_HtMDI~d*JwUvFqElwq9QWw#o4AOtv+Ie{nQWP7Ep%&WSt;HB7 zUG8vaXAee^dBeCa;%fT{CaxU!&VG_(g%V&Fm|&+JJ$G?SRM(_(3MB^ zSJB@U+E45_qbd8`kfR!U(aEc)(?Iiw?bsj|zVqJG0jwHo)v#6`xiGQ@#Ilq^ zPWm}EC9Kkj9O5e^^$oc00Y$j#Sd*&KXPU!ioe;Rm0Gn@kXNKwK|LP4cLn5Qtxny;82ZHSpm@IPPe|2haDlzA(ei)+5hOmxGY>C{}^T^P}M~Qk1%onW5UB+&NBO6(d$?9ZcryrEa zTh055SaQ?!NHOh|?}pa#G4H+ZDCqu&y&8Gig=7CjL1i{-?P8++pbG}CW4y%GY`SeCT`I8qPbq(t=U?MP{ zH~hbKV6B8rA+?kuF>{*Ze$ zs`OY~`$`+$4t01_M<6j^IdPbtYD~?#|A<5l*kNaHz}UOtjWZqE+0alc{(XzF$8~%$ zm(WWcen2U4>IU0fp-y`9{hKRO;x{Qs=r<9v~C{q$X{<5eqg z1shX=tpMwo!2VrbsduXnJ9a9Crz2Ds*fVzw^O$S8_BQJGSim4+q=A<^fJnJY_q0Q9)%XX^{s&4?qBStMB%A;B`GFWqfjsHiG}O}YOcn4V~bik`Tl)#gVM#lRO1-b`BFaY z$MFPiR0}$a1c#Cn{kEkpcmefxlv#`a{Akl@mkClEt(S3T4GQ`X_6!!k?3F!1L6)2j zzF{IeLcQ(nKdsMy+BA|Q`7c7PYB*9uP~Py^A$#LqaeQqF<~Y1tJxHgSg?&zoxrbjI z7_ezq5i{sI=_gjsh}p<>9h~(qcg|bQ>CRsFroO?N9e;MKd`9}GKxavaspFsiU-kx1 z^hA)$&@E?k4CNBny`Id{*Gm_ryr3Ebbigx&LnYAoah*$Ek8J2f>W%@m%l{p@b@DEF z2Wk9A+7{>WE$T&y)gLv%&^~@%};Dj#aO;`B8D|O*>I$CM02YjC% zBIR3b-QkGj7ne&0(?8*2he6w4%iv`<{Z8x9y{ z9i3zC-kajdwVq6C(}Wu5_h?o-s&KjyeXGCuY}EZG$Bd~0npy*reI0x?8717{wl%mk1rZOzG3On71knihoJ5FVF zZ5HZASgDaRr`6MCYE_}A!ecJzrF}e_qKWPZ!;!3N;m!o|uYBdXIpDis3tHWmwOKhn z(=V6Jm`M#D$0@a4ON!c^+~BE#=Q3Z2Zq)i%g-lGF!-7S+@|i6pa!sqgg7Fw-&ivV z?8an_-D1Z3`SS^EcOtN?s<58-c~FC?T7BL(y>xA_9nf;`%ck02^{!~Iw_cJv()zA7 zC%M0hgT*A+6A!c>0}j$mH3k|k`y&*2Zq!-6JT(Z_o@JL8j#1fAgn8Xv_sXr*E?|SE z)6@$fIWrOc{X+(w^?vu|?z%R$3nl)X!$w*f-fKo{6FKY%l6%kx9~-`IqVawc;X20q zrRfbY2P|C#y0-i_@WFhMWLjANycz00;su2jN*~n}hUODA{qIB~mC*;^4FRWNVBu|Q z)PEp@UqqbyKB-$YLPST|DuX^<8ZJ-YYc|Fb)n`?=Rt|@{-Zx z;82sOD?Kyx1MM$bIx?t+;r|?K&B>kT2zc3Gp4M)QH`w2-5{4(w!<+dzA&&7Hx9V;k z^8qJiQh%M~ykfXD!I5LeT~?81CT|)dy#qaQ2iC95s=7hZ%4inj1ny?B@x-SzcP>|m zUB#y(x68{bRHx*yS5et`{Asf8~jy3$YMR$Ylk&`OC$=x-Ep z!+|J^@9e$yVA|tj6K3>3#Cf?4QTMn@Ogft=FWc+D9)+f%$OO>^L|=B1j}eqc|NVSo z;#LtAlC8naWHjjw#?$R<6(KR}FLQf^J3eCWar(SYx6RU^*hbpGz7^`9LVNFM@<26_l~JR8dsg{Laf$hk4|p0cmjL|NlF*_s_2uY z0GP3#gWep|s~lMG!^n;1`abhMBnI?ECMJatSgqQ{abk{`qfPL?d?bFNc~~EPUgmDM zjGCI)zk_@-TmW_!@9^Dk4R@Wfkd5|4Dx`{WSw;9Sn9?b9(eYOmV@RZdFJGBiIC`~l zLQXt|=2{INj;XPf5*|p?e0+d0d||{(21~H3&Oq=? z27C~V_wh68+9q;LPTENpiPMh11OZWCdEQfjotac&H;Wk0%Df|IH`Ld*Y-d@}&;zPk zS)=wOKNAlK2N~Pcp+YTO@3hd^}SQ?+rzRcmiYAbjBpl7$= zQH>pzEVT0Wk0 zb}k_lXr=y*A{k&f)F{nG=likL2EhVxgT7h1NX!JdGXhBieW(yUKEW8oDb{OQCIRocz8mqLr2J=W9nCZtZuzkz~_=qJFVLazLyI3DOC zWjCizFS#Q3zGi+z27ka@)t5h4v4vfQ5N>i@a}ojoX)u%^+dDmRaoWc@keh@j`WKv@ zLmJ3922&{dMdaq}O_ZfwZA7=x=&!isQq52LS_zlyTI;H32Jg93ik%qk8+Gqz&$fm% znGTTxzPXDv`fl2aPI+~lit$)=K7?6=uj;ppM^{dSxmCoxE?E~ZF9aqX0Z#Y)>yt%j zhub%!6ID^=v2F5%8K{bjX(X-+?1z;?suQIUn}ss~ewLKOl-BGqvN>J&<+M8RZHY9K z2cwu{EYHCUVJ{sJWIe!e!NXp@V>`1`%VF{Sn5{Z)LD~7KmW;*$Z%+35N-?3;4X`q9=*Q>?|;cu{*5(JsrdT2{}geaefsG4b9=w*Ty= z^Xkv-SL& zSoT{q37IUM{QC{yTp-&vgx#1#Hh2Y9doktfclEiM==;nqMk11zi?){b%x$j$GBTbY z2&&O*u4SvJdiF`;g>PKg6AhzG@aiBX0cffeXicI5qf3*W={iMU1FI+VXvQb+Yg18*L7F9XvFbTwIcds#0qJR@2U>hl4kxhckahkY_=%{CtRsh~{9bnVxpfLfpl0-Dh@Ev{T?}aB$VOD(phMS_zhD_eRs2IZO(oHUP9Zpc ziC@#43NKl$6*1lX&Iw-n!;||$XjUx7UqTSOohbZ?Sj%wr>+hkh=Z zqdQ?n+hcyiVEQztiBxqKc6s^*A?;;N8|}3ArjQLamxzG+_b9@OWZ6?6yW@j8*v{pA z>h3&4)&^^o<0~Jp97;oyaC&@y+y{Vwp>y&C)675i)!@bv_0->!cX8Ta(ghSMt;Hr< zzA>*d5L=az48C`2y2j&nq>!}Y0EZBXi}Au{QOnjmy_S;GS97e$v>C87Qj&e=%W4vt ztLh`L9&@n3#WF?cgb%FJCim?QWXwmlZ9T{m?2;6c>CIwCUJ5b3uIK&@`h`a?&dZ)a zc7u?CLetH?a<9oNEWZ8M{)v*Kg1^FT@woE_z9dl5wD3Idp+l3~Y^YNBX#&W7Z`x(* z5s=$|i6#Ws*D^5A^Z?pDxiBZOoHi*s7}&o;{wy3viNF0dUlk*yDn}T>r}9B_zc31v zH1S!)ZxNWDHN>YH$t(5dnQs=SDi~g|)OmKrFFkL1VkFkHYd5Uai+lron+ehLzeH4I(a+^)rB6l zA|96ZRE(Ct3{*AF9d1L!T>(Zm8AhMX(#WYOrqQFG-VE*L7W207xo5>;9=pPrfGE@w zjYP-AN!-3``f=N*P>H3khVZo9F*jKDzS}rBEwK8NAtZhdm9i+6Mu~7@vTR*{jiKAT z=tA%S`IjytQt2CiG$xx%BWNa@4NAI5q4S}LO?MfTHeAFm1-{y$``E>H@ylMlTSq=` zP!xpkgAQ0`^Aa;~>=NWqM3Wh>amI@m?c8fg_p}i~E64`>J1GPw6^Q_!-?qz9q+Xnh z=vs?0o>ERz-%%M+zS%Y{W*#Zn>UqePs7ylp{}VQ7LO&0NXRv@3H|n||%k8?!gzOKZ zf+8%RTsE4PZuL<-#-Bt5{l1#Ckso|BL{0+K60{Qf>AWTd-`aKw_=~?yieszY6PIWj zJQ{8iW0L+?0}1MU0zZJneRy~@ln0`TMZga1xK$lWx>`T$ZX1Qjy~X9Lu!+wZ_pSqK z4Va-Zm&>x#W=eL_M{BslohM04L^KZs&nvRz=~ru|EE(dj9J4;2zgq`O}PQ!`h>s%t)jWZtUEF8V!72YTI zYiz1YC$&SJ_$x-TF7O=844D%MtFznbw*6&#Uus_=i<#_AdqSrA*tSaB5}{o{56ycy zmx58FW#4~>oSG{%@9{HT8QwXiG(dz%8GJy0`eA`atDY{Ew+J=EP}K0#v+ucONu{L{ zd~Exj2$3wqW2k>dCJ}P_*Cg5jx9p*iGQ`XSY3~vAUGi`(j3G2nSPI2gRVlj)?amR&HT@5Q%P<<_oi+MW z$)6(Pr#e-^ipGp|)Z7&SDU-;oX=p6?-u3iTo5r@Hu4TEpK3H>Dv7Vh#RnO67{fXp#gK~w4P>#tnUYlXMOi?% zekROO&!rwH(M)+wi`I_N2fL$|V8phI#@B(0Zq(FUo~D+3oKbhwyUg1Yhk>R zjYukeW7UGW*Wb$hJ^U%=L@RaLY__J8R(|jtF(82APDjtr~6c%cbX)GzYfQxi5l)>Q&bXAmaumSo>F$sAk{yGu!6&TSYs;yPrAE>D%= zHS^TSPJh#2WPl{4TlgViS@OKoz)YX;TyyR53|#@T__W!WsruHSPwpZW_oxiS%VhU9 z+qf`ewT6Uc&h{7D0;mL$c@YzekZ+#9vDZiA{j~VU#$5# z))#WINX}-Sbagxyd>*z+ibid{ck^ry%Df`eT@>jN?ZRls=66;5(LtUi= zM#&<+0Gl>YvB2Bgo3BaxGiC4)EKBNCqx@lU-6`^T;^`sr>^Bnztu0R{7y9_g`p_Tn zCn)6^M;d{w%~d12Ie@pt(3CHsMC|2>@Jy)IH$uAon2ftx=y0r88?iv#yCzELZY2kA z=d@k@2GW9Mr(Y-zYjPZm@bt} z|2oe#Mm0E7G&Ekj@IqsloHYv7g@Plj43ik zy7V!9j8Z2b<%EJNKcO~0>G>anKQ~ohnr@C54n-UPRRlH`#M9h z=I={qOO1`eelkW58gjERH!H2f?29=+VM__wsZW-ev`M%x7E zIqVY76WGgp6gNgFYW@u+zff9(k9m83-bgmn4Tv>U%Uf8(<`scj)$mI5_%q;3t^NDz z6i=&m>y<+`?^e>VyXL(g7@uIgi!PLo|5#+6X*;!?d)$~`M*jxhrYa=Q?eM@t%3N@7 zyAm>0oSSWSb?49Xd{dzUQ$-%dSf-a$K@wo>j$kcV4^ry6r92NTAt0LwRr;FpqO8f4 zQC!LfqLLI6#jsg29IEhcN~G_U+2tovTw?mfl&akgxkXbGQpV(c|2U6DZB%xN{`Y66 z<#|utSN_nDAOi>x*?RxfisQIdHXFHXrrujW1=Z??suwc9iSr9#{hXTf$9tK$H1>~6 z)Fs7DiZ#mC4Y?T5uu3h+oOX}qnIJQli}MI`E5lEblu{xEyf4@HELXc!no3u4+7(@n)1j2oMBUm%M(L zKC4Y(HX8g$h5o#@C)a4Zi`xs8FWXDVSz_St`@nH2y`S6jrBq%34RTe%^Wr1qFyWF; zuCTveLuLFv_D?Uj|2m~Jyzuc!E0P$q;;ZfS*}^vuMmf$a^s3%2y$&XK7Q*QF zBS4r=@hX==No)L`ieVQ5l=;_{qsK=p8w1% c)_seILGgfixVs#&$xK1f5JHC#x->ELUP2Ls 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 akx$+fed9wi^6LK>95p2^MTorh+y4N!7QnFp literal 0 HcmV?d00001 diff --git a/en/device-dev/driver/figures/process-of-using-pin.png b/en/device-dev/driver/figures/using-pin-process.png similarity index 100% rename from en/device-dev/driver/figures/process-of-using-pin.png rename to en/device-dev/driver/figures/using-pin-process.png diff --git a/en/device-dev/driver/figures/using-regulator-process.png b/en/device-dev/driver/figures/using-regulator-process.png new file mode 100644 index 0000000000000000000000000000000000000000..da251499bb7973d46026d6e317627b6ed98120c4 GIT binary patch literal 8502 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 D=!Qs+ literal 0 HcmV?d00001 diff --git a/en/device-dev/driver/figures/using-watchdog-process.png b/en/device-dev/driver/figures/using-watchdog-process.png new file mode 100644 index 0000000000000000000000000000000000000000..6b99d28fd621e222bd6873ada2c47405a4f55a42 GIT binary patch literal 6321 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 literal 0 HcmV?d00001 -- GitLab