int receive_juno_response(u8 type, u8 *buffer, u8 *nbytes, u8 data) { int ret = 0; switch ( type ) { case SIMPLE: spi_rcv_packet(buffer, nbytes); ret = cres_simple((st_simple *)buffer, *nbytes); break; case REPORT_REGISTER_BIT: spi_rcv_packet(buffer, nbytes); ret = cres_report_register_bit( (st_report_register_bit *)buffer, *nbytes, data); break; case REPORT_REGISTER: spi_rcv_packet(buffer, nbytes); ret = cres_report_register((st_report_register *)buffer, *nbytes, data); break; case REPORT_BLOCK: spi_rcv_packet(buffer, nbytes); ret = cres_report_block((st_report_block *)buffer, *nbytes); break; case ASYNC_REPORT: spi_rcv_packet(buffer, nbytes); if ( report_type(buffer) == POINTING_REPORT ) ret = cres_pointing_report((st_pointing_report *)buffer, *nbytes); else if ( report_type(buffer) == KEYBOARD_REPORT ) ret = cres_keyboard_report((st_keyboard_report *)buffer); else ret = -1; break; default: printk("Unrecognized command: %d\n", type); } return ret; }
report_type operator()( storage_type & carrier_param, model_type input_param )const { dynamic_cast< base_type & >( *carrier_param ) = input_param ; return report_type( true ); }