usb_gadget: apply next HAL architecture (hal api + backend)
[platform/adaptation/tw3/device-manager-plugin-tw3.git] / hw / usb_gadget / usb_gadget.c
index 2bf9d96..83b6996 100644 (file)
  * limitations under the License.
  */
 
-#include <hw/usb_gadget.h>
-
-HARDWARE_MODULE_STRUCTURE = {
-       .magic = HARDWARE_INFO_TAG,
-       .hal_version = HARDWARE_INFO_VERSION,
-       .device_version = USB_GADGET_DEVICE_VERSION,
-       .id = USB_GADGET_DEVICE_ID,
-       .name = "simple_translator",
-       .open = simple_translator_open,
-       .close = simple_translator_close,
+#include <errno.h>
+#include <stdlib.h>
+
+#include <hal/hal-common-interface.h>
+#include <hal/device/hal-common-interface.h>
+#include <hal/device/hal-usb_gadget-interface.h>
+
+#include "common.h"
+
+static int usb_gadget_init(void **data)
+{
+       hal_backend_usb_gadget_funcs *usb_gadget_funcs;
+
+       if (!data)
+               return -EINVAL;
+
+       usb_gadget_funcs = calloc(1, sizeof(hal_backend_usb_gadget_funcs));
+       if (!usb_gadget_funcs)
+               return -ENOMEM;
+
+       // usb_gadget_translator
+       if (simple_translator_open(usb_gadget_funcs)) {
+               _E("No USB gadget translator");
+               goto error_translator_open;
+       }
+
+       // usb_client
+       if (hw_cfs_gadget_open(usb_gadget_funcs)) {
+               _I("No USB client");
+               goto error_gadget_open;
+       }
+
+       *data = (void *)usb_gadget_funcs;
+
+       return 0;
+
+error_gadget_open:
+       simple_translator_close(usb_gadget_funcs);
+
+error_translator_open:
+       free(usb_gadget_funcs);
+
+       return -ENODEV;
+}
+
+static int usb_gadget_exit(void *data)
+{
+       hal_backend_usb_gadget_funcs *usb_gadget_funcs = (hal_backend_usb_gadget_funcs *)data;
+
+       if (usb_gadget_funcs) {
+               hw_cfs_gadget_close(usb_gadget_funcs);
+               simple_translator_close(usb_gadget_funcs);
+               free(usb_gadget_funcs);
+       }
+
+       return 0;
+}
+
+hal_backend EXPORT hal_backend_device_usb_gadget_data = {
+       .name = "usb_gadget",
+       .vendor = "R800",
+       .abi_version = HAL_ABI_VERSION_TIZEN_6_5,
+       .init = usb_gadget_init,
+       .exit = usb_gadget_exit,
 };