Exemplo n.º 1
0
static bool_t outint(SerialDriver *sdp) {

  if (sdp->com_data != INVALID_SOCKET) {
    int n;
    uint8_t data[1];

    /*
     * Input.
     */
    chSysLockFromIsr();
    n = sdRequestDataI(sdp);
    chSysUnlockFromIsr();
    if (n < 0)
      return FALSE;
    data[0] = (uint8_t)n;
    n = send(sdp->com_data, data, sizeof(data), 0);
    switch (n) {
    case 0:
      close(sdp->com_data);
      sdp->com_data = INVALID_SOCKET;
      chSysLockFromIsr();
      chnAddFlagsI(sdp, CHN_DISCONNECTED);
      chSysUnlockFromIsr();
      return FALSE;
    case INVALID_SOCKET:
      if (errno == EWOULDBLOCK)
        return FALSE;
      close(sdp->com_data);
      sdp->com_data = INVALID_SOCKET;
      return FALSE;
    }
    return TRUE;
  }
  return FALSE;
}
Exemplo n.º 2
0
static bool outint(SerialDriver *sdp) {

  if (sdp->com_data != INVALID_SOCKET) {
    int n;
    uint8_t data[1];

    /*
     * Input.
     */
    chSysLockFromISR();
    n = sdRequestDataI(sdp);
    chSysUnlockFromISR();
    if (n < 0)
      return false;
    data[0] = (uint8_t)n;
    n = send(sdp->com_data, (char *)data, sizeof(data), 0);
    switch (n) {
    case 0:
      closesocket(sdp->com_data);
      sdp->com_data = INVALID_SOCKET;
      chSysLockFromISR();
      chnAddFlagsI(sdp, CHN_DISCONNECTED);
      chSysUnlockFromISR();
      return false;
    case SOCKET_ERROR:
      if (WSAGetLastError() == WSAEWOULDBLOCK)
        return false;
      closesocket(sdp->com_data);
      sdp->com_data = INVALID_SOCKET;
      return false;
    }
    return true;
  }
  return false;
}
Exemplo n.º 3
0
static void notify1(GenericQueue *qp) {

  (void)qp;
  if (!(U0IE & UTXIE0)) {
    msg_t b = sdRequestDataI(&SD1);
    if (b != Q_EMPTY) {
      U0IE |= UTXIE0;
      U0TXBUF = (uint8_t)b;
    }
  }
}
Exemplo n.º 4
0
static void notify2(GenericQueue *qp) {

  (void)qp;
  if (!(U1IE & UTXIE1)) {
    msg_t b = sdRequestDataI(&SD2);
    if (b != Q_EMPTY) {
      U1IE |= UTXIE1;
      U1TXBUF = (uint8_t)b;
    }
  }
}
Exemplo n.º 5
0
static void notify4(GenericQueue *qp) {

  (void)qp;
  if (!SD4.linflexp->UARTCR.B.TXEN) {
    msg_t b = sdRequestDataI(&SD4);
    if (b != Q_EMPTY) {
      SD4.linflexp->UARTCR.B.TXEN = 1;
      SD4.linflexp->BDRL.B.DATA0 = b;
    }
  }
}
Exemplo n.º 6
0
static void notify10(io_queue_t *qp) {

  (void)qp;
  if (!SD10.linflexp->UARTCR.B.TXEN) {
    msg_t b = sdRequestDataI(&SD10);
    if (b != Q_EMPTY) {
      SD10.linflexp->UARTCR.B.TXEN = 1;
      SD10.linflexp->BDRL.B.DATA0 = b;
    }
  }
}
Exemplo n.º 7
0
static void notify3(io_queue_t *qp) {

  (void)qp;
  if (ESCI_B.SR.B.TDRE) {
    msg_t b = sdRequestDataI(&SD3);
    if (b != Q_EMPTY) {
      ESCI_B.SR.B.TDRE = 1;
      ESCI_B.CR1.B.TIE = 1;
      ESCI_B.DR.R = (uint16_t)b;
    }
  }
}
Exemplo n.º 8
0
static void notify2(GenericQueue *qp) {

  (void)qp;
  if (ESCI_B.SR.B.TDRE) {
    msg_t b = sdRequestDataI(&SD2);
    if (b != Q_EMPTY) {
      ESCI_B.SR.B.TDRE = 1;
      ESCI_B.CR1.B.TIE = 1;
      ESCI_B.DR.R = (uint16_t)b;
    }
  }
}
Exemplo n.º 9
0
void sd_lld_serve_interrupt( SerialDriver *sdp ) {
  if (AUX_MU_IIR_RX_IRQ) {
    chSysLockFromIsr();
    while(!AUX_MU_LSR_RX_RDY);
    do {	
      sdIncomingDataI(sdp, AUX_MU_IO_REG & 0xFF);
    } while (AUX_MU_LSR_RX_RDY);
    chSysUnlockFromIsr();
  }

  if (AUX_MU_IIR_TX_IRQ) {
    chSysLockFromIsr();
    while(!AUX_MU_LSR_TX_RDY);
    msg_t data = sdRequestDataI(sdp);
    if (data < Q_OK) {
      /* Disable tx interrupts.*/
      AUX_MU_IER_REG &= ~AUX_MU_IER_TX_IRQEN; 
    }
    else {
      mini_uart_send((uint32_t)data);
    }
    chSysUnlockFromIsr();
  }
}