Example #1
0
void LEUART0_IRQHandler(void)
{
  if (LEUART0->IF & LEUART_IF_RXDATAV)
  {
	  uint8_t data = LEUART0->RXDATA;
	  buf_write_byte(leu_rx_buf, data);
	  if (leu_rx_buf->count == 0)
		  LEUART0->IEN &= ~ LEUART_IEN_RXDATAV;  // disable rx interrupt
  }

  if (LEUART0->IF & LEUART_IF_TXBL)
  {
	  uint8_t data;
	  if (buf_read_byte(leu_tx_buf, & data))
	  {
		  while (LEUART0->SYNCBUSY)
			  ;
		  LEUART0->TXDATA = data;
	  }
	  else
		  LEUART0->IEN &= ~ LEUART_IEN_TXBL;  // disable tx interrupt
  }

  // XXX do we need to explicitly clear interrupts?
  //LEUART_IntClear(LEUART0, ???);
}
Example #2
0
File: buf.c Project: ra1fh/nxtctl
int buf_vpack(Buf *self, char *fmt, va_list ap) {
	char *s;
	char *p;
	uint8_t u8;
	uint16_t u16;
	uint32_t u32;
	size_t len;
	int res;
	int bytes = 0;

	for (p = fmt; *p != '\0'; p++) {
		switch(*p) {
		case 'b': /* char */
			u8 = va_arg(ap, int);
			res = buf_write_byte(self, u8);
			break;
		case 'h': /* short */
			u16 = va_arg(ap, int);
			res = buf_write_short(self, u16);
			break;
		case 'u': /* uint */
			u32 = va_arg(ap, uint32_t);
			res = buf_write_uint(self, u32);
			break;
		case 's': /* string */
			s = va_arg(ap, char*);
			len = va_arg(ap, size_t);
			res = buf_write_string(self, s, len);
			break;
		case 'd': /* data */
			s = va_arg(ap, char*);
			len = va_arg(ap, size_t);
			res = buf_write_data(self, s, len);
			break;
		default: /* illegal format */
			res = -1;
		}
		if (res == -1) {
			return -1;
		}
		bytes += res;
	}
	return bytes;
}
Example #3
0
bool buf_write_char(buf_t *buf, const char c)
{
  return buf_write_byte(buf, (uint8_t) c);
}