Como que primero que nada no pondria
usb_init();
usb_task(); //Hace que se conecte y desconecte automaticamente
usb_wait_for_enumeration(); //Espera hasta que se reconoce el dispositivo
Dentro de la ejecucion del menu, sino que eso solamente lo haria al comienzo del programa y nunca mas, Ootro problema que se puede presentar aca es que nunca se conecte el USB y por lo tanto no salga mas del "usb_wait_for_enumeration()" lo cual se podria implementar una especie de timeout, o de deteccion si esta conectado o no el USB, para evitar ese problema.
Otro tema tambien es el usb_init el cual se detiene ahi esperando que se conecte, Asi que todo va a depender de como este hecho tu hardware, si se alimenta desde el USB de la maquina, entonces podes usar eso asi nomas y ponerlo al comienzo del main( antes del loop del menu ). Sino vas a tener que usar usb_init_cs(), mas definir un pin de sensado de que esta el bus (USB_CON_SENSE_PIN) y llamar continuamente a usb_task que es el encargado de que lo desconecte o no segun el pin ese
En el siguiente lugar:
while (usb_enumerated()){
if(usb_kbhit(1)) usb_get_packet(8, in_data,8);
if (in_data[0]=0x0A) usb_put_packet(8,out_data,8,USB_DTS_TOGGLE);
}
Tenes un while... por lo que obviamente de ahi no va a salir mas. podrias cambiarlo por un if asi de esa forma si no esta conectado el usb, no se pone a intentar recibir o enviar.
Y por ultimo me queda una duda.
Asi como esta el codigo y haciendo los cambios que dije, la unica forma que reciba y envie es cuendo entras en esa opcion, es decir que mientras estas en otras partes del "menu" eso no se va a ejecutar.
Asi que no se si queres realmente que eso suceda, o fue algo no pensado.
No habia respondido por que yo no conozco mucho de USB y menos de CCS, pero normalmente es C.