mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	divecomputer: add device_table pointer to device_data_t
In one weird case (suunto), the code in libdivecomputer.c generates a device node directly instead of going the usual way (setting the data in the dc-structure of the imported dive). It is unclear to me whether that has to be that way, as it depends on the chronological order of callbacks to event_cb() and dive_cb(). Therefore add a device_table pointer to device_data_t so that the downloader can add the device to this table. This only adds the pointer, but does not yet use it in the downloading code. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
		
							parent
							
								
									5a19437311
								
							
						
					
					
						commit
						2bcb3d88a0
					
				
					 5 changed files with 9 additions and 0 deletions
				
			
		|  | @ -177,6 +177,8 @@ static unsigned char *dt_dive_parser(unsigned char *runner, struct dive *dt_dive | |||
| 	char is_nitrox = 0, is_O2 = 0, is_SCR = 0; | ||||
| 
 | ||||
| 	device_data_t *devdata = calloc(1, sizeof(device_data_t)); | ||||
| 	devdata->sites = sites; | ||||
| 	devdata->devices = devices; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Parse byte to byte till next dive entry | ||||
|  |  | |||
|  | @ -92,6 +92,7 @@ void DownloadThread::run() | |||
| 	internalData->descriptor = descriptorLookup[m_data->vendor().toLower() + m_data->product().toLower()]; | ||||
| 	internalData->download_table = &downloadTable; | ||||
| 	internalData->sites = &diveSiteTable; | ||||
| 	internalData->devices = &deviceTable; | ||||
| 	internalData->btname = strdup(m_data->devBluetoothName().toUtf8()); | ||||
| 	if (!internalData->descriptor) { | ||||
| 		qDebug() << "No download possible when DC type is unknown"; | ||||
|  | @ -110,6 +111,7 @@ void DownloadThread::run() | |||
| 	qDebug() << "downloading" << (internalData->force_download ? "all" : "only new") << "dives"; | ||||
| 	clear_dive_table(&downloadTable); | ||||
| 	clear_dive_site_table(&diveSiteTable); | ||||
| 	clear_device_table(&deviceTable); | ||||
| 
 | ||||
| 	Q_ASSERT(internalData->download_table != nullptr); | ||||
| 	const char *errorText; | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| #include <QLoggingCategory> | ||||
| 
 | ||||
| #include "divesite.h" | ||||
| #include "device.h" | ||||
| #include "libdivecomputer.h" | ||||
| #include "connectionlistmodel.h" | ||||
| #if BT_SUPPORT | ||||
|  | @ -77,6 +78,7 @@ public: | |||
| 	QString error; | ||||
| 	struct dive_table downloadTable; | ||||
| 	struct dive_site_table diveSiteTable; | ||||
| 	struct device_table deviceTable; | ||||
| 
 | ||||
| private: | ||||
| 	DCDeviceData *m_data; | ||||
|  |  | |||
|  | @ -28,6 +28,7 @@ extern "C" { | |||
| 
 | ||||
| struct dive; | ||||
| struct dive_computer; | ||||
| struct devices; | ||||
| 
 | ||||
| typedef struct { | ||||
| 	dc_descriptor_t *descriptor; | ||||
|  | @ -47,6 +48,7 @@ typedef struct { | |||
| 	FILE *libdc_logfile; | ||||
| 	struct dive_table *download_table; | ||||
| 	struct dive_site_table *sites; | ||||
| 	struct device_table *devices; | ||||
| 	void *androidUsbDeviceDescriptor; | ||||
| } device_data_t; | ||||
| 
 | ||||
|  |  | |||
|  | @ -129,6 +129,7 @@ void DiveImportedModel::downloadThreadFinished() | |||
| 	// Move the table data from thread to model
 | ||||
| 	move_dive_table(&thread.downloadTable, &diveTable); | ||||
| 	move_dive_site_table(&thread.diveSiteTable, &sitesTable); | ||||
| 	deviceTable = std::move(thread.deviceTable); | ||||
| 
 | ||||
| 	checkStates.resize(diveTable.nr); | ||||
| 	std::fill(checkStates.begin(), checkStates.end(), true); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue