|  | /* | 
|  | * Copyright (c) 2015 Intel Corporation | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | #include <zephyr.h> | 
|  | #include <stdio.h> | 
|  | #include <zephyr/types.h> | 
|  | #include <string.h> | 
|  | #include <uart.h> | 
|  | #include <misc/byteorder.h> | 
|  |  | 
|  | #define BUF_MAXSIZE	256 | 
|  | #define SLEEP_TIME	500 | 
|  |  | 
|  | static struct device *uart1_dev; | 
|  | static u8_t rx_buf[BUF_MAXSIZE]; | 
|  | static u8_t tx_buf[BUF_MAXSIZE]; | 
|  | static u8_t nci_reset[] = {0x20, 0x00, 0x01, 0x00}; | 
|  |  | 
|  | static void msg_dump(const char *s, u8_t *data, unsigned len) | 
|  | { | 
|  | unsigned i; | 
|  |  | 
|  | printf("%s: ", s); | 
|  | for (i = 0U; i < len; i++) { | 
|  | printf("%02x ", data[i]); | 
|  | } | 
|  | printf("(%u bytes)\n", len); | 
|  | } | 
|  |  | 
|  | static void uart1_isr(struct device *x) | 
|  | { | 
|  | int len = uart_fifo_read(uart1_dev, rx_buf, BUF_MAXSIZE); | 
|  |  | 
|  | ARG_UNUSED(x); | 
|  | msg_dump(__func__, rx_buf, len); | 
|  | } | 
|  |  | 
|  | static void uart1_init(void) | 
|  | { | 
|  | uart1_dev = device_get_binding("UART_1"); | 
|  |  | 
|  | uart_irq_callback_set(uart1_dev, uart1_isr); | 
|  | uart_irq_rx_enable(uart1_dev); | 
|  |  | 
|  | printf("%s() done\n", __func__); | 
|  | } | 
|  |  | 
|  | void main(void) | 
|  | { | 
|  | u32_t *size = (u32_t *)tx_buf; | 
|  |  | 
|  | printf("Sample app running on: %s\n", CONFIG_ARCH); | 
|  |  | 
|  | uart1_init(); | 
|  |  | 
|  | /* 4 bytes for the payload's length */ | 
|  | UNALIGNED_PUT(sys_cpu_to_be32(sizeof(nci_reset)), size); | 
|  |  | 
|  | /* NFC Controller Interface reset cmd */ | 
|  | memcpy(tx_buf + sizeof(u32_t), nci_reset, sizeof(nci_reset)); | 
|  |  | 
|  | /* | 
|  | * Peer will receive: 0x00 0x00 0x00 0x04 0x20 0x00 0x01 0x00 | 
|  | *	                nci_reset size   +    nci_reset cmd | 
|  | */ | 
|  | uart_fifo_fill(uart1_dev, tx_buf, sizeof(u32_t) + sizeof(nci_reset)); | 
|  |  | 
|  | while (1) { | 
|  | k_sleep(SLEEP_TIME); | 
|  | } | 
|  | } |