diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong/src/ch438_demo.c b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong/src/ch438_demo.c index a90ee6da2..a5f02baf6 100644 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong/src/ch438_demo.c +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong/src/ch438_demo.c @@ -22,29 +22,66 @@ * Included Files ****************************************************************************/ #include "imxrt_ch438.h" +#include +#include void CH438Demo(void) { - int fd; + int fd,m0fd,m1fd; int i; + char sendbuffer1[4] = {0xC0,0x04,0x01,0x09}; + char sendbuffer2[6] = {0xC0,0x00,0x03,0x12,0x34,0x61}; + char sendbuffer3[3] = {0xC1,0x04,0x01}; + char sendbuffer4[3] = {0xC1,0x00,0x03}; char buffer[256]; int readlen; - while(1) + // while(1) + // { + fd = open("/dev/extuart_dev3", O_RDWR); + m0fd = open("/dev/gpout0", O_RDWR); + m1fd = open("/dev/gpout1", O_RDWR); + ioctl(m0fd, GPIOC_WRITE, (unsigned long)1); + ioctl(m1fd, GPIOC_WRITE, (unsigned long)1); + sleep(1); + + write(fd, sendbuffer1,4); + sleep(1); + readlen = read(fd, buffer, 256); + printf("readlen1 = %d\n", readlen); + for(i = 0;i< readlen; ++i) { - fd = open("/dev/extuart_dev2", O_RDWR); - write(fd, "AT+ADDR=?",9); - sleep(1); - readlen = read(fd, buffer, 256); - - printf("readlen1 = %d\n", readlen); - - for(i = 0;i< readlen; ++i) - { - printf("%c(0x%x)\n", buffer[i], buffer[i]); - } - - close(fd); + printf("0x%x\n", buffer[i]); } + + write(fd, sendbuffer2,6); + sleep(1); + readlen = read(fd, buffer, 256); + printf("readlen1 = %d\n", readlen); + for(i = 0;i< readlen; ++i) + { + printf("0x%x\n", buffer[i]); + } + + write(fd, sendbuffer3,3); + sleep(1); + readlen = read(fd, buffer, 256); + printf("readlen1 = %d\n", readlen); + for(i = 0;i< readlen; ++i) + { + printf("0x%x\n", buffer[i]); + } + + write(fd, sendbuffer4,3); + sleep(1); + readlen = read(fd, buffer, 256); + printf("readlen1 = %d\n", readlen); + for(i = 0;i< readlen; ++i) + { + printf("0x%x\n", buffer[i]); + } + + close(fd); + // } } diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong/src/imxrt_ch438.c b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong/src/imxrt_ch438.c index d38566437..c859645f9 100644 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong/src/imxrt_ch438.c +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong/src/imxrt_ch438.c @@ -55,8 +55,29 @@ struct ch438_dev_s * Private Data ****************************************************************************/ -static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; +static pthread_mutex_t mutex[CH438PORTNUM] = +{ + PTHREAD_MUTEX_INITIALIZER, + PTHREAD_MUTEX_INITIALIZER, + PTHREAD_MUTEX_INITIALIZER, + PTHREAD_MUTEX_INITIALIZER, + PTHREAD_MUTEX_INITIALIZER, + PTHREAD_MUTEX_INITIALIZER, + PTHREAD_MUTEX_INITIALIZER, + PTHREAD_MUTEX_INITIALIZER +}; +static pthread_cond_t cond[CH438PORTNUM] = +{ + PTHREAD_COND_INITIALIZER, + PTHREAD_COND_INITIALIZER, + PTHREAD_COND_INITIALIZER, + PTHREAD_COND_INITIALIZER, + PTHREAD_COND_INITIALIZER, + PTHREAD_COND_INITIALIZER, + PTHREAD_COND_INITIALIZER, + PTHREAD_COND_INITIALIZER +}; + volatile int done[CH438PORTNUM] = {0}; static char buff[CH438PORTNUM][BUFFERSIZE]; @@ -90,11 +111,11 @@ int getInterruptStatus(int argc, char **argv) uint8_t ext_uart_no = 0; while(1) { - pthread_mutex_lock(&mutex); + pthread_mutex_lock(&mutex[ext_uart_no]); gInterruptStatus = ReadCH438Data(REG_SSR_ADDR); if(!gInterruptStatus) { - pthread_mutex_unlock(&mutex); + pthread_mutex_unlock(&mutex[ext_uart_no]); continue; } @@ -103,8 +124,8 @@ int getInterruptStatus(int argc, char **argv) if(gInterruptStatus & Interruptnum[ext_uart_no]) { done[ext_uart_no] = 1; - pthread_cond_signal(&cond); - pthread_mutex_unlock(&mutex); + pthread_cond_signal(&cond[ext_uart_no]); + pthread_mutex_unlock(&mutex[ext_uart_no]); } } } @@ -412,9 +433,9 @@ static size_t ImxrtCh438ReadData(uint8_t ext_uart_no) uint8_t REG_LSR_ADDR; uint8_t REG_MSR_ADDR; - pthread_mutex_lock(&mutex); + pthread_mutex_lock(&mutex[ext_uart_no]); while(done[ext_uart_no] == 0) - pthread_cond_wait(&cond, &mutex); + pthread_cond_wait(&cond[ext_uart_no], &mutex[ext_uart_no]); if (done[ext_uart_no] == 1) { REG_IIR_ADDR = offsetadd[ext_uart_no] | REG_IIR0_ADDR; @@ -445,7 +466,7 @@ static size_t ImxrtCh438ReadData(uint8_t ext_uart_no) break; } } - pthread_mutex_unlock(&mutex); + pthread_mutex_unlock(&mutex[ext_uart_no]); return RevLen; } @@ -460,22 +481,27 @@ static size_t ImxrtCh438ReadData(uint8_t ext_uart_no) void Ch438InitDefault(void) { - int ret; + int ret, i; /* Initialize the mutex */ - ret = pthread_mutex_init(&mutex, NULL); - if (ret != 0) + for(i = 0; i < CH438PORTNUM; i++) { - ch438err("pthread_mutex_init failed, status=%d\n", ret); + ret = pthread_mutex_init(&mutex[i], NULL); + if (ret != 0) + { + ch438err("pthread_mutex_init failed, status=%d\n", ret); + } } /* Initialize the condition variable */ - - ret = pthread_cond_init(&cond, NULL); - if (ret != 0) + for(i = 0; i < CH438PORTNUM; i++) { - ch438err("pthread_cond_init failed, status=%d\n", ret); + ret = pthread_cond_init(&cond[i], NULL); + if (ret != 0) + { + ch438err("pthread_cond_init failed, status=%d\n", ret); + } } ret = task_create("ch438_task", 60, 8192, getInterruptStatus, NULL);