apply st-master/st-resource 57/209157/2
authorJeonghoon Park <jh1979.park@samsung.com>
Wed, 3 Jul 2019 05:02:44 +0000 (14:02 +0900)
committerJeonghoon Park <jh1979.park@samsung.com>
Wed, 3 Jul 2019 08:17:15 +0000 (17:17 +0900)
Change-Id: I977b8966b0d5971ef19bb156e269008a907ac092

src/controller.c

index ee14ec5..8cccf5c 100644 (file)
 
 #include "log.h"
 #include "resource.h"
+#include "sensor-data.h"
 
 #define SENSORING_TIME_INTERVAL (0.5)
 
 // For using SmartThings SDK
 #define USE_ST_SDK
-#ifdef USE_ST_SDK
-#include "smartthings.h"
-#include "smartthings_resource.h"
-#include "smartthings_payload.h"
-
-// Certification file and private key file stored in the resource directory
-#define CERT_FILE "certificate.pem"
-#define PRIV_FILE "privatekey.der"
 
-// URI and key information
-#define SENSOR_LIDAR_URI "/capability/illuminanceMeasurement/main/0"
-#define SENSOR_LIDAR_KEY "illuminance"
+#ifdef USE_ST_SDK
+#include "st-master.h"
+#include "st-resource.h"
 #endif /* USE_ST_SDK */
 
 typedef struct app_data_s {
        Ecore_Timer *getter_timer;
-       unsigned int lidar_data;
-#ifdef USE_ST_SDK
-       smartthings_h st_master_h;
-       smartthings_resource_h st_res_h;
-       smartthings_status_e status;
-#endif /* USE_ST_SDK */
+       sensor_data *lidar_data;
 } app_data;
 
-#ifdef USE_ST_SDK
-static const char * _resource_error_to_str(smartthings_resource_error_e error)
-{
-       const char *err_str = NULL;
-
-       switch (error) {
-       case SMARTTHINGS_RESOURCE_ERROR_NONE:
-               err_str = "SMARTTHINGS_RESOURCE_ERROR_NONE";
-               break;
-       case SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER:
-               err_str = "SMARTTHINGS_RESOURCE_ERROR_INVALID_PARAMETER";
-               break;
-       case SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY:
-               err_str = "SMARTTHINGS_RESOURCE_ERROR_OUT_OF_MEMORY";
-               break;
-       case SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED:
-               err_str = "SMARTTHINGS_RESOURCE_ERROR_PERMISSION_DENIED";
-               break;
-       case SMARTTHINGS_RESOURCE_ERROR_NO_DATA:
-               err_str = "SMARTTHINGS_RESOURCE_ERROR_NO_DATA";
-               break;
-       case SMARTTHINGS_RESOURCE_ERROR_NOT_SUPPORTED:
-               err_str = "SMARTTHINGS_RESOURCE_ERROR_NOT_SUPPORTED";
-               break;
-       case SMARTTHINGS_RESOURCE_ERROR_OPERATION_FAILED:
-               err_str = "SMARTTHINGS_RESOURCE_ERROR_NOT_SUPPORTED";
-               break;
-       case SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE:
-               err_str = "SMARTTHINGS_RESOURCE_ERROR_SERVICE_UNAVAILABLE";
-               break;
-       default:
-               err_str = "Unknown error";
-               break;
-       }
-
-       return err_str;
-}
-#endif
-
-
 static Eina_Bool _lidar_value_read_cb(void *data)
 {
        app_data *ad = data;
@@ -107,373 +55,11 @@ static Eina_Bool _lidar_value_read_cb(void *data)
        resource_write_led(5, 0);
 
        _D("distance : %u cm", lidar_value);
-       ad->lidar_data = lidar_value;
-
-#ifdef USE_ST_SDK
-       int error = SMARTTHINGS_RESOURCE_ERROR_NONE;
-       smartthings_payload_h resp_payload = NULL;
-
-       if (ad->status != SMARTTHINGS_STATUS_REGISTERED_TO_CLOUD)
-               return ECORE_CALLBACK_RENEW;
-
-       error = smartthings_payload_create(&resp_payload);
-       if (error != SMARTTHINGS_RESOURCE_ERROR_NONE || !resp_payload) {
-               _E("smartthings_payload_create() failed, [%s]",
-                       _resource_error_to_str(error));
-               return ECORE_CALLBACK_CANCEL;
-       }
-
-       error = smartthings_payload_set_double(resp_payload, SENSOR_LIDAR_KEY, ad->lidar_data);
-       if (error != SMARTTHINGS_RESOURCE_ERROR_NONE)
-               _E("smartthings_payload_set_bool() failed, [%s]",
-                       _resource_error_to_str(error));
-
-       error = smartthings_resource_notify(ad->st_res_h, SENSOR_LIDAR_URI, resp_payload);
-       if (error != SMARTTHINGS_RESOURCE_ERROR_NONE)
-               _E("smartthings_resource_notify() failed, [%s]",
-                       _resource_error_to_str(error));
-
-       if (smartthings_payload_destroy(resp_payload))
-               _E("smartthings_payload_destroy() failed");
-#endif
+       sensor_data_set_uint(ad->lidar_data, lidar_value);
 
        return ECORE_CALLBACK_RENEW;
 }
 
-#ifdef USE_ST_SDK
-/* SmartThings resource functions */
-static bool _handle_get_lidar(smartthings_payload_h resp_payload, void *user_data)
-{
-       int error = SMARTTHINGS_RESOURCE_ERROR_NONE;
-       app_data *ad = user_data;
-
-       retv_if(!ad, false);
-
-       _D("Received a GET request for LIDAR");
-
-       error = smartthings_payload_set_double(resp_payload, SENSOR_LIDAR_KEY, ad->lidar_data);
-       if (error != SMARTTHINGS_RESOURCE_ERROR_NONE)
-               _E("smartthings_payload_set_bool() failed, [%s]",
-                       _resource_error_to_str(error));
-
-       return true;
-}
-
-static void _request_cb(smartthings_resource_h handle, int req_id,
-       const char *uri, smartthings_resource_req_type_e req_type,
-       smartthings_payload_h payload, void *user_data)
-{
-       smartthings_payload_h resp_payload = NULL;
-       bool result = false;
-       int error = SMARTTHINGS_RESOURCE_ERROR_NONE;
-
-       _D("request on %s, type[%d], id[%d]", uri, req_type, req_id);
-
-       error = smartthings_payload_create(&resp_payload);
-       if (error != SMARTTHINGS_RESOURCE_ERROR_NONE || ! resp_payload)
-               _E("smartthings_payload_create() failed, [%s]",
-                       _resource_error_to_str(error));
-
-       if (req_type == SMARTTHINGS_RESOURCE_REQUEST_GET) {
-               if (!strncmp(uri, SENSOR_LIDAR_URI, strlen(SENSOR_LIDAR_URI)))
-                       result = _handle_get_lidar(resp_payload, user_data);
-               else
-                       _E("No matching Resource uri to get");
-       } else if (req_type == SMARTTHINGS_RESOURCE_REQUEST_SET) {
-               _E("No matching Resource uri to get");
-       } else {
-               _E("Invalid request type - %d", req_type);
-               smartthings_payload_destroy(resp_payload);
-               return;
-       }
-
-       error = smartthings_resource_send_response(handle, req_id, uri, resp_payload, result);
-       if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
-                       _E("smartthings_resource_send_response() failed, [%s]",
-                               _resource_error_to_str(error));
-                       smartthings_payload_destroy(resp_payload);
-                       return;
-       }
-
-       if (req_type == SMARTTHINGS_RESOURCE_REQUEST_SET) {
-                       error = smartthings_resource_notify(handle, uri, resp_payload);
-                       if (error != SMARTTHINGS_RESOURCE_ERROR_NONE)
-                               _E("smartthings_resource_notify() failed, [%s]",
-                                               _resource_error_to_str(error));
-       }
-
-       if (smartthings_payload_destroy(resp_payload))
-               _E("smartthings_payload_destroy() failed");
-
-       return;
-}
-
-static void _resource_connection_status_cb(
-       smartthings_resource_h handle,
-       smartthings_resource_connection_status_e status, void *user_data)
-{
-       app_data *ad = user_data;
-
-       _D("status=[%d]", status);
-
-       ret_if(!ad);
-
-       if (status == SMARTTHINGS_RESOURCE_CONNECTION_STATUS_CONNECTED) {
-               int error = SMARTTHINGS_RESOURCE_ERROR_NONE;
-               error = smartthings_resource_set_request_cb(handle, _request_cb, ad);
-               if (error != SMARTTHINGS_RESOURCE_ERROR_NONE) {
-                       _E("smartthings_resource_set_request_cb() is failed");
-                       return;
-               }
-       } else {
-               _E("connection failed");
-       }
-}
-
-static int _init_resource(app_data *ad)
-{
-       smartthings_resource_h st_res_h = NULL;
-       int error = 0;
-
-       retv_if(!ad, -1);
-       if (ad->st_res_h) {
-               _I("Already initialized!");
-               return 0;
-       }
-
-       error = smartthings_resource_initialize(&st_res_h,
-                               _resource_connection_status_cb, ad);
-       if (error) {
-               _E("smartthings_resource_initialize() is failed, [%s]",
-                       _resource_error_to_str(error));
-               return -1;
-       }
-
-       ad->st_res_h = st_res_h;
-
-       return 0;
-}
-
-static int _fini_resource(app_data *ad)
-{
-       retv_if(!ad, -1);
-
-       if (!ad->st_res_h)
-               return 0;
-
-       smartthings_resource_unset_request_cb(ad->st_res_h);
-       smartthings_resource_deinitialize(ad->st_res_h);
-
-       ad->st_res_h = NULL;
-
-       return 0;
-}
-
-/* SmartThings master functions */
-static const char *__master_error_to_str(smartthings_error_e error)
-{
-       const char *err_str = NULL;
-
-       switch (error) {
-       case SMARTTHINGS_ERROR_NONE:
-               err_str = "SMARTTHINGS_ERROR_NONE";
-               break;
-       case SMARTTHINGS_ERROR_INVALID_PARAMETER:
-               err_str = "SMARTTHINGS_ERROR_INVALID_PARAMETER";
-               break;
-       case SMARTTHINGS_ERROR_OUT_OF_MEMORY:
-               err_str = "SMARTTHINGS_ERROR_OUT_OF_MEMORY";
-               break;
-       case SMARTTHINGS_ERROR_PERMISSION_DENIED:
-               err_str = "SMARTTHINGS_ERROR_PERMISSION_DENIED";
-               break;
-       case SMARTTHINGS_ERROR_NO_DATA:
-               err_str = "SMARTTHINGS_ERROR_NO_DATA";
-               break;
-       case SMARTTHINGS_ERROR_NOT_SUPPORTED:
-               err_str = "SMARTTHINGS_ERROR_NOT_SUPPORTED";
-               break;
-       case SMARTTHINGS_ERROR_OPERATION_FAILED:
-               err_str = "SMARTTHINGS_ERROR_OPERATION_FAILED";
-               break;
-       case SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE:
-               err_str = "SMARTTHINGS_ERROR_SERVICE_UNAVAILABLE";
-               break;
-       default:
-               err_str = "Unknown error";
-               break;
-       }
-
-       return err_str;
-}
-
-static void _user_confirm_cb(smartthings_h handle, void *user_data)
-{
-       if (smartthings_send_user_confirm(handle, true) != 0)
-               _E("smartthings_send_user_confirm() is failed");
-}
-
-static void _reset_confirm_cb(smartthings_h handle, void *user_data)
-{
-       if (smartthings_send_reset_confirm(handle, true) != 0)
-               _E("smartthings_send_reset_confirm() is failed");
-}
-
-static void _reset_result_cb(smartthings_h handle, bool result, void *user_data)
-{
-       _I("reset result = [%d]", result);
-}
-
-static void _thing_status_cb(
-               smartthings_h handle, smartthings_status_e status, void *user_data)
-{
-       app_data *ad = user_data;
-       _D("status: [%d]", status);
-       ad->status = status;
-}
-
-static void _things_connection_status_cb(
-               smartthings_h handle, smartthings_connection_status_e status,
-               void *user_data)
-{
-       _D("status = [%d]", status);
-
-       if (status == SMARTTHINGS_CONNECTION_STATUS_CONNECTED) {
-               int err = 0;
-               bool is_es_completed = false;
-               const char* dev_name = "smart-ruler-app";
-               int wifi_mode = SMARTTHINGS_WIFI_MODE_11B
-                       | SMARTTHINGS_WIFI_MODE_11G
-                       | SMARTTHINGS_WIFI_MODE_11N;
-
-               int wifi_freq = SMARTTHINGS_WIFI_FREQ_24G | SMARTTHINGS_WIFI_FREQ_5G;
-
-               err = smartthings_set_device_property(
-                                       handle, dev_name, wifi_mode, wifi_freq);
-               if (err) {
-                       _E("smartthings_set_device_property() is failed, [%s]",
-                               __master_error_to_str(err));
-                       return;
-               }
-
-               err = smartthings_set_certificate_file(handle, CERT_FILE, PRIV_FILE);
-               if (err) {
-                       _E("smartthings_set_certificate_file() is failed, [%s]",
-                               __master_error_to_str(err));
-                       return;
-               }
-
-               err = smartthings_set_user_confirm_cb(handle, _user_confirm_cb, NULL);
-               if (err) {
-                       _E("smartthings_set_user_confirm_cb() is failed, [%s]",
-                               __master_error_to_str(err));
-                       return;
-               }
-
-               err = smartthings_set_reset_confirm_cb(handle, _reset_confirm_cb, NULL);
-               if (err) {
-                       _E("smartthings_set_reset_confirm_cb() is failed, [%s]",
-                               __master_error_to_str(err));
-                       return;
-               }
-
-               err = smartthings_set_reset_result_cb(handle, _reset_result_cb, NULL);
-               if (err) {
-                       _E("smartthings_set_reset_result_cb() is failed, [%s]",
-                               __master_error_to_str(err));
-                       return;
-               }
-
-               err = smartthings_set_status_changed_cb(handle, _thing_status_cb, user_data);
-               if (err) {
-                       _E("smartthings_set_status_changed_callback() is failed, [%s]",
-                               __master_error_to_str(err));
-                       return;
-               }
-
-               err = smartthings_start(handle);
-               if (err) {
-                       _E("smartthings_start() is failed, [%s]",
-                               __master_error_to_str(err));
-                       return;
-               }
-
-               err = smartthings_get_easysetup_status(handle, &is_es_completed);
-               if (err) {
-                       _E("smartthings_get_easysetup_status() is failed, [%s]",
-                               __master_error_to_str(err));
-                       return;
-               }
-
-               if (is_es_completed == true) {
-                       _I("Easysetup is already done");
-                       return;
-               }
-
-               _I("Easysetup is starting now");
-               err = smartthings_start_easysetup(handle);
-               if (err) {
-                       _E("smartthings_start_easysetup() is failed, [%s]",
-                               __master_error_to_str(err));
-                       smartthings_stop(handle);
-                       return;
-               }
-       } else {
-                       _E("connection failed");
-       }
-}
-
-static int _init_master(app_data *ad)
-{
-       int err = 0;
-       smartthings_h st_handle = NULL;
-
-       retv_if(!ad, -1);
-
-       if (ad->st_master_h) {
-               _I("Already initialized!");
-               return 0;
-       }
-
-       err = smartthings_initialize(&st_handle, _things_connection_status_cb, ad);
-       if (err) {
-               _E("smartthings_initialize() is failed, [%s]",
-                       __master_error_to_str(err));
-               return -1;
-       }
-
-       ad->st_master_h = st_handle;
-
-       return 0;
-}
-
-int _fini_master(app_data *ad)
-{
-       retv_if(!ad, -1);
-
-       if (!ad->st_master_h) {
-               _I("handle is already NULL");
-               return 0;
-       }
-
-       smartthings_unset_user_confirm_cb(ad->st_master_h);
-       smartthings_unset_reset_confirm_cb(ad->st_master_h);
-       smartthings_unset_reset_result_cb(ad->st_master_h);
-       smartthings_unset_status_changed_cb(ad->st_master_h);
-
-       smartthings_stop_easysetup(ad->st_master_h);
-       smartthings_stop(ad->st_master_h);
-
-       if (smartthings_deinitialize(ad->st_master_h) != 0)  {
-               _E("smartthings_deinitialize() is failed");
-               return -1;
-       }
-       ad->st_master_h = NULL;
-
-       return 0;
-}
-#endif /* USE_ST_SDK */
-
 static void service_app_control(app_control_h app_control, void *user_data)
 {
        app_data *ad = user_data;
@@ -492,12 +78,15 @@ static bool service_app_create(void *data)
 {
        app_data *ad = data;
 
+       ad->lidar_data = sensor_data_new(SENSOR_DATA_TYPE_UINT);
+       retv_if(!ad->lidar_data, false);
+
 #ifdef USE_ST_SDK
-       if (_init_master(ad))
+       if (st_master_create())
                return false;
 
-       if (_init_resource(ad)) {
-               _fini_master(ad);
+       if (st_resource_create(ad->lidar_data)) {
+               st_master_destroy();
                return false;
        }
 #endif
@@ -510,12 +99,17 @@ static void service_app_terminate(void *data)
        app_data *ad = data;
 
 #ifdef USE_ST_SDK
-       _fini_resource(ad);
-       _fini_master(ad);
+       st_resource_destroy();
+       st_master_destroy();
 #endif
 
-       if (ad->getter_timer)
+       sensor_data_free(ad->lidar_data);
+       ad->lidar_data = NULL;
+
+       if (ad->getter_timer) {
                ecore_timer_del(ad->getter_timer);
+               ad->getter_timer = NULL;
+       }
 
        resource_close_all();
 }
@@ -527,12 +121,7 @@ int main(int argc, char* argv[])
        service_app_lifecycle_callback_s event_callback;
 
        ad.getter_timer = NULL;
-       ad.lidar_data = 0;
-#ifdef USE_ST_SDK
-       ad.st_master_h = NULL;
-       ad.st_res_h = NULL;
-       ad.status = 0;
-#endif
+       ad.lidar_data = NULL;
 
        event_callback.create = service_app_create;
        event_callback.terminate = service_app_terminate;