====== MTKBabel ====== MTKBabel is hosted on **[[https://sourceforge.net/projects/mtkbabel|Sourceforge]]**! **MTKBabel** is a Perl program to operate the **i-Blue 747 GPS data logger**. It should work also with other GPS devices based on the **MediaTek MTK** chipset. Starting with version **0.7** it offers also support for the **Holux M-241** data logger. It is free software released under the GPL license. The main capabilities are: * Command line interface * Save data log in GPX and raw binary format * If required retrieve all the data, also the old one being overlapped * Change logging criteria: time, distance, speed * Change log format * START/STOP logging * Set OVERLAP or STOP method on memory full * Erase the internal memory The progam is written in Perl, and it was tested on Linux via USB connection. One goal is easy portability to C and small RAM footprint. Run ''**mtkbabel -h**'' for a brief help screen: Usage: mtkbabel [options] Options: -a Read all the log memory (overlapped data) -b filename.bin Don't read data from a GPS device, but rather read a previously saved .bin file. Ignore -f option -c Create a GPX file with tracks and waypoints -d debug_level Debug level: 0..7 -E Erase data log memory -f filename Base name for saved files (.bin and .gpx) -h Print this message and exit -i Ignore some error conditions, try to extract data -l {on|off} Turn logging ON/OFF -m {stop|overlap} Set STOP/OVERLAP recording method on memory full -o log_format Enable or disable log fields (FIELD1,-FIELD2,...), available fields: UTC,VALID,LATITUDE,LONGITUDE,HEIGHT,SPEED,HEADING,DSTA,DAGE,PDOP,HDOP,VDOP NSAT,SID,ELEVATION,AZIMUTH,SNR,RCR,MILLISECOND,DISTANCE -p port Communication port, default: /dev/ttyUSB0 -R Recover from disabled log: erase data and reset recording criteria -r time:distance:speed Set logging criteria (zero to disable): every 0.10-9999999.90 seconds, every 0.10-9999999.90 meters, over 0.10-9999999.90 km/h -s speed Serial port speed, default 115200 baud -t Create a GPX file with tracks -v Print MTKBabel version and exit -w Create a GPX file with waypoints -x Force reading Holux format Example: Download traks and waypoints from GPS device, creating the following files: gpsdata.bin, gpsdata_trk.gpx and gpsdata_wpt.gpx. mtkbabel -s 115200 -f gpsdata -t -w In this example you will set serial speed to 115200 baut, STOP logging, download **gpsdata.bin**, **gpsdata_trk.gpx** and **gpsdata_wpt.gpx** files: mtkbabel -s 115200 -l off -f gpsdata -t -w If you encounter some problems, please run the program with the ''**-d 7**'' option and write me a mail with the output. You will find my address in the program itself. ===== Weeks Rollover Bug ===== It turned out that several GPS based on the MTK chipset are affected by a **Weeks Rollover Bug**. You discover that your device is affected by the bug because the GPX files you save from it, will have a **timestamp badly in the past**. Actually I have two i-Blue 747 GPS data loggers. The older one is a **Model ID 001B**, which has already manifested the problem: today is **2019-10-10**, but GPX points logged have a timestamp of **2000-02-24**. If you do the math, you can find that there is a **difference of exactly 1024 weeks**. This means that the device internally stores timestamps using a **weeks counter of only 10 bits**. So exactly 1024 weeks after its //EPOCH// (the begin of the time it can handle), the timestamps rolls-back of that amount of time. The other logger of mine is a **Model ID 001D**, which instead is still recording correct timestamps today. I suspect that the weeks counter is nevertheless 10 bits, and just the hard-coded EPOCH is more recent. So the bug is **just to come in the near future**. * **[[https://www.theverge.com/2019/3/8/18255847/gps-week-rollover-issue-2019-garmin-tomtom-devices-affected|Older GPS devices are facing their own mini Y2K bug next month]]** * **[[https://github.com/gpsbabel/gpsbabel/issues/349|Holux M-241 gps weeks rollover issue]]** ===== Credits ===== I wish to thank all the people behind the **[[http://sourceforge.net/projects/bt747/|BT747 project]]**: everything I made is derived from their work. Thanks to **Uwe Hermann**, mtkbabel entered **[[http://packages.debian.org/testing/mtkbabel|Debian Testing]]**. Now I can install the program just with **''apt-get install mtkbabel''**. Thanks Uwe! :-) The program is now hosted on **Sourceforge**, where you can find the the SVN, a bug tracker and the **latest stable version 0.8**, get it at **[[https://sourceforge.net/projects/mtkbabel]]**. ====== GPS data logger i-Blue 747 ====== {{.:gps:gps_iblue747_b.jpg?160 |i-Blue 747 GPS}} It is a very nice piece of hardware; it can works as a GPS receiver for your palm or notebook, or as a standalone data logger. The **USB** connection can be used for both receiving **navigation data** (**[[wp>NMEA]]** strings) and for **device control** (retrieving log data, erasing memory, setting the log properties, etc.). The **bluetooth** connection is used instead only to receive the navigation data. Loggin is always active when the switch is in the **LOG** position. If you disable logging using the software command, logging is enabled again when the device is turned off/on. With the switch in the **NAV** position, logging is enabled only when the bluetooth connection is active. Features: * 16 Mbit memory (2 Mbytes). This means more than 70000 points recording time, fix mode, latitude, longitude and elevation. * USB and bluetooth. * Record criteria: time, distance, minimum speed, button press. * Stop or overlap when memory full. * Standard rechargeable battery (Nokia phones). ===== Links and docs ===== * **[[http://www.transystem.com.tw/|www.transystem.com.tw]]** * **[[http://bt747.wiki.sourceforge.net/|BT747]]**: a Java program to drive the device * [[http://www.gpspassion.com/forumsen/topic.asp?TOPIC_ID=67511|Chip MTK and SiRFstarIII compared]] * **{{.:gps:manual_i-blue747_rev2.0.pdf|i-Blue 747 User manual}}** * **{{.:gps:mtk_packet_user_manual.pdf|MTK packet User Manual}}** * **{{.:gps:eb-230-data-sheet-v1.2.pdf|Transystem Data Sheet and User Interface Protocol}}** * **[[http://spreadsheets.google.com/ccc?key=pyCLH-0TdNe-5N-5tBokuOA|MTK Protocol Reverse Engineering]]** ([[http://spreadsheets.google.com/pub?key=pyCLH-0TdNe-5N-5tBokuOA&output=pdf|pdf]]) * **{{.:gps:mtk_logger_library_user_manual_1.2_tsi.pdf|MTK Logger Library User Manual}}** * **{{.:gps:mtk_nmea_packet_0.8_transystem.pdf|MTK NMEA Packet Guide}}** ====== Holux M-241 GPS logger ====== {{.:gps:holux_m241.jpg?220 |Holux M-241}} :-) **MTKBabel 0.7 has some support for the Holux M-241.** The device is based on the MTK chip, but unfortunately the binary log data is not the one described on the Mediatek datasheets. With a little of reverse engineering it was possibile to operate the Holux. First of all the serial port must be set to **38400 baud** instead of 115200. Latitude and longitude are stored as float (4 bytes) numbers instead of double (8 bytes), elevation is stored as 3 bytes number, there is not the separator char between data and checksum. You can control the device via **two buttons** and the **display**; the user interface is rather simple for such a sophisticated device. You can control recording criteria (by time or by distance), erase the log, see your position and speed, measure distances. The display has backlight too. But notice that **the firmware does not allow full access to the MTK chip features**. For example it is not possible to set a recording criteria based on **time or distance**. Also the distance criteria can be set only to a list of prefixed values, with the **minimum being 50 meters**. This is very annoying because it renders the device not well suitable for OpenStreetMap surveying, where 10 meters is by far more desiderable. If you set a different distance via MTKBabel, the device resets to its value whenever it starts recording. Anyway I did not give a try to different firmware versions. If someone is interested in reverse-engineer the log format, please check this: * {{:doc:appunti:hardware:gps:holux_m241_gps_logger_user_manual.pdf|Holux M-241 User's Manual}} * [[http://spreadsheets.google.com/ccc?key=pyCLH-0TdNe-5N-5tBokuOA&hl=en|BT747 project docs]] * {{.:gps:holux_m241_log_examples.tgz|Holux M-241 binary log examples}} An user reported also that with a new firmware version (v1.12) he was unable to set the log format with MTKBabel, since each time the unit is turned off and on the default format is used. ====== Using the i-Blue 747 with Linux ====== ===== USB connection ===== Attaching the device to the USB port - leaving it in the **OFF** status - the kernel detects it as a serial device: usb 2-7: new full speed USB device using ohci_hcd and address 3 usb 2-7: configuration #1 chosen from 1 choice usbcore: registered new driver usbserial drivers/usb/serial/usb-serial.c: USB Serial support registered for generic usbcore: registered new driver usbserial_generic drivers/usb/serial/usb-serial.c: USB Serial Driver core drivers/usb/serial/usb-serial.c: USB Serial support registered for cp2101 cp2101 2-7:1.0: cp2101 converter detected usb 2-7: reset full speed USB device using ohci_hcd and address 3 usb 2-7: cp2101 converter now attached to ttyUSB0 usbcore: registered new driver cp2101 drivers/usb/serial/cp2101.c: Silicon Labs CP2101/CP2102 RS232 serial adaptor driver v0.07 This is how the device is reported by **lsusb**: Bus 001 Device 005: ID 10c4:ea60 Cygnal Integrated Products, Inc. To download the tracklog or to configure the device, you must switch the unit to the **LOG** position. You can use my **MTKBabel** program, the [[http://bt747.wiki.sourceforge.net/|BT747]] Java program, or you can use the boundled Windows program with **[[http://www.winehq.org/|Wine]]**, following [[http://larsgard.com/nilsmagnus/?p=15|this recipe]]. ===== Bluetooth connection ===== I used an USB-bluetooth dongle. Using a Debian Lenny, I installed the packages **bluetooth** and **bluez-utils**. Inserting the dongle I got: # lsusb Bus 002 Device 001: ID 0000:0000 Bus 001 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) Bus 001 Device 001: ID 0000:0000 Bus 003 Device 002: ID 0324:bc06 Bus 003 Device 001: ID 0000:0000 # hciconfig hci0: Type: USB BD Address: 00:09:DD:50:2B:10 ACL MTU: 384:8 SCO MTU: 64:8 UP RUNNING PSCAN RX bytes:765 acl:0 sco:0 events:28 errors:0 TX bytes:345 acl:0 sco:0 commands:21 errors:0 Useful commands to control the bluetooth local device are: # hciconfig hci0 {up|down} # hcitool dev Devices: hci0 00:09:DD:50:2B:10 Now I tried scanning for devices in near proximity: # hcitool scan Scanning ... 00:0B:0D:87:EB:3A iBT-GPS # hcitool inq Inquiring ... 00:0B:0D:87:EB:3A clock offset: 0x6e22 class: 0x001f00 This command is used to connect the bluetooth device as a serial device ''**/dev/rfcomm0**'': # rfcomm connect 0 00:0B:0D:87:EB:3A Connected /dev/rfcomm0 to 00:0B:0D:87:EB:3A on channel 1 Press CTRL-C for hangup Using **udev** it should be possible to connect automatically the device and to assign proper permissions. ===== Problem with Belkin adapter ===== There is a problem with the **Belkin F8T012** Bluetooth adapter, upon insert the kernel (2.6.21) misdetects the device and it loads the **pegasus** module. Just blacklist the modules inserting this line into **''/etc/modprobe.d/blacklist''**: blacklist pegasus ====== i-Blue 747 A+ with Linux ====== It seems that the new model **747 A+** (66 channels, 125000 way points storage space) requires the kernel module **cdc_acm** provided by **Linux Kernel 2.6.29**. Once connected the device is detected as **''/dev/ttyACM0''**. ====== Logging ====== Questo il significato di alcuni campi che possono comparire nel log: ^ DSTA | DGPS Station | DGPS Station ID Number. | ^ DAGE | DGPS Age | Number of seconds since last DGPS update. | ^ RCR | Recording method | **S** = speed, **T** = time, **D** = distance, **B** = push button | ^ VALID | Position fixed | **No fix** = Not fixed, **SPS** = Standard Positioning Service, **PPS** = Precise Positioning Service | ^ NO_FIX | The GPS device had no fix. | | ^ SPS | Standard Positioning Service | Accuracy degraded to 100 m via Selective Availability. S.A. was turned OFF on May 1st, 2000. SPS is today accurate as previously was PPS. | ^ DGPS | Differential GPS | Born to circumvent the Selective Availability, compare known coordinates with GPS fix | ^ PPS | Precise Positioning Service | Accuracy < 10 m, provided encrypted | ^ RTK | [[wp>Real_Time_Kinematic|Real Time Kinematic]] | Sat system used in RTK mode with fixed integers | ^ FRTK | Float Real Time Kinematic | Sat system used in RTK mode with floating integers | ^ Estimated | Estimated (dead reckoning) mode | | ^ Manual input | Manual Input mode | | ^ Simulator | Simulator mode | |