From 87f852787341886a28482ca3026611b2f106c5d4 Mon Sep 17 00:00:00 2001 From: Andrei Bechet Date: Tue, 30 Jun 2015 15:50:54 +0200 Subject: [PATCH 1/4] Updating the C++ task documentation --- 2015/ppc/README.mkd | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/2015/ppc/README.mkd b/2015/ppc/README.mkd index a2783cf..ce1c609 100644 --- a/2015/ppc/README.mkd +++ b/2015/ppc/README.mkd @@ -6,15 +6,27 @@ vehicle. The raw data has to be converted to arc-milliseconds 1°2'5" == (1*3600+ 2*60 + 5)*1000 -Beware that the system you are running your code on will not support floating point operations. -Use only unsigned and signed integers! +**Beware that the system you are running your code on will not support floating point operations. +Use only unsigned and signed integers!** Still the precision of your calculations has to be +-100 milli-arc-seconds +Dynamic allocation is not supported on the system. + +You will have to complete the *GpsConverter.cpp* (and .h). + ## Conversion to Arc-Degree inDegree hex = 180/(2^31-1) * (hex) [°] +#### HINT 1 + +Try to use constants as much as possible, isntead of computing stuff on the go. + +#### HINT 2 + +In order to aviod losing decimals first multiply with a large factor and then divide to get the result in ms. + ## GPS Datalayout in CAN Message Byte7 ST_LAT_NAVI @@ -38,15 +50,18 @@ Little Endian (Least Significant Byte is at lowest address) -180° ... +180° -### signal type +### Signal type 32 Bit Signed Integer (Byte 0 ... Byte 3) ### Invalid Data Invalid-Value: 80 00 00 00h + Signal not available value: 7F FF FF FF +**Do not forget to check for these values** + ## Status Latitude Navigation ST_LAT_NAVI @@ -55,7 +70,7 @@ Signal not available value: 7F FF FF FF -180° ... +180° -### signal type +### Signal type 32 Bit Signed Integer (Byte 4 ... Byte 7) @@ -64,16 +79,18 @@ Signal not available value: 7F FF FF FF Invalid-Value: 80 00 00 00h Signal not available value: 7F FF FF FF +## Send the data over to the AC + +Use the *IGpsACPusher*. + ## Running the tests you will need a working ruby installation to execute the tests -### Install the bake tool - -see https://esrlabs.com/gems/doc/bake-toolkit/ - - ### run the tests execute `rake run` from this directory +### Install the bake tool + +see https://esrlabs.com/gems/doc/bake-toolkit/ From 9f3c4627eee95355fd79733b1ee015f2281499e1 Mon Sep 17 00:00:00 2001 From: Andrei Bechet Date: Tue, 30 Jun 2015 19:16:49 +0200 Subject: [PATCH 2/4] added general diagram --- 2015/idea.png | Bin 0 -> 35864 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 2015/idea.png diff --git a/2015/idea.png b/2015/idea.png new file mode 100644 index 0000000000000000000000000000000000000000..41871915d7122e00dfd6b615cd75efb71deb6344 GIT binary patch literal 35864 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 W3X{uqRzSeNOXsirU1sWh?|%b$4bdk6 literal 0 HcmV?d00001 From 75bef48d29029bf5cfcb3864cf72e16db9c90a41 Mon Sep 17 00:00:00 2001 From: Andrei Bechet Date: Tue, 30 Jun 2015 19:20:53 +0200 Subject: [PATCH 3/4] added diagram --- 2015/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/2015/README.md b/2015/README.md index 415f711..c1732c0 100644 --- a/2015/README.md +++ b/2015/README.md @@ -7,3 +7,5 @@ You are part of a 4 member team. Your task is to enhance the usability of our ca location data will come from the application developed by your fellow teammates, on the other controller of the system. In order to display a popup on the headunit you will have to implement an AIDL. To help the development process you will use a test framework which will give you fake location data and will test that you have displayed or hidden the popup accordingly. You will also have the possibility to check this in the android simulator by observing a notification in the task bar when the “current” location will be outside of the given geofence. For both tasks you have 2 hours, hence your team will be split into two sub-teams in order to tackle these different controllers. A valid result will contain working solutions for both tasks. When everything is working you will see your solution running on the latest car-sharing DriveNow system in a BMW i3. Good luck! + +![idea](https://raw.githubusercontent.com/esrlabs/TUM/master/2015/idea.png) From 5010349ecc5d01c31d88b36fd097119b8a5dfce5 Mon Sep 17 00:00:00 2001 From: Andrei Bechet Date: Tue, 30 Jun 2015 21:42:44 +0200 Subject: [PATCH 4/4] Updated doc for the android part --- 2015/android/README.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/2015/android/README.md b/2015/android/README.md index 43fa601..416363a 100644 --- a/2015/android/README.md +++ b/2015/android/README.md @@ -24,7 +24,31 @@ bindService(headUnitServiceIntent, serviceConnection_object, BIND_AUTO_CREATE); The first step is to implement a circle geofence. You cannot use the google API because that is part of the play API, and it is not supported by our android controller. You have included in the test suite a test class for the circle geofence to help you. -The second step is to display a popup if the current location is outside of a given geofence (alternatively to close if the location is inside). If this is correctly implemented than all the tests should be green (**Note** that unless you are going for the bonus you should disable the test in the *PolygonGeofenceTest* class). +The second step is to display a popup if the current location is outside of a given geofence (alternatively to close if the location is inside). If this is correctly implemented than all the tests should be green (**Note** that unless you are going for the bonus you should disable the test in the *PolygonGeofenceTest* class with *@Ignore* in front of the *@Test*). + +For the circle geofence you should use this location as the center and radius of : + + (48.262596, 11.668720) and radius of 25 meters + + +## Observations + +In order to ease testing dependancy injection has been used. That means to pass the objects our class will use via a constructor. In android, services are not constructed by the user, instead they are built internally. The needed things for the service to run are instantated during the *onCreate()* call. The constructor in the code is there just for testing purposes. For the functioning of the service you should do the following: + +```java +if (locationManager == null) { + locationManager = (LocationManager) + this.getSystemService(Context.LOCATION_SERVICE); +} +``` +and +```java +if (geofence == null) { + geofence = myGeofence(...); +} +``` + + ## **Bonus** Implement a polygon geofence instead @@ -38,4 +62,8 @@ Use the slope of a straight line in order to tell if the ray starting from the g 90 + (90 - Math.abs(angle)) ``` +For the polygon geofence you should use the following locations as the polygon's cornerns: + + (48.262739, 11.668393), (48.262674, 11.668956), (48.262100, 11.668419), (48.262324, 11.670174) +