bool ServerDrv::sendData(uint8_t sock, const uint8_t *data, uint16_t len) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(SEND_DATA_TCP_CMD, PARAM_NUMS_2); SpiDrv::sendBuffer(&sock, sizeof(sock)); SpiDrv::sendBuffer((uint8_t *)data, len, LAST_PARAM); //Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if (!SpiDrv::waitResponseData8(SEND_DATA_TCP_CMD, &_data, &_dataLen)) { WARN("error waitResponse"); } SpiDrv::spiSlaveDeselect(); if (_dataLen!=0) { return (_data == 1); } return false; }
bool ServerDrv::getData(uint8_t sock, uint8_t *data, uint8_t peek) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_DATA_TCP_CMD, PARAM_NUMS_2); SpiDrv::sendParam(&sock, sizeof(sock)); SpiDrv::sendParam(peek, LAST_PARAM); //Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if (!SpiDrv::waitResponseData8(GET_DATA_TCP_CMD, &_data, &_dataLen)) { WARN("error waitResponse"); } SpiDrv::spiSlaveDeselect(); if (_dataLen!=0) { *data = _data; return true; } return false; }
int WiFiDrv::getHostByName(IPAddress& aResult) { uint8_t _ipAddr[WL_IPV4_LENGTH]; IPAddress dummy(0xFF,0xFF,0xFF,0xFF); int result = 0; WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_HOST_BY_NAME_CMD, PARAM_NUMS_0); //Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _dataLen = 0; if (!SpiDrv::waitResponseCmd(GET_HOST_BY_NAME_CMD, PARAM_NUMS_1, _ipAddr, &_dataLen)) { WARN("error waitResponse"); }else{ aResult = _ipAddr; result = (aResult != dummy); } SpiDrv::spiSlaveDeselect(); return result; }
uint8_t ServerDrv::availData(uint8_t sock) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(AVAIL_DATA_TCP_CMD, PARAM_NUMS_1); SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); //Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if (!SpiDrv::waitResponseCmd(AVAIL_DATA_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen)) { WARN("error waitResponse"); } SpiDrv::spiSlaveDeselect(); if (_dataLen!=0) { return (_data == 1); } return false; }
uint8_t ServerDrv::checkDataSent(uint8_t sock) { const uint16_t TIMEOUT_DATA_SENT = 25; uint16_t timeout = 0; uint8_t _data = 0; uint8_t _dataLen = 0; do { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(DATA_SENT_TCP_CMD, PARAM_NUMS_1); SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply if ( !SpiDrv::waitResponseCmd(DATA_SENT_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen) ) { WARN("error waitResponse isDataSent"); } SpiDrv::spiSlaveDeselect(); if ( _data ) { timeout = 0; } else { ++timeout; delay(100); } } while ( (_data == 0) && (timeout < TIMEOUT_DATA_SENT) ); return (timeout == TIMEOUT_DATA_SENT) ? 0 : 1; }
int32_t WiFiDrv::getRSSINetoworks(uint8_t networkItem) { if ( networkItem >= WL_NETWORKS_LIST_MAXNUM ) { return NULL; } int32_t networkRssi = 0; WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_IDX_RSSI_CMD, PARAM_NUMS_1); SpiDrv::sendParam(&networkItem, 1, LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t dataLen = 0; SpiDrv::waitResponseCmd(GET_IDX_RSSI_CMD, PARAM_NUMS_1, (uint8_t *) &networkRssi, &dataLen); SpiDrv::spiSlaveDeselect(); return networkRssi; }
char *WiFiDrv::getFwVersion() { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_FW_VERSION_CMD, PARAM_NUMS_0); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _dataLen = 0; if ( !SpiDrv::waitResponseCmd(GET_FW_VERSION_CMD, PARAM_NUMS_1, (uint8_t *) fwVersion, &_dataLen) ) { WARN("error waitResponse"); } SpiDrv::spiSlaveDeselect(); return fwVersion; }
// Start server TCP on port specified void ServerDrv::stopClient(uint8_t sock) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(STOP_CLIENT_TCP_CMD, PARAM_NUMS_1); SpiDrv::sendParam(&sock, 1, LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if ( !SpiDrv::waitResponseCmd(STOP_CLIENT_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen) ) { WARN("error waitResponse"); } SpiDrv::spiSlaveDeselect(); }
uint8_t WiFiDrv::getScanNetworks() { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(SCAN_NETWORKS, PARAM_NUMS_0); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t ssidListNum = 0; SpiDrv::waitResponse(SCAN_NETWORKS, &ssidListNum, (uint8_t **) _networkSsid, WL_NETWORKS_LIST_MAXNUM); SpiDrv::spiSlaveDeselect(); return ssidListNum; }
void WiFiDrv::getRemoteData(uint8_t sock, uint8_t *ip, uint8_t *port) { tParam params[PARAM_NUMS_2] = { { 0, (char *) ip }, { 0, (char *) port } }; WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_REMOTE_DATA_CMD, PARAM_NUMS_1); SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply SpiDrv::waitResponseParams(GET_REMOTE_DATA_CMD, PARAM_NUMS_2, params); SpiDrv::spiSlaveDeselect(); }
uint8_t WiFiDrv::getConnectionStatus() { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_CONN_STATUS_CMD, PARAM_NUMS_0); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = -1; uint8_t _dataLen = 0; SpiDrv::waitResponseCmd(GET_CONN_STATUS_CMD, PARAM_NUMS_1, &_data, &_dataLen); SpiDrv::spiSlaveDeselect(); return _data; }
uint8_t ServerDrv::getClientState(uint8_t sock) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_CLIENT_STATE_TCP_CMD, PARAM_NUMS_1); SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if ( !SpiDrv::waitResponseCmd(GET_CLIENT_STATE_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen) ) { WARN("error waitResponse"); } SpiDrv::spiSlaveDeselect(); return _data; }
uint16_t ServerDrv::availData(uint8_t sock) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(AVAIL_DATA_TCP_CMD, PARAM_NUMS_1); SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _dataLen = 0; uint16_t len = 0; SpiDrv::waitResponseCmd(AVAIL_DATA_TCP_CMD, PARAM_NUMS_1, (uint8_t *) &len, &_dataLen); SpiDrv::spiSlaveDeselect(); return len; }
uint8_t WiFiDrv::reqHostByName(const char *aHostname) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(REQ_HOST_BY_NAME_CMD, PARAM_NUMS_1); SpiDrv::sendParam( (uint8_t *) aHostname, strlen(aHostname), LAST_PARAM ); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; uint8_t result = SpiDrv::waitResponseCmd(REQ_HOST_BY_NAME_CMD, PARAM_NUMS_1, &_data, &_dataLen); SpiDrv::spiSlaveDeselect(); return result; }
void WiFiDrv::getNetworkData(uint8_t *ip, uint8_t *mask, uint8_t *gwip) { tParam params[PARAM_NUMS_3] = { { 0, (char *) ip }, { 0, (char *) mask }, { 0, (char *) gwip } }; WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_IPADDR_CMD, PARAM_NUMS_1); uint8_t _dummy = DUMMY_DATA; SpiDrv::sendParam(&_dummy, sizeof(_dummy), LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply SpiDrv::waitResponseParams(GET_IPADDR_CMD, PARAM_NUMS_3, params); SpiDrv::spiSlaveDeselect(); }
// Start server TCP on port specified void ServerDrv::startServer(uint16_t port, uint8_t sock, uint8_t protMode) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(START_SERVER_TCP_CMD, PARAM_NUMS_3); SpiDrv::sendParam(port); SpiDrv::sendParam(&sock, 1); SpiDrv::sendParam(&protMode, 1, LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if ( !SpiDrv::waitResponseCmd(START_SERVER_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen) ) { WARN("error waitResponse"); } SpiDrv::spiSlaveDeselect(); }
bool ServerDrv::getDataBuf(uint8_t sock, uint8_t *_data, uint16_t *_dataLen) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_DATABUF_TCP_CMD, PARAM_NUMS_1); SpiDrv::sendBuffer(&sock, sizeof(sock), LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply if ( !SpiDrv::waitResponseData16(GET_DATABUF_TCP_CMD, _data, _dataLen) ) { WARN("error waitResponse"); } SpiDrv::spiSlaveDeselect(); if ( *_dataLen != 0 ) { return true; } return false; }
uint8_t* WiFiDrv::getBSSIDNetworks(uint8_t networkItem) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_IDX_BSSID_CMD, PARAM_NUMS_1); SpiDrv::sendParam(&networkItem, 1, LAST_PARAM); //Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _dataLen = 0; SpiDrv::waitResponseCmd(GET_IDX_BSSID_CMD, PARAM_NUMS_1, _bssid, &_dataLen); SpiDrv::spiSlaveDeselect(); return _bssid; }
uint8_t *WiFiDrv::getCurrentBSSID() { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_CURR_BSSID_CMD, PARAM_NUMS_1); uint8_t _dummy = DUMMY_DATA; SpiDrv::sendParam(&_dummy, 1, LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _dataLen = 0; SpiDrv::waitResponseCmd(GET_CURR_BSSID_CMD, PARAM_NUMS_1, _bssid, &_dataLen); SpiDrv::spiSlaveDeselect(); return _bssid; }
uint8_t *WiFiDrv::getMacAddress() { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_MACADDR_CMD, PARAM_NUMS_1); uint8_t _dummy = DUMMY_DATA; SpiDrv::sendParam(&_dummy, 1, LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _dataLen = 0; SpiDrv::waitResponseCmd(GET_MACADDR_CMD, PARAM_NUMS_1, _mac, &_dataLen); SpiDrv::spiSlaveDeselect(); return _mac; }
int8_t WiFiDrv::disconnect() { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(DISCONNECT_CMD, PARAM_NUMS_1); uint8_t _dummy = DUMMY_DATA; SpiDrv::sendParam(&_dummy, 1, LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; int8_t result = SpiDrv::waitResponseCmd(DISCONNECT_CMD, PARAM_NUMS_1, &_data, &_dataLen); SpiDrv::spiSlaveDeselect(); return result; }
void WiFiDrv::setDNS(uint8_t validParams, uint32_t dns_server1, uint32_t dns_server2) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(SET_DNS_CONFIG_CMD, PARAM_NUMS_3); SpiDrv::sendParam( (uint8_t *) &validParams, 1, NO_LAST_PARAM ); SpiDrv::sendParam( (uint8_t *) &dns_server1, 4, NO_LAST_PARAM ); SpiDrv::sendParam( (uint8_t *) &dns_server2, 4, LAST_PARAM ); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if ( !SpiDrv::waitResponseCmd(SET_DNS_CONFIG_CMD, PARAM_NUMS_1, &_data, &_dataLen) ) { WARN("error waitResponse"); _data = WL_FAILURE; } SpiDrv::spiSlaveDeselect(); }
// Start server TCP on port specified void ServerDrv::startClient(uint32_t ipAddress, uint16_t port, uint8_t sock) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(START_CLIENT_TCP_CMD, PARAM_NUMS_3); SpiDrv::sendParam((uint8_t*)&ipAddress, sizeof(ipAddress)); SpiDrv::sendParam(port); SpiDrv::sendParam(&sock, 1, LAST_PARAM); //Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if (!SpiDrv::waitResponseCmd(START_CLIENT_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen)) { WARN("error waitResponse"); } SpiDrv::spiSlaveDeselect(); }
int8_t WiFiDrv::wifiSetPassphrase(char *ssid, uint8_t ssid_len, const char *passphrase, const uint8_t len) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(SET_PASSPHRASE_CMD, PARAM_NUMS_2); SpiDrv::sendParam( (uint8_t *) ssid, ssid_len, NO_LAST_PARAM ); SpiDrv::sendParam( (uint8_t *) passphrase, len, LAST_PARAM ); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if ( !SpiDrv::waitResponseCmd(SET_PASSPHRASE_CMD, PARAM_NUMS_1, &_data, &_dataLen) ) { WARN("error waitResponse"); _data = WL_FAILURE; } SpiDrv::spiSlaveDeselect(); return _data; }
int8_t WiFiDrv::wifiSetNetwork(char *ssid, uint8_t ssid_len) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(SET_NET_CMD, PARAM_NUMS_1); SpiDrv::sendParam( (uint8_t *) ssid, ssid_len, LAST_PARAM ); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if ( !SpiDrv::waitResponseCmd(SET_NET_CMD, PARAM_NUMS_1, &_data, &_dataLen) ) { WARN("error waitResponse"); _data = WL_FAILURE; } SpiDrv::spiSlaveDeselect(); return (_data == WIFI_SPI_ACK) ? WL_SUCCESS : WL_FAILURE; }
void WiFiDrv::config(uint8_t validParams, uint32_t local_ip, uint32_t gateway, uint32_t subnet) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(SET_IP_CONFIG_CMD, PARAM_NUMS_4); SpiDrv::sendParam( (uint8_t *) &validParams, 1, NO_LAST_PARAM ); SpiDrv::sendParam( (uint8_t *) &local_ip, 4, NO_LAST_PARAM ); SpiDrv::sendParam( (uint8_t *) &gateway, 4, NO_LAST_PARAM ); SpiDrv::sendParam( (uint8_t *) &subnet, 4, LAST_PARAM ); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if ( !SpiDrv::waitResponseCmd(SET_IP_CONFIG_CMD, PARAM_NUMS_1, &_data, &_dataLen) ) { WARN("error waitResponse"); _data = WL_FAILURE; } SpiDrv::spiSlaveDeselect(); }
uint8_t WiFiDrv::getCurrentEncryptionType() { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_CURR_ENCT_CMD, PARAM_NUMS_1); uint8_t _dummy = DUMMY_DATA; SpiDrv::sendParam(&_dummy, 1, LAST_PARAM); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t dataLen = 0; uint8_t encType = 0; SpiDrv::waitResponseCmd(GET_CURR_ENCT_CMD, PARAM_NUMS_1, (uint8_t *) &encType, &dataLen); SpiDrv::spiSlaveDeselect(); return encType; }
int8_t WiFiDrv::wifiSetKey(char *ssid, uint8_t ssid_len, uint8_t key_idx, const void *key, const uint8_t len) { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(SET_KEY_CMD, PARAM_NUMS_3); SpiDrv::sendParam( (uint8_t *) ssid, ssid_len, NO_LAST_PARAM ); SpiDrv::sendParam(&key_idx, KEY_IDX_LEN, NO_LAST_PARAM); SpiDrv::sendParam( (uint8_t *) key, len, LAST_PARAM ); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if ( !SpiDrv::waitResponseCmd(SET_KEY_CMD, PARAM_NUMS_1, &_data, &_dataLen) ) { WARN("error waitResponse"); _data = WL_FAILURE; } SpiDrv::spiSlaveDeselect(); return _data; }
int8_t WiFiDrv::startScanNetworks() { WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(START_SCAN_NETWORKS, PARAM_NUMS_0); // Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t _data = 0; uint8_t _dataLen = 0; if ( !SpiDrv::waitResponseCmd(START_SCAN_NETWORKS, PARAM_NUMS_1, &_data, &_dataLen) ) { WARN("error waitResponse"); _data = WL_FAILURE; } SpiDrv::spiSlaveDeselect(); return (_data == WL_FAILURE) ? _data : WL_SUCCESS; }
uint8_t WiFiDrv::getEncTypeNetowrks(uint8_t networkItem) { if (networkItem >= WL_NETWORKS_LIST_MAXNUM) return NULL; WAIT_FOR_SLAVE_SELECT(); // Send Command SpiDrv::sendCmd(GET_IDX_ENCT_CMD, PARAM_NUMS_1); SpiDrv::sendParam(&networkItem, 1, LAST_PARAM); //Wait the reply elaboration SpiDrv::waitForSlaveReady(); // Wait for reply uint8_t dataLen = 0; uint8_t encType = 0; SpiDrv::waitResponseCmd(GET_IDX_ENCT_CMD, PARAM_NUMS_1, (uint8_t*)&encType, &dataLen); SpiDrv::spiSlaveDeselect(); return encType; }