Logged to SDcard 1session this morning and never again...

General Q&A specific to RaceCapture/Pro. For app related questions post in the RaceCapture App forum. also see the <a href="http://www.autosportlabs.net/RaceCapture">RaceCapture Information Page</a>

Moderators: JeffC, rdoherty, stieg, brentp

jeffeggy
Posts: 5
Joined: Mon Aug 10, 2015 4:23 am

Logged to SDcard 1session this morning and never again...

Post by jeffeggy »

I'm having some issues with my race capture MK2. I'm running FW version 2.8.4. This morning(Aug 9th) at Thunderhill on my first session the session was captured nicely on the SD card (minus some GPS craziness.) All data looks correct, etc. After that session, I shutdown the race capture and pulled the SD card to my laptop. After this session no further data is captured no matter how many times I push the button or if the logging light is solid. Even without an SD card the logging light will light solidly. Data streams to both the new beta Android RaceCapture app and Harry's lap timer just fine over bluetooth. I just can't for the life of me get the SD card to be written again.
In the info log I see the following when I push the button:
&#65279;Logging started
fileWriter.c: Start
--or--
&#65279;Logging stopped

Oddly the System status window shows no logging no matter state of button, yet counter starts going when the button is pushed or gets reset to 0 when value is there and button is pushed again... I figure a system reset to default would help, just dont want to have to do this all the time. Tried multiple reboots after removing power. Tried to delete the Lua script, didnt change the issue at all...

The night before logging worked perfectly and was able to start and stop multiple times. I wanted to check to verify I didn't have any script issues etc.

RaceCapture/Pro MK2 > showStats

- - - Memory Info - - -
Total Memory : 131064
Free Memory : 65976

- - - Lua Info - - -
Lua Top : 1
Lua Memory Usage (KB) : 16

- - - Misc - - -
Size of LoggerConfig : 3420
Size of ChannelSample : 24


- - - Task Info - - -
Status Pri Stack Task# Name
OnUSBComm R 6 867 6
logger R 6 117 12
IMU update R 2 103 4
IDLE R 0 147 2
connWireless B 4 851 9
OBD2Task B 2 39 11
GPSTask B 5 75 10
luaTask B 2 110 7
Tmr Svc B 4 139 3
fileWriter S 4 193 8
PushbuttonTask S 4 19 5


Log of capture sitting on my kitchen table, hence timeout on rx CAN msg.
{"s":{"t":4977,"d":[1489015,0,0.28,-0.03,0.94,4.6,4.1,0.3,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":4978,"d":[1489055,0,0.29,-0.03,0.94,6.4,3.2,0.9,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":4979,"d":[1489095,0,0.28,-0.02,0.94,15.9,8.8,2.6,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
timeout rx CAN msg
Logging started
fileWriter.c: Start
{"logStart":1}
{"s":{"t":0,"meta":[{"nm":"Interval","ut":"ms","min":0,"max":0,"prec":0,"sr":1},{"nm":"Utc","ut":"ms","min":0,"max":0,"prec":0,"sr":1},{"nm":"Battery","ut":"Volts","min":0.0,"max":20.0,"prec":2,"sr":1},{"nm":"AccelX","ut":"G","min":-3.0,"max":3.0,"prec":2,"sr":25},{"nm":"AccelY","ut":"G","min":-3.0,"max":3.0,"prec":2,"sr":25},{"nm":"AccelZ","ut":"G","min":-3.0,"max":3.0,"prec":2,"sr":25},{"nm":"Yaw","ut":"Deg/Sec","min":-300.0,"max":300.0,"prec":1,"sr":25},{"nm":"Pitch","ut":"Deg/Sec","min":-300.0,"max":300.0,"prec":1,"sr":25},{"nm":"Roll","ut":"Deg/Sec","min":-300.0,"max":300.0,"prec":1,"sr":25},{"nm":"Speed","ut":"MPH","min":0.0,"max":150.0,"prec":2,"sr":50},{"nm":"MAP","ut":"KPa","min":0,"max":255,"prec":0,"sr":50},{"nm":"TPS","ut":"%","min":0.0,"max":100.0,"prec":2,"sr":50},{"nm":"RPM","ut":"","min":0,"max":10000,"prec":0,"sr":50},{"nm":"IAT","ut":"F","min":0,"max":300,"prec":0,"sr":50},{"nm":"EngineTemp","ut":"F","min":0,"max":300,"prec":0,"sr":50},{"nm":"IgnTiming","ut":"deg","min":0,"max":60,"prec":0,"sr":50},{"nm":"EngineLoad","ut":"","min":0,"max":100,"prec":0,"sr":50},{"nm":"FuelLevel","ut":"F","min":0,"max":100,"prec":0,"sr":1},{"nm":"Steering","ut":"","min":-360,"max":360,"prec":0,"sr":10},{"nm":"TPS1","ut":"%","min":0.0,"max":100.0,"prec":2,"sr":10},{"nm":"Wheel_LF","ut":"MPH","min":0.0,"max":160.0,"prec":2,"sr":10},{"nm":"Wheel_RF","ut":"MPH","min":0.0,"max":160.0,"prec":2,"sr":10},{"nm":"Wheel_LR","ut":"MPH","min":0.0,"max":160.0,"prec":2,"sr":10},{"nm":"Wheel_RR","ut":"MPH","min":0.0,"max":160.0,"prec":2,"sr":10},{"nm":"Gear","ut":"","min":0.0,"max":1000.0,"prec":2,"sr":10},{"nm":"Brake","ut":"%","min":0.0,"max":100.0,"prec":2,"sr":10},{"nm":"Brake1","ut":"%","min":0.0,"max":100.0,"timeout rx CAN msg
prec":2,"sr":10},{"nm":"Trans_Torqu","ut":"ft-lb","min":0.0,"max":500.0,"prec":2,"sr":10},{"nm":"Engine_Torq","ut":"ft-lb","min":0.0,"max":500.0,"prec":2,"sr":10},{"nm":"Latitude","ut":"Degrees","min":-180.0,"max":180.0,"prec":6,"sr":25},{"nm":"Longitude","ut":"Degrees","min":-180.0,"max":180.0,"prec":6,"sr":25},{"nm":"Speed","ut":"MPH","min":0.0,"max":150.0,"prec":2,"sr":25},{"nm":"Distance","ut":"Miles","min":0.0,"max":0.0,"prec":3,"sr":25},{"nm":"Altitude","ut":"Feet","min":0.0,"max":4000.0,"prec":1,"sr":25},{"nm":"GPSSats","ut":"","min":0,"max":20,"prec":0,"sr":25},{"nm":"GPSQual","ut":"","min":0,"max":5,"prec":0,"sr":25},{"nm":"GPSDOP","ut":"","min":0.0,"max":20.0,"prec":1,"sr":25},{"nm":"LapCount","ut":"","min":0,"max":0,"prec":0,"sr":25},{"nm":"LapTime","ut":"Min","min":0.0,"max":0.0,"prec":4,"sr":25},{"nm":"Sector","ut":"","min":0,"max":0,"prec":0,"sr":25},{"nm":"SectorTime","ut":"Min","min":0.0,"max":0.0,"prec":4,"sr":25},{"nm":"PredTime","ut":"Min","min":0.0,"max":0.0,"prec":4,"sr":5},{"nm":"ElapsedTime","ut":"Min","min":0.0,"max":0.0,"prec":4,"sr":25},{"nm":"CurrentLap","ut":"","min":0,"max":0,"prec":0,"sr":25}],timeout rx CAN msg
"d":[1489135,0,0.28,-0.02,0.95,31.7,19.6,4.8,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0.0,0,4294836219,4095]}}
{"s":{"t":1,"d":[1489176,0,0.28,-0.03,0.94,36.3,24.2,5.0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":2,"d":[1489216,0,0.28,-0.03,0.94,31.0,22.3,4.2,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":3,"d":[1489256,0,0.28,-0.03,0.94,25.1,19.8,3.0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":4,"d":[1489296,0,0.28,-0.04,0.94,19.5,15.2,1.4,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":5,"d":[1489336,0,4.59,0.29,-0.03,0.94,10.5,11.2,-0.6,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0.0,0,4294967295,4095]}}
{"s":{"t":6,"d":[1489376,0,0.28,-0.02,0.94,-0.3,4.3,-2.4,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
timeout rx CAN msg
{"s":{"t":7,"d":[1489416,0,0.28,-0.01,0.94,-1.0,2.8,-2.2,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":8,"d":[1489456,0,0.28,-0.01,0.94,-0.1,1.1,-1.8,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":9,"d":[1489496,0,0.28,-0.01,0.94,0.5,0.2,-0.8,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
timeout rx CAN msg
{"s":{"t":10,"d":[1489536,0,0.28,-0.01,0.94,0.9,-0.1,-0.8,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0.0,0,4294836219,4095]}}
{"s":{"t":11,"d":[1489577,0,0.28,-0.01,0.94,1.3,-0.6,-0.5,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
timeout rx CAN msg
{"s":{"t":12,"d":[1489617,0,0.28,-0.01,0.94,1.4,-0.1,-0.4,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":13,"d":[1489657,0,0.28,-0.01,0.94,1.5,0.5,-0.4,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":14,"d":[1489697,0,0.28,-0.01,0.94,1.5,1.0,-0.4,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
timeout rx CAN msg
{"s":{"t":15,"d":[1489737,0,0.28,-0.01,0.94,1.6,0.9,-0.3,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0.0,0,4294836219,4095]}}
{"s":{"t":16,"d":[1489778,0,0.28,-0.01,0.94,1.5,1.0,-0.2,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
timeout rx CAN msg
{"s":{"t":17,"d":[1489818,0,0.28,-0.01,0.94,1.6,1.0,-0.2,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":18,"d":[1489858,0,0.28,-0.01,0.94,1.5,0.9,-0.2,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":19,"d":[1489898,0,0.28,-0.01,0.94,1.6,0.9,-0.1,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
timeout rx CAN msg
{"s":{"t":20,"d":[1489938,0,0.28,-0.01,0.94,1.8,0.4,0.1,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0.0,0,4294836219,4095]}}
{"s":{"t":21,"d":[1489979,0,0.28,-0.01,0.94,1.9,-0.1,0.1,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
timeout rx CAN msg
{"s":{"t":22,"d":[1490019,0,0.28,-0.01,0.94,2.0,-0.3,0.2,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":23,"d":[1490059,0,0.28,-0.0,0.94,1.9,0.1,0.1,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":24,"d":[1490099,0,0.28,-0.0,0.94,2.1,0.1,0.1,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
timeout rx CAN msg
{"s":{"t":25,"d":[1490139,0,0.28,-0.01,0.94,2.2,0.3,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0.0,0,4294836219,4095]}}
{"s":{"t":26,"d":[1490180,0,0.28,-0.0,0.94,2.2,-0.1,0.2,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
timeout rx CAN msg
{"s":{"t":27,"d":[1490220,0,0.28,-0.01,0.94,2.3,-1.0,0.5,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":28,"d":[1490260,0,0.28,0.0,0.94,3.6,-3.5,1.5,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
Logging stopped
fileWriter.c: End
{"logEnd":1}
timeout rx CAN msg
{"s":{"t":29,"d":[1490300,0,0.28,-0.01,0.94,7.2,6.4,3.3,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
{"s":{"t":30,"d":[1490340,0,4.66,0.28,-0.03,0.94,6.0,7.4,1.9,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0.0,0,4294967295,4095]}}
{"s":{"t":31,"d":[1490381,0,0.28,-0.02,0.94,1.1,5.2,1.5,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0,0.0,-1,0.0,0.0,0,3758227451,3583]}}
t

toga94m
Posts: 127
Joined: Wed Jun 05, 2013 1:57 am
Location: Upstate NY

Post by toga94m »

Stupid question (but it's happened to me) - Does your SD card have a write-protect slide switch that maybe got caught on the slot/front panel as you put the card back in, sliding it to the "protect" position? I forget if the firmware flags a write-protected state by blinking the red LED on the front panel...
------------
Learning Race Capture Pro... on someone else's car
Learning Python/Kivy on my own PC

jeffeggy
Posts: 5
Joined: Mon Aug 10, 2015 4:23 am

Post by jeffeggy »

Hmm good point it's a microSD card so if I remember correctly it doesn't have a WP switch. When I get home tonight I'll try to write to the SD card using a PC...

toga94m
Posts: 127
Joined: Wed Jun 05, 2013 1:57 am
Location: Upstate NY

Post by toga94m »

Ahh, right.. Modern (MK2) people use MicroSD without an adapter. My MK1 is using a leftover 32MB SD card that has a slide switch on the side.
------------
Learning Race Capture Pro... on someone else's car
Learning Python/Kivy on my own PC

jeffeggy
Posts: 5
Joined: Mon Aug 10, 2015 4:23 am

Post by jeffeggy »

Tried to read and write the SD card from a computer; worked just fine. Added the first capture from the morning back to the card still no logging. Tried new SD card still nothing... I'll look through the FW to see if there is some condition that could hit this. I could factory reset, but I'd prefer to debug(I debug HW/SW issues all day and hate unresolved issues...) this before the next track day.

finse
Posts: 19
Joined: Thu Jan 30, 2014 3:06 am
Location: Denver
Contact:

Post by finse »

I've started running into this as well. Did you ever solve the issue?

brentp
Site Admin
Posts: 5956
Joined: Wed Jan 24, 2007 6:36 am

Post by brentp »

Hi jeffeggy,

Sorry you're having this problem. Hey, can you try doing a manual SD logging while monitoring RCP's log in debug mode? Would be good to see any errors.

Also, if you haven't already, try doing an SD format to see if that makes a difference. Finally, how many different SD cards have you tried, for comparison? what size cards are they?

Thanks, we'll work to get this resolved!
Brent Picasso
CEO and Founder, Autosport Labs
Facebook | Twitter

finse
Posts: 19
Joined: Thu Jan 30, 2014 3:06 am
Location: Denver
Contact:

Post by finse »

Hey Brent,

Did some testing tonight; here are the results.

cards:
32GB Samsung Evo MicroSD Class 10 x 2
32GB Lexar Class 10

All three cards were "quick" formatted using windows 7 prior to testing.

Methods for starting stopping logging
* physical button
* triggered via lua/gpio or via lua console

When logging begins log shows;
start logging
Logging started
fileWriter.c: Start
{"logStart":1}

when logging is stopped log shows:
Stop Logging
Logging stopped
fileWriter.c: End
{"logEnd":1}

I would expect a message along the lines of "opening RC_XX.log" but do not see it.

Using a terminal to connect to the RCP; testSD works on all three cards and leaves a binary (unreadable to me) file.

Let me know what else I can provide.

Cheers,
Ryan

brentp
Site Admin
Posts: 5956
Joined: Wed Jan 24, 2007 6:36 am

Post by brentp »

Looks like it's waiting to initialize the SD card. Do you have any other cards to test of different sizes, just for comparison? Were you testing with debug logging enabled? (Would have to check if there's more info available on debug)
Brent Picasso
CEO and Founder, Autosport Labs
Facebook | Twitter

finse
Posts: 19
Joined: Thu Jan 30, 2014 3:06 am
Location: Denver
Contact:

Post by finse »

brentp wrote:Looks like it's waiting to initialize the SD card. Do you have any other cards to test of different sizes, just for comparison? Were you testing with debug logging enabled? (Would have to check if there's more info available on debug)
Brent, I have 4gb card coming from Amazon tomorrow. I'll test again with it. I turned debug up to "Trace" and was logging via minicom. I can send you complete logs this evening. Is trace necessary, or should I just keep it at "debug"?

Cheers,
Ryan

brentp
Site Admin
Posts: 5956
Joined: Wed Jan 24, 2007 6:36 am

Post by brentp »

Ryan, are you on the latest 2.8.4?

Keep it at debug level, Trace may flood the log with unrelated stuff, but it will be self evident.

All, we also encourage you to try 2.8.2 and 2.8.3 firmware as well, for a comparison, since SD writing changed across those versions, in an attempt to make the system more robust overall.

Thanks!
Brent Picasso
CEO and Founder, Autosport Labs
Facebook | Twitter

finse
Posts: 19
Joined: Thu Jan 30, 2014 3:06 am
Location: Denver
Contact:

Post by finse »

brentp wrote:Ryan, are you on the latest 2.8.4?!
Yep, 2.8.4
brentp wrote: All, we also encourage you to try 2.8.2 and 2.8.3 firmware as well, for a comparison, since SD writing changed across those versions, in an attempt to make the system more robust overall.
!
Roger that. I'll repeat the same steps with the older firmware versions. That will have to wait for the weekend though. I'll report back what I find.

Cheers,
Ryan

jeffeggy
Posts: 5
Joined: Mon Aug 10, 2015 4:23 am

Post by jeffeggy »

Hi, I had a race today so I factory defaulted (through Serial Port interface) the device about 2 weeks ago. This fixed the issue for me, ran 5 sessions today recorded 4 of the 5 without issue... Forgot to hit the button for the 5th and didn't code in autostart yet (this was my stupid fault). On an unrelated note, any way to get the raw data from RaceCapture Live site, streaming via Cellular worked for that missing session?

On my issue tried the following
Sandisk Extreme 16GB (U1)
Lexar 633x 32GB U3
Random Kingston 8GB

Before reset tried formatting the disk and writing data from other devices. Nothing helped and the disks seemed good... If I reproduce again I'll try to debug some more.

finse
Posts: 19
Joined: Thu Jan 30, 2014 3:06 am
Location: Denver
Contact:

Post by finse »

woot! figured out my issue as well.

In my lua script, I had this line:

tpsId = addChannel("Throttle", 100)

And it just does not jive with the documented API.

addChannel( name, sampleRate, [precision], [min], [max], [units] )

So, fixing the mangled addChannel fixed my logging issue.

Thanks fellas!

brentp
Site Admin
Posts: 5956
Joined: Wed Jan 24, 2007 6:36 am

Post by brentp »

Hi Finse,

Thanks for the update. Would you have the old version of your script so we can re-create? I'm wondering if there was still a way to have the system handle this case more gracefully.
Brent Picasso
CEO and Founder, Autosport Labs
Facebook | Twitter

Post Reply