#ifndef __HW_USB_GADGET_H__
#define __HW_USB_GADGET_H__
-#include <hw/common.h>
+#include <stdint.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
+#include <hw/common.h>
-/**
- * The id of this device
- */
+/* The id of this device */
#define USB_GADGET_DEVICE_ID "usb_gadget"
-/**
- * The version of this device
- */
+/*The version of this device */
#define USB_GADGET_DEVICE_VERSION MAKE_VERSION(0,1)
+/*The default USB configuration */
+#define DEFAULT_VID 0x04e8
+#define DEFAULT_PID 0x6860
+#define DEFAULT_BCD_DEVICE 0x0100
+
+#define DEFAULT_LANG 0x409 /* US_en */
+#define DEFAULT_MANUFACTURER "Samsung"
+#define DEFAULT_PRODUCT "TIZEN"
+#define DEFAULT_SERIAL "01234TEST"
+
+#define DEFAULT_BMATTRIBUTES ((1 << 7) | (1 << 6))
+#define DEFAULT_MAX_POWER 500
+
typedef enum {
USB_FUNCTION_IDX_MTP = 0,
USB_FUNCTION_IDX_ACM = 1,
/*
- * legacy enable(usb plug) : enable gadget -> handler(1) -> ffs_service start -> service start
- * legacy disable(usb unplug) : service stop -> ffs_service stop -> handler(0) -> disable gadget
+ * legacy enable(usb plug) : enable gadget -> handler(1) -> service start
+ * legacy disable(usb unplug) : service stop -> handler(0) -> disable gadget
*
- * configfs init(booting) : ffs_service.socket start
- * configfs enable(usb plug)* : enable gadget -> handler(1) -> service start
- * configfs disable(usb unplug) : service stop -> handler(0) -> disable gadget -> ffs_service.service stop
- * configfs deinit : ffs_service.socket stop
+ * configfs init(booting) : service.socket start
+ * configfs enable(usb plug)* : enable gadget -> handler(1)
+ * configfs disable(usb unplug) : handler(0) -> disable gadget -> service.service stop
+ * configfs deinit : service.socket stop
*
- * Since ffs_service works by socket activation, it will be started automatically when data is enqueued to the usb socket.
- * So when enabling configfs gadget, it doesn't start ffs_service.
+ * Since functionfs of configfs works by socket activation,
+ * it will be started automatically when data is enqueued to the usb socket.
+ * So when enabling configfs gadget, it doesn't start the service for functionfs.
*/
struct usb_function {
int id;
const char *name;
const char *instance;
- const char *ffs_service; /* only used in configfs */
+ int is_functionfs;
const char *service;
void (*handler)(int enable);
-
- int (*clone)(struct usb_function *func, struct usb_function **_clone);
- void (*free_func)(struct usb_function *func);
};
struct usb_configuration_attributes {
struct usb_configuration {
struct usb_configuration_attributes attrs;
- struct usb_configuration_strings *strs;
+ struct usb_configuration_strings strs;
struct usb_function **funcs;
};
struct usb_gadget {
struct usb_gadget_attrs attrs;
- struct usb_gadget_strings *strs;
- struct usb_function **funcs;
+ struct usb_gadget_strings strs;
struct usb_configuration **configs;
};
struct usb_gadget_translator {
struct hw_common common;
- int (*id_to_gadget)(struct usb_gadget_id *gadget_id,
- struct usb_gadget **gadget);
-
+ int (*id_to_gadget)(struct usb_gadget_id *gadget_id, struct usb_gadget **gadget);
void (*cleanup_gadget)(struct usb_gadget *gadget);
};
-int simple_translator_open(struct hw_info *info,
- const char *id, struct hw_common **common);
+int simple_translator_open(struct hw_info *info, const char *id, struct hw_common **common);
int simple_translator_close(struct hw_common *common);
-extern struct usb_function *_available_funcs[];
+struct usb_function *find_usb_function_by_id(int id);
+struct usb_function *find_usb_function_by_name(const char *name);
+struct usb_function *find_usb_function_by_name_instance(const char *name, const char *instance);
#endif