static rt_err_t pcap_netif_init(rt_device_t dev) { rt_thread_t tid; pcap_if_t *alldevs; pcap_if_t *d; pcap_t *tap; int inum, i=0; char errbuf[PCAP_ERRBUF_SIZE]; /* Retrieve the device list */ if(pcap_findalldevs(&alldevs, errbuf) == -1) { rt_kprintf("Error in pcap_findalldevs: %s\n", errbuf); return -RT_ERROR; } /* Print the list */ for(d = alldevs; d; d = d->next) { rt_kprintf("%d. %s", ++i, d->name); if (d->description) rt_kprintf(" (%s)\n", d->description); else rt_kprintf(" (No description available)\n"); } if(i == 0) { rt_kprintf("\nNo interfaces found! Make sure WinPcap is installed.\n"); return -RT_ERROR; } inum = 1; /* Jump to the selected adapter */ for(d = alldevs, i = 0; i < inum-1 ;d = d->next, i++); { rt_kprintf("Select (%s) as network interface\n", d->description); packet_mb = rt_mb_create("pcap", 64, RT_IPC_FLAG_FIFO); tid = rt_thread_create("pcap", pcap_thread_entry, d, 2048, RT_THREAD_PRIORITY_MAX - 1, 10); if (tid != RT_NULL) { rt_thread_startup(tid); } rt_thread_delay(100); } pcap_freealldevs(alldevs); return RT_EOK; }
sys_mbox_t sys_mbox_new(int size) { static int counter = 0; char tname[RT_NAME_MAX]; rt_snprintf(tname, RT_NAME_MAX, "%s%d", SYS_LWIP_MBOX_NAME, counter); #if SYS_DEBUG { struct rt_thread *thread; thread = rt_thread_self(); LWIP_DEBUGF(SYS_DEBUG, ("%s, Create mbox: %s \n",thread->name, tname)); } #endif counter++; return rt_mb_create(tname, size, RT_IPC_FLAG_FIFO); }
err_t sys_mbox_new(sys_mbox_t *mbox, int size) { static unsigned short counter = 0; char tname[RT_NAME_MAX]; sys_mbox_t tmpmbox; RT_DEBUG_NOT_IN_INTERRUPT; rt_snprintf(tname, RT_NAME_MAX, "%s%d", SYS_LWIP_MBOX_NAME, counter); counter++; tmpmbox = rt_mb_create(tname, size, RT_IPC_FLAG_FIFO); if( tmpmbox != RT_NULL ) { *mbox = tmpmbox; return ERR_OK; } return ERR_MEM; }
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; }