Attempt at a more robust File handler
This commit is contained in:
		
							parent
							
								
									b62c62ee1f
								
							
						
					
					
						commit
						fdb5e27aea
					
				| @ -147,7 +147,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { | |||||||
|       auto* header = (WriteHeader*) om->om_data; |       auto* header = (WriteHeader*) om->om_data; | ||||||
|       uint16_t plen = header->pathlen; |       uint16_t plen = header->pathlen; | ||||||
|       if (plen > maxpathlen) { //> counts for null term
 |       if (plen > maxpathlen) { //> counts for null term
 | ||||||
|         return -1; |         return -1;             // TODO make this actually return a BLE notif
 | ||||||
|       } |       } | ||||||
|       memcpy(filepath, header->pathstr, plen); |       memcpy(filepath, header->pathstr, plen); | ||||||
|       filepath[plen] = 0; // Copy and null teminate string
 |       filepath[plen] = 0; // Copy and null teminate string
 | ||||||
| @ -156,9 +156,12 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { | |||||||
|       resp.command = commands::WRITE_PACING; |       resp.command = commands::WRITE_PACING; | ||||||
|       resp.offset = header->offset; |       resp.offset = header->offset; | ||||||
|       resp.modTime = 0; |       resp.modTime = 0; | ||||||
|  | 
 | ||||||
|       int res = fs.FileOpen(&f, filepath, LFS_O_WRONLY | LFS_O_CREAT); |       int res = fs.FileOpen(&f, filepath, LFS_O_WRONLY | LFS_O_CREAT); | ||||||
|       resp.status = (res == 0) ? 0x01 : (int8_t) res; |       if(res == 0){ | ||||||
|       fs.FileClose(&f); |         fs.FileClose(&f); | ||||||
|  |         resp.status = (res == 0) ? 0x01 : (int8_t) res; | ||||||
|  |       } | ||||||
|       resp.freespace = std::min(fs.getSize() - (fs.GetFSSize() * fs.getBlockSize()), fileSize - header->offset); |       resp.freespace = std::min(fs.getSize() - (fs.GetFSSize() * fs.getBlockSize()), fileSize - header->offset); | ||||||
|       auto* om = ble_hs_mbuf_from_flat(&resp, sizeof(WriteResponse)); |       auto* om = ble_hs_mbuf_from_flat(&resp, sizeof(WriteResponse)); | ||||||
|       ble_gattc_notify_custom(connectionHandle, transferCharacteristicHandle, om); |       ble_gattc_notify_custom(connectionHandle, transferCharacteristicHandle, om); | ||||||
| @ -171,14 +174,18 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { | |||||||
|       WriteResponse resp; |       WriteResponse resp; | ||||||
|       resp.command = commands::WRITE_PACING; |       resp.command = commands::WRITE_PACING; | ||||||
|       resp.offset = header->offset; |       resp.offset = header->offset; | ||||||
|       resp.status = 0x01; |       int res = 0; | ||||||
|       fs.FileOpen(&f, filepath, LFS_O_RDWR | LFS_O_CREAT); | 
 | ||||||
|       fs.FileSeek(&f, header->offset); |       if (!(res = fs.FileOpen(&f, filepath, LFS_O_RDWR | LFS_O_CREAT))) { | ||||||
|       int res = fs.FileWrite(&f, header->data, header->dataSize); |         if (!(res = fs.FileSeek(&f, header->offset))) { | ||||||
|       fs.FileClose(&f); |           res = fs.FileWrite(&f, header->data, header->dataSize); | ||||||
|  |         } | ||||||
|  |         fs.FileClose(&f); | ||||||
|  |       } | ||||||
|       if (res < 0) { |       if (res < 0) { | ||||||
|         resp.status = (int8_t) res; |         resp.status = (int8_t) res; | ||||||
|       } |       } | ||||||
|  | 
 | ||||||
|       resp.freespace = std::min(fs.getSize() - (fs.GetFSSize() * fs.getBlockSize()), fileSize - header->offset); |       resp.freespace = std::min(fs.getSize() - (fs.GetFSSize() * fs.getBlockSize()), fileSize - header->offset); | ||||||
|       auto* om = ble_hs_mbuf_from_flat(&resp, sizeof(WriteResponse)); |       auto* om = ble_hs_mbuf_from_flat(&resp, sizeof(WriteResponse)); | ||||||
|       ble_gattc_notify_custom(connectionHandle, transferCharacteristicHandle, om); |       ble_gattc_notify_custom(connectionHandle, transferCharacteristicHandle, om); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user