Exemple #1
0
}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)
Exemple #2
0
}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)
// 把nRF24L01+接收到的数据发到串口。
void interpreter_rf2serial(const void * rfData,uint8_t len)
{
	uint8_t frameHead[] = {0x55,0xAA,0x00};

	frameHead[2]=len;
	serial_transmit(frameHead,sizeof(frameHead));
	serial_transmit(rfData,len);
}
void WifiDisconn(int8u seq)
{
    int8u payload[2];
    payload[0] = WIFI_DISCONNECT_REQ;
    payload[1] = seq;
    serial_transmit(CMD_ID_WIFI, payload, 2, ACK_NOT_REQUIRED);
}
//Turn off Wifi on SN8200
void WifiOff(int8u seq)
{
    int8u payload[2];
    payload[0] = WIFI_OFF_REQ;
    payload[1] = seq;
    serial_transmit(CMD_ID_WIFI, payload, 2, ACK_NOT_REQUIRED);
}
Exemple #6
0
}void WifiDisconn(int8u seq)
{    int8u buf[2];
    buf[0] = WIFI_DISCONNECT_REQ;
    buf[1] = seq;
    serial_transmit(CMD_ID_WIFI, buf, 2, ACK_NOT_REQUIRED);
    printf("-WifiDisconn\n\r");
}void SnicInit(int8u seq)
Exemple #7
0
}void SnicCleanup(int8u seq)
{    int8u buf[2];
    buf[0] = SNIC_CLEANUP_REQ;
    buf[1] = seq;
    serial_transmit(CMD_ID_SNIC, buf, 2, ACK_NOT_REQUIRED);
    printf("-SnicCleanup\n\r");
}void SnicIPConfig(int8u seq)
Exemple #8
0
}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)
Exemple #9
0
}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)
Exemple #10
0
}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)
Exemple #11
0
}int fillNSendHttpReq(int8u seq, char* domain, char* uri, char method, char* contentType, char* otherHeader, int contentLen, char* content, unsigned char timeout, char moreData, char isHttps)
{    char *ptr = NULL;
    int8u buf[1024];
    int16u encodedLen = moreData?contentLen|0x8000:contentLen;
    memset(buf, 0, sizeof(buf));
    buf[0] = SNIC_HTTP_REQ;
    buf[1] = seq;
    *((int16u*)&buf[2]) = 0x5000; //swapped
    buf[4] = method;
    buf[5] = timeout;
    
    if (isHttps) {
        buf[0] = SNIC_HTTPS_REQ;
        *((int16u*)&buf[2]) = 0xbb01; // 443 swapped 
    }
    ptr = (char*)buf+6;
    ptr += sprintf(ptr, "%s", domain)+1;
    ptr += sprintf(ptr, "%s", uri)+1;
    ptr += sprintf(ptr, "%s", contentType)+1;
    ptr += sprintf(ptr, "%s", otherHeader)+1;
    *((int16u*)ptr) = swap16(encodedLen);
    ptr += 2;
    if (contentLen) 
        memcpy(ptr, content, contentLen);
    serial_transmit(CMD_ID_SNIC, buf, ptr-(char*)buf+contentLen, ACK_NOT_REQUIRED);
    return 0;
}/*add HttpMoreReq cmd*/
Exemple #12
0
}void WifiOff(int8u seq)
{    int8u buf[2];
    buf[0] = WIFI_OFF_REQ;
    buf[1] = seq;
    serial_transmit(CMD_ID_WIFI, buf, 2, ACK_NOT_REQUIRED);
    printf("-WifiOff\n\r");
}void ApOnOff(int8u seq)
//Turn on Wifi on SN8200
void WifiOn(int8u seq)
{
    int8u payload[4];
    payload[0] = WIFI_ON_REQ;
    payload[1] = seq;
    payload[2] = (char)'U';   //Country code
    payload[3] = (char)'S';   //Country code
    serial_transmit(CMD_ID_WIFI, payload, 4, ACK_NOT_REQUIRED);
}
Exemple #14
0
}void WifiScan(int8u seq)
{    int8u buf[12];
    buf[0] = WIFI_SCAN_REQ;
    buf[1] = seq;
    memset(&buf[2], 0, 10);
    buf[3] = 2; // bss type = any
    serial_transmit(CMD_ID_WIFI, buf, 12, ACK_NOT_REQUIRED);
    printf("-WifiScan\n\r");
}void WifiJoin(int8u seq)
Exemple #15
0
}void WifiOn(int8u seq)
{    int8u buf[4];
    buf[0] = WIFI_ON_REQ;
    buf[1] = seq;
    buf[2] = (char)'U';
    buf[3] = (char)'S';
    serial_transmit(CMD_ID_WIFI, buf, 4, ACK_NOT_REQUIRED);
    printf("-WifiOn\n\r");
}void WifiOff(int8u seq)
Exemple #16
0
}int closeSocket(int8u shortSocket, int8u seq)
{    int8u buf[3];
    buf[0] = SNIC_CLOSE_SOCKET_REQ;
    buf[1] = seq;
    buf[2] = shortSocket;
    serial_transmit(CMD_ID_SNIC, buf, 3, ACK_NOT_REQUIRED);
    printf("-closeSocket\n\r");
    printf("Socket %d closed\n\r", shortSocket);
    return 0;
}int tcpConnectToServer(int8u shortSock, int32u ip, int16u port, int16u bufsize, int8u timeout, int8u seq)
Exemple #17
0
}void SnicInit(int8u seq)
{    int8u buf[4];
    int tmp;
    tmp = 0x00;			//The Default receive buffer size
    buf[0] = SNIC_INIT_REQ;
    buf[1] = seq;
    memcpy(buf+2, (uint8_t*)&tmp, 2);
    serial_transmit(CMD_ID_SNIC, buf, 4, ACK_NOT_REQUIRED);
    printf("-SnicInit\n\r");
}void SnicCleanup(int8u seq)
Exemple #18
0
			/*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)
{    int8u buf[2];
    buf[0] = WIFI_DISCONNECT_REQ;
    buf[1] = seq;
    serial_transmit(CMD_ID_WIFI, buf, 2, ACK_NOT_REQUIRED);
    printf("-WifiDisconn\n\r");
}void SnicInit(int8u seq)
{    int8u buf[4];
    int tmp;
    tmp = 0x00;			//The Default receive buffer size
    buf[0] = SNIC_INIT_REQ;
    buf[1] = seq;
    memcpy(buf+2, (uint8_t*)&tmp, 2);
    serial_transmit(CMD_ID_SNIC, buf, 4, ACK_NOT_REQUIRED);
    printf("-SnicInit\n\r");
}void SnicCleanup(int8u seq)
{    int8u buf[2];
    buf[0] = SNIC_CLEANUP_REQ;
    buf[1] = seq;
    serial_transmit(CMD_ID_SNIC, buf, 2, ACK_NOT_REQUIRED);
    printf("-SnicCleanup\n\r");
}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)
{    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)
{    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)
{    int8u buf[3];
    buf[0] = SNIC_CLOSE_SOCKET_REQ;
    buf[1] = seq;
    buf[2] = shortSocket;
    serial_transmit(CMD_ID_SNIC, buf, 3, ACK_NOT_REQUIRED);
    printf("-closeSocket\n\r");
    printf("Socket %d closed\n\r", shortSocket);
    return 0;
}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)
{    int8u buf[6];
    if (size == 0 || size > MAX_BUFFER_SIZE) {
        size = MAX_BUFFER_SIZE;
    }
    if (maxClient == 0 || maxClient > MAX_CONNECTION_PER_SOCK)
        maxClient = MAX_CONNECTION_PER_SOCK;
    buf[0] = SNIC_TCP_CREATE_CONNECTION_REQ;
    buf[1] = seq;
    buf[2] = shortSock;
    size = swap16(size);
    memcpy(buf+3, (int8u*)&size, 2);
    buf[5] = maxClient;
    serial_transmit(CMD_ID_SNIC, buf, 6, ACK_NOT_REQUIRED);
    printf("-tcpCreateConnection\n\r");
    return 0;
}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)
{    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)
{    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)
{    int8u buf[5];
    int tmp;
    if (bufsize ==0 || bufsize > MAX_BUFFER_SIZE) {
        bufsize = MAX_BUFFER_SIZE;
    }
    tmp = swap16(bufsize);
    buf[0] = SNIC_UDP_START_RECV_REQ;
    buf[1] = seq;
    buf[2] = sock;
    memcpy(buf+3, (int8u*)&tmp, 2);
    serial_transmit(CMD_ID_SNIC, buf, 5, ACK_NOT_REQUIRED);
    printf("-udpStartRecv\n\r");
    return 0;
}void ProcessSN8200Input(void)
{    rx_thread_proc();
}void handleRxWiFi(int8u* buf, int len)
{    int8u subCmdId = buf[0];
    switch (subCmdId) {
    case WIFI_GET_STATUS_RSP: {
        IsWIFIGetStatusResponsed = true;
        if (buf[2] == MODE_WIFI_OFF) {
            printf("WiFi Off.\n\r");
        } else {
            char val[20] = {0};
            int i=0;
            for(i=0; i<6; i++) {
                sprintf(val+3*i, "%02X:", buf[3+i]);
            }
            val[strlen(val)-1] = 0;
            printf("WiFi On.  Mac: %s.  ", val);
            if (buf[2] == MODE_NO_NETWORK) {
                printf("Not joined any network.\n\r");
            } else {
                printf("Joined SSID: %s\n\r", buf+9);
            }
        }
    }
    break;
    case WIFI_JOIN_RSP: {
        IsWIFIJoinResponsed = true;
        if (WIFI_SUCCESS == buf[2])
            printf("Join success\n\r");
        else
            printf("Join fail\n\r");
    }
    break;
    case WIFI_AP_CTRL_RSP: {
        IsWIFIApCtrlResponsed = true;
        if (WIFI_SUCCESS == buf[2]) {
            if (APOnOff)
                printf("AP is ON\n\r");
            else
                printf("AP is OFF\n\r");
        } else
            printf("AP control fail\n\r");
    }
    break;
    case WIFI_NETWORK_STATUS_IND: {
        if (WIFI_NETWORK_UP == buf[3]) {
            printf("Network UP\n\r");
            joinok = 1;
        } else {
            printf("Network Down\n\r");
        }
    }
    break;
    case WIFI_SCAN_RESULT_IND: {
        int cnt = buf[2];
        int i=3;
        int j;
        int8u ch, sec_tmp;
        int8s rssi;
        int8u len=32;
        if(cnt == 0) {
            for (j = 0; j < totalscan; j++) {
                printf("SSID: %20s CH: %2d RSSI: %3d Sec: %d\n\r",sl[j].SSIDname, sl[j].ch,sl[j].rssi,sl[j].sectype);
            }
            memset(sl, 0, totalscan * sizeof(scanlist_t));
            totalscan = 0; //reset current scan result
        } else {
            while (cnt--) {
                ch = buf[i++];
                rssi = (int8s)buf[i++];
                sec_tmp = buf[i++];
                i += 6;
                i++;
                i += 2;
                len = (int8u)strlen((char*)buf+i);
                if (len>32) {
                    break;
                }
                strcpy((char*)sl[totalscan].SSIDname,(char*)buf+i);
                sl[totalscan].ch = ch;
                sl[totalscan].rssi = rssi;
                sl[totalscan].sectype = sec_tmp;
                if (len == 0) {
                    while (buf[i] == 0) i++;
                } else
                    i += len+1;
                totalscan++;
            }
        }
    }
    break;
    default:
        break;
    }
    printf(".\n\r");
}void handleRxSNIC(uint8_t* buf, int len)
{    uint8_t subCmdId = buf[0];
    static int times = 0;
    static int isPrintable = 0;
    switch (subCmdId) {
    case SNIC_CLOSE_SOCKET_RSP: {
        if (SNIC_SUCCESS != buf[2]) 
            printf("Close socket failed\n\r");
        else {
            printf("Socket closed\n\r");
        }
    }
            break;
    case SNIC_IP_CONFIG_RSP: {
        IsSNICIPConfigResponsed = true;
        ipok = 0;
        if (SNIC_SUCCESS == buf[2]) {
            printf("IPConfig OK\n\r");
            ipok = 1;
        } else
            printf("IPConfig fail\n\r");
    }
    break;
    case SNIC_GET_DHCP_INFO_RSP: {
        IsSNICGetDHCPInfoResponsed = true;
        if (SNIC_SUCCESS == buf[2]) {
            printf("IP assigned as %i.%i.%i.%i \n\r", buf[9],buf[10],buf[11],buf[12]);
            //save IP
            memcpy(&selfIP, buf+9, 4);
        } else
            printf("IP not assigned\n\r");
    }
    break;
    case SNIC_TCP_CREATE_SOCKET_RSP:
    case SNIC_TCP_CREATE_ADV_TLS_SOCKET_RSP:
    case SNIC_TCP_CREATE_SIMPLE_TLS_SOCKET_RSP:
    case SNIC_UDP_CREATE_SOCKET_RSP: {
        IsCreateSocketResponsed = true;
        if (SNIC_SUCCESS == buf[2]) {
            mysock = buf[3];
            printf("Socket %d opened\n\r", mysock);
        } else
            printf("Socket creation failed\n\r");
    }
    break;
    case SNIC_TCP_CONNECT_TO_SERVER_RSP: {
        IsSNICTCPConnectToServerResponsed = true;
        if (SNIC_CONNECT_TO_SERVER_PENDING == buf[2] || SNIC_SUCCESS == buf[2])
            ;
        else
            printf("Unable to connect server\n\r");
    }
    break;
    
    case SNIC_TCP_CREATE_CONNECTION_RSP:
            {
                if (SNIC_SUCCESS != buf[2])
                    printf("Unable to create TCP server\n\r");
            }
    break;
    case SNIC_TCP_CONNECTION_STATUS_IND: {
        if (SNIC_CONNECTION_UP == buf[2]) {
            printf("Socket connection UP\n\r");
            sockConnected = buf[3];
        }
        else if (SNIC_CONNECTION_CLOSED == buf[2]) {
            printf("Socket %i closed\n\r", buf[3]);
            sockClosed = buf[3];
        }
    }
    break;
    case SNIC_SEND_RSP: {
        int32u sentsize;
        IsSNICSendFromSocketResponsed = true;
        if (SNIC_SUCCESS == buf[2]) {
            pktcnt ++;
            sentsize = ((int32u)(buf[3] << 8) | (int32u)buf[4]);
            printf("pkt %d, %d bytes sent \n\r", pktcnt, sentsize);
        }
    }
    break;
    case SNIC_CONNECTION_RECV_IND: {
        int i=0;
        int32u sentsize = ((int32u)(buf[3] << 8) | (int32u)buf[4]);
        int32u sock = (int32u)buf[2];
        printf("%d bytes received from socket %d \n\r", sentsize, sock);
        mdelay(10);
        if (strncmp((char*)buf+5, "GET /", 5) == 0 || strncmp((char*)buf+5, "POST /", 6) == 0) { // Receives a HTTP(S) get/post request.
            static int i=0;
            for (i=0; i<sentsize; i++) {
                printf("%c", buf[5+i]);
            }
            i = 0;
            sprintf(out, HTTP_RSP_STR, i++);
            // Send back something
            sendFromSock(sock, (int8u*)out, strlen(out), 2, seqNo++);
        
            // If it is a TLS server, it only accepts one connection, so
            // it is better for the host app to close it after some idle time for new connections.
            //	Sleep(100);
            //	closeSocket((int8u)sock,seqNo++);
        }
        else if (strncmp((char*)buf+5, "HTTP/1.", 7) == 0) { // Receives HTTP response, close socket. If the socket is not closed,
             for (i=0; i<sentsize; i++) {
                printf("%c", buf[5+i]);
            }                                              // it can be used for more data communication (using send from socket).
            closeSocket((int8u)sock,seqNo++); }
    }
    break;
    case SNIC_TCP_CLIENT_SOCKET_IND: {
        int8u listen_sock = buf[2];
        printf("Accepted connection from %i.%i.%i.%i\n\r", buf[4], buf[5], buf[6], buf[7]);
        printf("Connection socket: %d\n\r", buf[3]);
    }
    break;
    case SNIC_UDP_RECV_IND: {
        printf("%d %d\n\r", times++, htons(*((int16u*)&buf[9])));
    }
    break;
    case SNIC_UDP_SEND_FROM_SOCKET_RSP: {
        IsSNICUDPSendFromSocketResponsed = true;
        if (SNIC_SUCCESS != buf[2]) {
            printf("UDP Send bad\n\r");
        }
        sendUDPDone = 1;
        break;
    }
    case SNIC_HTTP_REQ|0x80:
    case SNIC_HTTPS_REQ|0x80:
    case SNIC_HTTP_MORE_REQ|0x80: {	
        char *contentT = "";
        unsigned short len = *((short*)&buf[4]);
        short contTLen = 0;
        unsigned short moreData = len & 0x8000;	
        char more[10] = {0};
        int8u seq = buf[1];
        short status = *((short*)&buf[2]);
                
        status = swap16(status);
        len = swap16(len);
        
        if (subCmdId == (SNIC_HTTP_MORE_REQ|0x80))
            strcpy(more, "more ");
        len &= 0x7fff;
        
        if (status >= 100) {
            contentT = (char*)&buf[6];;
            contTLen = strlen(contentT)+1;
        }
        
        if (status < 100) {
            printf("\nHTTP %sRSP code: %d, seq#: %d\n\r", more, status, seq);
            break;
        }
        printf("\nHTTP %sRSP code: %d, seq#: %d, Content Length: %d, Type: %s, More data: %s\n\r", more, status, seq, len, contentT, moreData?"yes":"no");
        isPrintable = 0;
        if (contTLen && (strstr(contentT, "text") || strstr(contentT, "xml") ||
            strstr(contentT, "javascript") || strstr(contentT, "html") ||
            strstr(contentT, "json"))) {
            isPrintable = 1;
            buf[6+contTLen+len] = 0;
            printf("Content: \n%s\n\r", buf+6+contTLen);
        }
    }
    break;
    case SNIC_HTTP_RSP_IND: {
                int8u seq = buf[1];
                unsigned short moreData;
                unsigned short len = *((short*)&buf[2]);
                len = swap16(len);
                moreData = len & 0x8000;
                len &= 0x7fff; 
                printf("\nHTTP RSP indication, seq#: %d, content length: %d, More data: %s\n\r", seq, len, moreData?"yes":"no");
                if (isPrintable) { 
                    buf[4+len] = 0;
                    printf("Content: \n%s\n\r", buf+4);
                }
	}
	break;
    default:
        break;
    }
    printf(".\n\r");
}void SendSNIC(unsigned char *buf, int size)
{    const unsigned int IP = udpDestIP;
    int16u port = udpDestPort;
    sendUDPDone = 0;
    udpSendFromSock(IP, port, mysock, 0, buf, size, seqNo++);
}int fillNSendHttpReq(int8u seq, char* domain, char* uri, char method, char* contentType, char* otherHeader, int contentLen, char* content, unsigned char timeout, char moreData, char isHttps)
{    char *ptr = NULL;
    int8u buf[1024];
    int16u encodedLen = moreData?contentLen|0x8000:contentLen;
    memset(buf, 0, sizeof(buf));
    buf[0] = SNIC_HTTP_REQ;
    buf[1] = seq;
    *((int16u*)&buf[2]) = 0x5000; //swapped
    buf[4] = method;
    buf[5] = timeout;
    
    if (isHttps) {
        buf[0] = SNIC_HTTPS_REQ;
        *((int16u*)&buf[2]) = 0xbb01; // 443 swapped 
    }
    ptr = (char*)buf+6;
    ptr += sprintf(ptr, "%s", domain)+1;
    ptr += sprintf(ptr, "%s", uri)+1;
    ptr += sprintf(ptr, "%s", contentType)+1;
    ptr += sprintf(ptr, "%s", otherHeader)+1;
    *((int16u*)ptr) = swap16(encodedLen);
    ptr += 2;
    if (contentLen) 
        memcpy(ptr, content, contentLen);
    serial_transmit(CMD_ID_SNIC, buf, ptr-(char*)buf+contentLen, ACK_NOT_REQUIRED);
    return 0;
}/*add HttpMoreReq cmd*/
int fillNSendHttpMoreReq(int8u seq, int contentLen, char* content, char moreData)
{    int8u buf[1024];
    int16u len = moreData?contentLen|0x8000:contentLen;
    buf[0] = SNIC_HTTP_MORE_REQ;
    buf[1] = seq;
    *((int16u*)&buf[2]) = swap16(len);
    if (contentLen+4 > sizeof(buf))
        return -1;
    memcpy(&buf[4], content, contentLen);
    serial_transmit(CMD_ID_SNIC, buf, contentLen+4, ACK_NOT_REQUIRED);
    return 0;
}
Exemple #19
0
static int serial_handler(struct context *ctxt, void *arg) {
  struct serial_port *sp = (struct serial_port *) arg;
  unsigned char iir;
  unsigned char lsr;
  int boguscnt = ISR_LIMIT;

  while (1) {
    lsr = inp((unsigned short) (sp->iobase + UART_LSR));

    // If receiver ready drain FIFO
    if (lsr & LSR_RXRDY) serial_receive(sp);

    // If transmitter ready send next bytes from tx queue
    if (lsr & LSR_TXRDY) serial_transmit(sp);

    // Get interrupt identification register
    iir = inp((unsigned short) (sp->iobase + UART_IIR));
    //kprintf("[sisr %d %x]", sp->irq, iir);

    if (iir & IIR_NOPEND) break;

    switch (iir & IIR_IMASK) {
      case IIR_MLSC:
        // Modem status changed
        sp->msr = inp((unsigned short) (sp->iobase + UART_MSR));
        sp->mlsc = 1;
        break;

      case IIR_RLS:
        // Line status changed
        sp->linestatus |= (lsr & (LSR_OE | LSR_PE | LSR_FE | LSR_BI));
        sp->rls = 1;
        break;
    }

    if (--boguscnt < 0) {
      kprintf("serial: Too much work at interrupt, iir=0x%02x\n", iir);
      break;
    }
  }

  // Set OUT2 to enable interrupts
  outp(sp->iobase + UART_MCR, sp->mcr);

  queue_irq_dpc(&sp->dpc, serial_dpc, sp);
  eoi(sp->irq);

  return 0;
}
Exemple #20
0
}int udpStartRecv(int32u sock, int16u bufsize, int8u seq)
{    int8u buf[5];
    int tmp;
    if (bufsize ==0 || bufsize > MAX_BUFFER_SIZE) {
        bufsize = MAX_BUFFER_SIZE;
    }
    tmp = swap16(bufsize);
    buf[0] = SNIC_UDP_START_RECV_REQ;
    buf[1] = seq;
    buf[2] = sock;
    memcpy(buf+3, (int8u*)&tmp, 2);
    serial_transmit(CMD_ID_SNIC, buf, 5, ACK_NOT_REQUIRED);
    printf("-udpStartRecv\n\r");
    return 0;
}void ProcessSN8200Input(void)
Exemple #21
0
}int tcpCreateConnection(int8u shortSock, int16u size, int8u maxClient, int8u seq)
{    int8u buf[6];
    if (size == 0 || size > MAX_BUFFER_SIZE) {
        size = MAX_BUFFER_SIZE;
    }
    if (maxClient == 0 || maxClient > MAX_CONNECTION_PER_SOCK)
        maxClient = MAX_CONNECTION_PER_SOCK;
    buf[0] = SNIC_TCP_CREATE_CONNECTION_REQ;
    buf[1] = seq;
    buf[2] = shortSock;
    size = swap16(size);
    memcpy(buf+3, (int8u*)&size, 2);
    buf[5] = maxClient;
    serial_transmit(CMD_ID_SNIC, buf, 6, ACK_NOT_REQUIRED);
    printf("-tcpCreateConnection\n\r");
    return 0;
}int sendFromSock(int8u shortSocket, int8u * sendBuf, int16u len, int8u timeout, int8u seq)
Exemple #22
0
}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)
Exemple #23
0
}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);
    }
}
Exemple #25
0
}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);
    }
}
Exemple #27
0
}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)
Exemple #28
0
}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)