std::unique_ptr<tag> io::read(std::istream& is, std::string& key) { tag::tag_type tt = read_type(is); key = read_str(is); if(!is) throw tag::input_error((boost::format("Error reading name of tag_%1%") % tt).str()); return read_payload(tt, is); }
std::string Parser::read_item(std::istream &stream) { // An item in an itemized chunk is made up of the big endian size and the payload of that size // Example: // 0000: 4 // 0004: 0xDE 0xAD 0xBE 0xEF // 0008: --- Next item --- auto payload = read_payload(stream, read_size(stream)); return {std::begin(payload), std::end(payload)}; }
std::pair<ChunkId, std::string> Parser::read_chunk(std::istream &stream) { // LastPass blob chunk is made up of 4-byte ID, big endian 4-byte size and payload of that size // Example: // 0000: 'IDID' // 0004: 4 // 0008: 0xDE 0xAD 0xBE 0xEF // 000C: --- Next chunk --- auto id = read_id(stream); auto payload = read_payload(stream, read_size(stream)); return std::make_pair(id, payload); }
static inline void process_rx(void) { BT_DBG("remaining %u discard %u have_hdr %u rx.buf %p len %u", rx.remaining, rx.discard, rx.have_hdr, rx.buf, rx.buf ? rx.buf->len : 0); if (rx.discard) { rx.discard -= h4_discard(h4_dev, rx.discard); return; } if (rx.have_hdr) { read_payload(); } else { read_header(); } }
void Radio::read(void *buf, uint8_t len) { read_payload(buf, len); write_register(STATUS, _BV(RX_DR) | _BV(MAX_RT) | _BV(TX_DS)); }
int main() { httpcInit(); gfxInitDefault(); gfxSet3D(false); Result ret = filesystemInit(); PrintConsole topConsole, bttmConsole; consoleInit(GFX_TOP, &topConsole); consoleInit(GFX_BOTTOM, &bttmConsole); consoleSelect(&topConsole); consoleClear(); state_t current_state = STATE_NONE; state_t next_state = STATE_INITIAL; static char top_text[2048]; top_text[0] = '\0'; int selected_slot = 0; int firmware_version[firmware_length] = {0, 0, 9, 0, 0}; int firmware_selected_value = 0; static char payload_name[256]; u8* payload_buf = NULL; u32 payload_size = 0; while (aptMainLoop()) { hidScanInput(); if(hidKeysDown() & KEY_START)break; // transition function if(next_state != current_state) { switch(next_state) { case STATE_INITIAL: strcat(top_text, " Welcome to the oot3dhax installer! Please proceedwith caution, as you might lose data if you don't.You may press START at any time to return to menu.\n Press A to continue.\n\n"); break; case STATE_SELECT_SLOT: strcat(top_text, " Please select the savegame slot oot3dhax will be\ninstalled to. D-Pad to select, A to continue.\n"); break; case STATE_SELECT_FIRMWARE: strcat(top_text, "\n\n\n Please select your console's firmware version.\nOnly select NEW 3DS if you own a New 3DS (XL).\nD-Pad to select, A to continue.\n"); break; case STATE_DOWNLOAD_PAYLOAD: getPayloadName(firmware_version, payload_name); sprintf(top_text, "%s\n\n\n Downloading payload... %s\n", top_text, payload_name); break; case STATE_INSTALL_PAYLOAD: strcat(top_text, " Installing payload...\n"); break; case STATE_INSTALLED_PAYLOAD: strcat(top_text, " Done! oot3dhax was successfully installed."); break; case STATE_ERROR: strcat(top_text, " Looks like something went wrong. :(\n"); break; default: break; } current_state = next_state; } consoleSelect(&topConsole); printf("\x1b[0;%dHoot3dhax installer", (50 - 17) / 2); printf("\x1b[1;%dHby smea, yellows8, phase, and meladroit\n\n\n", (50 - 38) / 2); printf(top_text); // state function switch(current_state) { case STATE_INITIAL: if(hidKeysDown() & KEY_A)next_state = STATE_SELECT_SLOT; break; case STATE_SELECT_SLOT: { if(hidKeysDown() & KEY_UP)selected_slot++; if(hidKeysDown() & KEY_DOWN)selected_slot--; if(hidKeysDown() & KEY_A)next_state = STATE_SELECT_FIRMWARE; if(selected_slot < 0) selected_slot = 0; if(selected_slot > 2) selected_slot = 2; printf((selected_slot >= 2) ? " \n" : " ^\n"); printf(" Selected slot: %d \n", selected_slot + 1); printf((!selected_slot) ? " \n" : " v\n"); } break; case STATE_SELECT_FIRMWARE: { if(hidKeysDown() & KEY_LEFT)firmware_selected_value--; if(hidKeysDown() & KEY_RIGHT)firmware_selected_value++; if(firmware_selected_value < 0) firmware_selected_value = 0; if(firmware_selected_value >= firmware_length) firmware_selected_value = firmware_length - 1; if(hidKeysDown() & KEY_UP)firmware_version[firmware_selected_value]++; if(hidKeysDown() & KEY_DOWN)firmware_version[firmware_selected_value]--; if(firmware_version[firmware_selected_value] < 0) firmware_version[firmware_selected_value] = 0; if(firmware_version[firmware_selected_value] >= firmware_num_values[firmware_selected_value]) firmware_version[firmware_selected_value] = firmware_num_values[firmware_selected_value] - 1; if(hidKeysDown() & KEY_A)next_state = STATE_DOWNLOAD_PAYLOAD; int offset = 28 + firmware_format_offsets[firmware_selected_value]; printf((firmware_version[firmware_selected_value] < firmware_num_values[firmware_selected_value] - 1) ? "%*s^%*s" : "%*s-%*s", offset, " ", 50 - offset - 1, " "); printf(" Selected firmware: " "%s %s-%s-%s %s" "\n", firmware_labels[0][firmware_version[0]], firmware_labels[1][firmware_version[1]], firmware_labels[2][firmware_version[2]], firmware_labels[3][firmware_version[3]], firmware_labels[4][firmware_version[4]]); printf((firmware_version[firmware_selected_value] > 0) ? "%*sv%*s" : "%*s-%*s", offset, " ", 50 - offset - 1, " "); } break; case STATE_DOWNLOAD_PAYLOAD: { httpcContext context; static char url[512]; sprintf(url, "http://smealum.github.io/ninjhax2/Pvl9iD2Im5/otherapp/%s.bin", payload_name); Result ret = httpcOpenContext(&context, url, 0); if(ret) { sprintf(status, "Failed to open http context\n Error code: %08X", (unsigned int)ret); next_state = STATE_ERROR; break; } ret = http_download(&context, &payload_buf, &payload_size); if(ret) { sprintf(status, "Failed to download payload\n Error code: %08X", (unsigned int)ret); next_state = STATE_ERROR; break; } next_state = STATE_INSTALL_PAYLOAD; } break; case STATE_INSTALL_PAYLOAD: { static char filename[128]; sprintf(filename, "save0x.bin.%s", firmware_labels[4][firmware_version[4]]); read_payload(filename, save_buffer); sprintf(filename, "/save0%d.bin", selected_slot); Result ret = write_savedata(filename, save_buffer, save_size); if(ret) { sprintf(status, "Failed to install %s.\n Error code: %08X", filename, (unsigned int)ret); next_state = STATE_ERROR; break; } } { Result ret = write_savedata("/payload.bin", payload_buf, payload_size); if(ret) { sprintf(status, "Failed to install payload\n Error code : %08X", (unsigned int)ret); next_state = STATE_ERROR; break; } next_state = STATE_INSTALLED_PAYLOAD; } break; case STATE_INSTALLED_PAYLOAD: next_state = STATE_NONE; break; default: break; } consoleSelect(&bttmConsole); printf("\x1b[0;0H \n Found a bug? Go to\n https://github.com/meladroit/oot3dhax_installer/ \n\n Current status:\n %s\n", status); gspWaitForVBlank(); } filesystemExit(); gfxExit(); httpcExit(); return 0; }