11package io .pslab .fragment ;
22
33import android .app .Activity ;
4+ import android .content .Context ;
45import android .content .SharedPreferences ;
56import android .graphics .Color ;
7+ import android .location .Location ;
8+ import android .location .LocationManager ;
69import android .os .AsyncTask ;
710import android .os .Bundle ;
811import android .os .Handler ;
912import android .support .annotation .NonNull ;
1013import android .support .annotation .Nullable ;
1114import android .support .design .widget .BottomSheetBehavior ;
15+ import android .support .design .widget .Snackbar ;
1216import android .support .v4 .app .Fragment ;
1317import android .support .v4 .view .ViewPager ;
1418import android .support .v7 .app .AppCompatActivity ;
4549import io .pslab .activity .LogicalAnalyzerActivity ;
4650import io .pslab .communication .ScienceLab ;
4751import io .pslab .communication .digitalChannel .DigitalChannel ;
52+ import io .pslab .models .LogicAnalyzerData ;
53+ import io .pslab .models .OscilloscopeData ;
54+ import io .pslab .models .SensorDataBlock ;
55+ import io .pslab .others .CSVLogger ;
56+ import io .pslab .others .CustomSnackBar ;
57+ import io .pslab .others .GPSLogger ;
58+ import io .pslab .others .LocalDataLog ;
4859import io .pslab .others .LogicAnalyzerAxisFormatter ;
4960import io .pslab .others .MathUtils ;
5061import io .pslab .others .ScienceLabCommon ;
5162import io .pslab .others .SwipeGestureDetector ;
5263
5364import java .util .ArrayList ;
5465import java .util .Arrays ;
66+ import java .util .Date ;
5567import java .util .LinkedHashMap ;
5668import java .util .List ;
5769
5870import butterknife .ButterKnife ;
5971import in .goodiebag .carouselpicker .CarouselPicker ;
72+ import io .realm .Realm ;
73+ import io .realm .RealmObject ;
6074
6175import static android .content .Context .MODE_PRIVATE ;
6276
@@ -102,6 +116,15 @@ public class LALogicLinesFragment extends Fragment {
102116 private TextView tvTimeUnit , xCoordinateText ;
103117 private ImageView ledImageView ;
104118 private Runnable logicAnalysis ;
119+ private Realm realm ;
120+ private ImageView recordButton ;
121+ private GPSLogger gpsLogger ;
122+ private CSVLogger csvLogger ;
123+ private ArrayList <String > recordXAxis ;
124+ private ArrayList <String > recordYAxis ;
125+ private ArrayList <Integer > recordChannelMode ;
126+ private String [] channels = new String []{"LA1" , "LA2" , "LA3" , "LA4" };
127+ private String csvHeader = "Timestamp,DateTime,Channel,ChannelMode,xData,yData,lat,lon" ;
105128
106129 public static LALogicLinesFragment newInstance (Activity activity ) {
107130 LALogicLinesFragment laLogicLinesFragment = new LALogicLinesFragment ();
@@ -114,7 +137,12 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
114137 super .onCreate (savedInstanceState );
115138 ButterKnife .bind (getActivity ());
116139 scienceLab = ScienceLabCommon .scienceLab ;
117-
140+ realm = LocalDataLog .with ().getRealm ();
141+ gpsLogger = new GPSLogger (getContext (), (LocationManager ) getContext ().getSystemService (Context .LOCATION_SERVICE ));
142+ csvLogger = new CSVLogger (getString (R .string .logical_analyzer ));
143+ recordXAxis = new ArrayList <>();
144+ recordYAxis = new ArrayList <>();
145+ recordChannelMode = new ArrayList <>();
118146 logicAnalysis = new Runnable () {
119147 @ Override
120148 public void run () {
@@ -149,14 +177,51 @@ public void run() {
149177 @ Override
150178 public View onCreateView (LayoutInflater inflater , @ Nullable ViewGroup container , @ Nullable Bundle savedInstanceState ) {
151179 View v = inflater .inflate (R .layout .logic_analyzer_logic_lines , container , false );
152-
153180 // LED Indicator
154181 ledImageView = v .findViewById (R .id .imageView_led_la );
155182
156183 // Heading
157184 tvTimeUnit = v .findViewById (R .id .la_tv_time_unit );
158185 tvTimeUnit .setText (getString (R .string .time_unit_la ));
159186
187+ //recordButton
188+
189+ recordButton = v .findViewById (R .id .la_record_button );
190+ recordButton .setOnClickListener (new View .OnClickListener () {
191+ @ Override
192+ public void onClick (View v ) {
193+ long block = System .currentTimeMillis ();
194+ double lat ;
195+ double lon ;
196+ if (gpsLogger .isGPSEnabled ()) {
197+ Location location = gpsLogger .getDeviceLocation ();
198+ if (location != null ) {
199+ lat = location .getLatitude ();
200+ lon = location .getLongitude ();
201+ } else {
202+ lat = 0.0 ;
203+ lon = 0.0 ;
204+ }
205+ } else {
206+ lat = 0.0 ;
207+ lon = 0.0 ;
208+ }
209+ csvLogger .prepareLogFile ();
210+ csvLogger .writeMetaData (getContext ().getResources ().getString (R .string .logical_analyzer ));
211+ csvLogger .writeCSVFile (csvHeader );
212+ recordSensorDataBlockID (new SensorDataBlock (block , getResources ().getString (R .string .logical_analyzer )));
213+ long timestamp = System .currentTimeMillis ();
214+ String timeData = timestamp + "," + CSVLogger .FILE_NAME_FORMAT .format (new Date (timestamp ));
215+ String locationData = lat + "," + lon ;
216+ for (int i = 0 ; i < recordXAxis .size (); i ++) {
217+ recordSensorData (new LogicAnalyzerData (timestamp + i , block , channels [i ], recordChannelMode .get (i ), recordXAxis .get (i ), recordYAxis .get (i ), lat , lon ));
218+ String data = timeData + "," + channels [i ] + "," + recordChannelMode .get (i ) + "," + recordXAxis .get (i ) + "," + recordYAxis .get (i ) + "," + locationData ;
219+ csvLogger .writeCSVFile (data );
220+ }
221+ CustomSnackBar .showSnackBar (v , getString (R .string .file_created_success_message ), null , null , Snackbar .LENGTH_SHORT );
222+ }
223+ });
224+
160225 // Carousel View
161226 carouselPicker = v .findViewById (R .id .carouselPicker );
162227 llChannel1 = v .findViewById (R .id .ll_chart_channel_1 );
@@ -830,6 +895,10 @@ protected void onPostExecute(Void aVoid) {
830895 Log .v ("x Axis" , stringBuilder1 .toString ());
831896 Log .v ("y Axis" , stringBuilder2 .toString ());
832897
898+ recordXAxis .clear ();
899+ recordXAxis .add (stringBuilder1 .toString ());
900+ recordYAxis .add (stringBuilder2 .toString ());
901+ recordChannelMode .add (digitalChannel .mode );
833902 // Plot the fetched data
834903 switch (edgeOption ) {
835904 case "EVERY EDGE" :
@@ -951,8 +1020,12 @@ protected void onPostExecute(Void aVoid) {
9511020 yaxis .add (digitalChannelArray .get (0 ).getYAxis ());
9521021 yaxis .add (digitalChannelArray .get (1 ).getYAxis ());
9531022
1023+ recordXAxis .clear ();
1024+ recordYAxis .clear ();
1025+ recordChannelMode .clear ();
9541026 // Plot the fetched data
9551027 for (int i = 0 ; i < channelMode ; i ++) {
1028+ storeAxisValues (xaxis .get (i ), yaxis .get (i ), digitalChannelArray .get (i ).mode );
9561029 switch (edgeOption [i ]) {
9571030 case "EVERY EDGE" :
9581031 singleChannelEveryEdge (xaxis .get (i ), yaxis .get (i ));
@@ -1081,8 +1154,12 @@ protected void onPostExecute(Void aVoid) {
10811154 yaxis .add (digitalChannelArray .get (1 ).getYAxis ());
10821155 yaxis .add (digitalChannelArray .get (2 ).getYAxis ());
10831156
1157+ recordXAxis .clear ();
1158+ recordYAxis .clear ();
1159+ recordChannelMode .clear ();
10841160 // Plot the fetched data
10851161 for (int i = 0 ; i < channelMode ; i ++) {
1162+ storeAxisValues (xaxis .get (i ), yaxis .get (i ), digitalChannelArray .get (i ).mode );
10861163 switch (edgeOption [i ]) {
10871164 case "EVERY EDGE" :
10881165 singleChannelEveryEdge (xaxis .get (i ), yaxis .get (i ));
@@ -1221,8 +1298,12 @@ protected void onPostExecute(Void aVoid) {
12211298 yaxis .add (digitalChannelArray .get (2 ).getYAxis ());
12221299 yaxis .add (digitalChannelArray .get (3 ).getYAxis ());
12231300
1301+ recordXAxis .clear ();
1302+ recordYAxis .clear ();
1303+ recordChannelMode .clear ();
12241304 // Plot the fetched data
12251305 for (int i = 0 ; i < channelMode ; i ++) {
1306+ storeAxisValues (xaxis .get (i ), yaxis .get (i ), digitalChannelArray .get (i ).mode );
12261307 switch (edgeOption [i ]) {
12271308 case "EVERY EDGE" :
12281309 singleChannelEveryEdge (xaxis .get (i ), yaxis .get (i ));
@@ -1270,4 +1351,28 @@ protected void onPostExecute(Void aVoid) {
12701351 analyze_button .setClickable (true );
12711352 }
12721353 }
1354+
1355+ private void storeAxisValues (double [] xaxis , double [] yaxis , int mode ) {
1356+ StringBuilder stringBuilder1 = new StringBuilder ();
1357+ StringBuilder stringBuilder2 = new StringBuilder ();
1358+ for (int i = 0 ; i < xaxis .length ; i ++) {
1359+ stringBuilder1 .append (DataFormatter .formatDouble (xaxis [i ], DataFormatter .LOW_PRECISION_FORMAT ));
1360+ stringBuilder2 .append (DataFormatter .formatDouble (yaxis [i ], DataFormatter .LOW_PRECISION_FORMAT ));
1361+ stringBuilder1 .append (" " );
1362+ stringBuilder2 .append (" " );
1363+ }
1364+ recordChannelMode .add (mode );
1365+ }
1366+
1367+ public void recordSensorDataBlockID (SensorDataBlock block ) {
1368+ realm .beginTransaction ();
1369+ realm .copyToRealm (block );
1370+ realm .commitTransaction ();
1371+ }
1372+
1373+ public void recordSensorData (RealmObject sensorData ) {
1374+ realm .beginTransaction ();
1375+ realm .copyToRealm ((LogicAnalyzerData ) sensorData );
1376+ realm .commitTransaction ();
1377+ }
12731378}
0 commit comments