| 13 | } |
| 14 | |
| 15 | void Controller::initPio(InitParams *initParams) { |
| 16 | pio_hw_t *pios[2] = {pio0, pio1}; |
| 17 | uint pio_index = 0; |
| 18 | if (!pio_can_add_program(pios[pio_index], &controller_program)) { |
| 19 | pio_index = 1; |
| 20 | if (!pio_can_add_program(pios[pio_index], &controller_program)) { |
| 21 | // throw 0; |
| 22 | } |
| 23 | } |
| 24 | initParams->pio = pios[pio_index]; |
| 25 | initParams->offset = pio_add_program(initParams->pio, &controller_program); |
| 26 | initParams->sm = pio_claim_unused_sm(initParams->pio, true); |
| 27 | pio_sm_config tmpConfig = |
| 28 | controller_program_get_default_config(initParams->offset); |
| 29 | initParams->c = &tmpConfig; |
| 30 | controller_program_init(initParams->pio, initParams->sm, initParams->offset, |
| 31 | initParams->pin, initParams->c); |
| 32 | |
| 33 | // Send a command to see if connected controller is N64 or Gamecube |
| 34 | uint8_t initRequest[1] = {0x00}; |
| 35 | uint8_t initResponse[3] = {0x00}; |
| 36 | transfer(initParams->pio, initParams->sm, initRequest, sizeof(initRequest), |
| 37 | initResponse, sizeof(initResponse)); |
| 38 | initParams->controllerType = (ControllerType)initResponse[0]; |
| 39 | } |
| 40 | void Controller::transfer(uint8_t *request, uint8_t requestLength, |
| 41 | uint8_t *response, uint8_t responseLength) { |
| 42 | transfer(_pio, _sm, request, requestLength, response, responseLength); |
nothing calls this directly
no outgoing calls
no test coverage detected