// interface_test_main.c // BCD -- Ben Hutton, Chris Leary, Devrin Talen // A test program for the SIE. #include "usb_client.h" #define debug(string) sprintf(print_buffer, string); send_debug() void test_hc_sie_interaction() { HC_T *hc; SIE_T *sie; uint8_t iter; // transaction-specific variables STANDARD_REQUEST_T *request; TRANSACTION_T *trans1, *trans2; // create an SIE and a HC hc = HostController(); sie = SerialInterfaceEngine(); hc_bind_sie(hc, sie); // hold reset sie_reset(sie); for (iter = 0; iter < 100; iter++) _delay_ms(10); sie_idle(sie); // Ask for the first 8 bytes of the Device Descriptor request = standard_request_from_template(GET_DESCRIPTOR, DEVICE); request->wValueHi = DEVICE; request->wLength = 64; execute_standard_request(request, sie, hc, 0, 0, NULL, 1); // set address to 1 request = standard_request_from_template(SET_ADDRESS, DEVICE); request->wValueLo = 1; execute_standard_request(request, sie, hc, 0, 0, NULL, NULL); // Ask for the first 18 bytes of the Device Descriptor request = standard_request_from_template(GET_DESCRIPTOR, DEVICE); request->wValueHi = DEVICE; request->wLength = 0x12; execute_standard_request(request, sie, hc, 1, 0, NULL, NULL); // Ask for the first 9 bytes of the Device Descriptor request = standard_request_from_template(GET_DESCRIPTOR, DEVICE); request->wValueHi = CONFIGURATION; request->wLength = 0x9; execute_standard_request(request, sie, hc, 1, 0, NULL, NULL); // Ask for a Report Descriptor request = hid_request_from_template(GET_REPORT); request->wValueHi = 1; request->wIndex = 0; request->wLength = 0x8; execute_standard_request(request, sie, hc, 1, 0, NULL, NULL); // set address to 1 request = standard_request_from_template(SET_CONFIGURATION, DEVICE); request->wValueLo = 1; execute_standard_request(request, sie, hc, 1, 0, NULL, NULL); trans1 = Transaction(INTERRUPT, TokenPacket(IN, 1, 1), DataPacket(DATA0, 0)); trans2 = Transaction(INTERRUPT, TokenPacket(IN, 1, 1), DataPacket(DATA0, 0)); hc_push_transaction(hc, trans1); hc_push_transaction(hc, trans2); hc_do_transaction(hc); hc_do_transaction(hc); DestroyWholeTransaction(trans1); DestroyWholeTransaction(trans2); trans1 = Transaction(INTERRUPT, TokenPacket(IN, 1, 1), DataPacket(DATA0, 0)); trans2 = Transaction(INTERRUPT, TokenPacket(IN, 1, 1), DataPacket(DATA0, 0)); hc_push_transaction(hc, trans1); hc_push_transaction(hc, trans2); hc_do_transaction(hc); hc_do_transaction(hc); DestroyWholeTransaction(trans1); DestroyWholeTransaction(trans2); trans1 = Transaction(INTERRUPT, TokenPacket(IN, 1, 1), DataPacket(DATA0, 0)); trans2 = Transaction(INTERRUPT, TokenPacket(IN, 1, 1), DataPacket(DATA0, 0)); hc_push_transaction(hc, trans1); hc_push_transaction(hc, trans2); hc_do_transaction(hc); hc_do_transaction(hc); DestroyWholeTransaction(trans1); DestroyWholeTransaction(trans2); trans1 = Transaction(INTERRUPT, TokenPacket(IN, 1, 1), DataPacket(DATA0, 0)); trans2 = Transaction(INTERRUPT, TokenPacket(IN, 1, 1), DataPacket(DATA0, 0)); hc_push_transaction(hc, trans1); hc_push_transaction(hc, trans2); hc_do_transaction(hc); hc_do_transaction(hc); DestroyWholeTransaction(trans1); DestroyWholeTransaction(trans2); debug("Program finished.\n"); debug("-----------------\n"); debug("-----------------\n\n\n"); } int main() { // initialization DDRA=0x0f; DDRC=0xff; test_hc_sie_interaction(); while (1); }