// Include the most common headers from the C standard library #include #include #include #include #include #include // Include the main libnx system header, for Switch development #include // This example shows how to use lp2p, for Switch-hosted local-network communications with mainly non-Switch devices. See also libnx lp2p.h. // Note that in an actual app you may want to use lp2p/sockets from another thread. Result create_network(const Lp2pGroupInfo *in_group_info) { Result rc=0; rc = lp2pCreateGroup(in_group_info); printf("lp2pCreateGroup(): 0x%x\n", rc); return rc; } void leave_network(void) { Result rc=0; u32 tmp32=0; rc = lp2pLeave(&tmp32); printf("lp2pLeave(): 0x%x, 0x%x\n", rc, tmp32); rc = lp2pDestroyGroup(); printf("lp2pDestroyGroup(): 0x%x\n", rc); } void generate_random_str(char *str, size_t string_len) { if (string_len & 1) string_len--; for (size_t i=0; i= 0) { memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(ntohl(((struct sockaddr_in*)ip_config.ip_addr)->sin_addr.s_addr) | ~ntohl(((struct sockaddr_in*)ip_config.subnet_mask)->sin_addr.s_addr)); serv_addr.sin_port = htons(7777); if (bind(sockfd, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) < 0) { printf("bind failed\n"); close(sockfd); sockfd = -1; } } } } } if (R_SUCCEEDED(rc) && (kDown & HidNpadButton_X)) { if (sockfd >= 0) { close(sockfd); sockfd = -1; } leave_network(); } if (R_SUCCEEDED(rc) && sockfd>=0 && (kDown & (HidNpadButton_Left|HidNpadButton_Right|HidNpadButton_Up|HidNpadButton_Down))) { char tmpstr[32]; memset(tmpstr, 0, sizeof(tmpstr)); if (kDown & HidNpadButton_Left) strncpy(tmpstr, "Button Left pressed.", sizeof(tmpstr)-1); else if (kDown & HidNpadButton_Right) strncpy(tmpstr, "Button Right pressed.", sizeof(tmpstr)-1); else if (kDown & HidNpadButton_Up) strncpy(tmpstr, "Button Up pressed.", sizeof(tmpstr)-1); else if (kDown & HidNpadButton_Down) strncpy(tmpstr, "Button Down pressed.", sizeof(tmpstr)-1); ssize_t ret = sendto(sockfd, tmpstr, sizeof(tmpstr), 0, (struct sockaddr*) &serv_addr, sizeof(struct sockaddr_in)); int tmp = errno; printf("sendto(): %ld", ret); if (ret < 0) printf(", %s", strerror(tmp)); printf("\n"); } if (R_SUCCEEDED(rc) && sockfd>=0) { char tmpstr[32]; memset(tmpstr, 0, sizeof(tmpstr)); struct sockaddr_in src_addr={0}; socklen_t fromlen = sizeof(struct sockaddr_in); ssize_t ret = recvfrom(sockfd, tmpstr, sizeof(tmpstr), MSG_DONTWAIT, (struct sockaddr*) &src_addr, &fromlen); tmpstr[sizeof(tmpstr)-1] = 0; if (ret>0) printf("Received data: %s\n", tmpstr); } consoleUpdate(NULL); } if (sockfd >= 0) { close(sockfd); sockfd = -1; } leave_network(); lp2pExit(); socketExit(); consoleExit(NULL); return 0; }