diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp
index a83d3d7..75da1e1 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp
@@ -16,20 +16,26 @@
 st_api_test_case at_api_testcases[] = 
 {
     {0,   "print_help"},
-    {1,   "poweralarm"},
-    {2,   "wakealarm"},
-    {3,   "cancel_wakealarm"},
-    {4,   "lynq_set_poweralarm"},
-    {5,   "lynq_set_wakealarm"},
+    {1,   "lynq_rtc_service_init"},
+    {2,   "poweralarm"},
+    {3,   "wakealarm"},
+    {4,   "cancel_wakealarm"},
+    {5,   "lynq_set_poweralarm"},
+    {6,   "lynq_set_wakealarm"},
+    {7,   "lynq_rtc_service_deinit"},
     {-1,    NULL}
 };
 
+int src_id = -1;
+typedef int (*lynq_wakealarm_add_cb)(unsigned int src_id, int rtc_id);
 
-int (*poweralarm)(char *buffer);
-int (*wakealarm)(char *buffer);
-int (*cancel_wakealarm)();
-int (*lynq_set_poweralarm)(unsigned long time_sec);
-int (*lynq_set_wakealarm)(unsigned long time_sec);
+int (*lynq_rtc_service_init)(void);
+int (*lynq_rtc_service_deinit)(void);
+int (*poweralarm)(char *buffer,int src_id);
+int (*wakealarm)(char *buffer,int srcid,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify);
+int (*cancel_wakealarm)(int src_id,int rtc_id);
+int (*lynq_set_poweralarm)(unsigned long time_sec,int src_id);
+int (*lynq_set_wakealarm)(unsigned long time_sec,int srcid,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify);
 
 void *dlHandle_poweralarm = NULL;
 
@@ -48,10 +54,16 @@
     }
 }
 
+int lynq_wakealarm_add_callback(unsigned int src_id, int rtc_id)
+{
+    printf("wake alarm callback test \n");
+    return 0;
+}
+
+
 int main(int argc,char *argv[])
 {
 
-    int flag = 0; 
     int cmdIdx = 0;
     printf("Enter main function\n");
     
@@ -63,38 +75,53 @@
         return -1;
     }
 
-    poweralarm = (int (*)(char *buffer))dlsym(dlHandle_poweralarm, "poweralarm");
+    poweralarm = (int (*)(char *buffer,int src_ids))dlsym(dlHandle_poweralarm, "poweralarm");
     if(poweralarm == NULL)
     {
         printf("poweralarm is null\n");
         return -1;
     }
 
-   wakealarm = (int (*)(char *buffer))dlsym(dlHandle_poweralarm, "wakealarm");
+    wakealarm = (int (*)(char *buffer,int srcid,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify))dlsym(dlHandle_poweralarm, "wakealarm");
     if(wakealarm == NULL)
     {
         printf("wakealarm is null\n");
         return -1;
     }
-    lynq_set_poweralarm = (int (*)(unsigned long))dlsym(dlHandle_poweralarm,"lynq_set_poweralarm");
+    lynq_set_poweralarm = (int (*)(unsigned long,int src_id))dlsym(dlHandle_poweralarm,"lynq_set_poweralarm");
     if(lynq_set_poweralarm == NULL)
     {
         printf("lynq_set_poweralarm is null\n");
         return -1;
     }
-    lynq_set_wakealarm = (int (*)(unsigned long))dlsym(dlHandle_poweralarm,"lynq_set_wakealarm");
+    lynq_set_wakealarm = (int (*)(unsigned long,int srcid,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify))dlsym(dlHandle_poweralarm,"lynq_set_wakealarm");
     if(lynq_set_wakealarm == NULL)
     {
         printf("lynq_set_wakealarm is null\n");
         return -1;
     }
     
-    cancel_wakealarm = (int (*)())dlsym(dlHandle_poweralarm, "cancel_wakealarm");
+    cancel_wakealarm = (int (*)(int src_id,int rtc_id))dlsym(dlHandle_poweralarm, "cancel_wakealarm");
      if(cancel_wakealarm == NULL)
     {
         printf("cancel_wakealarm is null\n");
         return -1;
     }
+
+    lynq_rtc_service_init = (int(*)())dlsym(dlHandle_poweralarm,"lynq_rtc_service_init");
+    if(lynq_rtc_service_init == NULL)
+    {
+        printf("lynq_rtc_service_init is null\n");
+        return -1;
+    }
+
+    lynq_rtc_service_deinit = (int (*)())dlsym(dlHandle_poweralarm,"lynq_rtc_service_deinit");
+    if(lynq_rtc_service_deinit == NULL)
+    {
+        printf("lynq_rtc_service_deinit is null \n");
+        return -1;
+    }
+    
     print_help();
     while(1)
     {
@@ -111,11 +138,16 @@
                 break;
             case 1:
                 {
+                    src_id = lynq_rtc_service_init();
+                    break;
+                }
+            case 2:
+                {
                     int ret = 0;
                     char tmp_time[32] = {0};
                     printf("Set poweralarm time,e.g: 60 (seconds)\n");
                     scanf("%s",tmp_time);
-                    ret = poweralarm(tmp_time);
+                    ret = poweralarm(tmp_time,src_id);
                     if(ret != 0)
                     {
                         printf("set poweralarm failed\n");
@@ -123,13 +155,15 @@
                     }
                 break;
                 }
-            case 2:
+            case 3:
                 {
                     int ret = 0;
                     char tmp_time[32]={0};
-                    printf("Set wakealarm time ,e.g: 60 (seconds)\n");
-                    scanf("%s",tmp_time);
-                    ret = wakealarm(tmp_time);
+                    int rtc_id = 0;
+                    printf("Set wakealarm time ,e.g: 60  1 (seconds)\n");
+                    scanf("%s%d",tmp_time,&rtc_id);
+                   
+                    ret = wakealarm(tmp_time,src_id,rtc_id,lynq_wakealarm_add_callback);
                     if(ret != 0)
                     {
                         printf("set wakealarm failed\n");
@@ -137,10 +171,13 @@
                     }
                     break;
                 }
-             case 3:
+             case 4:
                 {
                     int ret = 0;
-                    ret = cancel_wakealarm();
+                    int rtc_id = 0;
+                    printf("Please input you want cancel rtc timer rtc id\n");
+                    scanf("%d",&rtc_id);
+                    ret = cancel_wakealarm(src_id,rtc_id);
                     if(ret != 0)
                     {
                         printf("Cancel_wakealarm failed!!!");
@@ -148,13 +185,13 @@
                     }
                     break;
                 }
-             case 4:
+             case 5:
                 { 
                    int ret = 0; 
                    unsigned long time_sec = 0;
-                   printf("Input time_sec you want poweralarm,e.g:60 (seconds)\n");
+                   printf("Input time_sec you want poweralarm,e.g: 60 (seconds)\n");
                    scanf("%lu",&time_sec);
-                   ret =lynq_set_poweralarm(time_sec);
+                   ret =lynq_set_poweralarm(time_sec,src_id);
                    printf("ret is %d\n",ret);
                    if(ret != 0)
                    {
@@ -163,25 +200,40 @@
                    }
                    break;
                 }
-            case 5:
-                { 
+            case 6:
+                 { 
                    int ret = 0; 
                    unsigned long time_sec = 0;
-                   printf("Input time_sec you want wakealarm,e.g:60 (seconds)\n");
-                   scanf("%lu",&time_sec);
-                   ret =lynq_set_wakealarm(time_sec);
+                   int rtc_id;
+                   printf("Input time_sec you want wakealarm,e.g:60  1(seconds)\n");
+                   scanf("%lu%d",&time_sec,&rtc_id);
+                   ret =lynq_set_wakealarm(time_sec,src_id,rtc_id,lynq_wakealarm_add_callback);
                    if(ret != 0)
                    {
                         printf("lynq_set_wakealarm failed\n");
                         return -1;
                    }
                    break;
-               }
+                }
+            case 7:
+                {
+                    int ret  = -1;
+                    printf("rtc servce deinit !!!!!!!!!!!!");
+                    ret = lynq_rtc_service_deinit();
+                    if(ret != 0)
+                    {
+                        printf("lynq rtc service deinit failed \n");
+                        return -1;
+
+                    }
+                    break;
+                }
                 
             default:
                 break;
         }
     }
+
     return 0;
 
 }
diff --git a/cap/zx297520v3/src/lynq/lib/libpoweralarm/include/libpoweralarm.h b/cap/zx297520v3/src/lynq/lib/libpoweralarm/include/libpoweralarm.h
index 54191a6..4110fba 100755
--- a/cap/zx297520v3/src/lynq/lib/libpoweralarm/include/libpoweralarm.h
+++ b/cap/zx297520v3/src/lynq/lib/libpoweralarm/include/libpoweralarm.h
@@ -15,11 +15,17 @@
     extern "C" {
 #endif
 
-ssize_t poweralarm(char * buffer);
-ssize_t wakealarm(char *buffer);
-ssize_t cancel_wakealarm(void);
-int lynq_set_wakealarm(unsigned long  time_sec);
-int lynq_set_poweralarm(unsigned long time_sec);
+typedef int (*lynq_wakealarm_add_cb)(unsigned int src_id, int rtc_id);
+int lynq_rtc_service_init(void);
+int lynq_rtc_service_deinit(void);
+ssize_t poweralarm(char *buffer,int src_id);
+ssize_t wakealarm(char *buffer,int src_id,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify );
+ssize_t cancel_wakealarm(int src_id, int rtc_id);
+
+int lynq_set_wakealarm(unsigned long time_sec,int src_id,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify );
+int  lynq_set_poweralarm(unsigned long time_sec,int src_id);
+
+
 
 
 #ifdef __cplusplus
diff --git a/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp b/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp
index b3b7827..26f57be 100755
--- a/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp
+++ b/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp
@@ -30,10 +30,9 @@
 #define MAX_TIME    268435456
 
 
-static int wk_rtc_id = 1;
-static int wk_srcid = 0;
-
 typedef int (*sc_rtc_timer_exp_cb)(unsigned int src_id, int rtc_id);
+typedef int (*lynq_wakealarm_add_cb)(unsigned int src_id, int rtc_id);
+
 extern int sc_rtc_timer_init(void);
 extern int sc_rtc_timer_uninit(void );
 extern int sc_rtc_timer_add(int srcid, int rtc_id, unsigned long ulSec, sc_rtc_timer_exp_cb rtc_notify);
@@ -45,31 +44,67 @@
 
 extern int sc_rtc_add_poweroff_alarm(int srcid, int alarm_modid, int rtc_id, struct tm *utc_sec, sc_rtc_timer_exp_cb rtc_notify);
 
+
 /*****************************************
-* @brief:sc_rtc_timer_add_cb
-* @param count [IN]:src_id, rtc_id,
+* @brief:lynq_rtc_service_init
+* @param count [IN]:NA
 * @param sum [OUT]:NA
-* @return :0
+* @return :success src_id, failed -1
 * @todo:
 * @see:NA
 * @warning:
-******************************************/
-int sc_rtc_timer_add_cb(unsigned int src_id, int rtc_id)
+*****************************************/
+int lynq_rtc_service_init(void)
 {
+    int src_id = -1;
+    
+    LYLOGSET(LOG_INFO);
+    LYLOGEINIT(USER_LOG_TAG);
+    
+    src_id = sc_rtc_timer_init();
+    if (src_id <= 0)
+    {
+        LYERRLOG("rtc_timer_init fail!");
+        return -1;
+    }
+    return src_id;
+
+}
+
+/*****************************************
+* @brief:lynq_rtc_service_init
+* @param count [IN]:NA
+* @param sum [OUT]:NA
+* @return :success src_id, failed -1
+* @todo:
+* @see:NA
+* @warning:
+*****************************************/
+int lynq_rtc_service_deinit(void)
+{
+    int ret = -1;
+    ret = sc_rtc_timer_uninit();
+    if(ret != 0)
+    {
+        LYINFLOG("Deinit failed!!!");
+        return -1;
+    }
+    
     return 0;
+
 }
 
 
 /*****************************************
 * @brief:Set wakealarm time
-* @param count [IN]:buffer,
+* @param count [IN]:char *buffer,int src_id ...
 * @param sum [OUT]:NA
 * @return :success 0, failed -1
 * @todo:
 * @see:NA
 * @warning:
 ******************************************/
-ssize_t wakealarm(char *buffer)
+ssize_t wakealarm(char *buffer,int src_id,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify )
 {
     unsigned long  time_sec = 0;
     int ret = 0;
@@ -80,9 +115,6 @@
     tmp_time = time(NULL);
     localtime(&tmp_time);
     
-    LYLOGSET(LOG_INFO);
-    LYLOGEINIT(USER_LOG_TAG);
-    
     if(buffer == NULL)
     {
         LYINFLOG("Bad input parameter,exit!!!!");
@@ -115,15 +147,8 @@
     wake_arlarm = localtime(&tmp_time);
     
     LYINFLOG("Set  wakealarm   %lu seconds ",time_sec);
-    
-    wk_srcid = sc_rtc_timer_init();
-    if (wk_srcid <= 0)
-    {
-        LYINFLOG("rtc_timer_init fail!");
-        return -1;
-    }
-    
-    ret = sc_rtc_timer_add_utc(wk_srcid, wk_rtc_id,wake_arlarm,0,sc_rtc_timer_add_cb);
+
+    ret = sc_rtc_timer_add_utc(src_id, rtc_id,wake_arlarm,0,wakealarm_notify);
     if(ret < 0)
     {
         LYINFLOG("Add  rtc timer failed!!!!");
@@ -132,12 +157,6 @@
     
     LYINFLOG("Set wakealarm success !!!");
 
-    ret = sc_rtc_timer_uninit();
-    if(ret != 0)
-    {
-        LYINFLOG("Deinit failed");
-    }
-    
     return 0;
 
 }
@@ -145,28 +164,26 @@
 
 /*****************************************
 * @brief:set poweralarm time 
-* @param count [IN]:buffer,
+* @param count [IN]:char *buffer, int srcid
 * @param sum [OUT]:NA
 * @return :success 0, failed -1
 * @todo:
 * @see:NA
 * @warning:
 ******************************************/
-ssize_t poweralarm(char *buffer)
+ssize_t poweralarm(char *buffer,int src_id )
 {
-    int srcid = 0;
+
     unsigned long  time_sec = 0;
     int ret = 0;
     char *buf_bak = buffer;
-
+    
     int alarmid = 0;
     char username[8] = "user";
     time_t tmp_time = 0;
     struct tm *power_arlarm = NULL;
     tmp_time = time(NULL);
     localtime(&tmp_time);
-
-
     LYLOGSET(LOG_INFO);
     LYLOGEINIT(USER_LOG_TAG);
    
@@ -203,21 +220,16 @@
     }
     
     LYINFLOG("Set poweralarm %lu seconds",time_sec);
-    srcid = sc_rtc_timer_init();
-    if (srcid <= 0)
-    {
-        LYERRLOG("rtc_timer_init fail!");
-        return -1;
-    }
 
-    alarmid = sc_rtc_get_poweroff_alarm_modid(srcid, username);
+    
+    alarmid = sc_rtc_get_poweroff_alarm_modid(src_id, username);
     if(alarmid < 0)
     {
         LYERRLOG("Get poweroff alarm id failed !!!");
         return -1;
     }
 
-    ret = sc_rtc_add_poweroff_alarm(srcid, alarmid, 0, power_arlarm, sc_rtc_timer_add_cb);
+    ret = sc_rtc_add_poweroff_alarm(src_id, alarmid, 0, power_arlarm, NULL);
     if(ret < 0)
     {
         LYERRLOG("Set power alarm failed !!!");
@@ -225,37 +237,31 @@
     }
     LYINFLOG("Set power alarm success !!!!");
 
-    ret = sc_rtc_timer_uninit();
-    if(ret != 0)
-    {
-        LYINFLOG("Deinit failed!!!");
-    }
-    
     return 0;
     
 }
 
 /**********************************************
 * @brief:cancel_wakealarm,
-* @param count [IN]:void
+* @param count [IN]:int src_id, int rtc_id
 * @param sum [OUT]:NA
 * @return :success 0, failed -1
 * @todo:
 * @see:NA
 * @warning:
 ********************************************/
-ssize_t cancel_wakealarm(void)
+ssize_t cancel_wakealarm(int src_id, int rtc_id)
 {
     int ret = 0;
 
     LYINFLOG("Enter cancel_wakealarm ");
-    ret = sc_rtc_timer_del(wk_srcid, wk_rtc_id);
+    ret = sc_rtc_timer_del(src_id, rtc_id);
     if(ret < 0)
     {
         LYERRLOG("Del wakealarm failed!!!");
         return -1;
     }
-
+    LYINFLOG("Cancel success  ");
     return 0;
     
 }
@@ -263,19 +269,17 @@
 
 /*****************************************
 * @brief:lynq_set_poweralarm
-* @param count [IN]:unsigned long time_sec
+* @param count [IN]:unsigned long time_sec , int src_id
 * @param sum [OUT]:NA
 * @return :success 0, failed -1
 * @todo:
 * @see:NA
 * @warning:
 ******************************************/
-int  lynq_set_poweralarm(unsigned long time_sec)
+int  lynq_set_poweralarm(unsigned long time_sec,int src_id)
 {
 
     int ret = 0;
-    int srcid = 0;
-
     int alarmid = 0;
     char username[8] = "user";
     
@@ -283,14 +287,11 @@
     struct tm *power_arlarm = NULL;
     tmp_time = time(NULL);
     localtime(&tmp_time);
-    
 
+    
     tmp_time += time_sec;
     power_arlarm = localtime(&tmp_time);
-    
-    LYLOGSET(LOG_INFO);
-    LYLOGEINIT(USER_LOG_TAG);
-    
+   
     if(time_sec < MIN_TIME || time_sec > MAX_TIME )
     {
         LYERRLOG("Illeagle input: too large or too small !!!");
@@ -298,21 +299,16 @@
     }
 
     LYINFLOG("lynq_set_poweralarm  %lu seconds",time_sec);
-    srcid = sc_rtc_timer_init();
-    if (srcid <= 0)
-    {
-        LYERRLOG("rtc_timer_init fail!");
-        return -1;
-    }
 
-    alarmid = sc_rtc_get_poweroff_alarm_modid(srcid, username);
+
+    alarmid = sc_rtc_get_poweroff_alarm_modid(src_id, username);
     if(alarmid < 0)
     {
         LYERRLOG("Get poweroff alarm id failed !!!");
         return -1;
     }
 
-    ret = sc_rtc_add_poweroff_alarm(srcid, alarmid, 0, power_arlarm, sc_rtc_timer_add_cb);
+    ret = sc_rtc_add_poweroff_alarm(src_id, alarmid, 0, power_arlarm, NULL);
     if(ret < 0)
     {
         LYERRLOG("Set power alarm failed !!!");
@@ -321,12 +317,6 @@
     
     LYINFLOG("Set power alarm success !!!!");
     
-    ret = sc_rtc_timer_uninit();
-    if(ret != 0)
-    {
-        LYINFLOG("Deinit rtc_timer  failed!!!");
-    }
-    
     return 0;
     
 
@@ -335,14 +325,14 @@
 
 /*****************************************
 * @brief:lynq_set_wakealarm
-* @param count [IN]:unsigned long  time_sec
+* @param count [IN]:unsigned long  time_sec,....
 * @param sum [OUT]:NA
 * @return :success 0, failed -1
 * @todo:
 * @see:NA
 * @warning:
 ******************************************/
-int lynq_set_wakealarm(unsigned long  time_sec)
+int lynq_set_wakealarm(unsigned long time_sec,int src_id,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify )
 {
     int ret = 0;
     
@@ -350,10 +340,7 @@
     struct tm *wake_arlarm = NULL;
     tmp_time = time(NULL);
     localtime(&tmp_time);
-    
-    LYLOGSET(LOG_INFO);
-    LYLOGEINIT(USER_LOG_TAG);
-    
+        
     if(time_sec < MIN_TIME || time_sec > MAX_TIME)
     {
         LYERRLOG("Illeagle input: too large or too small !!!");
@@ -361,19 +348,12 @@
     }
     
     LYINFLOG("lynq_set_wakealarm   %lu seconds ",time_sec);
-    
-    wk_srcid = sc_rtc_timer_init();
-    if (wk_srcid <= 0)
-    {
-        LYINFLOG("rtc_timer_init fail!");
-        return -1;
-    }
-    
+
     tmp_time += time_sec;
     wake_arlarm = localtime(&tmp_time);
     LYINFLOG("Set  wakealarm   %lu seconds ",time_sec);
     
-    ret = sc_rtc_timer_add_utc(wk_srcid, wk_rtc_id,wake_arlarm,0,sc_rtc_timer_add_cb);
+    ret = sc_rtc_timer_add_utc(src_id, rtc_id,wake_arlarm,0,wakealarm_notify);
     if(ret < 0)
     {
         LYINFLOG("Add  rtc timer failed!!!!");
@@ -381,17 +361,12 @@
     }
     
     LYINFLOG("Set wakealarm success !!!");
-
-    ret = sc_rtc_timer_uninit();
-    if(ret != 0)
-    {
-        LYINFLOG("Deinit failed!!!");
-    }
     
     return 0;
 
 }
 
+
 DEFINE_LYNQ_LIB_LOG(LYNQ_POWERALARM)
 
 #ifdef __cplusplus
