예제 #1
0
파일: buttons.c 프로젝트: dozencrows/KiMony
int buttonsUpdate(const Event** eventTriggered)
{
    int result = EVENT_NONE;
    uint32_t buttonChange = buttonsState ^ buttonsNewState;

    if (buttonChange) {
        debugSetOverlayHex(0, buttonsNewState);

        uint32_t buttonsNewOn = buttonsNewState & buttonChange;

        if (buttonsNewOn) {
            for (size_t i = 0; i < activeMappingCount; i++) {
                if (activeMapping[i].buttonMask == buttonsNewOn && activeMapping[i].eventOffset) {
                    *eventTriggered = (const Event*) GET_FLASH_PTR(activeMapping[i].eventOffset);
                    result = (*eventTriggered)->type;
                    break;
                }
            }
        }

        buttonsState = buttonsNewState;
    }

    return result;
}
예제 #2
0
파일: d12.c 프로젝트: anupam19/mididuino
/** Main routine for d12, poll interrupts and check suspend state.
 **/
void d12_main(void) {
  while (d12_is_irq()) {
    uint8_t irq[2];
    d12_read_cmd(D12_CMD_READ_INT_REG, irq, 2);
    
    uint8_t i;
    for (i = 0; i < sizeof(event_list) / sizeof(usb_event_list_t); i++) {
      const usb_event_list_t *event = event_list + i;
      if (irq[0] & GET_FLASH(&(event->mask))) {
	void (*function)(uint8_t);
	function = GET_FLASH_PTR(&(event->function));
	function(GET_FLASH(&(event->param)));
      }
    }
  }
  // d12_suspend_handler();
}
예제 #3
0
파일: d12.c 프로젝트: anupam19/mididuino
/** Answer a GET_DESCRIPTOR request on ep0.
 **/
void d12_get_descriptor(usb_setup_request_t *setup_pkt) {
  tx_ptr = NULL;
  tx_bytes = 0;
  d12_flags &= ~D12_FLAG_FLASH;

  uint8_t value = setup_pkt->wValue >> 8;
  
  switch (value) {
  case USB_DESCRIPTOR_DEVICE:
    tx_ptr = (uint8_t *)&usb_device_descriptor;
    tx_bytes = sizeof(usb_device_descriptor);
    d12_flags |= D12_FLAG_FLASH;
    break;

  case USB_DESCRIPTOR_CONFIGURATION:
    tx_ptr = (uint8_t *)&usb_configuration_descriptor;
    tx_bytes = sizeof(usb_configuration_descriptor);
    d12_flags |= D12_FLAG_FLASH;
    break;
    
  case USB_DESCRIPTOR_STRING:
    {
      uint8_t i;
      for (i = 0; i < sizeof(usb_string_list) / sizeof(usb_string_list_t); i++) {
	const usb_string_list_t *list = usb_string_list + i;
	if (pgm_read_byte(&list->index) == (setup_pkt->wValue & 0xFF)) {
	  tx_ptr = GET_FLASH_PTR(&list->str);
	  tx_bytes = pgm_read_byte(&list->size);
	  d12_flags |= D12_FLAG_FLASH;
	}
      }
      break;
    }
  }

  if (tx_bytes) {
    if (tx_bytes > setup_pkt->wLength)
      tx_bytes = setup_pkt->wLength;
    d12_write_ep0_buf();
  } else {
    d12_stall_ep0();
  }
}