From 841b74b9321f5ded659bc9e8ca3af23c7ec99824 Mon Sep 17 00:00:00 2001 From: HandsomeYingyan Date: Mon, 24 Jan 2022 21:59:51 +0800 Subject: [PATCH] allow to enable & disable gadget manually --- gc_generic.c | 31 +++++++++++++++++++++++++++++++ gc_generic.h | 6 ++++++ main.c | 12 ++++++++++-- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/gc_generic.c b/gc_generic.c index 2f44042..62fb416 100644 --- a/gc_generic.c +++ b/gc_generic.c @@ -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() { diff --git a/gc_generic.h b/gc_generic.h index 5aed116..f1a07b6 100644 --- a/gc_generic.h +++ b/gc_generic.h @@ -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); diff --git a/main.c b/main.c index e2bd2cd..5b401f9 100644 --- a/main.c +++ b/main.c @@ -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 [configs ...] Add a gadget function. \n"); - printf("-d Delete a gadget function by name in list (-l). \n"); + printf("-r 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");