/** * @brief Main program. * @param None * @retval None */ int wifi_main(void) { unsigned char i; SysTick_Configuration(); // DBGU_Init(); SN8200_API_Init(921600); strcpy(domain, "www.murata-ws.com"); strcpy(uri, "/index.html"); printf("\n\rHello, Embedded World!\n\r"); printf("\n\r"); WifiOn(seqNo++); printf("\n\r"); ShowMenu(); WifiDisconn(seqNo++); WifiJoin(seqNo++); SnicInit(seqNo++); SnicIPConfig(seqNo++); /* Infinite loop */ while (1) { if(DBGU_InputReady) { ProcessUserInput(); } if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(quit_flag) break; } printf("\n\rGoodbye, Embedded World!\n\r"); }void DBGU_Init(void)
}int udpCreateSocket(int8u bindOption, int32u ip, int16u port, int8u seq) { int8u buf[9]; buf[0] = SNIC_UDP_CREATE_SOCKET_REQ; buf[1] = seq; buf[2] = bindOption; if (bindOption) { int32u myip = swap32(ip); int16u myport = swap16(port); memcpy(buf+3, (int8u*)&myip, 4); memcpy(buf+7, (int8u*)&myport, 2); serial_transmit(CMD_ID_SNIC, buf, 9, ACK_NOT_REQUIRED); } else serial_transmit(CMD_ID_SNIC, buf, 3, ACK_NOT_REQUIRED); printf("-udpCreateSocket\n\r"); while (1) { if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(IsCreateSocketResponsed) { IsCreateSocketResponsed = false; break; } mdelay(1); } return 0; }int udpSendFromSock(int32u ip, int16u iPort, int8u shortsock, int8u conMode, int8u *sendbuf, int16u len, int8u seq)
}int udpSendFromSock(int32u ip, int16u iPort, int8u shortsock, int8u conMode, int8u *sendbuf, int16u len, int8u seq) { int8u buf[2048+12]; int16u mybufsize; if (len == 0 || len > MAX_BUFFER_SIZE) { len = MAX_BUFFER_SIZE; } buf[0] = SNIC_UDP_SEND_FROM_SOCKET_REQ; buf[1] = seq; memcpy(buf+2, (int8u*)&ip, 4); memcpy(buf+6, (int8u*)&iPort, 2); buf[8] = shortsock; buf[9] = conMode; mybufsize = swap16(len); memcpy(buf+10, (int8u*)&mybufsize, 2); memcpy(buf+12, sendbuf, len); serial_transmit(CMD_ID_SNIC, buf, 12+len, ACK_NOT_REQUIRED); printf("-udpSendFromSock\n\r"); timeout = 10000; while (timeout--) { if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(sendUDPDone) { sendUDPDone = 0; break; } mdelay(1); } return 0; }int udpStartRecv(int32u sock, int16u bufsize, int8u seq)
}int tcpConnectToServer(int8u shortSock, int32u ip, int16u port, int16u bufsize, int8u timeout, int8u seq) { int8u buf[12]; if (bufsize == 0 || bufsize > MAX_BUFFER_SIZE) { bufsize = MAX_BUFFER_SIZE; } buf[0] = SNIC_TCP_CONNECT_TO_SERVER_REQ; buf[1] = seq; buf[2] = shortSock; memcpy(buf+3, (int8u*)&ip, 4); memcpy(buf+7, (int8u*)&port, 2); bufsize = swap16(bufsize); memcpy(buf+9, (int8u*)&bufsize, 2); buf[11] = timeout; serial_transmit(CMD_ID_SNIC, buf, 12, ACK_NOT_REQUIRED); printf("-tcpConnectToServer\n\r"); mdelay(1000); //Wait module return value while (1) { if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(IsSNICTCPConnectToServerResponsed) { IsSNICTCPConnectToServerResponsed = false; break; } mdelay(1); } return 0; }int tcpCreateConnection(int8u shortSock, int16u size, int8u maxClient, int8u seq)
}int sendFromSock(int8u shortSocket, int8u * sendBuf, int16u len, int8u timeout, int8u seq) { int8u buf[MAX_BUFFER_SIZE+6]; int16u mybufsize; if (len == 0 || len > MAX_BUFFER_SIZE) { len = MAX_BUFFER_SIZE; } buf[0] = SNIC_SEND_FROM_SOCKET_REQ; buf[1] = seq; buf[2] = shortSocket; buf[3] = 0; mybufsize = swap16(len); memcpy(buf+4, (int8u*)&mybufsize, 2); memcpy(buf+6, sendBuf, len); serial_transmit(CMD_ID_SNIC, buf, 6+len, ACK_NOT_REQUIRED); printf("-sendFromSock\n\r"); while (1) { if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(IsSNICSendFromSocketResponsed) { IsSNICSendFromSocketResponsed = false; break; } mdelay(1); } return 0; }int udpCreateSocket(int8u bindOption, int32u ip, int16u port, int8u seq)
}int tcpCreateSocket(int8u bindOption, int32u localIp, int16u port, int8u seq, int8u ssl) { int8u buf[9]; buf[0] = ssl; buf[1] = seq; buf[2] = bindOption; if (bindOption) { memcpy(buf+3, (uint8_t*)&localIp, 4); memcpy(buf+7, (uint8_t*)&port, 2); serial_transmit(CMD_ID_SNIC, buf, 9, ACK_NOT_REQUIRED); } else serial_transmit(CMD_ID_SNIC, buf, 3, ACK_NOT_REQUIRED); printf("-tcpCreateSocket\n\r"); timeout = 10000; while (timeout--) { if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(IsCreateSocketResponsed) { IsCreateSocketResponsed = false; break; } mdelay(1); } return 0; }int closeSocket(int8u shortSocket, int8u seq)
void WiFi(void) { static void (*f)(void)=NULL; static int fo=true; if(f==NULL) { DbgPrint(NULL); Dbg=_buffer_init(128); SN8200_API_Init(921600); strcpy(domain, "www.murata-ws.com"); strcpy(uri, "/index.html"); if(!__com0 || !Dbg) NVIC_SystemReset(); else { f=App_Loop; App_Loop=WiFi; SnicCleanup(seqNo++); WifiOff(seqNo++); Wait(200,App_Loop); WifiOn(seqNo++); Wait(200,App_Loop); SnicInit(seqNo++); Wait(200,App_Loop); GetStatus(seqNo++); Wait(200,App_Loop); _buffer_push(Dbg,"0\r",2); SnicGetDhcp(seqNo++); _buffer_push(Dbg,"6000\r",5); while (setTCPinfo() == CMD_ERROR) Wait(200,App_Loop); mysock = -1; tcpCreateSocket(1, srcIP, (unsigned short)srcPort, seqNo++, SNIC_TCP_CREATE_SOCKET_REQ); if (mysock != -1) { tcpCreateConnection(mysock, TEST_BUFFERSIZE, 0x5, seqNo++); } } } else { __sendFromSock(); if(fo==true) { fo=false; fo=ProcessUserInput(); } if(SN8200_API_HasInput()) ProcessSN8200Input(); f(); } }
}void GetStatus(int8u seq) { int8u buf[4]; buf[0] = WIFI_GET_STATUS_REQ; buf[1] = seq; buf[2] = 0; serial_transmit(CMD_ID_WIFI, buf, 3, ACK_NOT_REQUIRED); printf("-GetStatus\n\r"); timeout = 10000; while (timeout--) { if(1) { ProcessSN8200Input(); } if(IsWIFIGetStatusResponsed) { IsWIFIGetStatusResponsed = false; break; } mdelay(1); } }void WifiOn(int8u seq)
}void SnicIPConfig(int8u seq) { int8u buf[16]; buf[0] = SNIC_IP_CONFIG_REQ; buf[1] = seq; buf[2] = 0; //STA buf[3] = 1; //DHCP serial_transmit(CMD_ID_SNIC, buf, 4, ACK_NOT_REQUIRED); printf("-SnicIPConfig\n\r"); timeout = 10000; while (timeout--) { if(1) { ProcessSN8200Input(); } if(IsSNICIPConfigResponsed) { IsSNICIPConfigResponsed = false; break; } mdelay(1); } }void SnicGetDhcp(int8u seq)
//Get the WiFi status from SN8200 void GetStatus(int8u seq) { int8u payload[4]; payload[0] = WIFI_GET_STATUS_REQ; payload[1] = seq; payload[2] = 1; // 0 STA ; 1 AP serial_transmit(CMD_ID_WIFI, payload, 3, ACK_NOT_REQUIRED); timeout = 10000; while (timeout--) { if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(IsWIFIGetStatusResponsed) { IsWIFIGetStatusResponsed = false; break; } mdelay(1); } }
}void ApOnOff(int8u seq) { int8u buf[4]; APOnOff ^= 1; buf[0] = WIFI_AP_CTRL_REQ; buf[1] = seq; buf[2] = APOnOff; buf[3] = 0; //persistency hardcode set as 0 means NOT save to NVM serial_transmit(CMD_ID_WIFI, buf, 4, ACK_NOT_REQUIRED); printf("-AP status\n\r"); timeout = 10000; while (timeout--) { if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(IsWIFIApCtrlResponsed) { IsWIFIApCtrlResponsed = false; break; } mdelay(1); } }void WifiScan(int8u seq)
//Turn on or off the soft AP void ApOnOff(int8u OnOff, int8u seq) { int8u payload[4]; APOnOff = OnOff; payload[0] = WIFI_AP_CTRL_REQ; payload[1] = seq; payload[2] = APOnOff; payload[3] = 0; //persistency hardcode set as 0 means NOT save to NVM serial_transmit(CMD_ID_WIFI, payload, 4, ACK_NOT_REQUIRED); timeout = 10000; while (timeout--) { if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(IsWIFIApCtrlResponsed) { IsWIFIApCtrlResponsed = false; break; } mdelay(1); } }
}void SnicGetDhcp(int8u seq) { int8u buf[3]; char tempstr[2] = {0}; buf[0] = SNIC_GET_DHCP_INFO_REQ; buf[1] = seq; printf("\n\rInterface Type? (0: STA 1: AP) \n\r"); scanf("%s", tempstr); printf("\n\r"); buf[2] = atoi(tempstr); //buf[2] = 0; // STA 1; // AP serial_transmit(CMD_ID_SNIC, buf, 3, ACK_NOT_REQUIRED); printf("-SnicGetDhcp\n\r"); timeout = 10000; while (timeout--) { if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(IsSNICGetDHCPInfoResponsed) { IsSNICGetDHCPInfoResponsed = false; break; } mdelay(1); } }int tcpCreateSocket(int8u bindOption, int32u localIp, int16u port, int8u seq, int8u ssl)
}void WifiJoin(int8u seq) { int i; uint8_t ch; int8u buf[128]; char tempstr[2] = {0}; int8u *p = buf; *p++ = WIFI_JOIN_REQ; *p++ = seq; strcpy(SSID,"Kwak0042"); /*for(i=0; i<strlen(SSID); i++) { ch = SSID[i]; DBGU_RxBuffer[DBGU_RxBufferHead] = ch; USART_SendData(USART2, ch); DBGU_RxBufferHead = (DBGU_RxBufferHead + 1) % DBGU_RX_BUFFER_SIZE; } DBGU_RxBuffer[DBGU_RxBufferHead] = ch; USART_SendData(USART2, 0x0D); DBGU_RxBufferHead = (DBGU_RxBufferHead + 1) % DBGU_RX_BUFFER_SIZE; DBGU_InputReady = 1; escape = 1;*/ //Test_fgetc(); printf("qweqwe"); printf("\n\r"); while(!strlen(SSID)) { printf("SSID can't be empty. Enter SSID:\n\r"); scanf("%s", SSID); printf("\n\r"); } printf("asdasdasdsa"); delay_ms(10); memcpy(p, SSID, strlen(SSID)); p += strlen(SSID); *p++ = 0x00; delay_ms(10); strcpy(tempstr,"6"); /*DBGU_RxBuffer[DBGU_RxBufferHead] = tempstr[0]; USART_SendData(USART2, tempstr[0]); DBGU_RxBufferHead = (DBGU_RxBufferHead + 1) % DBGU_RX_BUFFER_SIZE; DBGU_RxBuffer[DBGU_RxBufferHead] = tempstr[0]; USART_SendData(USART2, 0x0D); DBGU_RxBufferHead = (DBGU_RxBufferHead + 1) % DBGU_RX_BUFFER_SIZE; DBGU_InputReady = 1; escape = 1;*/ //Test_fgetc(); delay_ms(10); printf("\n\r"); secMode = atoi(tempstr); if (secMode) { strcpy(secKey,"aaaaaaaa"); /*for(i=0; i<strlen(secKey); i++) { ch = secKey[i]; ch = SSID[i]; DBGU_RxBuffer[DBGU_RxBufferHead] = ch; USART_SendData(USART2, ch); DBGU_RxBufferHead = (DBGU_RxBufferHead + 1) % DBGU_RX_BUFFER_SIZE; } DBGU_RxBuffer[DBGU_RxBufferHead] = ch; USART_SendData(USART2, 0x0D); DBGU_RxBufferHead = (DBGU_RxBufferHead + 1) % DBGU_RX_BUFFER_SIZE; DBGU_InputReady = 1; escape = 1;*/ //Test_fgetc(); delay_ms(10); printf("\n\r"); Keylen = (unsigned char)strlen(secKey); if (Keylen <= 0) { printf("Invalid Key\n\r"); return; } } *p++ = secMode; *p++ = Keylen; if (Keylen) { memcpy(p, secKey, Keylen); p += Keylen; } serial_transmit(CMD_ID_WIFI, buf, (int)(p - buf), ACK_NOT_REQUIRED); printf("-WifiJoin\n\r"); timeout = 10000; while (timeout--) { if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(IsWIFIJoinResponsed) { IsWIFIJoinResponsed = false; printf("ttttttttttttt"); break; } delay_ms(10); } joinok = 0; }void WifiDisconn(int8u seq)
int main(void) { /* USER CODE BEGIN 1 */ trace_printf("Hello\n"); uint8_t ch; uint32_t DBGU_RxBufferTail = 0; uint32_t DBGU_RxBufferHead = 0; uint8_t DBGU_RxBuffer[DBGU_RX_BUFFER_SIZE]; /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ BSP_UART_Init(115200); SN8200_HAL_Init(921600); uprintf("\n\rHello!\n\r"); uprintf("\n\r"); WifiOn(seqNo++); uprintf("\n\r"); ShowMenu(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(HAL_UART_Receive(&huart6,&ch,1,100) == HAL_OK) { switch (ch) { case 0x7F: if(DBGU_RxBufferHead != DBGU_RxBufferTail) { DBGU_RxBufferHead = (DBGU_RxBufferHead - 1) % DBGU_RX_BUFFER_SIZE; HAL_UART_Transmit_IT(&huart6,0x7F,1); } break; case 0x0D: DBGU_RxBuffer[DBGU_RxBufferHead] = ch; DBGU_RxBufferHead = (DBGU_RxBufferHead + 1) % DBGU_RX_BUFFER_SIZE; DBGU_InputReady = 1; break; case In_BACKSPACE: HAL_UART_Transmit_IT(&huart6,&ch,1); break; default: DBGU_RxBuffer[DBGU_RxBufferHead] = ch; HAL_UART_Transmit_IT(&huart6,&ch,1); DBGU_RxBufferHead = (DBGU_RxBufferHead + 1) % DBGU_RX_BUFFER_SIZE; key = ch; break; } } if(DBGU_InputReady) { ProcessUserInput(); } if(SN8200_API_HasInput()) { ProcessSN8200Input(); } if(quit_flag) { break; } } uprintf("Goodbye\n\r"); /* USER CODE END 3 */ }