int amb8420Read(void *buf, uint16_t bufsize) { // RPRINTF("amb8420Read\n"); int result; uint8_t *src = rxBuffer; rxCursor = 0; result = recvLength; switch (currentAddressMode) { case AMB8420_ADDR_MODE_NONE: break; case AMB8420_ADDR_MODE_ADDR: result--; src++; break; case AMB8420_ADDR_MODE_ADDRNET: result -= 2; src += 2; break; } if (result > bufsize) result = bufsize; else if (result <= 0) return -EBADMSG; memcpy(buf, src, result); somePacketsReceived = true; // end: #if USE_THREADS // enable Rx interrupts back serialEnableRX(AMB8420_UART_ID); #endif return result; }
uint_t serialSetReceiveHandle(uint8_t id, SerialCallback_t functionHandle) { if (id >= SERIAL_COUNT) return -1; serialRecvCb[id] = functionHandle; if (functionHandle) { // Enable Serial RX automatically serialEnableRX(id); } return 0; }
// -------------------------------------------- // -------------------------------------------- void appMain(void) { serialEnableRX(PRINTF_SERIAL_ID); // serialSetReceiveHandle(PRINTF_SERIAL_ID, onSerRecv); serialSetPacketReceiveHandle(PRINTF_SERIAL_ID, onSerRecv, serBuffer, SER_BUF_SIZE); radioSetReceiveHandle(onRadioRecv); radioOn(); mdelay(200); // Send restart message to the phaser send_ctrl_msg(MSG_ACT_RESTART); while (1) { mdelay(RATE_DELAY); led0Toggle(); } }