예제 #1
0
static enum rym_code _rym_bg(
        struct rym_ctx *ctx,
        rt_uint8_t *buf,
        rt_size_t len)
{
    struct custom_ctx *cctx = (struct custom_ctx*)ctx;
    cctx->fpath[0] = '\0';

    /* use current working directory */
    getcwd(cctx->fpath, sizeof(cctx->fpath));
    strcat(cctx->fpath, "/");
    strcat(cctx->fpath, buf);

    cctx->fd = open(cctx->fpath, O_CREAT | O_WRONLY | O_TRUNC, 0);
    if (cctx->fd < 0)
    {
        rt_err_t err = rt_get_errno();
        rt_kprintf("error creating file: %d\n", err);
        rt_kprintf("abort transmission\n");
        return RYM_CODE_CAN;
    }

    cctx->flen = atoi(buf+strlen(buf)+1);
    if (cctx->flen == 0)
        cctx->flen = -1;
    return RYM_CODE_ACK;
}
예제 #2
0
int main(void)
{
	int timeout = 0;

/* Filesystem Initialization */
#ifdef RT_USING_DFS
	{
#if defined(RT_USING_DFS_ROMFS)
		if (dfs_mount(RT_NULL, "/rom", "rom", 0, &romfs_root) == 0)
		{
			rt_kprintf("ROM File System initialized!\n");
		}
		else
			rt_kprintf("ROM File System initialzation failed!\n");
#endif

#if defined(RT_USING_DFS_UFFS)
	{
		/* mount flash device as flash directory */
		if(dfs_mount("nand0", "/nand0", "uffs", 0, 0) == 0)
			rt_kprintf("UFFS File System initialized!\n");
		else
			rt_kprintf("UFFS File System initialzation failed!\n");
	}
#endif

#ifdef RT_USING_SDIO
	timeout = 0;
	while ((rt_device_find("sd0") == RT_NULL) && (timeout++ < RT_TICK_PER_SECOND*2))
	{
		rt_thread_delay(1);
	}

	if (timeout < RT_TICK_PER_SECOND*2)
	{
		/* mount sd card fat partition 1 as root directory */
		if (dfs_mount("sd0", "/", "elm", 0, 0) == 0)
		{
			rt_kprintf("File System initialized!\n");
		}
		else
			rt_kprintf("File System initialzation failed!%d\n", rt_get_errno());
	}
	else
	{
		rt_kprintf("No SD card found.\n");
	}
#endif
	}
#endif
	
#ifdef RT_USING_LED
	rt_led_app_init();
#endif
}
예제 #3
0
static void led_thread_entry(void *parameter)
{
    rt_device_t led_dev;
    rt_device_t vbus_dev;
    rt_err_t err;

    rt_led_hw_init();

    led_dev = rt_device_find("led");
    if (led_dev == RT_NULL)
    {
        rt_kprintf("can not find the led device\n");
        return;
    }

    vbus_dev = rt_device_find("vecho");
    if (vbus_dev == RT_NULL)
    {
        rt_kprintf("can not find the vbus device\n");
        return;
    }

    err = rt_device_open(vbus_dev, RT_DEVICE_OFLAG_RDWR);
    if (err != RT_EOK)
    {
        rt_kprintf("open vbus failed: %d\n", err);
        return;
    }

    while (1)
    {
        rt_uint8_t led_value;
        int len;

        len = rt_device_read(vbus_dev, 0, &led_value, sizeof(led_value));
        if (len <= 0)
        {
            rt_kprintf("vbus read err: %d, %d\n", len, rt_get_errno());
        }

        led_dev->write(led_dev, 1, &led_value, sizeof(led_value));
    }
}
static enum rym_code _rym_bg(
        struct rym_ctx *ctx,
        rt_uint8_t *buf,
        rt_size_t len)
{
    struct custom_ctx *cctx = (struct custom_ctx*)ctx;
    cctx->fpath[0] = '/';
    /* the buf should be the file name */
    strcpy(&(cctx->fpath[1]), (const char*)buf);
    cctx->fd = open(cctx->fpath, O_CREAT | O_WRONLY | O_TRUNC, 0);
    if (cctx->fd < 0)
    {
        rt_err_t err = rt_get_errno();
        rt_kprintf("error creating file: %d\n", err);
        rt_kprintf("abort transmission\n");
        return RYM_CODE_CAN;
    }

    cctx->flen = atoi((const char*)buf+strlen((const char*)buf)+1);
    if (cctx->flen == 0)
        cctx->flen = -1;
    return RYM_CODE_ACK;
}
예제 #5
0
void tcpecho_socket_entry(void *parameter)
{
   char *recv_data;
   rt_uint32_t sin_size;
   int sock = -1, connected, bytes_received;
   struct sockaddr_in server_addr, client_addr;

	recv_data = rt_malloc(TCP_SOCKET_BUFFER_SIZE);
	if (recv_data == RT_NULL)
	{
		rt_kprintf("no memory\n");
		goto _exit;
	}

	/* create a TCP socket */
	if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
	{
		rt_kprintf("create socket error\n");
		goto _exit;
	}

	/* initialize server address */
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(TCP_SOCKET_ECHO_PORT);
	server_addr.sin_addr.s_addr = INADDR_ANY;
	rt_memset(&(server_addr.sin_zero),8, sizeof(server_addr.sin_zero));

	/* bind to server address */
	if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
	{
		rt_kprintf("bind address failed\n");
		goto _exit;
   }

	/* listen */
	if (listen(sock, 5) == -1)
	{
		rt_kprintf("listen error\n");
		goto _exit;
	}

	sin_size = sizeof(struct sockaddr_in);
	while(1)
	{
		/* accept client connected */
		connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size);
		if (connected > 0)
		{
			int timeout;
			
			/* set timeout option */
			timeout = 5000; /* 5second */
			setsockopt(connected, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));

			/* handle this client */
			while (1)
			{
				/* receive data from this connection */
				bytes_received = recv(connected,recv_data, TCP_SOCKET_BUFFER_SIZE, 0);
				if (bytes_received <= 0)
				{
					rt_kprintf("close client connection, errno: %d, socket error: %d\n", 
						rt_get_errno(),
						lwip_get_error());
					/* connection closed. */
					lwip_close(connected);
					break;
				}

				/* send data to client */
				send(connected, recv_data, bytes_received, 0);
			}
		}
   }

_exit:
	/* close socket */
	if (sock != -1) lwip_close(sock);
	rt_free(recv_data);

	return ;
}
예제 #6
0
void rt_init_thread_entry(void* parameter)
{
	platform_init();
	
/* Filesystem Initialization */
#ifdef RT_USING_DFS
	{
		/* init the device filesystem */
		dfs_init();

#if defined(RT_USING_DFS_ELMFAT)
		/* init the elm chan FatFs filesystam*/
		elm_init();
#endif

#if defined(RT_USING_DFS_ROMFS)
		dfs_romfs_init();
		if (dfs_mount(RT_NULL, "/rom", "rom", 0, &romfs_root) == 0)
		{
			rt_kprintf("ROM File System initialized!\n");
		}
		else
			rt_kprintf("ROM File System initialzation failed!\n");
#endif

#if defined(RT_USING_DFS_DEVFS)
		devfs_init();
		if (dfs_mount(RT_NULL, "/dev", "devfs", 0, 0) == 0)
			rt_kprintf("Device File System initialized!\n");
		else
			rt_kprintf("Device File System initialzation failed!\n");

		#ifdef RT_USING_NEWLIB
		/* init libc */
		libc_system_init(RT_CONSOLE_DEVICE_NAME);
		#endif
#endif

#if defined(RT_USING_DFS_UFFS)
	{
		/* init the uffs filesystem */
		dfs_uffs_init();

		/* mount flash device as flash directory */
		if(dfs_mount("nand0", "/nand0", "uffs", 0, 0) == 0)
			rt_kprintf("UFFS File System initialized!\n");
		else
			rt_kprintf("UFFS File System initialzation failed!\n");
	}
#endif

#ifdef RT_USING_I2C
	{
		rt_i2c_core_init();
		davinci_i2c_init("I2C1");
	}
#endif

#ifdef RT_USING_SPI
	{
		rt_hw_spi_init();
	}
#endif

#ifdef RT_USING_SDIO
	rt_mmcsd_core_init();
	rt_mmcsd_blk_init();
	rt_hw_mmcsd_init();
	rt_thread_delay(RT_TICK_PER_SECOND*2);
	/* mount sd card fat partition 1 as root directory */
		if (dfs_mount("sd0", "/", "elm", 0, 0) == 0)
		{
			rt_kprintf("File System initialized!\n");
		}
		else
			rt_kprintf("File System initialzation failed!%d\n", rt_get_errno());
#endif
	}
#endif

#ifdef RT_USING_LWIP
	{
		/* register ethernetif device */
		eth_system_device_init();
		rt_hw_davinci_emac_init();
		/* init lwip system */
		lwip_system_init();
	}
#endif

}
예제 #7
0
static void rt_test_485_entry(void* parameter)
{
	rt_device_t dev_485_1;
	rt_device_t dev_485_2;
	rt_device_t dev_485_3;

	rt_size_t read_cnt;

	unsigned char tx_ch = 0;
	unsigned char rx_ch = 0;
	unsigned char rx_buf[4];

	rt_sem_init(&uart485_1_rx_msg_sem, "u485-1", 0, RT_IPC_FLAG_PRIO);
	rt_sem_init(&uart485_2_rx_msg_sem, "u485-2", 0, RT_IPC_FLAG_PRIO);
	rt_sem_init(&uart485_3_rx_msg_sem, "u485-3", 0, RT_IPC_FLAG_PRIO);
#if !EM_ALL_TYPE_BASE
	uart485_mb = rt_mb_create("485_mb", 1, RT_IPC_FLAG_FIFO);
	if (RT_NULL == uart485_mb) {
		printf_syn("func:%s(), line:%d malloc fail\n",__FUNCTION__, __LINE__);
		return;
	}
#endif
	dev_485_1 = rt_device_find(UART_485_1_DEV);
	if (dev_485_1 != RT_NULL && rt_device_open(dev_485_1, RT_DEVICE_OFLAG_RDWR) == RT_EOK) {
		printf_syn("rt_test_485_entry open device:%s succ\n", UART_485_1_DEV);
		rt_device_set_rx_indicate(dev_485_1, uart485_1_rx_ind);
	} else {
		printf_syn("rt_test_485_entry can not find device:%s\n", UART_485_1_DEV);
		return;
	}

	dev_485_2 = rt_device_find(UART_485_2_DEV);
	if (dev_485_2 != RT_NULL && rt_device_open(dev_485_2, RT_DEVICE_OFLAG_RDWR) == RT_EOK) {
		printf_syn("rt_test_485_entry open device:%s succ\n", UART_485_2_DEV);
		rt_device_set_rx_indicate(dev_485_2, uart485_2_rx_ind);
	} else {
		printf_syn("rt_test_485_entry can not find device:%s\n", UART_485_2_DEV);
		return;
	}

	dev_485_3 = rt_device_find(UART_485_3_DEV);
	if (dev_485_3 != RT_NULL && rt_device_open(dev_485_3, RT_DEVICE_OFLAG_RDWR) == RT_EOK) {
		printf_syn("rt_test_485_entry open device:%s succ\n", UART_485_3_DEV);
		rt_device_set_rx_indicate(dev_485_3, uart485_3_rx_ind);
	} else {
		printf_syn("rt_test_485_entry can not find device:%s\n", UART_485_3_DEV);
		return;
	}

	while (1) {
#if 0
		tx_en_rev_disable_485_1();
#else
#if 0
		int rx_cnt, err_cnt;
		rt_err_t err;
		int i;

		rx_cnt = 0;
		err_cnt = 0;

		printf_syn("send cmd: ");
		for (i=0; i<sizeof(cmd_485_seq); ++i)
			printf_syn("%02x ", cmd_485_seq[i]);
		printf_syn("\n");

		//rt_enter_critical();
		tx_en_rev_disable_485_2();
		//rt_thread_delay(2);
		dev_485_2->write(dev_485_2, 0, cmd_485_seq, sizeof(cmd_485_seq));
		//rt_thread_delay(1);
		wait_usartx_send_over(USART3);
			
		tx_disable_rev_en_485_2();

		//rt_exit_critical();

		printf_syn("485-2 485 cmd had send over\n");

		while (rx_cnt<23 && err_cnt<2) {
			if (RT_EOK == (err=rt_sem_take(&uart485_2_rx_msg_sem, WAIT_RX_MSG_TIMEOUT))) {
				while (1 == dev_485_2->read(dev_485_2, 0, &rx_ch, 1)) {
					++rx_cnt;
					printf_syn("485-2 recv ind[%3d]:0x%2x\n", rx_cnt, rx_ch);
				}
			} else {
				printf_syn("485-2 recv error(%d)\n", err);
				++err_cnt;
			}
		}

		rt_thread_delay(get_ticks_of_ms(5 * 1000));

#else
		tx_en_rev_disable_485_1();
		rt_thread_delay(2);
		printf_syn("485-1 send:%d\n", tx_ch);
		dev_485_1->write(dev_485_1, 0, &tx_ch, 1);
		rt_thread_delay(2);
		tx_disable_rev_en_485_1();
#if 0
#if 0
		if (RT_EOK == rt_sem_take(&uart485_3_rx_msg_sem, WAIT_RX_MSG_TIMEOUT)) {
			read_cnt = dev_485_3->read(dev_485_3, 0, rx_buf, sizeof(rx_buf));
			if (read_cnt != 0) {
				rx_ch = rx_buf[read_cnt - 1];
			} else {
				rx_ch = 0;
				printf_syn("485-3 recv error(%d)\n", rt_get_errno());
			}

			printf_syn("485-3 recv:%d, read_cnt:%d\n", rx_ch, read_cnt);

			rt_thread_delay(5);

			tx_en_rev_disable_485_3();
			rt_thread_delay(2);
			printf_syn("485-3 send:%d\n", rx_ch);
			dev_485_3->write(dev_485_3, 0, &rx_ch, 1);
			rt_thread_delay(2);
			tx_disable_rev_en_485_3();

		} else {
			printf_syn("485-3 recv error\n");
		}
#else
		if (RT_EOK == rt_sem_take(&uart485_2_rx_msg_sem, WAIT_RX_MSG_TIMEOUT)) {
			read_cnt = dev_485_2->read(dev_485_2, 0, rx_buf, sizeof(rx_buf));
			if (read_cnt != 0) {
				rx_ch = rx_buf[read_cnt - 1];
			} else {
				rx_ch = 0;
				printf_syn("485-2 recv error(%d)\n", rt_get_errno());
			}

			printf_syn("485-2 recv:%d, read_cnt:%d\n", rx_ch, read_cnt);

			rt_thread_delay(5);

			tx_en_rev_disable_485_2();
			rt_thread_delay(2);
			printf_syn("485-2 send:%d\n", rx_ch);
			dev_485_2->write(dev_485_2, 0, &rx_ch, 1);
			rt_thread_delay(2);
			tx_disable_rev_en_485_2();

		} else {
			printf_syn("485-2 recv error\n");
		}

#endif
#else
		if (tx_ch & 0x01) {
			if (RT_EOK == rt_sem_take(&uart485_3_rx_msg_sem, WAIT_RX_MSG_TIMEOUT)) {
				read_cnt = dev_485_3->read(dev_485_3, 0, rx_buf, sizeof(rx_buf));
				if (read_cnt != 0) {
					rx_ch = rx_buf[read_cnt - 1];
				} else {
					rx_ch = 0;
					printf_syn("485-3 recv error(%d)\n", rt_get_errno());
				}

				printf_syn("485-3 recv:%d, read_cnt:%d\n", rx_ch, read_cnt);

				rt_thread_delay(5);

				tx_en_rev_disable_485_3();
				rt_thread_delay(2);
				printf_syn("485-3 send:%d\n", rx_ch);
				dev_485_3->write(dev_485_3, 0, &rx_ch, 1);
				rt_thread_delay(2);
				tx_disable_rev_en_485_3();

			} else {
				printf_syn("485-3 recv error\n");
			}
		} else {
			if (RT_EOK == rt_sem_take(&uart485_2_rx_msg_sem, WAIT_RX_MSG_TIMEOUT)) {
				read_cnt = dev_485_2->read(dev_485_2, 0, rx_buf, sizeof(rx_buf));
				if (read_cnt != 0) {
					rx_ch = rx_buf[read_cnt - 1];
				} else {
					rx_ch = 0;
					printf_syn("485-2 recv error(%d)\n", rt_get_errno());
				}

				printf_syn("485-2 recv:%d, read_cnt:%d\n", rx_ch, read_cnt);

				rt_thread_delay(5);

				tx_en_rev_disable_485_2();
				rt_thread_delay(2);
				printf_syn("485-2 send:%d\n", rx_ch);
				dev_485_2->write(dev_485_2, 0, &rx_ch, 1);
				rt_thread_delay(2);
				tx_disable_rev_en_485_2();

			} else {
				printf_syn("485-2 recv error\n");
			}
		}
#endif
		if (RT_EOK == rt_sem_take(&uart485_1_rx_msg_sem, WAIT_RX_MSG_TIMEOUT)) {
			dev_485_1->read(dev_485_1, 0, &rx_ch, 1);
			printf_syn("485-1 recv echo:%d\n\n", rx_ch);

		} else {
			printf_syn("485-1 recv echo error\n\n");
		}

		rt_thread_delay(get_ticks_of_ms(1*1000));
		++tx_ch;

#endif
#endif
	} /* while(1) */

	return;
}