|  |  |  | @ -17,6 +17,10 @@ bool HIDKeyboard::sendReport(report_keyboard_t report) { | 
			
		
	
		
			
				
					|  |  |  |  |     return true; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | uint8_t HIDKeyboard::leds() { | 
			
		
	
		
			
				
					|  |  |  |  |     return led_state; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | bool HIDKeyboard::USBCallback_setConfiguration(uint8_t configuration) { | 
			
		
	
		
			
				
					|  |  |  |  |     if (configuration != DEFAULT_CONFIGURATION) { | 
			
		
	
		
			
				
					|  |  |  |  |         return false; | 
			
		
	
	
		
			
				
					|  |  |  | @ -228,29 +232,40 @@ bool HIDKeyboard::USBCallback_request() { | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Process class-specific requests
 | 
			
		
	
		
			
				
					|  |  |  |  | /*
 | 
			
		
	
		
			
				
					|  |  |  |  |     if (transfer->setup.bmRequestType.Type == CLASS_TYPE) | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         switch (transfer->setup.bRequest) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |              case SET_REPORT: | 
			
		
	
		
			
				
					|  |  |  |  |                 // First byte will be used for report ID
 | 
			
		
	
		
			
				
					|  |  |  |  |                 //outputReport.data[0] = transfer->setup.wValue & 0xff;
 | 
			
		
	
		
			
				
					|  |  |  |  |                 //outputReport.length = transfer->setup.wLength + 1;
 | 
			
		
	
		
			
				
					|  |  |  |  |                 outputReport.length = transfer->setup.wLength; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 //transfer->remaining = sizeof(outputReport.data) - 1;
 | 
			
		
	
		
			
				
					|  |  |  |  |                 //transfer->ptr = &outputReport.data[1];
 | 
			
		
	
		
			
				
					|  |  |  |  |                 transfer->remaining = sizeof(outputReport.data); | 
			
		
	
		
			
				
					|  |  |  |  |                 transfer->ptr = &outputReport.data[0]; | 
			
		
	
		
			
				
					|  |  |  |  |         switch (transfer->setup.bRequest) { | 
			
		
	
		
			
				
					|  |  |  |  |             case SET_REPORT: | 
			
		
	
		
			
				
					|  |  |  |  |                 // LED indicator
 | 
			
		
	
		
			
				
					|  |  |  |  |                 // TODO: check Interface and Report length?
 | 
			
		
	
		
			
				
					|  |  |  |  |                 // if (transfer->setup.wIndex == INTERFACE_KEYBOAD) { }
 | 
			
		
	
		
			
				
					|  |  |  |  |                 // if (transfer->setup.wLength == 1)
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 transfer->remaining = 1; | 
			
		
	
		
			
				
					|  |  |  |  |                 //transfer->ptr = ?? what ptr should be set when OUT(not used?)
 | 
			
		
	
		
			
				
					|  |  |  |  |                 transfer->direction = HOST_TO_DEVICE; | 
			
		
	
		
			
				
					|  |  |  |  |                 transfer->notify = true; | 
			
		
	
		
			
				
					|  |  |  |  |                 transfer->notify = true;    /* notify with USBCallback_requestCompleted */ | 
			
		
	
		
			
				
					|  |  |  |  |                 success = true; | 
			
		
	
		
			
				
					|  |  |  |  |             default: | 
			
		
	
		
			
				
					|  |  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | */ | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     return success; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void HIDKeyboard::USBCallback_requestCompleted(uint8_t * buf, uint32_t length) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     if (length > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |         CONTROL_TRANSFER *transfer = getTransferPtr(); | 
			
		
	
		
			
				
					|  |  |  |  |         if (transfer->setup.bmRequestType.Type == CLASS_TYPE) { | 
			
		
	
		
			
				
					|  |  |  |  |             switch (transfer->setup.bRequest) { | 
			
		
	
		
			
				
					|  |  |  |  |                 case SET_REPORT: | 
			
		
	
		
			
				
					|  |  |  |  |                     led_state = buf[0]; | 
			
		
	
		
			
				
					|  |  |  |  |                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                 default: | 
			
		
	
		
			
				
					|  |  |  |  |                     break; | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |