# RBM library APIs

The RBM library is an API wrapper of the Robotmon JavaScript APIs.

#### RBM Config

| property               | description                                                                                                               |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| appName                | The name of the script.                                                                                                   |
| oriScreenWidth         | The width of developer's phone.                                                                                           |
| oriScreenHeight        | The height of developer's phone.                                                                                          |
| oriVirtualButtonHeight | The virtual button height of developer's phone(`getVirtualButtonHeight()`). If no virtual button in app, just set to `0`. |
| oriResizeFactor        | The resize ratio of the screenshot in developer's environment. For `screencrop()`. Range from `0` to `1`.                 |
| eventDelay             | The delay milliseconds of the event.                                                                                      |
| imageThreshold         | The threshold of image recognition. Range from `0` to `1`.                                                                |
| imageQuality           | The compression level of the image. Range from `0` to `100`.                                                              |
| resizeFactor           | The resize ratio of the screenshot in user's environment. Same as `oriResizeFactor` is better. Range from `0` to `1`.     |

#### Using

```
// Import RBM library
importJS('RBM-0.0.2');

// Initial RBM config
var config = {
  appName: 'com.your.script',
  oriScreenWidth: 1080,
  oriScreenHeight: 1920,
  oriVirtualButtonHeight: 0,
  oriResizeFactor: 0.6,
  eventDelay: 200,
  imageThreshold: 0.85,
  imageQuality: 80,
  resizeFactor: 0.6,
};

// Create RBM instance
var rbm = new RBM(config);

// Important! Calculate the screen size, call it after start pressed!
rbm.init();

// Then using the following APIs of the RBM library
```

#### RBM library

```
rbm.log(args)
```

* `args` any type - if argument is object, it will convert object to JSON string

For general output of logging information.

```
rbm.currentApp()
```

Returns `Object` - The current app in foreground. `{packageName: String, activityName: String}`

```
rbm.startApp(packageName, activityName)
```

* `packageName` String
* `activityName` String

Launch an app by `packageName` and `activityName`.

```
rbm.stopApp(packageName)
```

* `packageName` String

Close an app by `packageName`.

```
rbm.click(position)
```

* `position` Object - `{x: Integer, y: Integer}`

```
rbm.tapDown(position)
```

* `position` Object - `{x: Integer, y: Integer}`

```
rbm.tapUp(position)
```

* `position` Object - `{x: Integer, y: Integer}`

```
rbm.moveTo(position)
```

* `position` Object - `{x: Integer, y: Integer}`

```
rbm.swipe(from, to, steps)
```

* `from` Object - `{x: Integer, y: Integer}`
* `to` Object - `{x: Integer, y: Integer}`
* `steps` Integer - Interpolation points between `from` and `to`

```
rbm.keycode(label)
```

* `label` String

```
rbm.typing(words)
```

* `words` String

```
rbm.sleep()
```

Sleep with `eventDelay`.

```
rbm.getImagePath()
// /sdcard/Robotmon/scripts/com.your.app/images
```

Returns `String` - The path of the image folder. All about images used in this library will load and save within this folder.

```
rbm.screenshot(filename)
```

* `filename` String

Save the screenshot in `rbm.getImagePath()`.

```
rbm.oriScreencrop(filename, fromX, fromY, toX, toY)

// Examples:
rbm.oriScreencrop('startButton.png', 100, 200, 200, 300)
```

* `filename` String
* `fromX` Integer
* `fromY` Integer
* `toX` Integer
* `toY` Integer

Crop the original screenshot and save it with `filename`. This function will resize the image with `oriResizeFactor` and compress with `imageQuality`.

```
rbm.screencrop(filename, fromX, fromY, toX, toY)

// Examples:
rbm.screencrop('startButton.png', 100, 200, 200, 300)
```

* `filename` String
* `fromX` Integer
* `fromY` Integer
* `toX` Integer
* `toY` Integer

Crop the screenshot and save it with `filename`. This function will resize the image with `resizeFactor` and compress with `imageQuality`.

```
rbm.findImage(filename, threshold)

// Examples:
rbm.findImage('startButton.png', 0.9)
```

* `filename` String
* `threshold` Float

Returns `Object` - Find the image with `filename` in screen. `{x: Integer, y: Integer, score: Float}`

```
rbm.findImages(filename, threshold, countLimit, allowOverlap, deep)

// Examples:
rbm.findImages('startButton.png', 0.9, 3, false, false)
```

* `filename` String
* `threshold` Float
* `countLimit` Integer
* `allowOverlap` Boolean
* `deep` Boolean

Returns `Object` - Find the image with `filename` in screen. `{x: Integer, y: Integer, score: Float}`

```
rbm.imageExists(filename, threshold)
```

* `filename` String
* `threshold` Float

Returns `Boolean` - Whether the image is exists in screen.

```
rbm.imageClick(filename, threshold)
```

* `filename` String
* `threshold` Float

Click the image if the image is exists in screen.

```
rbm.imageWaitClick(filename, timeout, threshold)
```

* `filename` String
* `timeout` Integer
* `threshold` Float

Click the image if the image is exists in screen until timeout (milliseconds).

```
rbm.imageWaitShow(filename, timeout, threshold)
```

* `filename` String
* `timeout` Integer
* `threshold` Float

Block until the image is found or timeout

```
rbm.imageWaitGone(filename, timeout, threshold)
```

* `filename` String
* `timeout` Integer
* `threshold` Float

Block until the image is gone or timeout

```
rbm.keepScreenshot()
```

Keep the screenshot in memory. To avoid to many times screencap.

```
rbm.screencrop(fromX, fromY, toX, toY)
```

* `fromX` Integer
* `fromY` Integer
* `toX` Integer
* `toY` Integer

Keep the partial screenshot in memory. To avoid to many times screencap.

```
rbm.releaseScreenshot()
```

Release the screenshot in memory.

#### Using keepScreenshot

```
// Screencap three times
rbm.imageClick('apple.png', 0.9); // screencap, and release
rbm.imageClick('banana.png', 0.9); // screencap, and release
rbm.imageClick('cat.png', 0.9); // screencap, and release

// Screencap only one time (used when the screen has not changed)
rbm.keepScreenshot(); // screencap
rbm.imageClick('apple.png', 0.9); // no screencap, no release
rbm.imageClick('banana.png', 0.9); // no screencap, no release
rbm.imageClick('cat.png', 0.9); // no screencap, no release
rbm.releaseScreenshot(); // release
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.robotmon.app/jiao-ben-jiao-xue/api-documents/rbm-library-apis.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
