Loading...
/*
* Copyright (c) 2015 Intel Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <zephyr.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <board.h>
#include <uart.h>
#define BUF_MAXSIZE 256
struct device *uart1_dev;
#define D(fmt, args...) \
do { \
printf("%s() " fmt "\n", __func__, ## args); \
} while (0)
static uint8_t buf[BUF_MAXSIZE];
static uint8_t nci_reset[] = { 0x20, 0x00, 0x01, 0x00 };
static inline const uint32_t htonl(uint32_t x)
{
__asm__ __volatile__ ("bswap %0" : "=r" (x) : "0" (x));
return x;
}
static void msg_dump(const char *s, uint8_t *data, unsigned len)
{
unsigned i;
printf("%s: ", s);
for (i = 0; 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, buf, BUF_MAXSIZE);
ARG_UNUSED(x);
msg_dump(__func__, 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);
D("done");
}
void main(void)
{
struct nano_timer t;
void *t_data;
uint8_t *pdu = buf;
uint32_t *len = (void *) pdu;
nano_timer_init(&t, &t_data);
uart1_init();
*len = htonl(sizeof(nci_reset));
memcpy(pdu + sizeof(*len), nci_reset, sizeof(nci_reset));
uart_fifo_fill(uart1_dev, pdu, sizeof(*len) + sizeof(nci_reset));
while (1) {
nano_task_timer_start(&t, MSEC(500));
nano_task_timer_test(&t, TICKS_UNLIMITED);
}
}
|