Data Logger BLE Cellular Board
Loading...
Searching...
No Matches
bme688.c
Go to the documentation of this file.
1/*!
2 * \file w25q64jv.c
3 *
4 * \brief W25Q64JW Mb Flash Memory (I2C) functions
5 *
6 * \copyright J Factor Embedded Technologies LLC. 2020
7 * \copyright TJM Embedded Software LLC. 2020
8 * \author T. J. Mulrooney
9 *
10 * \sa
11 * <a href="https://www.adestotech.com/wp-content/uploads/DS-45DB641E-027.pdf">W25Q64JW Datasheet</a>
12 *
13 */
14/*
15 * All Rights Reserved
16 * UNPUBLISHED, LICENSED SOFTWARE.
17 *
18 * CONFIDENTIAL AND PROPRIETARY INFORMATION
19 * WHICH IS THE PROPERTY OF J-Factor Embedded Technologies.
20 *
21 */
22
23#include <stdio.h>
24#include "jfet_files/bme688.h"
25
26/*!
27 * \fn void readBME688ID(uint8_t *bme688Id)
28 *
29 * \brief reads the NV Flash ID over the SPI bus.
30 *
31 * \param bme688Id pointer to the buffer to receive the Flash ID bytes
32 *
33 * \return none
34 */
35void readBME688ID(uint8_t *bme688Id)
36{
37#if 0
38 // uint8_t i = 0;
39 // int ret;
40 //
41 // /* zero buffer and load the command */
42 // for (i = 0; i < 4; i++)
43 // buffer_tx[i] = 0;
44 // buffer_tx[0] = 0x9F;
45 // tx_bufs[0].len = 4;
46 // rx_bufs[0].len = 4;
47 //
48 // /* enable CS and send command */
49 // ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
50 //
51 // /* shift bytes back to caller byte 0 is not valid data */
52 // for (i = 0; i < 3; i++)
53 // flashId[i] = buffer_rx[i + 1];
54
55#else
56 uint8_t i = 0;
57 int ret;
58
59 /* zero buffer and load the command */
60 for (i = 0; i < 4; i++)
61 buffer_tx[i] = 0;
62 buffer_tx[0] = 0x50;
63 tx_bufs[0].len = 3;
64 rx_bufs[0].len = 3;
65
66 /* enable CS and send command */
67 ret = spi_transceive(spi_dev, &spi_cfg2, &tx, &rx);
68
69 for (i = 0; i < 3; i++)
70 {
71 myPrintkW("0x%02X\r\n",buffer_rx[i]);
72 }
73
74 /* shift bytes back to caller byte 0 is not valid data */
75 for (i = 0; i < 3; i++)
76 {
77 bme688Id[i] = buffer_rx[i + 1];
78 }
79#endif
80}
81
82///*!
83// * \fn void readNVFlashxStatus(uint8_t *flashStatus)
84// *
85// * \brief reads the 3 NV Flash status registers over the SPI bus.
86// *
87// * \param flashStatus pointer to the buffer to receive the Flash Status bytes
88// *
89// * \return none
90// */
91// void readNVFlashxStatus(uint8_t *flashStatus)
92//{
93// uint8_t i;
94// uint8_t status[3];
95// int ret;
96//
97// for (i = 0; i < 3; i++)
98// status[i] = 0;
99//
100// /* zero buffer and load the command */
101// for (i = 0; i < 2; i++)
102// buffer_tx[i] = 0;
103//
104// /* get status register 1 */
105// buffer_tx[0] = 0x05;
106// tx_bufs[0].len = 2;
107// rx_bufs[0].len = 2;
108//
109// /* enable CS and send command */
110// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
111//
112// /* get requested status register */
113// status[0] = buffer_rx[1];
114//
115// /* zero buffer and load the command */
116// for (i = 0; i < 2; i++)
117// buffer_tx[i] = 0;
118//
119// /* get status register 2 */
120// buffer_tx[0] = 0x35;
121// tx_bufs[0].len = 2;
122// rx_bufs[0].len = 2;
123//
124// /* enable CS and send command */
125// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
126//
127// /* get requested status register */
128// status[1] = buffer_rx[1];
129//
130// /* zero buffer and load the command */
131// for (i = 0; i < 2; i++)
132// buffer_tx[i] = 0;
133//
134// /* get status register 2 */
135// buffer_tx[0] = 0x15;
136// tx_bufs[0].len = 2;
137// rx_bufs[0].len = 2;
138//
139// /* enable CS and send command */
140// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
141//
142// /* get requested status register */
143// status[2] = buffer_rx[1];
144//
145// /* send back status registers */
146// for (i = 0; i < 3; i++)
147// flashStatus[i] = status[i];
148//}
149//
150// #if 1
151///*!
152// * \fn void writeNVFlashxStatus(void)
153// *
154// * \brief writes NV Flash status register2 over the SPI bus.
155// *
156// * clears teh QSPI bit
157// * \return none
158// */
159// void writeNVFlashxStatus(void)
160//{
161// uint8_t i;
162// int ret;
163// uint8_t flashStatus[3];
164//
165// /* zero buffer and load the command */
166// for (i = 0; i < 2; i++)
167// buffer_tx[i] = 0;
168//
169// buffer_tx[0] = 0x06; /* non-volatile write enable */
170// tx_bufs[0].len = 1;
171// rx_bufs[0].len = 1;
172//
173// /* enable CS and send command */
174// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
175//
176// /* set status register 1 */
177// // buffer_tx[0] = 0x01;
178// // buffer_tx[1] = 0x00; /* SRP = 1 */
179// // tx_bufs[0].len = 2;
180// // rx_bufs[0].len = 2;
181//
182// /* enable CS and send command */
183// // ret = spi_transceive(spi, &spi_cfg, &tx, &rx);
184//
185// /* set status register 2 */
186// buffer_tx[0] = 0x31;
187// buffer_tx[1] = 0x00; /* QE = 0 */
188// tx_bufs[0].len = 2;
189// rx_bufs[0].len = 2;
190//
191// /* enable CS and send command */
192// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
193//
194// readNVFlashxStatus(flashStatus);
195//
196// buffer_tx[0] = 0x04; /* write disable */
197// tx_bufs[0].len = 1;
198// rx_bufs[0].len = 1;
199//
200// /* enable CS and send command */
201// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
202//}
203// #endif
204//
205///*!
206// * \fn void flashxErasePage(uint32_t address)
207// *
208// * \brief erases a 256 byte page over the SPI bus.
209// *
210// * \param address address of the page to be erased
211// *
212// * \return none
213// */
214// void flashxErasePage(uint32_t address)
215//{
216// uint8_t flashStatusIn[3];
217// uint32_t address32 = address << 11;
218// int ret;
219//
220// buffer_tx[0] = 0x06; /* write enable */
221// tx_bufs[0].len = 1;
222// rx_bufs[0].len = 1;
223//
224// /* enable CS and send command */
225// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
226//
227// buffer_tx[0] = 0x20; /* block 1 erase */
228// buffer_tx[1] = (address32 >> 16) & 0xFF;
229// buffer_tx[2] = (address32 >> 8) & 0xFF;
230// buffer_tx[3] = (address32 >> 0) & 0xFF;
231// tx_bufs[0].len = 4;
232// rx_bufs[0].len = 4;
233//
234// /* enable CS and send command to read ID into buffer */
235// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
236//
237// printk("Erasing sector (16 pages) %d. Please wait ...\r\n", address);
238//
239// while (1) /* wait until flag goes away */
240// {
241// readNVFlashxStatus(flashStatusIn);
242// // printk("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
243// if ((flashStatusIn[0] & 0x01) == 0x00)
244// {
245// break;
246// }
247// k_sleep(K_MSEC(1));
248// }
249//
250// buffer_tx[0] = 0x04; /* write disable */
251// tx_bufs[0].len = 1;
252// rx_bufs[0].len = 1;
253//
254// /* enable CS and send command */
255// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
256//}
257//
258///*!
259// * \fn void flashxEraseBlock1(uint32_t address)
260// *
261// * \brief erases a 2K block page over the SPI bus.
262// *
263// * \param address address of the block to be erased
264// *
265// * \return none
266// */
267// void flashxEraseBlock1(uint32_t address)
268//{
269// uint8_t flashStatusIn[3];
270// uint32_t address32 = address << 7;
271// int ret;
272//
273// buffer_tx[0] = 0x06; /* write enable */
274// tx_bufs[0].len = 1;
275// rx_bufs[0].len = 1;
276//
277// /* enable CS and send command */
278// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
279//
280// buffer_tx[0] = 0x52; /* block 1 erase */
281// buffer_tx[1] = (address32 >> 16) & 0xFF;
282// buffer_tx[2] = (address32 >> 8) & 0xFF;
283// buffer_tx[3] = (address32 >> 0) & 0xFF;
284// tx_bufs[0].len = 4;
285// rx_bufs[0].len = 4;
286//
287// /* enable CS and send command to read ID into buffer */
288// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
289//
290// printk("Erasing Block %d. Please wait ...\r\n", address);
291//
292// while (1) /* wait until flag goes away */
293// {
294// readNVFlashxStatus(flashStatusIn);
295// // printk("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
296// if ((flashStatusIn[0] & 0x01) == 0x00)
297// {
298// break;
299// }
300// k_sleep(K_MSEC(1));
301// }
302//
303// buffer_tx[0] = 0x04; /* write disable */
304// tx_bufs[0].len = 1;
305// rx_bufs[0].len = 1;
306//
307// /* enable CS and send command */
308// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
309//}
310//
311///*!
312// * \fn void flashxEraseBlock1(uint32_t address)
313// *
314// * \brief erases a 2K block page over the SPI bus.
315// *
316// * \param address address of the block to be erased
317// *
318// * \return none
319// */
320// void flashxEraseBlock2(uint32_t address)
321//{
322// uint8_t flashStatusIn[3];
323// uint32_t address32 = address << 4;
324// int ret;
325//
326// buffer_tx[0] = 0x06; /* write enable */
327// tx_bufs[0].len = 1;
328// rx_bufs[0].len = 1;
329//
330// /* enable CS and send command */
331// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
332//
333// buffer_tx[0] = 0xD8; /* block 1 erase */
334// buffer_tx[1] = (address32 >> 16) & 0xFF;
335// buffer_tx[2] = (address32 >> 8) & 0xFF;
336// buffer_tx[3] = (address32 >> 0) & 0xFF;
337// tx_bufs[0].len = 4;
338// rx_bufs[0].len = 4;
339//
340// /* enable CS and send command to read ID into buffer */
341// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
342//
343// printk("Erasing Block %d. Please wait ...\r\n", address);
344//
345// while (1) /* wait until flag goes away */
346// {
347// readNVFlashxStatus(flashStatusIn);
348// // printk("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
349// if ((flashStatusIn[0] & 0x01) == 0x00)
350// {
351// break;
352// }
353// k_sleep(K_MSEC(1));
354// }
355//
356// buffer_tx[0] = 0x04; /* write disable */
357// tx_bufs[0].len = 1;
358// rx_bufs[0].len = 1;
359//
360// /* enable CS and send command */
361// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
362//}
363//
364///*!
365// * \fn void flashxEraseSector(uint32_t address)
366// *
367// * \brief erases a 256K byte sector over the SPI bus.
368// *
369// * \param address address of the sector to be erased
370// *
371// * \return none
372// */
373// void flashxEraseSector(uint32_t address)
374//{
375// uint8_t flashStatusIn[3];
376// uint32_t address32 = address << 12;
377// int ret;
378//
379// buffer_tx[0] = 0x06; /* write enable */
380// tx_bufs[0].len = 1;
381// rx_bufs[0].len = 1;
382//
383// /* enable CS and send command */
384// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
385//
386// buffer_tx[0] = 0x20; /* 4K sector erase */
387// buffer_tx[1] = (address32 >> 16) & 0xFF;
388// buffer_tx[2] = (address32 >> 8) & 0xFF;
389// buffer_tx[3] = (address32 >> 0) & 0xFF;
390// tx_bufs[0].len = 4;
391// rx_bufs[0].len = 4;
392//
393// /* enable CS and send command to read ID into buffer */
394// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
395//
396// printk("Erasing Sector %d. Please wait ...\r\n", address);
397//
398// while (1) /* wait until flag goes away */
399// {
400// readNVFlashxStatus(flashStatusIn);
401// // printk("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
402// if ((flashStatusIn[0] & 0x01) == 0x00)
403// {
404// break;
405// }
406// k_sleep(K_MSEC(1));
407// }
408//
409// buffer_tx[0] = 0x04; /* write disable */
410// tx_bufs[0].len = 1;
411// rx_bufs[0].len = 1;
412//
413// /* enable CS and send command */
414// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
415//}
416//
417///*!
418// * \fn void flashxErase(void)
419// *
420// * \brief erases the entire 8 Mb over the SPI bus.
421// *
422// * \return none
423// */
424// void flashxErase(void)
425//{
426// uint8_t flashStatusIn[3];
427// int ret;
428//
429// buffer_tx[0] = 0x06; /* write enable */
430// tx_bufs[0].len = 1;
431// rx_bufs[0].len = 1;
432//
433// /* enable CS and send command */
434// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
435//
436// buffer_tx[0] = 0xC7; /* write enable */
437// tx_bufs[0].len = 1;
438// rx_bufs[0].len = 1;
439//
440// /* enable CS and send command to read ID into buffer */
441// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
442//
443// printk("Erasing entire device. Please wait ...\r\n");
444//
445// while (1) /* wait until flag goes away */
446// {
447// readNVFlashxStatus(flashStatusIn);
448// // printk("Flash Status: 0x%02X 0x%02X %d\r\n",flashStatusIn[0],flashStatusIn[1],(flashStatusIn[0] & 0x80));
449// if ((flashStatusIn[0] & 0x01) == 0x00)
450// {
451// break;
452// }
453// k_sleep(K_MSEC(1));
454// }
455// printk("Entire device erased\r\n");
456//
457// buffer_tx[0] = 0x04; /* write disable */
458// tx_bufs[0].len = 1;
459// rx_bufs[0].len = 1;
460//
461// /* enable CS and send command */
462// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
463//}
464//
465///*!
466// * \fn void flashxReadPage(uint32_t address, uint8_t *flashRead)
467// *
468// * \brief reads a 256 byte page over the SPI bus.
469// *
470// * \param address 24 bit memory address of page to read
471// * \param flashRead - address of data array to received bytes from NV memory
472// *
473// * \return none
474// */
475// void flashxReadPage(uint32_t address, uint8_t *flashRead)
476//{
477// uint16_t i;
478// uint32_t address32;
479// int ret;
480// uint8_t readBuffer[256];
481//
482// /* start first 64 byte read from page */
483// /* zero buffer and load the command */
484// address32 = (address << 8) + 0; /* set first address */
485// for (i = 0; i < 64 + 4; i++)
486// buffer_tx[i] = 0;
487// buffer_tx[0] = 0x03;
488// buffer_tx[1] = (address32 >> 16) & 0xFF;
489// buffer_tx[2] = (address32 >> 8) & 0xFF;
490// buffer_tx[3] = (address32 >> 0) & 0xFF;
491// tx_bufs[0].len = 64 + 4;
492// rx_bufs[0].len = 64 + 4;
493//
494// // printk("Flash Page Read: 0x%08X\r\n",address);
495// // printk("%02X %02X %02X %02X\r\n",flashReadCmd[0],flashReadCmd[1],flashReadCmd[2],flashReadCmd[3]);
496//
497// /* enable CS and send command */
498// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
499//
500// /* put bytes in buffer ignore first 4 bytes */
501// for (i = 0; i < 64; i++)
502// readBuffer[i] = buffer_rx[i + 4];
503// /* end first 64 byte read from page */
504//
505// /* start second 64 byte read from page */
506// /* zero buffer and load the command */
507// address32 = (address << 8) + 64; /* set first address */
508// for (i = 0; i < 64 + 4; i++)
509// buffer_tx[i] = 0;
510// buffer_tx[0] = 0x03;
511// buffer_tx[1] = (address32 >> 16) & 0xFF;
512// buffer_tx[2] = (address32 >> 8) & 0xFF;
513// buffer_tx[3] = (address32 >> 0) & 0xFF;
514// tx_bufs[0].len = 64 + 4;
515// rx_bufs[0].len = 64 + 4;
516//
517// // printk("Flash Page Read: 0x%08X\r\n",address);
518// // printk("%02X %02X %02X %02X\r\n",flashReadCmd[0],flashReadCmd[1],fsheadCmd[2],flashReadCmd[3]);
519//
520// /* enable CS and send command */
521// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
522//
523// /* put bytes in buffer ignore first 4 bytes */
524// for (i = 0; i < 64; i++)
525// readBuffer[i + 64] = buffer_rx[i + 4];
526// /* end second 64 byte read from page */
527//
528// /* start third 64 byte read from page */
529// /* zero buffer and load the command */
530// address32 = (address << 8) + 128; /* set first address */
531// for (i = 0; i < 64 + 4; i++)
532// buffer_tx[i] = 0;
533// buffer_tx[0] = 0x03;
534// buffer_tx[1] = (address32 >> 16) & 0xFF;
535// buffer_tx[2] = (address32 >> 8) & 0xFF;
536// buffer_tx[3] = (address32 >> 0) & 0xFF;
537// tx_bufs[0].len = 64 + 4;
538// rx_bufs[0].len = 64 + 4;
539//
540// // printk("Flash Page Read: 0x%08X\r\n",address);
541// // printk("%02X %02X %02X %02X\r\n",flashReadCmd[0],flashReadCmd[1],flashReadCmd[2],flashReadCmd[3]);
542//
543// /* enable CS and send command */
544// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
545//
546// /* put bytes in buffer ignore first 4 bytes */
547// for (i = 0; i < 64; i++)
548// readBuffer[i + 128] = buffer_rx[i + 4];
549// /* end third 64 byte read from page */
550//
551// /* start fourth 64 byte read from page */
552// /* zero buffer and load the command */
553// address32 = (address << 8) + 192; /* set first address */
554// for (i = 0; i < 64 + 4; i++)
555// buffer_tx[i] = 0;
556// buffer_tx[0] = 0x03;
557// buffer_tx[1] = (address32 >> 16) & 0xFF;
558// buffer_tx[2] = (address32 >> 8) & 0xFF;
559// buffer_tx[3] = (address32 >> 0) & 0xFF;
560// tx_bufs[0].len = 64 + 4;
561// rx_bufs[0].len = 64 + 4;
562//
563// // printk("Flash Page Read: 0x%08X\r\n",address);
564// // printk("%02X %02X %02X %02X\r\n",flashReadCmd[0],flashReadCmd[1],flashReadCmd[2],flashReadCmd[3]);
565//
566// /* enable CS and send command */
567// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
568//
569// /* put bytes in buffer ignore first 4 bytes */
570// for (i = 0; i < 64; i++)
571// readBuffer[i + 192] = buffer_rx[i + 4];
572// /* end fourth 64 byte read from page */
573//
574// /* shift bytes back to caller byte 0 is not valid data */
575// for (i = 0; i < 256; i++)
576// {
577// flashRead[i] = readBuffer[i];
578// }
579//}
580//
581///*
582// * \fn void flashxWritePage(uint32_t page, uint32_t address, uint8_t *data, uint16_t count)
583// *
584// * \brief writes data to address in serial flash over the SPI bus.
585// *
586// * \param page 24 bit memory address of page to write
587// * \param address address within page to begin writing
588// * \param data address of data array to get bytes to store bytes in NV memory
589// * \param count number of bytes to write
590// *
591// * \return none
592// */
593// void flashxWritePage(uint32_t page, uint32_t address, uint8_t *data, uint16_t count)
594//{
595// int i;
596// uint8_t flashStatusIn[2];
597// // uint8_t flashIn[256+4];
598// uint32_t address32 = page << 8;
599// uint8_t dataPage[256 + 4];
600// int ret;
601//
602// #if 0
603// printk("flashxWritePage page: %d length: %d\r\n",page,count);
604// for(i=0;i<count;i++)
605// {
606// if( (i & 0xf) == 0)
607// printk("\r\n %02X",i);
608// printk(" 0x%02X",data[i]);
609// }
610// #endif
611// buffer_tx[0] = 0x06; /* write enable */
612// tx_bufs[0].len = 1;
613// rx_bufs[0].len = 1;
614//
615// /* enable CS and send command */
616// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
617//
618// // printk("page: %d address: %d data: %02X count: %d\r\n",page,address,data[0],count);
619// flashxReadPage(page, dataPage); /* read in page data */
620//
621// // for(i=0;i<256;i++)
622// // printk("i: %d data: %02X\r\n",i,dataPage[i]);
623// for (i = 0; i < count; i++) /* move in new data */
624// dataPage[i + address] = data[i];
625// // for(i=0;i<256;i++)
626// // printk("i: %d data: %02X\r\n",i,dataPage[i]);
627//
628// /* write first 64 byte write */
629// address32 = (page << 8) + 0;
630// buffer_tx[0] = 0x02; /* chip program */
631// buffer_tx[1] = (address32 >> 16) & 0xFF;
632// buffer_tx[2] = (address32 >> 8) & 0xFF;
633// buffer_tx[3] = (address32 >> 0) & 0xFF;
634// for (i = 0; i < 64; i++)
635// buffer_tx[i + 4] = dataPage[i];
636// tx_bufs[0].len = 64 + 4;
637// rx_bufs[0].len = 64 + 4;
638//
639// /* enable CS and send command */
640// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
641//
642// while (1) /* wait until flag goes away */
643// {
644// readNVFlashxStatus(flashStatusIn);
645// // PRINTF("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
646// if ((flashStatusIn[0] & 0x01) == 0x00)
647// {
648// break;
649// }
650// k_sleep(K_MSEC(1));
651// }
652// /* end of first 64 byte write */
653//
654// /* write second 64 byte write */
655// address32 = (page << 8) + 64;
656// buffer_tx[0] = 0x02; /* chip program */
657// buffer_tx[1] = (address32 >> 16) & 0xFF;
658// buffer_tx[2] = (address32 >> 8) & 0xFF;
659// buffer_tx[3] = (address32 >> 0) & 0xFF;
660// for (i = 0; i < 64; i++)
661// buffer_tx[i + 4] = dataPage[i + 64];
662// tx_bufs[0].len = 64 + 4;
663// rx_bufs[0].len = 64 + 4;
664//
665// /* enable CS and send command */
666// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
667//
668// while (1) /* wait until flag goes away */
669// {
670// readNVFlashxStatus(flashStatusIn);
671// // PRINTF("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
672// if ((flashStatusIn[0] & 0x01) == 0x00)
673// {
674// break;
675// }
676// k_sleep(K_MSEC(1));
677// }
678// /* end of second 64 byte write */
679//
680// /* write third 64 byte write */
681// address32 = (page << 8) + 128;
682// buffer_tx[0] = 0x02; /* chip program */
683// buffer_tx[1] = (address32 >> 16) & 0xFF;
684// buffer_tx[2] = (address32 >> 8) & 0xFF;
685// buffer_tx[3] = (address32 >> 0) & 0xFF;
686// for (i = 0; i < 64; i++)
687// buffer_tx[i + 4] = dataPage[i + 128];
688// tx_bufs[0].len = 64 + 4;
689// rx_bufs[0].len = 64 + 4;
690//
691// /* enable CS and send command */
692// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
693//
694// while (1) /* wait until flag goes away */
695// {
696// readNVFlashxStatus(flashStatusIn);
697// // PRINTF("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
698// if ((flashStatusIn[0] & 0x01) == 0x00)
699// {
700// break;
701// }
702// k_sleep(K_MSEC(1));
703// }
704// /* end of third 64 byte write */
705//
706// /* write fourth 64 byte write */
707// address32 = (page << 8) + 192;
708// buffer_tx[0] = 0x02; /* chip program */
709// buffer_tx[1] = (address32 >> 16) & 0xFF;
710// buffer_tx[2] = (address32 >> 8) & 0xFF;
711// buffer_tx[3] = (address32 >> 0) & 0xFF;
712// for (i = 0; i < 64; i++)
713// buffer_tx[i + 4] = dataPage[i + 192];
714// tx_bufs[0].len = 64 + 4;
715// rx_bufs[0].len = 64 + 4;
716//
717// /* enable CS and send command */
718// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
719//
720// while (1) /* wait until flag goes away */
721// {
722// readNVFlashxStatus(flashStatusIn);
723// // PRINTF("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
724// if ((flashStatusIn[0] & 0x01) == 0x00)
725// {
726// break;
727// }
728// k_sleep(K_MSEC(1));
729// }
730// /* end of fourth 64 byte write */
731//
732// buffer_tx[0] = 0x04; /* write disable */
733// tx_bufs[0].len = 1;
734// rx_bufs[0].len = 1;
735//
736// /* enable CS and send command */
737// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
738//}
739//
740///*!
741// * \fn void flashxFillPage(uint32_t address, uint16_t data)
742// *
743// * \brief fills a 256 byte page with data over the SPI bus.
744// *
745// * \param address 24 bit memory address of page to write
746// * \param data byte to fill in page in NV memory
747// *
748// * \return none
749// */
750// void flashxFillPage(uint32_t address, uint16_t data)
751//{
752// int i;
753// uint8_t flashStatusIn[2];
754// uint32_t address32 = address << 8;
755// int ret;
756//
757// buffer_tx[0] = 0x06; /* write enable */
758// tx_bufs[0].len = 1;
759// rx_bufs[0].len = 1;
760//
761// /* enable CS and send command */
762// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
763//
764// /* fill first 64 bytes */
765// address32 = (address << 8) + 0;
766// buffer_tx[0] = 0x02; /* chip program */
767// buffer_tx[1] = (address32 >> 16) & 0xFF;
768// buffer_tx[2] = (address32 >> 8) & 0xFF;
769// buffer_tx[3] = (address32 >> 0) & 0xFF;
770// for (i = 0; i < 64; i++)
771// buffer_tx[i + 4] = data;
772// tx_bufs[0].len = 64 + 4;
773// rx_bufs[0].len = 64 + 4;
774//
775// /* enable CS and send command */
776// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
777//
778// while (1) /* wait until flag goes away */
779// {
780// readNVFlashxStatus(flashStatusIn);
781// // printk("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
782// if ((flashStatusIn[0] & 0x01) == 0x00)
783// {
784// break;
785// }
786// // delay_ms(1);
787// }
788// /* end fill first 64 bytes */
789//
790// /* fill second 64 bytes */
791// address32 = (address << 8) + 64;
792// buffer_tx[0] = 0x02; /* chip program */
793// buffer_tx[1] = (address32 >> 16) & 0xFF;
794// buffer_tx[2] = (address32 >> 8) & 0xFF;
795// buffer_tx[3] = (address32 >> 0) & 0xFF;
796// for (i = 0; i < 64; i++)
797// buffer_tx[i + 4] = data;
798// tx_bufs[0].len = 64 + 4;
799// rx_bufs[0].len = 64 + 4;
800//
801// /* enable CS and send command */
802// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
803//
804// while (1) /* wait until flag goes away */
805// {
806// readNVFlashxStatus(flashStatusIn);
807// // printk("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
808// if ((flashStatusIn[0] & 0x01) == 0x00)
809// {
810// break;
811// }
812// // delay_ms(1);
813// }
814// /* end fill second 64 bytes */
815//
816// /* fill third 64 bytes */
817// address32 = (address << 8) + 128;
818// buffer_tx[0] = 0x02; /* chip program */
819// buffer_tx[1] = (address32 >> 16) & 0xFF;
820// buffer_tx[2] = (address32 >> 8) & 0xFF;
821// buffer_tx[3] = (address32 >> 0) & 0xFF;
822// for (i = 0; i < 64; i++)
823// buffer_tx[i + 4] = data;
824// tx_bufs[0].len = 64 + 4;
825// rx_bufs[0].len = 64 + 4;
826//
827// /* enable CS and send command */
828// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
829//
830// while (1) /* wait until flag goes away */
831// {
832// readNVFlashxStatus(flashStatusIn);
833// // printk("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
834// if ((flashStatusIn[0] & 0x01) == 0x00)
835// {
836// break;
837// }
838// // delay_ms(1);
839// }
840// /* end fill third 64 bytes */
841//
842// /* fill fourth 64 bytes */
843// address32 = (address << 8) + 192;
844// buffer_tx[0] = 0x02; /* chip program */
845// buffer_tx[1] = (address32 >> 16) & 0xFF;
846// buffer_tx[2] = (address32 >> 8) & 0xFF;
847// buffer_tx[3] = (address32 >> 0) & 0xFF;
848// for (i = 0; i < 64; i++)
849// buffer_tx[i + 4] = data;
850// tx_bufs[0].len = 64 + 4;
851// rx_bufs[0].len = 64 + 4;
852//
853// /* enable CS and send command */
854// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
855//
856// while (1) /* wait until flag goes away */
857// {
858// readNVFlashxStatus(flashStatusIn);
859// // printk("Flash Status: 0x%02X 0x%02X\r\n",flashStatusIn[0],flashStatusIn[1]);
860// if ((flashStatusIn[0] & 0x01) == 0x00)
861// {
862// break;
863// }
864// // delay_ms(1);
865// }
866// /* end fill fourth 64 bytes */
867//
868// buffer_tx[0] = 0x04; /* write disable */
869// tx_bufs[0].len = 1;
870// rx_bufs[0].len = 1;
871//
872// /* enable CS and send command */
873// ret = spi_transceive(spi_dev, &spi_cfg1, &tx, &rx);
874//}
875//
876///*!
877// * \fn void flashClearParameters(void)
878// *
879// * \brief clears/initializes the flash parameters in RAM
880// *
881// * This is called on power up reset after the NV flash parameters have been erased \n
882// * from Page 0 1nd 1. only called if the Key is not set in the NV Flash Parameters.
883// *
884// * \return none
885// */
886// void flashxClearParameters(void)
887//{
888//
889// // flashParameters.tempUnitsCentigrade = true;
890// // flashParameters.dateSet = false;
891// // flashParameters.timeZone = DEFAULT_TIMEZONE;
892// // flashParameters.alarmsEnabled = false;
893// // flashParameters.gpio09Mode = 1;
894// // flashParameters.lowPower = 0;
895// // flashParameters.gpsEnable = false;
896// // flashParameters.gpsExternal = false;
897// // jfet_dk_set_led(GPSENB,flashParameters.gpsEnable?1:0);
898// // flashParameters.modenPMEnable = false;
899// // jfet_dk_set_led(GPSENB,flashParameters.modenPMEnable?1:0);
900// // flashParameters.offsetAM2315 = 0;
901// // flashParameters.offsetAM2315Humidity = 0;
902// // flashParameters.offsetMSPPressure = 0;
903// // flashParameters.offsetRTD = 0;
904// // flashParameters.offsetThermistor = 0;
905// // flashParameters.sw1 = false;
906// // flashParameters.sw2 = false;
907// // flashParameters.silent = false;
908// // flashParameters.dutyCycle = DEFAULT_DUTYCYCLE;
909// // strcpy(flashParameters.sensorID,"No ID");
910// // strcpy(flashParameters.sensorName,"No Sensor Name");
911// // strcpy(flashParameters.customer,"No Customer Name");
912// // strcpy(flashParameters.location,"No Location Name");
913// // strcpy(flashParameters.group,"No Group Name");
914// // strcpy(flashParameters.distributor,"No Distributor Name");
915// // strcpy(flashParameters.clientID,"x");
916// //// strcpy(flashParameters.edrx_param,CONFIG_LTE_EDRX_REQ_VALUE);
917// //// strcpy(flashParameters.ptw_param,CONFIG_LTE_PTW_VALUE);
918// // strcpy(flashParameters.ptw_param,"");
919// // strcpy(flashParameters.psm_param_rat,CONFIG_LTE_PSM_REQ_RAT);
920// // strcpy(flashParameters.psm_param_rptau,CONFIG_LTE_PSM_REQ_RPTAU);
921// // memset(&flashParameters.tempAlarms[0],0,sizeof(tempAlarmStruct) * MAX_NUMBER_TEMPERATURE_SENSORS);
922// // flashParameters.tempAlarmValid = DEFAULT_TEMPALARMVALID;
923// // flashParameters.tempAlarmCheck = DEFAULT_TEMPALARMCHECK;
924// // memset(&flashParameters.humidityAlarms[0],0,sizeof(humidityAlarmStruct) * MAX_NUMBER_HUMIDITY_SENSORS);
925// // flashParameters.humidityAlarmValid = DEFAULT_HUMIDITYALARMVALID;
926// // flashParameters.humidityAlarmCheck = DEFAULT_HUMIDITYALARMCHECK;
927// // memset(&flashParameters.pressureAlarms[0],0,sizeof(pressureAlarmStruct) * MAX_NUMBER_PRESSURE_SENSORS);
928// // flashParameters.pressureAlarmValid = DEFAULT_PRESSUREALARMVALID;
929// // flashParameters.pressureAlarmCheck = DEFAULT_PRESSUREALARMCHECK;
930// // memset(&flashParameters.ezoecAlarms[0],0,sizeof(ezoecAlarmStruct) * MAX_NUMBER_EZOEC_SENSORS);
931// // flashParameters.ezoecAlarmValid = DEFAULT_EZOECALARMVALID;
932// // flashParameters.ezoecAlarmCheck = DEFAULT_EZOECALARMCHECK;
933// // memset(&flashParameters.powerAlarms[0],0,sizeof(powerAlarmStruct) * MAX_NUMBER_POWER_SENSORS);
934// // flashParameters.powerAlarmValid = DEFAULT_POWERALARMVALID;
935// // flashParameters.powerAlarmCheck = DEFAULT_POWERALARMCHECK;
936// // flashParameters.savedCount = 0;
937// // flashParameters.nextSavedRead = 0;
938// // flashParameters.nextSavedWrite = 0;
939// // #if 0
940// // flashParameters.tempAlarms[1].tempAlarm = 0xF;
941// // flashParameters.tempAlarms[1].lowTempCheck = (int16_t)(20.0 * 100);
942// // flashParameters.tempAlarms[1].lowTempAlarmValue = (int16_t)(13.67 * 100);
943// // flashParameters.tempAlarms[1].highTempCheck = (int16_t)(30.0 * 100);
944// // flashParameters.tempAlarms[1].highTempAlarmValue = (int16_t)(33.67 * 100);
945// // struct tm time;
946// // time_t curTime;
947// // getRTCTime(&time);
948// // curTime = mktime(&time);
949// // flashParameters.tempAlarms[1].lowTempTime = curTime;
950// // flashParameters.tempAlarms[1].lowTempTime = curTime;
951// // flashParameters.tempAlarms[1].highTempTime = curTime;
952// // flashParameters.tempAlarms[1].highTempTime = curTime;
953// // #endif
954//}
955//
956///*!
957// * \fn void void displayFlashParameters(void)
958// *
959// * \brief displays the NV flash parameters.
960// *
961// * This also first loads the RAM flash parameters from the NV Flash Parameters\n
962// * so it reloads the RAM flash parameters.
963// *
964// * \return none
965// */
966// void displayFlashxParameters(void)
967//{
968// printk("XXX FLASH Parameters\r\n");
969// #if 0
970// char str[70];
971// uint8_t data0[256 + 8];
972// int i;
973// uint8_t *pFlashParameters = (uint8_t *)&flashParameters;
974// struct tm *pTime;
975// time_t curTime;
976//
977// if(flashParameters.silent)
978// return;
979// printk("Flash Parameters Size: %d\r\n",sizeof(flashParametersStruct));
980// if(sizeof(flashParametersStruct) <= 256)
981// {
982// flashxReadPage(FLASHPARAMETERSTART,data0);
983// for(i=0;i<sizeof(flashParametersStruct);i++)
984// pFlashParameters[i] = data0[i];
985// }
986// else if(sizeof(flashParametersStruct) <= 512)
987// {
988// flashxReadPage(FLASHPARAMETERSTART,data0);
989// for(i=0;i<256;i++)
990// pFlashParameters[i] = data0[i];
991// flashxReadPage(FLASHPARAMETERSTART+1,data0);
992// for(i=0;i<sizeof(flashParametersStruct) - 256;i++)
993// pFlashParameters[i + 256] = data0[i];
994// }
995// else if(sizeof(flashParametersStruct) <= 768)
996// {
997// flashxReadPage(FLASHPARAMETERSTART,data0);
998// for(i=0;i<256;i++)
999// pFlashParameters[i] = data0[i];
1000// flashxReadPage(FLASHPARAMETERSTART+1,data0);
1001// for(i=0;i<256;i++)
1002// pFlashParameters[i + 256] = data0[i];
1003// flashxReadPage(FLASHPARAMETERSTART+2,data0);
1004// for(i=0;i<sizeof(flashParametersStruct) - 512;i++)
1005// pFlashParameters[i + 512] = data0[i];
1006// }
1007// else
1008// {
1009// flashxReadPage(FLASHPARAMETERSTART,data0);
1010// for(i=0;i<256;i++)
1011// pFlashParameters[i] = data0[i];
1012// flashxReadPage(FLASHPARAMETERSTART+1,data0);
1013// for(i=0;i<256;i++)
1014// pFlashParameters[i + 256] = data0[i];
1015// flashxReadPage(FLASHPARAMETERSTART+2,data0);
1016// for(i=0;i<256;i++)
1017// pFlashParameters[i + 512] = data0[i];
1018// flashxReadPage(FLASHPARAMETERSTART+3,data0);
1019// for(i=0;i<sizeof(flashParametersStruct) - 768;i++)
1020// pFlashParameters[i + 768] = data0[i];
1021// }
1022// if(flashParameters.key == FLASHPARAMETERKEY)
1023// {
1024// printk(" Key: 0x%08X\r\n",(unsigned int)flashParameters.key);
1025//// printk(" Date Set: %s\r\n",flashParameters.dateSet?"True":"False");
1026// printk(" Time Zone: %d\r\n",flashParameters.timeZone);
1027// printk(" Duty Cycle: %d Seconds\r\n",flashParameters.dutyCycle);
1028// printk(" SW1: %s\r\n",flashParameters.sw1?"True":"False");
1029// printk(" SW2: %s\r\n",flashParameters.sw2?"True":"False");
1030// printk(" GPIO09 Mode: %s\r\n",flashParameters.gpio09Mode?"Input":"Output");
1031// if(flashParameters.lowPower > 2)
1032// flashParameters.lowPower = 0;
1033// printk(" Low Power: %s\r\n",powerModes[flashParameters.lowPower]);
1034// printk(" Mode_nPM Enable: %s\r\n",flashParameters.modenPMEnable?"True":"False");
1035//// printk(" GPS Enable: %s\r\n",flashParameters.gpsEnable?"True":"False");
1036//// printk(" GPS External: %s\r\n",flashParameters.gpsExternal?"External":"Internal");
1037//// printk(" GPS Fix Check: %ld seconds\r\n",(long int)flashParameters.gpsFixCheck);
1038// printk(" Offset Am2315: %3.3f C\r\n",flashParameters.offsetAM2315 / 1000.0);
1039// printk(" Offset Am2315 Humidity: %3.3f %%\r\n",flashParameters.offsetAM2315Humidity / 1000.0);
1040// printk(" Offset MSP300 Pressure: %3.3f PSI\r\n",flashParameters.offsetMSPPressure / 1000.0);
1041// printk(" Offset RTD: %3.3f C\r\n",flashParameters.offsetRTD / 1000.0);
1042// printk(" Offset Thermistor: %3.3f C\r\n",flashParameters.offsetThermistor / 1000.0);
1043// printk(" Silent: %s\r\n",flashParameters.silent?"True":"False");
1044// printk(" Sensor ID: %s\r\n",flashParameters.sensorID);
1045// printk(" Sensor Name: %s\r\n",flashParameters.sensorName);
1046// printk(" Customer: %s\r\n",flashParameters.customer);
1047// printk(" Location: %s\r\n",flashParameters.location);
1048// printk(" Group: %s\r\n",flashParameters.group);
1049// printk(" Distributor: %s\r\n",flashParameters.distributor);
1050// printk(" Client ID: %s\r\n",flashParameters.clientID);
1051// printk(" EDRX Parameter: %s\r\n",flashParameters.edrx_param);
1052//// printk(" EDRX PTW: %s\r\n",flashParameters.ptw_param);
1053// printk(" PSM Tau: %s\r\n",flashParameters.psm_param_rptau);
1054// printk(" PSM AT: %s\r\n",flashParameters.psm_param_rat);
1055// printk(" JSON Packets Saved: %d\r\n",flashParameters.savedCount);
1056// printk(" Next Saved JSON Packet Read: %d 0x%X\r\n",flashParameters.nextSavedRead,flashParameters.nextSavedRead);
1057// printk(" Next Saved JSON Packet Write: %d 0x%X\r\n",flashParameters.nextSavedWrite,flashParameters.nextSavedWrite);
1058// printk(" Global Alarms Enabled: %s\r\n\r\n",flashParameters.alarmsEnabled?"True":"False");
1059// printk(" Temperature Units: %s\r\n",flashParameters.tempUnitsCentigrade?"C":"F");
1060//
1061// printk(" Temperature Alarm Check: %d seconds\r\n",flashParameters.tempAlarmCheck);
1062// printk(" Temperature Alarms Valid: %d seconds\r\n",flashParameters.tempAlarmValid);
1063// printk(" Temperature Alarms\r\n Sensor\tLow E\tLow A\tLow T\tLow V\tLow Time\t\t\tLow Valid\r\n");
1064// for(i=0; i < MAX_NUMBER_TEMPERATURE_SENSORS; i++)
1065// {
1066// printk(" %d %s\t",i,tempSensorNames[tempSensorsPresent[i]]);
1067// if(flashParameters.tempAlarms[i].tempAlarm & LOWTEMPENABLE)
1068// printk("E\t");
1069// else
1070// printk("D\t");
1071// if(flashParameters.tempAlarms[i].tempAlarm & LOWTEMPACTIVE)
1072// {
1073//// curTime = flashParameters.tempAlarms[i].lowTempTime + (flashParameters.timeZone * 60 * 60);
1074// curTime = flashParameters.tempAlarms[i].lowTempTime ;
1075// pTime = localtime(&curTime);
1076// sprintf(str,"%3.2f\t%3.2f\t%02d/%02d/%04d %02d:%02d:%02d", \
1077// (flashParameters.tempAlarms[i].lowTempCheck * 1.0)/ 100.0,(flashParameters.tempAlarms[i].lowTempAlarmValue * 1.0)/ 100.0, \
1078// pTime->tm_mon+1,pTime->tm_mday,pTime->tm_year + 1900,pTime->tm_hour,pTime->tm_min,pTime->tm_sec);
1079// printk("A\t%s\t%d",str,flashParameters.tempAlarms[i].lowTempAlarmValid);
1080// }
1081// else
1082// {
1083// sprintf(str,"%3.2f\t\t\t\t\t\t%d",(flashParameters.tempAlarms[i].lowTempCheck * 1.0)/ 100.0,flashParameters.tempAlarms[i].lowTempAlarmValid);
1084// printk("I\t%s",str);
1085// }
1086// printk("\r\n");
1087// }
1088// printk("\r\n Sensor\tHigh E\tHigh A\tHigh T\tHigh V\tHigh Time\t\t\tHigh Valid\r\n");
1089// for(i=0; i < MAX_NUMBER_TEMPERATURE_SENSORS; i++)
1090// {
1091// printk(" %d %s\t",i,tempSensorNames[tempSensorsPresent[i]]);
1092// if(flashParameters.tempAlarms[i].tempAlarm & HIGHTEMPENABLE)
1093// printk("E\t");
1094// else
1095// printk("D\t");
1096// if(flashParameters.tempAlarms[i].tempAlarm & HIGHTEMPACTIVE)
1097// {
1098//// curTime = flashParameters.tempAlarms[i].highTempTime + (flashParameters.timeZone * 60 * 60);
1099// curTime = flashParameters.tempAlarms[i].highTempTime;
1100// pTime = localtime(&curTime);
1101// sprintf(str,"%3.2f\t%3.2f\t%02d/%02d/%04d %02d:%02d:%02d", \
1102// (flashParameters.tempAlarms[i].highTempCheck * 1.0)/ 100.0,(flashParameters.tempAlarms[i].highTempAlarmValue * 1.0)/ 100.0, \
1103// pTime->tm_mon+1,pTime->tm_mday,pTime->tm_year + 1900,pTime->tm_hour,pTime->tm_min,pTime->tm_sec);
1104// printk("A\t%s\t%d",str,flashParameters.tempAlarms[i].highTempAlarmValid);
1105// }
1106// else
1107// {
1108// sprintf(str,"%3.2f\t\t\t\t\t\t%d",(flashParameters.tempAlarms[i].highTempCheck * 1.0)/ 100.0,flashParameters.tempAlarms[i].highTempAlarmValid);
1109// printk("I\t%s",str);
1110// }
1111// printk("\r\n");
1112// }
1113//
1114// printk("\r\n Humidity Alarms Check: %d seconds\r\n",flashParameters.humidityAlarmCheck);
1115// printk(" Humidity Alarms Valid: %d seconds\r\n",flashParameters.humidityAlarmValid);
1116// printk(" Humidity Alarms\r\n Sensor\tLow E\tLow A\tLow T\tLow V\tLow Time\t\t\tLow Valid\r\n");
1117// for(i=0; i < MAX_NUMBER_HUMIDITY_SENSORS; i++)
1118// {
1119// printk(" %d %s\t",i,humiditySensorNames[humiditySensorsPresent[i]]);
1120// if(flashParameters.humidityAlarms[i].humidityAlarm & LOWHUMIDITYENABLE)
1121// printk("E\t");
1122// else
1123// printk("D\t");
1124// if(flashParameters.humidityAlarms[i].humidityAlarm & LOWHUMIDITYACTIVE)
1125// {
1126//// curTime = flashParameters.humidityAlarms[i].lowHumidityTime + (flashParameters.timeZone * 60 * 60);
1127// curTime = flashParameters.humidityAlarms[i].lowHumidityTime ;
1128// pTime = localtime(&curTime);
1129// sprintf(str,"%3.2f\t%3.2f\t%02d/%02d/%04d %02d:%02d:%02d", \
1130// (flashParameters.humidityAlarms[i].lowHumidityCheck * 1.0)/ 100.0,(flashParameters.humidityAlarms[i].lowHumidityAlarmValue * 1.0)/ 100.0, \
1131// pTime->tm_mon+1,pTime->tm_mday,pTime->tm_year + 1900,pTime->tm_hour,pTime->tm_min,pTime->tm_sec);
1132// printk("A\t%s\t%d",str,flashParameters.humidityAlarms[i].lowHumidityAlarmValid);
1133// }
1134// else
1135// {
1136// sprintf(str,"%3.2f\t\t\t\t\t\t%d",(flashParameters.humidityAlarms[i].lowHumidityCheck * 1.0)/ 100.0,flashParameters.humidityAlarms[i].lowHumidityAlarmValid);
1137// printk("I\t%s",str);
1138// }
1139// printk("\r\n");
1140// }
1141// printk("\r\n Sensor\tHigh E\tHigh A\tHigh T\tHigh V\tHigh Time\t\t\tHigh Valid\r\n");
1142// for(i=0; i < MAX_NUMBER_HUMIDITY_SENSORS; i++)
1143// {
1144// printk(" %d %s\t",i,humiditySensorNames[humiditySensorsPresent[i]]);
1145// if(flashParameters.humidityAlarms[i].humidityAlarm & HIGHHUMIDITYENABLE)
1146// printk("E\t");
1147// else
1148// printk("D\t");
1149// if(flashParameters.humidityAlarms[i].humidityAlarm & HIGHHUMIDITYACTIVE)
1150// {
1151//// curTime = flashParameters.humidityAlarms[i].highHumidityTime + (flashParameters.timeZone * 60 * 60);
1152// curTime = flashParameters.humidityAlarms[i].highHumidityTime ;
1153// pTime = localtime(&curTime);
1154// sprintf(str,"%3.2f\t%3.2f\t%02d/%02d/%04d %02d:%02d:%02d", \
1155// (flashParameters.humidityAlarms[i].highHumidityCheck * 1.0)/ 100.0,(flashParameters.humidityAlarms[i].highHumidityAlarmValue * 1.0)/ 100.0, \
1156// pTime->tm_mon+1,pTime->tm_mday,pTime->tm_year + 1900,pTime->tm_hour,pTime->tm_min,pTime->tm_sec);
1157// printk("A\t%s\t%d",str,flashParameters.humidityAlarms[i].highHumidityAlarmValid);
1158// }
1159// else
1160// {
1161// sprintf(str,"%3.2f\t\t\t\t\t\t%d",(flashParameters.humidityAlarms[i].highHumidityCheck * 1.0)/ 100.0,flashParameters.humidityAlarms[i].highHumidityAlarmValid);
1162// printk("I\t%s",str);
1163// }
1164// printk("\r\n");
1165// }
1166//
1167// #if 1
1168// printk("\r\n Pressure Alarms Check: %d seconds\r\n",flashParameters.pressureAlarmCheck);
1169// printk(" Pressure Alarms Valid: %d seconds\r\n",flashParameters.pressureAlarmValid);
1170// printk(" Pressure Alarms\r\n Sensor\tLow E\tLow A\tLow T\tLow V\tLow Time\t\t\tLow Valid\r\n");
1171// for(i=0; i < MAX_NUMBER_PRESSURE_SENSORS; i++)
1172// {
1173// printk(" %d %s\t",i,pressureSensorNames[pressureSensorsPresent[i]]);
1174// if(flashParameters.pressureAlarms[i].pressureAlarm & LOWPRESSUREENABLE)
1175// printk("E\t");
1176// else
1177// printk("D\t");
1178// if(flashParameters.pressureAlarms[i].pressureAlarm & LOWPRESSUREACTIVE)
1179// {
1180//// curTime = flashParameters.pressureAlarms[i].lowPressureTime + (flashParameters.timeZone * 60 * 60);
1181// curTime = flashParameters.pressureAlarms[i].lowPressureTime ;
1182// pTime = localtime(&curTime);
1183// sprintf(str,"%3.2f\t%3.2f\t%02d/%02d/%04d %02d:%02d:%02d", \
1184// (flashParameters.pressureAlarms[i].lowPressureCheck * 1.0)/ 100.0,(flashParameters.pressureAlarms[i].lowPressureAlarmValue * 1.0)/ 100.0, \
1185// pTime->tm_mon+1,pTime->tm_mday,pTime->tm_year + 1900,pTime->tm_hour,pTime->tm_min,pTime->tm_sec);
1186// printk("A\t%s\t%d",str,flashParameters.pressureAlarms[i].lowPressureAlarmValid);
1187// }
1188// else
1189// {
1190// sprintf(str,"%3.2f\t\t\t\t\t\t%d",(flashParameters.pressureAlarms[i].lowPressureCheck * 1.0)/ 100.0,flashParameters.pressureAlarms[i].lowPressureAlarmValid);
1191// printk("I\t%s",str);
1192// }
1193// printk("\r\n");
1194// }
1195// printk("\r\n Sensor\tHigh E\tHigh A\tHigh T\tHigh V\tHigh Time\t\t\tHigh Valid\r\n");
1196// for(i=0; i < MAX_NUMBER_PRESSURE_SENSORS; i++)
1197// {
1198// printk(" %d %s\t",i,pressureSensorNames[pressureSensorsPresent[i]]);
1199// if(flashParameters.pressureAlarms[i].pressureAlarm & HIGHPRESSUREENABLE)
1200// printk("E\t");
1201// else
1202// printk("D\t");
1203// if(flashParameters.pressureAlarms[i].pressureAlarm & HIGHPRESSUREACTIVE)
1204// {
1205//// curTime = flashParameters.pressureAlarms[i].highPressureTime + (flashParameters.timeZone * 60 * 60);
1206// curTime = flashParameters.pressureAlarms[i].highPressureTime ;
1207// pTime = localtime(&curTime);
1208// sprintf(str,"%3.2f\t%3.2f\t%02d/%02d/%04d %02d:%02d:%02d", \
1209// (flashParameters.pressureAlarms[i].highPressureCheck * 1.0)/ 100.0,(flashParameters.pressureAlarms[i].highPressureAlarmValue * 1.0)/ 100.0, \
1210// pTime->tm_mon+1,pTime->tm_mday,pTime->tm_year + 1900,pTime->tm_hour,pTime->tm_min,pTime->tm_sec);
1211// printk("A\t%s\t%d",str,flashParameters.pressureAlarms[i].highPressureAlarmValid);
1212// }
1213// else
1214// {
1215// sprintf(str,"%3.2f\t\t\t\t\t\t%d",(flashParameters.pressureAlarms[i].highPressureCheck * 1.0)/ 100.0,flashParameters.pressureAlarms[i].highPressureAlarmValid);
1216// printk("I\t%s",str);
1217// }
1218// printk("\r\n");
1219// }
1220//
1221// printk("\r\n EZOEC Alarms Check: %d seconds\r\n",flashParameters.ezoecAlarmCheck);
1222// printk(" EZOEC Alarms Valid: %d seconds\r\n",flashParameters.ezoecAlarmValid);
1223// printk(" EZOEC Alarms\r\n Sensor\tLow E\tLow A\tLow T\tLow V\tLow Time\t\t\tLow Valid\r\n");
1224// for(i=0; i < MAX_NUMBER_EZOEC_SENSORS; i++)
1225// {
1226// printk(" %d %s\t",i,ezoecSensorNames[ezoecSensorsPresent[i]]);
1227// if(flashParameters.ezoecAlarms[i].ezoecAlarm & LOWEZOECENABLE)
1228// printk("E\t");
1229// else
1230// printk("D\t");
1231// if(flashParameters.ezoecAlarms[i].ezoecAlarm & LOWEZOECACTIVE)
1232// {
1233//// curTime = flashParameters.ezoecAlarms[i].lowezoecTime + (flashParameters.timeZone * 60 * 60);
1234// curTime = flashParameters.ezoecAlarms[i].lowezoecTime ;
1235// pTime = localtime(&curTime);
1236// sprintf(str,"%3.2f\t%3.2f\t%02d/%02d/%04d %02d:%02d:%02d", \
1237// (flashParameters.ezoecAlarms[i].lowezoecCheck * 1.0)/ 100.0,(flashParameters.ezoecAlarms[i].lowezoecAlarmValue * 1.0)/ 100.0, \
1238// pTime->tm_mon+1,pTime->tm_mday,pTime->tm_year + 1900,pTime->tm_hour,pTime->tm_min,pTime->tm_sec);
1239// printk("A\t%s\t%d",str,flashParameters.ezoecAlarms[i].lowezoecAlarmValid);
1240// }
1241// else
1242// {
1243// sprintf(str,"%3.2f\t\t\t\t\t\t%d",(flashParameters.ezoecAlarms[i].lowezoecCheck * 1.0)/ 100.0,flashParameters.ezoecAlarms[i].lowezoecAlarmValid);
1244// printk("I\t%s",str);
1245// }
1246// printk("\r\n");
1247// }
1248// printk("\r\n Sensor\tHigh E\tHigh A\tHigh T\tHigh V\tHigh Time\t\t\tHigh Valid\r\n");
1249// for(i=0; i < MAX_NUMBER_EZOEC_SENSORS; i++)
1250// {
1251// printk(" %d %s\t",i,ezoecSensorNames[ezoecSensorsPresent[i]]);
1252// if(flashParameters.ezoecAlarms[i].ezoecAlarm & HIGHEZOECENABLE)
1253// printk("E\t");
1254// else
1255// printk("D\t");
1256// if(flashParameters.ezoecAlarms[i].ezoecAlarm & HIGHEZOECACTIVE)
1257// {
1258//// curTime = flashParameters.ezoecAlarms[i].highezoecTime + (flashParameters.timeZone * 60 * 60);
1259// curTime = flashParameters.ezoecAlarms[i].highezoecTime ;
1260// pTime = localtime(&curTime);
1261// sprintf(str,"%3.2f\t%3.2f\t%02d/%02d/%04d %02d:%02d:%02d", \
1262// (flashParameters.ezoecAlarms[i].highezoecCheck * 1.0)/ 100.0,(flashParameters.ezoecAlarms[i].highezoecAlarmValue * 1.0)/ 100.0, \
1263// pTime->tm_mon+1,pTime->tm_mday,pTime->tm_year + 1900,pTime->tm_hour,pTime->tm_min,pTime->tm_sec);
1264// printk("A\t%s\t%d",str,flashParameters.ezoecAlarms[i].highezoecAlarmValid);
1265// }
1266// else
1267// {
1268// sprintf(str,"%3.2f\t\t\t\t\t\t%d",(flashParameters.ezoecAlarms[i].highezoecCheck * 1.0)/ 100.0,flashParameters.ezoecAlarms[i].highezoecAlarmValid);
1269// printk("I\t%s",str);
1270// }
1271// printk("\r\n");
1272// }
1273//
1274//
1275// printk("\r\n Power Alarm Check: %d seconds\r\n",flashParameters.powerAlarmCheck);
1276// printk(" Power Alarm Valid: %d seconds\r\n",flashParameters.powerAlarmValid);
1277// printk(" Power Alarm\r\n Sensor\tE\tA\tTime\r\n");
1278// for(i=0; i < MAX_NUMBER_POWER_SENSORS; i++)
1279// {
1280// printk(" %d",i);
1281// if(flashParameters.powerAlarms[i].powerAlarm &POWERENABLE)
1282// printk("\t\tE\t");
1283// else
1284// printk("\t\tD\t");
1285// if(flashParameters.powerAlarms[i].powerAlarm & POWERACTIVE)
1286// {
1287//// curTime = flashParameters.powerAlarms[i].powerTime + (flashParameters.timeZone * 60 * 60);
1288// curTime = flashParameters.powerAlarms[i].powerTime ;
1289// pTime = localtime(&curTime);
1290// sprintf(str,"%02d/%02d/%04d %02d:%02d:%02d", \
1291// pTime->tm_mon+1,pTime->tm_mday,pTime->tm_year + 1900,pTime->tm_hour,pTime->tm_min,pTime->tm_sec);
1292// printk("A\t%s",str);
1293// }
1294// else
1295// {
1296// printk("I");
1297// }
1298// printk("\r\n");
1299// }
1300// #endif
1301// }
1302// else
1303// {
1304// printk("Flash Parameter Key: 0x%08X Not Set\r\n",flashParameters.key);
1305// }
1306// #endif
1307//}
1308//
1309///*!
1310// * \fn void setFlashxParameters(uint8_t display)
1311// *
1312// * \brief loads the NV Flash parameters from teh RAM flash parameters
1313// *
1314// * \param display true to display parameters after the write, false to not display after a write
1315// *
1316// * \return none
1317// */
1318// void setFlashxParameters(uint8_t display)
1319//{
1320// // int i;
1321// // uint16_t address = FLASHPARAMETERSTART;
1322// // uint8_t tmp[256];
1323// // uint8_t *pFlashParameters = (uint8_t *)&flashParameters;
1324//
1325// /* erase page */
1326// flashxEraseSector(FLASHPARAMETERSTART);
1327// k_sleep(K_MSEC(200));
1328//
1329// // flashParameters.key = FLASHPARAMETERKEY;
1330// // if(sizeof(flashParametersStruct) <= 256)
1331// // {
1332// // memcpy(tmp,pFlashParameters,sizeof(flashParametersStruct));
1333// // flashxWritePage(FLASHPARAMETERSTART, address,tmp,sizeof(flashParametersStruct));
1334// // }
1335// // else if(sizeof(flashParametersStruct) <= 512)
1336// // {
1337// // memcpy(tmp,pFlashParameters,256);
1338// // flashxWritePage(FLASHPARAMETERSTART, address,tmp,256);
1339// // memcpy(tmp,pFlashParameters+256,sizeof(flashParametersStruct) - 256);
1340// // flashxWritePage(FLASHPARAMETERSTART+1, address,tmp,(uint16_t)(sizeof(flashParametersStruct)-256));
1341// // }
1342// // else if(sizeof(flashParametersStruct) <= 768)
1343// // {
1344// // memcpy(tmp,pFlashParameters,256);
1345// // flashxWritePage(FLASHPARAMETERSTART, address,tmp,256);
1346// // memcpy(tmp,pFlashParameters+256,256);
1347// // flashxWritePage(FLASHPARAMETERSTART+1, address,tmp,256);
1348// // memcpy(tmp,pFlashParameters+512,sizeof(flashParametersStruct) - 512);
1349// // flashxWritePage(FLASHPARAMETERSTART+2, address,tmp,(uint16_t)(sizeof(flashParametersStruct)-512));
1350// // }
1351// // else
1352// // {
1353// // memcpy(tmp,pFlashParameters,256);
1354// // flashxWritePage(FLASHPARAMETERSTART, address,tmp,256);
1355// // memcpy(tmp,pFlashParameters+256,256);
1356// // flashxWritePage(FLASHPARAMETERSTART+1, address,tmp,256);
1357// // memcpy(tmp,pFlashParameters+512,256);
1358// // flashxWritePage(FLASHPARAMETERSTART+2, address,tmp,256);
1359// // memcpy(tmp,pFlashParameters+768,sizeof(flashParametersStruct) - 768);
1360// // flashxWritePage(FLASHPARAMETERSTART+3, address,tmp,(uint16_t)(sizeof(flashParametersStruct)-512));
1361// // }
1362// //// for(i=0; i < sizeof(flashParametersStruct); i++)
1363// //// PRINTF("%02X %02X\r\n",tmp[i],pFlashParameters[i]);
1364// //// for(i=0; i < sizeof(flashParametersStruct); i++,address++)
1365// //// {
1366// //// PRINTF("i: %d %02X %02X\r\n",i,address,tmp[i]);
1367// //// flashxWritePage(FLASHPARAMETERSTART, address,tmp,256);
1368// //// }
1369// // if(!flashParameters.silent)
1370// // printk("Flash Parameters Set\r\n");
1371// // if(display)
1372// // {
1373// // displayFlashxParameters();
1374// // }
1375// //// publishSensor = true;
1376//}
1377//
1378/*!
1379 * \fn int initW25Q64JV( void)
1380 *
1381 * \brief Initiailizes the W25Q64JW.
1382 *
1383 * This will read the WHO_AM_I value to determine if a W25Q64JW is connected.\n
1384 * It will set SENSORTYPEW25Q64JW if a W25Q64JW is available.
1385 *
1386 *
1387 * \return TRUE if W25Q64JW connected, FALSE if W25Q64JW not connected.
1388 */
1389int initBME688(void)
1390{
1391 uint8_t bme688IDIn[5] = {0};
1392
1393 readBME688ID(bme688IDIn);
1394 myPrintkW("0x%02X\r\n",bme688IDIn[0]);
1395 if (bme688IDIn[0] == BME688_WHO_AM_I_REG0)
1396 {
1398 myPrintkI("BME688 Gas/Pressure/temperature/Humidty - Present\r\n");
1399 return TRUE;
1400 }
1401 else
1402 {
1403 myPrintkW("BME688 Gas/Pressure/temperature/Humidty - Not Present\r\n");
1404 return FALSE;
1405 }
1406}
int initBME688(void)
Definition bme688.c:1389
void readBME688ID(uint8_t *bme688Id)
reads the NV Flash ID over the SPI bus.
Definition bme688.c:35
BME688 driver header file.
#define BME688_WHO_AM_I_REG0
Definition bme688.h:92
struct spi_buf tx_bufs[]
SPI TX buffer structure.
Definition globals.c:111
const struct spi_buf_set rx
SPI RX buffer structure.
Definition globals.c:127
uint8_t buffer_rx[SPI_BUF_SIZE+8]
SPI receive buffer0.
Definition globals.c:43
const struct device *const spi_dev
Definition globals.c:79
uint32_t sensorTypePresentAll
Definition globals.c:30
int ret
Definition globals.c:41
struct spi_config spi_cfg2
SPI configuration.
Definition globals.c:101
uint8_t buffer_tx[SPI_BUF_SIZE+8]
SPI transmit buffer.
Definition globals.c:42
struct spi_buf rx_bufs[]
SPI RX buffer structure.
Definition globals.c:118
const struct spi_buf_set tx
SPI TX buffer structure.
Definition globals.c:125
int myPrintkI(char *restrict fmt,...)
prints an information message to the UART
Definition main.c:2220
#define TRUE
Definition jfet_common.h:40
#define FALSE
Definition jfet_common.h:39
@ SENSORTYPEBME688
Definition jfet_common.h:69
int myPrintkW(char *restrict fmt,...)
prints a warning message to the UART
Definition main.c:2189