diff --git a/README.md b/README.md
index 61a910dd1221fc2550d671d52d18dfc90195dcd7..a338ec8dc2584466973b9f124112ab6a05ec9556 100755
--- a/README.md
+++ b/README.md
@@ -1,3 +1,45 @@
+setenv bootargs 'mem=128M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(boot), 9M(kernel), 50M(rootfs), 50M(userfs)'
+setenv bootcmd "mmc read 0x0 0x82000000 0x800 0x4800;bootm 0x82000000"
+Save
+go 0x82000000
+
+
+
+LiteOS
+setenv bootcmd "mmc read 0x0 0x80000000 0x800 0x4800;mmc read 0x0 0x82000000 0x800 0x4800; mw 0x10FF0044 0x0600; mw 0x120D2010 0x00000000; mw 0x120D2400 0x000000ff; mw 0x120D2010 0x00000000; go 0x80000000";
+setenv bootargs "console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=10M rootsize=20M rw";
+saveenv
+go 0x80000000
+
+setenv bootcmd "sf probe 0;mmc read 0x0 0x80000000 0x800 0x4800; go 0x80000000";
+setenv bootargs "console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=10M rootsize=20M rw";
+saveenv
+
+
+hb build -f -T //foundation/communication/dsoftbus/tests/sdk/transmission/trans_channel/tcp_direct/sample:trans_client
+hb build -f -T //foundation/communication/dsoftbus/tests/sdk/transmission/trans_channel/tcp_direct/sample:trans_client
+
+Reset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
# Ability Management Framework
- [Introduction](#section11660541593)
diff --git a/services/abilitymgr_lite/include/ability_service.h b/services/abilitymgr_lite/include/ability_service.h
index 23d668fb3639429e6e25bbf5fb5435cff97f5efe..862b8149e8cd30631425f5d2c3ae3e418f2eda28 100644
--- a/services/abilitymgr_lite/include/ability_service.h
+++ b/services/abilitymgr_lite/include/ability_service.h
@@ -22,6 +22,7 @@
#include "ability_record.h"
#include "ability_stack.h"
#include "adapter.h"
+#include "dmsfwk_interface.h"
#include "js_app_host.h"
#include "nocopyable.h"
#include "want.h"
@@ -29,6 +30,8 @@
#include "ability_state.h"
namespace OHOS {
+typedef void (*OnRequestCallbackFunc)(const void *data, int32_t ret);
+
struct AbilitySvcInfo {
char *bundleName;
char *path;
@@ -68,6 +71,7 @@ private:
int32_t StartAbility(AbilitySvcInfo *info);
int32_t PreCheckStartAbility(const char *bundleName, const char *path, const void *data, uint16_t dataLength);
bool CheckResponse(const char *bundleName);
+ static int32 StartRemoteAbility(const Want *want, OnRequestCallbackFunc callback);
int32_t SchedulerLifecycle(uint64_t token, int32_t state);
int32_t SchedulerLifecycleInner(const AbilityRecord *record, int32_t state);
void SchedulerAbilityLifecycle(SliteAbility *ability, const Want &want, int32_t state);
@@ -82,6 +86,7 @@ private:
int32_t ForceStopBundleInner(uint16_t token);
bool IsValidAbility(AbilityInfo *abilityInfo);
+ static IDmsListener *myCallback_;
uint16_t pendingToken_ { 0 };
AbilityList abilityList_ {};
AbilityStack abilityStack_ {};
diff --git a/services/abilitymgr_lite/src/ability_service.cpp b/services/abilitymgr_lite/src/ability_service.cpp
index 2fd14b92a06933c8bfcdd842ab9d6dbf89dbf06d..e37e55583da2102d5ea22d3e541403a1eb013e76 100644
--- a/services/abilitymgr_lite/src/ability_service.cpp
+++ b/services/abilitymgr_lite/src/ability_service.cpp
@@ -21,6 +21,11 @@
#include "ability_message_id.h"
#include "ability_mgr_service.h"
#include "ability_mgr_slite_feature.h"
+
+#include "ability_connect_trans_param.h"
+#include "ability_callback_utils.h"
+
+#include "samgr_lite.h"
#include "ability_record.h"
#include "ability_stack.h"
#include "ability_state.h"
@@ -42,6 +47,8 @@ constexpr char LAUNCHER_BUNDLE_NAME[] = "com.huawei.launcher";
constexpr uint16_t LAUNCHER_TOKEN = 0;
constexpr int32_t QUEUE_LENGTH = 32;
constexpr int32_t APP_TASK_PRI = 25;
+IDmsListener* AbilityService::myCallback_ = nullptr;
+#define EC_INVALID -9;
AbilityService::LifecycleFuncStr AbilityService::lifecycleFuncList_[] = {
{STATE_UNINITIALIZED, &AbilityService::OnDestroyDone},
@@ -91,6 +98,52 @@ bool AbilityService::IsValidAbility(AbilityInfo *abilityInfo)
return true;
}
+int32 AbilityService::StartRemoteAbility(const Want *want, OnRequestCallbackFunc callback)
+{
+ void *origin;
+ pid_t uid = GetCallingUid(origin);
+ char *bundleName = want->element->bundleName;
+ IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(DISTRIBUTED_SCHEDULE_SERVICE, DMSLITE_FEATURE);
+ DmsProxy *dmsInterface = NULL;
+ if (iUnknown == NULL) {
+ return EC_INVALID;
+ }
+ int32 retVal = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void**) &dmsInterface);
+ if (retVal != EC_SUCCESS) {
+ return ;
+ }
+ CallerInfo callerInfo = {
+ .uid = uid
+ };
+
+ if (callback != nullptr) {
+ if (myCallback_ == nullptr) {
+ myCallback_ = new IDmsListener();
+ }
+ myCallback_ -> OnResultCallback = callback;
+ retVal = dmsInterface->StartRemoteAbility((Want *)want, &callerInfo, myCallback_);
+ } else {
+ retVal = dmsInterface->StartRemoteAbility((Want *)want, &callerInfo, NULL);
+ }
+ return retVal;
+}
+
+void AbilityService::OnRequestCallback(const void *data, int32_t ret)
+{
+ IpcIo io;
+ char ipcData[IPC_IO_DATA_MAX];
+ IpcIo reply;
+ IpcIoInit(&io, ipcData, IPC_IO_DATA_MAX, 0);
+ IpcIoPushInt32(&io, static_cast(ret));
+ int32_t transRet = Transact(NULL, svc_, START_ABILITY_CALLBACK, &io, &reply, LITEIPC_FLAG_ONEWAY, NULL);
+ if (transRet != LITEIPC_OK) {
+ HILOG_ERROR(HILOG_MODULE_APP, "AbilityMgrFeature InnerSelfTransact fialed %{public}d\n", ret);
+ }
+ #ifdef __LINUX__
+ BinderRelease(svc_.ipcContext, svc_.handle);
+ #endif
+}
+
int32_t AbilityService::StartAbility(const Want *want)
{
if (want == nullptr || want->element == nullptr) {
@@ -138,7 +191,17 @@ int32_t AbilityService::StartAbility(const Want *want)
info->data = OHOS::Utils::Memdup(want->data, want->dataLength);
info->dataLength = want->dataLength;
- auto ret = StartAbility(info);
+
+ int32 ret = 0;
+ const char *deviceId = want->element->deviceId;
+ if (deviceId != nullptr && *deviceId != '\0') {
+ HILOG_ERROR(HILOG_MODULE_AAFWK, "StartRemoteAbility");
+ ret = StartRemoteAbility(want, nullptr);
+ } else {
+ ret = StartAbility(info);
+ HILOG_ERROR(HILOG_MODULE_AAFWK, "StartAbility");
+ }
+
AdapterFree(info->bundleName);
AdapterFree(info->path);
AdapterFree(info->data);