Add API - espp_client_resume()
authorSangchul Lee <sc11.lee@samsung.com>
Fri, 12 May 2023 03:57:49 +0000 (12:57 +0900)
committer이상철/Tizen Platform Lab(SR)/삼성전자 <sc11.lee@samsung.com>
Fri, 12 May 2023 09:17:31 +0000 (18:17 +0900)
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
src/client/espp_service_client.c
src/client/espp_service_client.h
src/client/espp_service_client_priv.h
src/client/espp_service_client_socket.c
src/common/espp_service_ipc.c
src/common/espp_service_ipc.h
src/daemon/espp_service_handler.c

index 3407b2e8561962ed51b7a3c4bcfd8673a3514bf4..7a3df6428ef6bed9776e8dccefe474f172b980b6 100644 (file)
@@ -312,6 +312,23 @@ int espp_client_pause(espp_h espp)
        return ESPP_CLIENT_ERROR_NONE;
 }
 
+int espp_client_resume(espp_h espp)
+{
+       espp_s *_espp = (espp_s *)espp;
+       g_autoptr(GMutexLocker) locker = NULL;
+
+       RET_VAL_IF(!espp, ESPP_CLIENT_ERROR_INVALID_PARAMETER, "espp is NULL");
+
+       locker = g_mutex_locker_new(&_espp->mutex);
+
+       if (espp_service_client_socket_request_resume(_espp) != 0)
+               return ESPP_CLIENT_ERROR_INVALID_OPERATION;
+
+       LOG_INFO("espp[%p] is resumed", espp);
+
+       return ESPP_CLIENT_ERROR_NONE;
+}
+
 int espp_client_prepare_async(espp_h espp)
 {
        espp_s *_espp = (espp_s *)espp;
index bee7d36521dbe7b9558607d498760d076cd4e40e..59ba5f39b291b0358d62ee509d74698e11ed4f2d 100644 (file)
@@ -385,6 +385,7 @@ int espp_client_close(espp_h espp);
  * @see espp_client_prepare_async()
  * @see espp_client_stop()
  * @see espp_client_pause()
+ * @see espp_client_resume()
  */
 int espp_client_start(espp_h espp);
 
@@ -402,6 +403,7 @@ int espp_client_start(espp_h espp);
  * @see espp_client_start()
  * @see espp_client_close()
  * @see espp_client_pause()
+ * @see espp_client_resume()
  */
 int espp_client_stop(espp_h espp);
 
@@ -417,10 +419,26 @@ int espp_client_stop(espp_h espp);
  * @post The state will be #ESPP_STATE_PAUSED.
  * @see espp_client_start()
  * @see espp_client_stop()
- * @see espp_client_close()
+ * @see espp_client_resume()
  */
 int espp_client_pause(espp_h espp);
 
+/**
+ * @brief Resumes the ESPP service client handle.
+ * @param[in] espp    ESPP service client handle
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #ESPP_CLIENT_ERROR_NONE Successful
+ * @retval #ESPP_CLIENT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #ESPP_CLIENT_ERROR_INVALID_OPERATION Invalid operation
+ * @pre The state must be #ESPP_STATE_PAUSED or #ESPP_STATE_PLAYING.
+ * @post The state will be #ESPP_STATE_PLAYING.
+ * @see espp_client_start()
+ * @see espp_client_stop()
+ * @see espp_client_pause()
+ */
+int espp_client_resume(espp_h espp);
+
 /**
  * @brief Prepares the ESPP service client handle asynchronously.
  * @param[in] espp    ESPP service client handle
index 2e39713edcb2efa75c28733b0bb7c0425ae1183d..9c8384c3690be9d111140cb6d7230ad03aabe569 100644 (file)
@@ -75,6 +75,7 @@ int espp_service_client_socket_request_close(espp_s *espp);
 int espp_service_client_socket_request_start(espp_s *espp);
 int espp_service_client_socket_request_stop(espp_s *espp);
 int espp_service_client_socket_request_pause(espp_s *espp);
+int espp_service_client_socket_request_resume(espp_s *espp);
 int espp_service_client_socket_request_prepare_async(espp_s *espp);
 int espp_service_client_socket_request_get_state(espp_s *espp, espp_state_e *state);
 int espp_service_client_socket_request_set_audio_stream_info(espp_s *espp, espp_audio_stream_info_s *info);
index 2ceaf9303f7b3a626db5508daab1fdd5b12539a2..2f396ef23d5644fc74b764282362f05ab62d01d0 100644 (file)
@@ -417,6 +417,25 @@ int espp_service_client_socket_request_pause(espp_s *espp)
        return 0;
 }
 
+int espp_service_client_socket_request_resume(espp_s *espp)
+{
+       espp_service_data_from_client_s data;
+       espp_service_data_from_server_s result;
+
+       ASSERT(espp);
+       RET_VAL_IF(espp->fd == -1, -1, "fd is -1");
+
+       FILL_SOCKET_MSG_REQUEST(data, ESPP_SERVICE_REQUEST_RESUME);
+       if (send_data(espp->fd, &data, &result) != 0)
+               return -1;
+
+       RET_VAL_IF_SERVER_RESULT_ERROR(result, -1);
+
+       LOG_DEBUG("espp[%p], fd[%d]", espp, espp->fd);
+
+       return 0;
+}
+
 int espp_service_client_socket_request_prepare_async(espp_s *espp)
 {
        espp_service_data_from_client_s data;
index 7c555059104c41c1b523679fefb448e653d84241..7443461c173e6ab3ae05af8607a3b64aaf9ff88f 100644 (file)
@@ -26,6 +26,7 @@ espp_service_ipc_data_s requests[] = {
        [ESPP_SERVICE_REQUEST_START] = { "Start", NULL },
        [ESPP_SERVICE_REQUEST_STOP] = { "Stop", NULL },
        [ESPP_SERVICE_REQUEST_PAUSE] = { "Pause", NULL },
+       [ESPP_SERVICE_REQUEST_RESUME] = { "Resume", NULL },
        [ESPP_SERVICE_REQUEST_PREPARE_ASYNC] = { "PrepareAsync", NULL },
        [ESPP_SERVICE_REQUEST_GET_STATE] = { "GetState", NULL },
        [ESPP_SERVICE_REQUEST_SET_AUDIO_STREAM_INFO] = { "SetAudioStreamInfo", "suiuuu" },
index ae3383a2fad6d2563f3efcb36247cb17d84230b4..faec96e08b6f2aade5ca035ee97997c388e81e66 100644 (file)
@@ -35,6 +35,7 @@ typedef enum {
        ESPP_SERVICE_REQUEST_START,
        ESPP_SERVICE_REQUEST_STOP,
        ESPP_SERVICE_REQUEST_PAUSE,
+       ESPP_SERVICE_REQUEST_RESUME,
        ESPP_SERVICE_REQUEST_PREPARE_ASYNC,
        ESPP_SERVICE_REQUEST_GET_STATE,
        ESPP_SERVICE_REQUEST_SET_AUDIO_STREAM_INFO,
index c1a06565fac1069ffa55206b7705c2cc8f1e59ee..7422bb4d4088da560e2b1894c9261824e46c7a93 100644 (file)
@@ -233,6 +233,28 @@ static void __handle_pause(handler_userdata_s *hdata, espp_service_data_from_cli
        result->ret = 0;
 }
 
+static void __handle_resume(handler_userdata_s *hdata, espp_service_data_from_client_s *data, espp_service_data_from_server_s *result)
+{
+       int ret;
+
+       ASSERT(hdata);
+       ASSERT(data);
+       ASSERT(result);
+       ASSERT(hdata->svc);
+       ASSERT(hdata->fd >= 0);
+
+       result->ret = -1;
+
+       RET_IF(!g_hash_table_lookup(hdata->svc->fd_table, hdata->key), "failed to g_hash_table_lookup(), key[%s]", hdata->key);
+
+       ret = esplusplayer_resume((esplusplayer_handle)hdata->espp);
+       RET_IF(ret != ESPLUSPLAYER_ERROR_TYPE_NONE, "failed to esplusplayer_resume(), ESPP[%p]", hdata->espp);
+
+       LOG_INFO("fd[%d], ESPP[%p]: esplusplayer_resume() success", hdata->fd, hdata->espp);
+
+       result->ret = 0;
+}
+
 static void __handle_prepare_async(handler_userdata_s *hdata, espp_service_data_from_client_s *data, espp_service_data_from_server_s *result)
 {
        int ret;
@@ -628,6 +650,7 @@ static func_handler handlers[] = {
        [ESPP_SERVICE_REQUEST_START] = __handle_start,
        [ESPP_SERVICE_REQUEST_STOP] = __handle_stop,
        [ESPP_SERVICE_REQUEST_PAUSE] = __handle_pause,
+       [ESPP_SERVICE_REQUEST_RESUME] = __handle_resume,
        [ESPP_SERVICE_REQUEST_PREPARE_ASYNC] = __handle_prepare_async,
        [ESPP_SERVICE_REQUEST_GET_STATE] = __handle_get_state,
        [ESPP_SERVICE_REQUEST_SET_AUDIO_STREAM_INFO] = __handle_set_audio_stream_info,