Skip to content

Commit f2f5f5e

Browse files
authored
Merge pull request #294 from pennam/set-time
Add command to set nina-fw system time
2 parents b846a55 + d6cb294 commit f2f5f5e

File tree

5 files changed

+163
-123
lines changed

5 files changed

+163
-123
lines changed

src/WiFi.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,11 @@ unsigned long WiFiClass::getTime()
360360
return WiFiDrv::getTime();
361361
}
362362

363+
int WiFiClass::setTime(unsigned long unixTime)
364+
{
365+
return WiFiDrv::setTime(unixTime);
366+
}
367+
363368
void WiFiClass::lowPowerMode()
364369
{
365370
WiFiDrv::setPowerMode(1);

src/WiFi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ class WiFiClass
277277
int hostByName(const char* aHostname, IPAddress& aResult);
278278

279279
unsigned long getTime();
280+
int setTime(unsigned long unixTime);
280281

281282
void lowPowerMode();
282283
void noLowPowerMode();

src/utility/wifi_drv.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,36 @@ uint32_t WiFiDrv::getTime()
862862
return _data;
863863
}
864864

865+
int WiFiDrv::setTime(uint32_t epochTime)
866+
{
867+
WAIT_FOR_SLAVE_SELECT();
868+
// Send Command
869+
SpiDrv::sendCmd(SET_TIME_CMD, PARAM_NUMS_1);
870+
SpiDrv::sendParam((uint8_t*)&epochTime, sizeof(epochTime), LAST_PARAM);
871+
872+
// pad to multiple of 4
873+
int commandSize = 5 + sizeof(epochTime);
874+
while (commandSize % 4) {
875+
SpiDrv::readChar();
876+
commandSize++;
877+
}
878+
879+
SpiDrv::spiSlaveDeselect();
880+
//Wait the reply elaboration
881+
SpiDrv::waitForSlaveReady();
882+
SpiDrv::spiSlaveSelect();
883+
884+
// Wait for reply
885+
uint8_t _data = 0;
886+
uint8_t _dataLen = 0;
887+
if (!SpiDrv::waitResponseCmd(SET_TIME_CMD, PARAM_NUMS_1, &_data, &_dataLen))
888+
{
889+
WARN("error waitResponse");
890+
}
891+
SpiDrv::spiSlaveDeselect();
892+
return _data;
893+
}
894+
865895
void WiFiDrv::setPowerMode(uint8_t mode)
866896
{
867897
WAIT_FOR_SLAVE_SELECT();

src/utility/wifi_drv.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ class WiFiDrv
280280
static const char* getFwVersion();
281281

282282
static uint32_t getTime();
283+
static int setTime(uint32_t epochTime);
283284

284285
static void setPowerMode(uint8_t mode);
285286

src/utility/wifi_spi.h

Lines changed: 126 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -24,128 +24,131 @@
2424
#include <inttypes.h>
2525
#include "utility/wl_definitions.h"
2626

27-
#define CMD_FLAG 0
28-
#define REPLY_FLAG 1<<7
29-
#define DATA_FLAG 0x40
27+
#define CMD_FLAG 0
28+
#define REPLY_FLAG 1<<7
29+
#define DATA_FLAG 0x40
3030

3131
#define WIFI_SPI_ACK 1
3232
#define WIFI_SPI_ERR 0xFF
3333

34-
#define TIMEOUT_CHAR 1000
34+
#define TIMEOUT_CHAR 1000
3535

36-
//#define MAX_SOCK_NUM 4 /**< Maximum number of socket */
36+
//#define MAX_SOCK_NUM 4 /**< Maximum number of socket */
3737
#define NO_SOCKET_AVAIL 255
3838

39-
#define START_CMD 0xE0
40-
#define END_CMD 0xEE
41-
#define ERR_CMD 0xEF
42-
#define CMD_POS 1 // Position of Command OpCode on SPI stream
43-
#define PARAM_LEN_POS 2 // Position of Param len on SPI stream
39+
#define START_CMD 0xE0
40+
#define END_CMD 0xEE
41+
#define ERR_CMD 0xEF
42+
#define CMD_POS 1 // Position of Command OpCode on SPI stream
43+
#define PARAM_LEN_POS 2 // Position of Param len on SPI stream
4444

4545

4646
enum {
47-
SET_NET_CMD = 0x10,
48-
SET_PASSPHRASE_CMD = 0x11,
49-
SET_KEY_CMD = 0x12,
50-
// TEST_CMD = 0x13,
51-
SET_IP_CONFIG_CMD = 0x14,
52-
SET_DNS_CONFIG_CMD = 0x15,
53-
SET_HOSTNAME_CMD = 0x16,
54-
SET_POWER_MODE_CMD = 0x17,
55-
SET_AP_NET_CMD = 0x18,
56-
SET_AP_PASSPHRASE_CMD = 0x19,
57-
SET_DEBUG_CMD = 0x1A,
58-
GET_TEMPERATURE_CMD = 0x1B,
59-
GET_DNS_CONFIG_CMD = 0x1E,
60-
GET_REASON_CODE_CMD = 0x1F,
61-
62-
GET_CONN_STATUS_CMD = 0x20,
63-
GET_IPADDR_CMD = 0x21,
64-
GET_MACADDR_CMD = 0x22,
65-
GET_CURR_SSID_CMD = 0x23,
66-
GET_CURR_BSSID_CMD = 0x24,
67-
GET_CURR_RSSI_CMD = 0x25,
68-
GET_CURR_ENCT_CMD = 0x26,
69-
SCAN_NETWORKS = 0x27,
70-
START_SERVER_TCP_CMD= 0x28,
71-
GET_STATE_TCP_CMD = 0x29,
72-
DATA_SENT_TCP_CMD = 0x2A,
73-
AVAIL_DATA_TCP_CMD = 0x2B,
74-
GET_DATA_TCP_CMD = 0x2C,
75-
START_CLIENT_TCP_CMD= 0x2D,
76-
STOP_CLIENT_TCP_CMD = 0x2E,
77-
GET_CLIENT_STATE_TCP_CMD= 0x2F,
78-
DISCONNECT_CMD = 0x30,
79-
// GET_IDX_SSID_CMD = 0x31,
80-
GET_IDX_RSSI_CMD = 0x32,
81-
GET_IDX_ENCT_CMD = 0x33,
82-
REQ_HOST_BY_NAME_CMD= 0x34,
83-
GET_HOST_BY_NAME_CMD= 0x35,
84-
START_SCAN_NETWORKS = 0x36,
85-
GET_FW_VERSION_CMD = 0x37,
86-
// GET_TEST_CMD = 0x38,
87-
SEND_DATA_UDP_CMD = 0x39,
88-
GET_REMOTE_DATA_CMD = 0x3A,
89-
GET_TIME_CMD = 0x3B,
90-
GET_IDX_BSSID = 0x3C,
91-
GET_IDX_CHANNEL_CMD = 0x3D,
92-
PING_CMD = 0x3E,
93-
GET_SOCKET_CMD = 0x3F,
47+
SET_NET_CMD = 0x10,
48+
SET_PASSPHRASE_CMD = 0x11,
49+
SET_KEY_CMD = 0x12,
50+
// TEST_CMD = 0x13,
51+
SET_IP_CONFIG_CMD = 0x14,
52+
SET_DNS_CONFIG_CMD = 0x15,
53+
SET_HOSTNAME_CMD = 0x16,
54+
SET_POWER_MODE_CMD = 0x17,
55+
SET_AP_NET_CMD = 0x18,
56+
SET_AP_PASSPHRASE_CMD = 0x19,
57+
SET_DEBUG_CMD = 0x1A,
58+
GET_TEMPERATURE_CMD = 0x1B,
59+
GET_DNS_CONFIG_CMD = 0x1E,
60+
GET_REASON_CODE_CMD = 0x1F,
61+
62+
GET_CONN_STATUS_CMD = 0x20,
63+
GET_IPADDR_CMD = 0x21,
64+
GET_MACADDR_CMD = 0x22,
65+
GET_CURR_SSID_CMD = 0x23,
66+
GET_CURR_BSSID_CMD = 0x24,
67+
GET_CURR_RSSI_CMD = 0x25,
68+
GET_CURR_ENCT_CMD = 0x26,
69+
SCAN_NETWORKS = 0x27,
70+
START_SERVER_TCP_CMD = 0x28,
71+
GET_STATE_TCP_CMD = 0x29,
72+
DATA_SENT_TCP_CMD = 0x2A,
73+
AVAIL_DATA_TCP_CMD = 0x2B,
74+
GET_DATA_TCP_CMD = 0x2C,
75+
START_CLIENT_TCP_CMD = 0x2D,
76+
STOP_CLIENT_TCP_CMD = 0x2E,
77+
GET_CLIENT_STATE_TCP_CMD = 0x2F,
78+
DISCONNECT_CMD = 0x30,
79+
// GET_IDX_SSID_CMD = 0x31,
80+
GET_IDX_RSSI_CMD = 0x32,
81+
GET_IDX_ENCT_CMD = 0x33,
82+
REQ_HOST_BY_NAME_CMD = 0x34,
83+
GET_HOST_BY_NAME_CMD = 0x35,
84+
START_SCAN_NETWORKS = 0x36,
85+
GET_FW_VERSION_CMD = 0x37,
86+
// GET_TEST_CMD = 0x38,
87+
SEND_DATA_UDP_CMD = 0x39,
88+
GET_REMOTE_DATA_CMD = 0x3A,
89+
GET_TIME_CMD = 0x3B,
90+
GET_IDX_BSSID = 0x3C,
91+
GET_IDX_CHANNEL_CMD = 0x3D,
92+
PING_CMD = 0x3E,
93+
GET_SOCKET_CMD = 0x3F,
9494

9595
// All command with DATA_FLAG 0x40 send a 16bit Len
96-
SET_ENT_CMD = 0x40,
96+
SET_ENT_CMD = 0x40,
9797

98-
SEND_DATA_TCP_CMD = 0x44,
99-
GET_DATABUF_TCP_CMD = 0x45,
100-
INSERT_DATABUF_CMD = 0x46,
98+
SEND_DATA_TCP_CMD = 0x44,
99+
GET_DATABUF_TCP_CMD = 0x45,
100+
INSERT_DATABUF_CMD = 0x46,
101101

102102
// regular format commands
103-
SET_PIN_MODE = 0x50,
104-
SET_DIGITAL_WRITE = 0x51,
105-
SET_ANALOG_WRITE = 0x52,
106-
GET_DIGITAL_READ = 0x53,
107-
GET_ANALOG_READ = 0x54,
108-
109-
// Prefrences api
110-
PREFERENCES_BEGIN = 0x55,
111-
PREFERENCES_END = 0x56,
112-
PREFERENCES_CLEAR = 0x57,
113-
PREFERENCES_REMOVE = 0x58,
114-
PREFERENCES_LEN = 0x59,
115-
PREFERENCES_STAT = 0x5A,
116-
PREFERENCES_PUT = 0x5B,
117-
PREFERENCES_GET = 0x5C,
118-
PREFERENCES_GETTYPE = 0x5D,
103+
SET_PIN_MODE = 0x50,
104+
SET_DIGITAL_WRITE = 0x51,
105+
SET_ANALOG_WRITE = 0x52,
106+
GET_DIGITAL_READ = 0x53,
107+
GET_ANALOG_READ = 0x54,
108+
109+
// Prefrences api
110+
PREFERENCES_BEGIN = 0x55,
111+
PREFERENCES_END = 0x56,
112+
PREFERENCES_CLEAR = 0x57,
113+
PREFERENCES_REMOVE = 0x58,
114+
PREFERENCES_LEN = 0x59,
115+
PREFERENCES_STAT = 0x5A,
116+
PREFERENCES_PUT = 0x5B,
117+
PREFERENCES_GET = 0x5C,
118+
PREFERENCES_GETTYPE = 0x5D,
119119

120120
// regular format commands
121-
WRITE_FILE = 0x60,
122-
READ_FILE = 0x61,
123-
DELETE_FILE = 0x62,
124-
EXISTS_FILE = 0x63,
125-
DOWNLOAD_FILE = 0x64,
126-
APPLY_OTA_COMMAND = 0x65,
127-
RENAME_FILE = 0x66,
128-
DOWNLOAD_OTA = 0x67,
129-
BRSSL_SET_EC_TA = 0x68,
130-
BRSSL_ERROR_CODE = 0x69,
131-
132-
// Low-level BSD-like sockets functions.
133-
// From 0x70 to 0x7F
121+
SET_TIME_CMD = 0x5F,
122+
123+
// regular format commands
124+
WRITE_FILE = 0x60,
125+
READ_FILE = 0x61,
126+
DELETE_FILE = 0x62,
127+
EXISTS_FILE = 0x63,
128+
DOWNLOAD_FILE = 0x64,
129+
APPLY_OTA_COMMAND = 0x65,
130+
RENAME_FILE = 0x66,
131+
DOWNLOAD_OTA = 0x67,
132+
BRSSL_SET_EC_TA = 0x68,
133+
BRSSL_ERROR_CODE = 0x69,
134+
135+
// Low-level BSD-like sockets functions.
136+
// From 0x70 to 0x7F
134137
};
135138

136139

137140
enum wl_tcp_state {
138-
CLOSED = 0,
139-
LISTEN = 1,
140-
SYN_SENT = 2,
141-
SYN_RCVD = 3,
142-
ESTABLISHED = 4,
143-
FIN_WAIT_1 = 5,
144-
FIN_WAIT_2 = 6,
145-
CLOSE_WAIT = 7,
146-
CLOSING = 8,
147-
LAST_ACK = 9,
148-
TIME_WAIT = 10
141+
CLOSED = 0,
142+
LISTEN = 1,
143+
SYN_SENT = 2,
144+
SYN_RCVD = 3,
145+
ESTABLISHED = 4,
146+
FIN_WAIT_1 = 5,
147+
FIN_WAIT_2 = 6,
148+
CLOSE_WAIT = 7,
149+
CLOSING = 8,
150+
LAST_ACK = 9,
151+
TIME_WAIT = 10
149152
};
150153

151154

@@ -165,58 +168,58 @@ enum numParams{
165168

166169
typedef struct __attribute__((__packed__))
167170
{
168-
uint8_t paramLen;
169-
char* param;
171+
uint8_t paramLen;
172+
char* param;
170173
}tParam;
171174

172175
typedef struct __attribute__((__packed__))
173176
{
174-
uint16_t dataLen;
175-
char* data;
177+
uint16_t dataLen;
178+
char* data;
176179
}tDataParam;
177180

178181

179182
typedef struct __attribute__((__packed__))
180183
{
181-
unsigned char cmd;
182-
unsigned char tcmd;
183-
unsigned char nParam;
184-
tParam params[MAX_PARAMS];
184+
unsigned char cmd;
185+
unsigned char tcmd;
186+
unsigned char nParam;
187+
tParam params[MAX_PARAMS];
185188
}tSpiMsg;
186189

187190
typedef struct __attribute__((__packed__))
188191
{
189-
unsigned char cmd;
190-
unsigned char tcmd;
191-
unsigned char nParam;
192-
tDataParam params[MAX_PARAMS];
192+
unsigned char cmd;
193+
unsigned char tcmd;
194+
unsigned char nParam;
195+
tDataParam params[MAX_PARAMS];
193196
}tSpiMsgData;
194197

195198

196199
typedef struct __attribute__((__packed__))
197200
{
198-
unsigned char cmd;
199-
unsigned char tcmd;
200-
//unsigned char totLen;
201-
unsigned char nParam;
201+
unsigned char cmd;
202+
unsigned char tcmd;
203+
//unsigned char totLen;
204+
unsigned char nParam;
202205
}tSpiHdr;
203206

204207
typedef struct __attribute__((__packed__))
205208
{
206-
uint8_t paramLen;
207-
uint32_t param;
209+
uint8_t paramLen;
210+
uint32_t param;
208211
}tLongParam;
209212

210213
typedef struct __attribute__((__packed__))
211214
{
212-
uint8_t paramLen;
213-
uint16_t param;
215+
uint8_t paramLen;
216+
uint16_t param;
214217
}tIntParam;
215218

216219
typedef struct __attribute__((__packed__))
217220
{
218-
uint8_t paramLen;
219-
uint8_t param;
221+
uint8_t paramLen;
222+
uint8_t param;
220223
}tByteParam;
221224

222225
#endif

0 commit comments

Comments
 (0)