/** * This command is needed to make the whole transfer a bit faster * @note See also handleWriteValueCommand */ void handleWriteChunkCommand(ts_channel_s *tsChannel, ts_response_format_e mode, short offset, short count, void *content) { tsState.writeChunkCommandCounter++; scheduleMsg(&tsLogger, "WRITE CHUNK m=%d p=%d o=%d s=%d", mode, currentPageId, offset, count); if (offset > getTunerStudioPageSize(currentPageId)) { scheduleMsg(&tsLogger, "ERROR invalid offset %d", offset); tunerStudioError("ERROR: out of range"); offset = 0; } if (count > getTunerStudioPageSize(currentPageId)) { tunerStudioError("ERROR: unexpected count"); scheduleMsg(&tsLogger, "ERROR unexpected count %d", count); count = 0; } uint8_t * addr = (uint8_t *) (getWorkingPageAddr(currentPageId) + offset); memcpy(addr, content, count); yellowMagic(currentPageId, offset, count); tsSendResponse(tsChannel, mode, NULL, 0); printTsStats(); }
void handlePageReadCommand(ts_channel_s *tsChannel, ts_response_format_e mode, uint16_t pageId, uint16_t offset, uint16_t count) { tsState.readPageCommandsCounter++; currentPageId = pageId; #if EFI_TUNER_STUDIO_VERBOSE scheduleMsg(&tsLogger, "READ m=%d p=%d o=%d c=%d", mode, (int) currentPageId, offset, count); printTsStats(); #endif if (currentPageId >= PAGE_COUNT) { // something is not right here currentPageId = 0; tunerStudioError("ERROR: invalid page number"); return; } int size = getTunerStudioPageSize(currentPageId); if (size < offset + count) { scheduleMsg(&tsLogger, "invalid offset/count %d/%d", offset, count); sendErrorCode(tsChannel); return; } const uint8_t *addr = (const uint8_t *) (getWorkingPageAddr(currentPageId) + offset); tsSendResponse(tsChannel, mode, addr, count); #if EFI_TUNER_STUDIO_VERBOSE scheduleMsg(&tsLogger, "Sending %d done", count); #endif }
void handlePageSelectCommand(ts_channel_s *tsChannel, ts_response_format_e mode, uint16_t pageId) { tsState.pageCommandCounter++; currentPageId = pageId; scheduleMsg(&tsLogger, "PAGE %d", currentPageId); tsSendResponse(tsChannel, mode, NULL, 0); }
void handlePageReadCommand(ts_response_format_e mode, uint16_t pageId, uint16_t offset, uint16_t count) { tsState.readPageCommandsCounter++; tunerStudioDebug("got R (Read page)"); tsState.currentPageId = pageId; #if EFI_TUNER_STUDIO_VERBOSE scheduleMsg(&logger, "Page requested: page %d offset=%d count=%d", (int)tsState.currentPageId, offset, count); #endif if (tsState.currentPageId > MAX_PAGE_ID) { scheduleMsg(&logger, "invalid Page number %x", tsState.currentPageId); // something is not right here tsState.currentPageId = 0; tunerStudioError("ERROR: invalid page"); return; } int size = getTunerStudioPageSize(tsState.currentPageId); if (size < offset + count) { scheduleMsg(&logger, "invalid offset/count %d/%d", offset, count); sendErrorCode(); return; } const uint8_t *addr = (const uint8_t *) (getWorkingPageAddr(tsState.currentPageId) + offset); tsSendResponse(mode, addr, count); #if EFI_TUNER_STUDIO_VERBOSE scheduleMsg(&logger, "Sending %d done", count); #endif }
void handlePageSelectCommand(ts_response_format_e mode, uint16_t pageId) { tsState.pageCommandCounter++; tsState.currentPageId = pageId; scheduleMsg(&logger, "page %d selected", tsState.currentPageId); tsSendResponse(mode, NULL, 0); }
/** * Query with CRC takes place while re-establishing connection * Query without CRC takes place on TunerStudio startup */ void handleQueryCommand(ts_channel_s *tsChannel, ts_response_format_e mode) { tsState.queryCommandCounter++; #if EFI_TUNER_STUDIO_VERBOSE scheduleMsg(&tsLogger, "got S/H (queryCommand) mode=%d", mode); printTsStats(); #endif tsSendResponse(tsChannel, mode, (const uint8_t *) TS_SIGNATURE, strlen(TS_SIGNATURE) + 1); }
void handleCrc32Check(ts_channel_s *tsChannel, ts_response_format_e mode, uint16_t pageId, uint16_t offset, uint16_t count) { tsState.crc32CheckCommandCounter++; count = SWAP_UINT16(count); count = getTunerStudioPageSize(pageId); scheduleMsg(&tsLogger, "CRC32 request: pageId %d offset %d size %d", pageId, offset, count); uint32_t crc = SWAP_UINT32(crc32((void * ) getWorkingPageAddr(0), count)); scheduleMsg(&tsLogger, "CRC32 response: %x", crc); tsSendResponse(tsChannel, mode, (const uint8_t *) &crc, 4); }
/** * This command is needed to make the whole transfer a bit faster * @note See also handleWriteValueCommand */ void handleWriteChunkCommand(ts_response_format_e mode, short offset, short count, void *content) { tsState.writeChunkCommandCounter++; scheduleMsg(&logger, "receiving page %d chunk offset %d size %d", tsState.currentPageId, offset, count); if (offset > getTunerStudioPageSize(tsState.currentPageId)) { scheduleMsg(&logger, "ERROR offset %d", offset); tunerStudioError("ERROR: out of range"); offset = 0; } if (count > getTunerStudioPageSize(tsState.currentPageId)) { tunerStudioError("ERROR: unexpected count"); scheduleMsg(&logger, "ERROR count %d", count); count = 0; } uint8_t * addr = (uint8_t *) (getWorkingPageAddr(tsState.currentPageId) + offset); memcpy(addr, content, count); tsSendResponse(mode, NULL, 0); }
/** * @brief 'Output' command sends out a snapshot of current values */ void handleOutputChannelsCommand(ts_channel_s *tsChannel, ts_response_format_e mode) { tsState.outputChannelsCommandCounter++; prepareTunerStudioOutputs(); // this method is invoked too often to print any debug information tsSendResponse(tsChannel, mode, (const uint8_t *) &tsOutputChannels, sizeof(TunerStudioOutputChannels)); }