diff --git a/test/case52/src/testcase52.c b/test/case52/src/testcase52.c index 3ddafc7..af30aa4 100755 --- a/test/case52/src/testcase52.c +++ b/test/case52/src/testcase52.c @@ -57,17 +57,21 @@ struct sockaddr_in server_addr_case52; // #define MAP_SIZE_CASE52 1028096 // #define MAP_SIZE_ST_CASE52 4096 // 4096 -// #define MAP_ADDR_TX_BASE_CASE52 0x84C00000 // TX 数据位起始 +#define CTRL_BUFFER_SIZE 1024 +// #define MAP_ADDR_TX_BASE_CASE52 0x84C00000 // TX 数据位起始 +#define UCP4008_CTRL_PHYSADDR 0x82000000 // 接收开关 #define MAP_ADDR_RX_BASE_CASE52 0x85001000 // RX 数据位起始 #define MAP_ADDR_RXFLAG_DATA_CASE52 0x85000000 // wr 计数起始位 int mem_fd_case52; // 统一文件描述符 ssize_t send_len; -// void *map_base_tx_case52; // TX映射地址 20块 +// void *map_base_tx_case52; // TX映射地址 20块 +void *ucp4008_ctrl_mmap_base; // 接受开关映射地址 void *map_base_rx_case52; // RX映射地址 8块 void *map_base_rxf_case52; // wr 计数映射地址 uint8_t w_idx, r_idx; // RX 信号 uint16_t udp_data_buffer[8008]; +volatile uint32_t *mapped_addr; //---------------------------------------------------- volatile uint32_t slot_ind_flag = 0; @@ -110,6 +114,7 @@ void *handleUdpTransmission(void *arg) perror("open /dev/mem"); exit(EXIT_FAILURE); } + // TX // printf("[mmap]:/*************** mmap_tx ***************/\n"); // map_base_tx_case52 = mmap(NULL, MAP_SIZE_CASE52, PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd_case52, MAP_ADDR_TX_BASE_CASE52); @@ -120,6 +125,7 @@ void *handleUdpTransmission(void *arg) // exit(EXIT_FAILURE); // } // printf("[mmap]: tx ready\n"); + // RX printf("[mmap]:/*************** mmap_rx ***************/\n"); map_base_rx_case52 = mmap(NULL, MAP_SIZE_CASE52, PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd_case52, MAP_ADDR_RX_BASE_CASE52); @@ -131,6 +137,7 @@ void *handleUdpTransmission(void *arg) exit(EXIT_FAILURE); } printf("[mmap]: rx ready\n"); + // RX_FLAG printf("[mmap]:/************** rx_flag ***************/\n"); map_base_rxf_case52 = mmap(NULL, MAP_SIZE_ST_CASE52, PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd_case52, MAP_ADDR_RXFLAG_DATA_CASE52); @@ -143,6 +150,56 @@ void *handleUdpTransmission(void *arg) exit(EXIT_FAILURE); } printf("[mmap]: wr_idx ready\n"); + + // ucp4008_ctrl + ucp4008_ctrl_mmap_base = mmap( + NULL, + MAP_SIZE_ST_CASE52, + PROT_READ | PROT_WRITE, + MAP_SHARED, + mem_fd_case52, + UCP4008_CTRL_PHYSADDR + ); + if (ucp4008_ctrl_mmap_base == MAP_FAILED) { + printf("[mmap]: ucp4008_ctrl mapping failed!\n"); + perror("ucp4008_ctrl error"); + close(mem_fd_case52); + exit(EXIT_FAILURE); + } + // udp_ctrl + char *ctrl_message = "ready"; + sendto(sockfd_case52, ctrl_message, strlen(ctrl_message), 0, + (struct sockaddr *)&server_addr_case52, sizeof(server_addr_case52)); + printf("[sendto]:%s\n", message); + + char ctrl_buffer[CTRL_BUFFER_SIZE]; + struct sockaddr_in from_addr; + socklen_t from_addr_len = sizeof(from_addr); + int recv_len + int strcmp_flag = 1; + + while (strcmp_flag) + { + recv_len = recvfrom(sockfd_case52, ctrl_buffer, CTRL_BUFFER_SIZE, 0, + (struct sockaddr *)&from_addr, &from_addr_len); + if (recv_len < 0) { + printf("[recv_len]:recv_len < 0\n"); + } + + ctrl_buffer[recv_len] = '\0'; + printf("[recvfrom]:%s\n", ctrl_buffer); + if (strcmp(ctrl_buffer, "ok") == 0) { + //usleep(1000000); + printf("[mmap]:wr...\n"); + mapped_addr = (volatile uint32_t *)ucp4008_ctrl_mmap_base; + *mapped_addr = 0xA5A55A5A; + print("[mmap]: wr 0xA5A55A5A done :) \n"); + strcmp_flag = 0; + } else { + printf("[recvfrom]:strcmp no ok!\n"); + } + } + // 初始化消费者索引 /************************************************************************************** */ r_idx = 0; @@ -194,6 +251,12 @@ void *handleUdpTransmission(void *arg) // printf("[while(1)]:/*************************************/\n"); // size_t current_pos = 0; // uint16_t value_mem = 0; + + + + + + uint8_t block_n = 0; uint8_t cut_i = 0; while (1)