allow to enable & disable gadget manually

This commit is contained in:
HandsomeYingyan
2022-01-24 21:59:51 +08:00
parent 00d525d32c
commit 841b74b932
3 changed files with 47 additions and 2 deletions

View File

@@ -123,6 +123,37 @@ int gc_remove_all_gadgets(gc_generic_info info)
return GC_SUCCESS;
}
int gc_enable_gadget(gc_generic_info info)
{
if(gc_init(info) == NULL)
return GC_FAILED;
usbg_gadget *g;
g = usbg_get_first_gadget(state);
if(usbg_enable_gadget(g, DEFAULT_UDC) != USBG_SUCCESS){
fprintf(stderr,"failed to enable gadget! \n");
gc_clean();
return GC_FAILED;
}
return GC_SUCCESS;
}
int gc_disable_gadget(gc_generic_info info)
{
if(gc_init(info) == NULL)
return GC_FAILED;
usbg_gadget *g;
g = usbg_get_first_gadget(state);
if(usbg_disable_gadget(g) != USBG_SUCCESS){
fprintf(stderr,"failed to disable gadget! \n");
gc_clean();
return GC_FAILED;
}
return GC_SUCCESS;
}
/* id generate helper */
static int gc_get_functions()
{

View File

@@ -56,6 +56,12 @@ int gc_remove_all_gadgets(gc_generic_info info);
/* 销毁usb gadget */
void gc_clean();
/* 手动开启gadget */
int gc_enable_gadget(gc_generic_info info);
/* 手动关闭gadget */
int gc_disable_gadget(gc_generic_info info);
/* 得到config */
usbg_config *gc_get_config(usbg_gadget *gadget);

12
main.c
View File

@@ -43,8 +43,10 @@ static void print_help()
printf("-h Show this help. \n");
printf("-l Show active gadget functions. \n");
printf("-c Clean all active gadget. \n");
printf("-e Enable all active gadget. \n");
printf("-d Disable all active gadget. \n");
printf("-a <function> [configs ...] Add a gadget function. \n");
printf("-d <name> Delete a gadget function by name in list (-l). \n");
printf("-r <name> Remove a gadget function by name in list (-l). \n");
}
int main(int argc,char *argv[])
@@ -70,6 +72,12 @@ int main(int argc,char *argv[])
} else if(strcmp(argv[1],"-l") == 0) {
/* list gadget functions */
gc_show_list();
} else if(strcmp(argv[1],"-e") == 0) {
/* enable gadget functions */
gc_enable_gadget(info);
} else if(strcmp(argv[1],"-d") == 0) {
/* disable gadget functions */
gc_disable_gadget(info);
} else if(strcmp(argv[1],"-a") == 0) {
/* add a gadget function */
if(!is_root()){
@@ -113,7 +121,7 @@ int main(int argc,char *argv[])
if(gc_acm_create(argc,argv,info) == GC_FAILED)
return -1;
}
} else if(strcmp(argv[1],"-d") == 0) {
} else if(strcmp(argv[1],"-r") == 0) {
/* delete a gadget function */
if(argc < 3) {
printf("You need a gadget to remove ! \n");