0

I can't compile and upload imagelodaer to my gizmo&CPE
Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.

I can't compile and upload imagelodaer to my gizmo&CPE

by kimyongim on Sun Jun 20, 2021 9:19 am

Arduino: 1.8.15 (Mac OS X), Board: "Adafruit Circuit Playground Express"











In file included from /Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library/Adafruit_Arcada.h:20:0,
from /Users/Clarakim/Downloads/examples 2/imageloader_tft_gizmo/CircuitPython 6.x/imageloader_tft_gizmo/imageloader_tft_gizmo.ino:1:
/Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library/Boards/Adafruit_Arcada_CircuitPlaygroundExpress.h: In member function 'virtual void Adafruit_Arcada::displayBegin()':
/Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library/Boards/Adafruit_Arcada_CircuitPlaygroundExpress.h:5:24: error: 'SPI1' was not declared in this scope
#define ARCADA_TFT_SPI SPI1
^
/Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library/Boards/Adafruit_Arcada_CircuitPlaygroundExpress.h:50:49: note: in expansion of macro 'ARCADA_TFT_SPI'
Adafruit_ST7789 *tft = new Adafruit_ST7789(&ARCADA_TFT_SPI, ARCADA_TFT_CS,
^~~~~~~~~~~~~~
/Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library/Boards/Adafruit_Arcada_CircuitPlaygroundExpress.h:5:24: note: suggested alternative: 'SPI'
#define ARCADA_TFT_SPI SPI1
^
/Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library/Boards/Adafruit_Arcada_CircuitPlaygroundExpress.h:50:49: note: in expansion of macro 'ARCADA_TFT_SPI'
Adafruit_ST7789 *tft = new Adafruit_ST7789(&ARCADA_TFT_SPI, ARCADA_TFT_CS,
^~~~~~~~~~~~~~
/Users/Clarakim/Downloads/examples 2/imageloader_tft_gizmo/CircuitPython 6.x/imageloader_tft_gizmo/imageloader_tft_gizmo.ino: In function 'void loop()':
imageloader_tft_gizmo:59:10: error: 'class Serial_' has no member named 'printf'; did you mean 'print'?
Serial.printf("Loading %s to screen...", imagefile);
^~~~~~
print
exit status 1
'class Serial_' has no member named 'printf'; did you mean 'print'?


This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.


Please, help me!!!
I worked with this for 24 hours but still, I can't fix it.

Thank you!!!

kimyongim
 
Posts: 9
Joined: Tue Mar 21, 2017 3:36 am

Re: I can't compile and upload imagelodaer to my gizmo&CPE

by dastels on Sun Jun 20, 2021 9:51 am

I just built it without issue with 1.8.12 on Linux. Are all your libraries up to date?

Dave

dastels
 
Posts: 6817
Joined: Tue Oct 20, 2015 3:22 pm

Re: I can't compile and upload imagelodaer to my gizmo&CPE

by kimyongim on Sun Jun 20, 2021 6:18 pm

My Arduino Version is up to date.

Many Many Thanks! Dave!


from /Users/Clarakim/Downloads/examples 2/imageloader_tft_gizmo/CircuitPython 6.x/imageloader_tft_gizmo/imageloader_tft_gizmo.ino:1:
/Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library/Boards/Adafruit_Arcada_CircuitPlaygroundExpress.h: In member function 'virtual void Adafruit_Arcada::displayBegin()':
/Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library/Boards/Adafruit_Arcada_CircuitPlaygroundExpress.h:5:24: error: 'SPI1' was not declared in this scope
#define ARCADA_TFT_SPI SPI1
^
/Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library/Boards/Adafruit_Arcada_CircuitPlaygroundExpress.h:50:49: note: in expansion of macro 'ARCADA_TFT_SPI'
Adafruit_ST7789 *tft = new Adafruit_ST7789(&ARCADA_TFT_SPI, ARCADA_TFT_CS,
^~~~~~~~~~~~~~
/Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library/Boards/Adafruit_Arcada_CircuitPlaygroundExpress.h:5:24: note: suggested alternative: 'SPI'
#define ARCADA_TFT_SPI SPI1
^
/Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library/Boards/Adafruit_Arcada_CircuitPlaygroundExpress.h:50:49: note: in expansion of macro 'ARCADA_TFT_SPI'
Adafruit_ST7789 *tft = new Adafruit_ST7789(&ARCADA_TFT_SPI, ARCADA_TFT_CS,
^~~~~~~~~~~~~~
/Users/Clarakim/Downloads/examples 2/imageloader_tft_gizmo/CircuitPython 6.x/imageloader_tft_gizmo/imageloader_tft_gizmo.ino: In function 'void loop()':
imageloader_tft_gizmo:59:10: error: 'class Serial_' has no member named 'printf'; did you mean 'print'?
Serial.printf("Loading %s to screen...", imagefile);
^~~~~~
print
Using library Adafruit_Arcada_Library at version 2.5.0 in folder: /Users/Clarakim/Documents/Arduino/libraries/Adafruit_Arcada_Library
Using library arduino_843315 at version 1.10.10 in folder: /Users/Clarakim/Documents/Arduino/libraries/arduino_843315
Using library Adafruit_NeoPixel at version 1.8.2 in folder: /Users/Clarakim/Documents/Arduino/libraries/Adafruit_NeoPixel
Using library SPI at version 1.0 in folder: /Users/Clarakim/Library/Arduino15/packages/arduino/hardware/samd/1.8.11/libraries/SPI
Using library Adafruit_ZeroTimer_Library at version 2.2.2 in folder: /Users/Clarakim/Documents/Arduino/libraries/Adafruit_ZeroTimer_Library
Using library Adafruit_TouchScreen at version 1.1.2 in folder: /Users/Clarakim/Documents/Arduino/libraries/Adafruit_TouchScreen
Using library Adafruit_Circuit_Playground at version 1.11.3 in folder: /private/var/folders/vs/mgbh5ynx29d131hsjpzzj1c40000gn/T/AppTranslocation/30A87CB5-1ABE-4806-974F-BAE5EAB7CAA8/d/Arduino 2.app/Contents/Java/libraries/Adafruit_Circuit_Playground
Using library Wire at version 1.0 in folder: /Users/Clarakim/Library/Arduino15/packages/arduino/hardware/samd/1.8.11/libraries/Wire
Using library Adafruit_ST7735_and_ST7789_Library at version 1.7.2 in folder: /Users/Clarakim/Documents/Arduino/libraries/Adafruit_ST7735_and_ST7789_Library
Using library Adafruit_ImageReader_Library at version 2.6.1 in folder: /Users/Clarakim/Documents/Arduino/libraries/Adafruit_ImageReader_Library
Using library Adafruit_SPIFlash at version 3.4.3 in folder: /Users/Clarakim/Documents/Arduino/libraries/Adafruit_SPIFlash
Using library SdFat-master at version 1.2.3 in folder: /Users/Clarakim/Documents/Arduino/libraries/SdFat-master
Using library Adafruit_WavePlayer_Library at version 1.0.3 in folder: /Users/Clarakim/Documents/Arduino/libraries/Adafruit_WavePlayer_Library
Using library ArduinoJson at version 6.18.0 in folder: /Users/Clarakim/Documents/Arduino/libraries/ArduinoJson
Using library Adafruit_BusIO at version 1.7.5 in folder: /Users/Clarakim/Documents/Arduino/libraries/Adafruit_BusIO
Using library Adafruit_EPD at version 4.4.0 in folder: /Users/Clarakim/Documents/Arduino/libraries/Adafruit_EPD
exit status 1
'class Serial_' has no member named 'printf'; did you mean 'print'?

This is my error message.
I just tried to use circuit python but I uploaded new uf2 , py , mpy library ..
But there is nothing shown up in my TFT Gizmo.

Please help me!
Attachments
KakaoTalk_Photo_2021-06-21-07-17-28.jpeg
KakaoTalk_Photo_2021-06-21-07-17-28.jpeg (613.91 KiB) Viewed 174 times

kimyongim
 
Posts: 9
Joined: Tue Mar 21, 2017 3:36 am

Re: I can't compile and upload imagelodaer to my gizmo&CPE

by dastels on Sun Jun 20, 2021 7:43 pm

A few things.

Your Arduino installation may be up to date but are your libraries and board support files?

The CircuitPython UF2 gets copied to the CPLAYBOOT drive, not the CIRCUITPY drive. See https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpython.

Libraries (the MPY fles from the bundle) go in the lib directory. You don't need/want the PY version as well.

You will need to use the CircuitPython build here: https://circuitpython.org/board/circuitplayground_express_displayio/

What gets output in the REPL when you try the CircuitPython demo?

In short, you should read through https://learn.adafruit.com/adafruit-tft-gizmo. It should get you up and running.

Dave

dastels
 
Posts: 6817
Joined: Tue Oct 20, 2015 3:22 pm

Re: I can't compile and upload imagelodaer to my gizmo&CPE

by kimyongim on Mon Jun 21, 2021 7:54 am

Thanks Dave,
I found my problem...
But still I am working.
I would like to see my bitmap image on screen like...

https://learn.adafruit.com/creating-sli ... hon/use-it

And I will show you my work!


Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.

code.py output:
Warning: adafruit_display_text not found. No support for text slides.
Warning: adafruit_bitmap_font not found. No support for custom fonts.
Traceback (most recent call last):
File "code.py", line 6, in <module>
AttributeError: 'module' object has no attribute 'DISPLAY'

Code done running.

Adafruit CircuitPython 6.3.0 on 2021-06-01; Adafruit CircuitPlayground Express with displayio with samd21g18
>>>
Attachments
KakaoTalk_Photo_2021-06-21-20-49-27.jpeg
KakaoTalk_Photo_2021-06-21-20-49-27.jpeg (327.49 KiB) Viewed 163 times
스크린샷 2021-06-21 오후 7.25.11.png
스크린샷 2021-06-21 오후 7.25.11.png (228.49 KiB) Viewed 163 times

kimyongim
 
Posts: 9
Joined: Tue Mar 21, 2017 3:36 am

Re: I can't compile and upload imagelodaer to my gizmo&CPE

by kimyongim on Mon Jun 21, 2021 11:13 am

Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.

code.py output:
Traceback (most recent call last):
File "code.py", line 22, in <module>
MemoryError: memory allocation failed, allocating 7680 bytes

Code done running.

Adafruit CircuitPython 6.3.0 on 2021-06-01; Adafruit CircuitPlayground Express with displayio with samd21g18
>>>


It is my final error!
What am I supposed to do?

Poor Clara

kimyongim
 
Posts: 9
Joined: Tue Mar 21, 2017 3:36 am

Re: I can't compile and upload imagelodaer to my gizmo&CPE

by dastels on Mon Jun 21, 2021 12:25 pm

It looks like you are using code from the slideshow project. That was written for boards with builtin displays, so there's a board.DISPLAY constant. The CircuitPlayground Express doesn't have a builting display... so no board.DISPLAY.

See https://learn.adafruit.com/adafruit-tft-gizmo/circuitpython-displayio-quickstart for how to work with the CircuitPlayground Express and the TFT Gizmo.

The undefined "splash" variable is because, I assume, the code isn't creating it. Normally you have the following before using it:
Code: Select all | TOGGLE FULL SIZE
splash = displayio.Group(max_size=10)


And that bring us to the memory allocation failure. I get the same thing with the simple example from the page I linked above. My guess is that the libraries and/or their RAM requirements have grown since that code was written and there's no longer room to run that code. CircuitPython's RAM requirements may also have grown.

If you want to use CircuitPython your best solution is to get a CircuitPlayground Bluefruit. It will have plenty of room for whatever you want to do with the Gizmo. The SAMD21 just doesn't have much RAM and that will limit what you can do, especially with respect to bitmaps.

The other alternative is to use C++/Arduino. Due to C++ being compiled to machine code and running from flash (RAM isn't used for the code, just for data) you will not have the same constraints and can accomplish far more.

Dave

dastels
 
Posts: 6817
Joined: Tue Oct 20, 2015 3:22 pm

Re: I can't compile and upload imagelodaer to my gizmo&CPE

by kimyongim on Sat Jun 26, 2021 6:08 pm

Dear Dave,

I uploaded imageloader_tft_gizmo.ino to CPX successfully.
But, there is nothing on TFT.

Can you help me?

https://blog.naver.com/kimyongim/222403786712
This is my blog.
Hopefully, I would like to see my QR code bitmaps on TFT&CPX.




Set binary mode
readWord(addr=0)=0x20002de0
readWord(addr=0xe000ed00)=0x410cc601
readWord(addr=0x41002018)=0x10010305
version()=v1.1 [Arduino:XYZ] Feb 21 2021 21:09:52
chipId=0x10010005
Connected at 921600 baud
readWord(addr=0)=0x20002de0
readWord(addr=0xe000ed00)=0x410cc601
readWord(addr=0x41002018)=0x10010305
Atmel SMART device 0x10010005 found
write(addr=0x20004000,size=0x34)
writeWord(addr=0x20004030,value=0x10)
writeWord(addr=0x20004020,value=0x20008000)
Device : ATSAMD21G18A
readWord(addr=0)=0x20002de0
readWord(addr=0xe000ed00)=0x410cc601
readWord(addr=0x41002018)=0x10010305
Chip ID : 10010005
version()=v1.1 [Arduino:XYZ] Feb 21 2021 21:09:52
Version : v1.1 [Arduino:XYZ] Feb 21 2021 21:09:52
Address : 8192
Pages : 3968
Page Size : 64 bytes
Total Size : 248KB
Planes : 1
Lock Regions : 16
Locked : readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
readWord(addr=0x41004020)=0xffff
none
readWord(addr=0x41004018)=0
Security : false
Boot Flash : true
readWord(addr=0x40000834)=0x7000a
BOD : true
readWord(addr=0x40000834)=0x7000a
BOR : true
Arduino : FAST_CHIP_ERASE
Arduino : FAST_MULTI_PAGE_WRITE
Arduino : CAN_CHECKSUM_MEMORY_BUFFER
Erase flash
chipErase(addr=0x2000)
done in 0.951 seconds

Write 94380 bytes to flash (1475 pages)
write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x2000, size=0x1000)
[= ] 4% (64/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x3000, size=0x1000)
[== ] 8% (128/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x4000, size=0x1000)
[=== ] 13% (192/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x5000, size=0x1000)
[===== ] 17% (256/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x6000, size=0x1000)
[====== ] 21% (320/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x7000, size=0x1000)
[======= ] 26% (384/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x8000, size=0x1000)
[========= ] 30% (448/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x9000, size=0x1000)
[========== ] 34% (512/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0xa000, size=0x1000)
[=========== ] 39% (576/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0xb000, size=0x1000)
[============= ] 43% (640/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0xc000, size=0x1000)
[============== ] 47% (704/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0xd000, size=0x1000)
[=============== ] 52% (768/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0xe000, size=0x1000)
[================ ] 56% (832/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0xf000, size=0x1000)
[================== ] 60% (896/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x10000, size=0x1000)
[=================== ] 65% (960/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x11000, size=0x1000)
[==================== ] 69% (1024/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x12000, size=0x1000)
[====================== ] 73% (1088/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x13000, size=0x1000)
[======================= ] 78% (1152/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x14000, size=0x1000)
[======================== ] 82% (1216/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x15000, size=0x1000)
[========================== ] 86% (1280/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x16000, size=0x1000)
[=========================== ] 91% (1344/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x17000, size=0x1000)
[============================ ] 95% (1408/1475 pages)write(addr=0x20005000,size=0x1000)
writeBuffer(scr_addr=0x20005000, dst_addr=0x18000, size=0x1000)
[============================= ] 99% (1472/1475 pages)write(addr=0x20005000,size=0xc0)
writeBuffer(scr_addr=0x20005000, dst_addr=0x19000, size=0xc0)
[==============================] 100% (1475/1475 pages)
done in 0.600 seconds

Verify 94380 bytes of flash with checksum.
checksumBuffer(start_addr=0x2000, size=0x1000) = bb8b
checksumBuffer(start_addr=0x3000, size=0x1000) = bb1
checksumBuffer(start_addr=0x4000, size=0x1000) = b56c
checksumBuffer(start_addr=0x5000, size=0x1000) = 8f50
checksumBuffer(start_addr=0x6000, size=0x1000) = f3db
checksumBuffer(start_addr=0x7000, size=0x1000) = e4f4
checksumBuffer(start_addr=0x8000, size=0x1000) = 5726
checksumBuffer(start_addr=0x9000, size=0x1000) = f361
checksumBuffer(start_addr=0xa000, size=0x1000) = 1c1a
checksumBuffer(start_addr=0xb000, size=0x1000) = 3388
checksumBuffer(start_addr=0xc000, size=0x1000) = fc1e
checksumBuffer(start_addr=0xd000, size=0x1000) = d1cf
checksumBuffer(start_addr=0xe000, size=0x1000) = 969b
checksumBuffer(start_addr=0xf000, size=0x1000) = f6e0
checksumBuffer(start_addr=0x10000, size=0x1000) = a447
checksumBuffer(start_addr=0x11000, size=0x1000) = 50bb
checksumBuffer(start_addr=0x12000, size=0x1000) = 2d92
checksumBuffer(start_addr=0x13000, size=0x1000) = abb1
checksumBuffer(start_addr=0x14000, size=0x1000) = 5e26
checksumBuffer(start_addr=0x15000, size=0x1000) = 9e71
checksumBuffer(start_addr=0x16000, size=0x1000) = 5d81
checksumBuffer(start_addr=0x17000, size=0x1000) = f345
checksumBuffer(start_addr=0x18000, size=0x1000) = 4cec
checksumBuffer(start_addr=0x19000, size=0xac) = 86c
Verify successful
done in 0.144 seconds
CPU reset.
readWord(addr=0)=0x20002de0
readWord(addr=0xe000ed00)=0x410cc601
readWord(addr=0x41002018)=0x10010305
writeWord(addr=0xe000ed0c,value=0x5fa0004)
Attachments
스크린샷 2021-06-27 오전 2.43.21.png
스크린샷 2021-06-27 오전 2.43.21.png (219.29 KiB) Viewed 75 times

kimyongim
 
Posts: 9
Joined: Tue Mar 21, 2017 3:36 am

Re: I can't compile and upload imagelodaer to my gizmo&CPE

by dastels on Sat Jun 26, 2021 7:51 pm

Are you seeing the expected output in the serial monitor? Is the backlight fading in & out as you push buttons?

I'm trying to get it running as well, without much success.

Dave

dastels
 
Posts: 6817
Joined: Tue Oct 20, 2015 3:22 pm

Re: I can't compile and upload imagelodaer to my gizmo&CPE

by kimyongim on Sat Jun 26, 2021 8:12 pm

On my gizmo, there is nothing shown.

09:05:33.199 -> Y
09:05:33.199 ->


This is my Serial monitor!

Many Many Thanks, Dave!!!

Sincerely,
Clara
Attachments
KakaoTalk_Photo_2021-06-27-09-06-11.jpeg
KakaoTalk_Photo_2021-06-27-09-06-11.jpeg (291.83 KiB) Viewed 70 times

kimyongim
 
Posts: 9
Joined: Tue Mar 21, 2017 3:36 am

Re: I can't compile and upload imagelodaer to my gizmo&CPE

by kimyongim on Sun Jun 27, 2021 1:08 am

Dear Dave,

I uploaded bmp files to CIRCUITPY in virtual drive.

13:57:39.144 -> Querying blinka.bmp image size...Success!
13:57:39.144 -> Image dimensions: 240x240
When I tried to upload elnkGizmo.int, Serial monitor messages are shown like upper and some parts of the yellow image appeared.
But imageLoder_tft_Gizmo.ino is nothing happened.


The only thing that working is graphictest_tft_Gizmo.ino.
It works perfectly.

Hopefully, I would like to know exactly about this process.

Best Regards,
Clara
Attachments
KakaoTalk_Photo_2021-06-27-14-03-04.jpeg
KakaoTalk_Photo_2021-06-27-14-03-04.jpeg (386.72 KiB) Viewed 61 times
KakaoTalk_Photo_2021-06-27-14-03-11.jpeg
KakaoTalk_Photo_2021-06-27-14-03-11.jpeg (304.68 KiB) Viewed 61 times
KakaoTalk_Photo_2021-06-27-14-03-14.jpeg
KakaoTalk_Photo_2021-06-27-14-03-14.jpeg (276.67 KiB) Viewed 61 times

kimyongim
 
Posts: 9
Joined: Tue Mar 21, 2017 3:36 am

Please be positive and constructive with your questions and comments.