/** * tifiles_content_dup_flash: * * Allocates and copies a new FlashContent structure. * * Return value: none. **/ TIEXPORT2 FlashContent* TICALL tifiles_content_dup_flash(FlashContent *content) { FlashContent *dup = NULL; FlashContent *p, *q; if (content != NULL) { dup = tifiles_content_create_flash(content->model); if (dup != NULL) { for(p = content, q = dup; p; p = p->next, q = q->next) { memcpy(q, p, sizeof(FlashContent)); // TI9x part if(tifiles_calc_is_ti9x(content->model)) { if(p->data_part) { q->data_part = (uint8_t *)g_malloc0(p->data_length+1); memcpy(q->data_part, p->data_part, p->data_length+1); } } // TI8x part if(tifiles_calc_is_ti8x(content->model)) { int i; // copy pages q->pages = tifiles_fp_create_array(p->num_pages); for(i = 0; i < content->num_pages; i++) { q->pages[i] = (FlashPage *)g_malloc0(sizeof(FlashPage)); memcpy(q->pages[i], p->pages[i], sizeof(FlashPage)); q->pages[i]->data = (uint8_t *) g_malloc0(p->pages[i]->size); memcpy(q->pages[i]->data, p->pages[i]->data, p->pages[i]->size); } } if(p->next) q->next = tifiles_content_create_flash(p->model); } } } else { tifiles_critical("%s(NULL)", __FUNCTION__); } return dup; }
int main(int argc, char **argv) { void * ptr; tifiles_library_init(); PRINTF(tifiles_error_get, INT, -1, NULL); PRINTF(tifiles_error_free, INT, NULL); PRINTF(tifiles_model_to_string, STR, -1); PRINTF(tifiles_string_to_model, INT, NULL); PRINTF(tifiles_attribute_to_string, STR, -1); PRINTF(tifiles_string_to_attribute, INT, NULL); PRINTF(tifiles_class_to_string, STR, -1); PRINTF(tifiles_string_to_class, INT, NULL); PRINTF(tifiles_fext_of_group, STR, -1); PRINTF(tifiles_fext_of_backup, STR, -1); PRINTF(tifiles_fext_of_flash_app, STR, -1); PRINTF(tifiles_fext_of_flash_os, STR, -1); PRINTF(tifiles_fext_of_certif, STR, -1); PRINTF(tifiles_fext_get, STR, NULL); ptr = tifiles_fext_dup(NULL); PRINTF(, PTR, ptr); tifiles_fext_free(ptr); PRINTFVOID(tifiles_fext_free, NULL); PRINTF(tifiles_file_is_ti, INT, NULL); PRINTF(tifiles_file_is_single, INT, NULL); PRINTF(tifiles_file_is_group, INT, NULL); PRINTF(tifiles_file_is_regular, INT, NULL); PRINTF(tifiles_file_is_backup, INT, NULL); PRINTF(tifiles_file_is_os, INT, NULL); PRINTF(tifiles_file_is_app, INT, NULL); PRINTF(tifiles_file_is_tib, INT, NULL); PRINTF(tifiles_file_is_flash, INT, NULL); PRINTF(tifiles_file_is_tigroup, INT, NULL); PRINTF(tifiles_file_is_tno, INT, NULL); PRINTF(tifiles_file_has_ti_header, INT, NULL); PRINTF(tifiles_file_has_tib_header, INT, NULL); PRINTF(tifiles_file_has_tig_header, INT, NULL); PRINTF(tifiles_file_has_tifl_header, INT, NULL, (void *)0x12345678, (void *)0x12345678); PRINTF(tifiles_file_has_tno_header, INT, NULL); PRINTF(tifiles_model_to_dev_type, INT, -1); PRINTF(tifiles_file_test, INT, NULL, -1, -1); PRINTF(tifiles_file_get_model, INT, NULL); PRINTF(tifiles_file_get_class, INT, NULL); PRINTF(tifiles_file_get_type, STR, NULL); PRINTF(tifiles_file_get_icon, STR, NULL); PRINTF(tifiles_vartype2string, STR, -1, -1); PRINTF(tifiles_string2vartype, INT, -1, NULL); PRINTF(tifiles_vartype2fext, STR, -1, -1); PRINTF(tifiles_fext2vartype, INT, -1, NULL); PRINTF(tifiles_vartype2type, STR, -1, -1); PRINTF(tifiles_vartype2icon, STR, -1, -1); PRINTF(tifiles_calctype2signature, STR, -1); PRINTF(tifiles_signature2calctype, INT, NULL); PRINTF(tifiles_folder_type, INT, -1); PRINTF(tifiles_flash_type, INT, -1); PRINTF(tifiles_idlist_type, INT, -1); PRINTF(tifiles_calc_is_ti8x, INT, -1); PRINTF(tifiles_calc_is_ti9x, INT, -1); PRINTF(tifiles_calc_are_compat, INT, -1, -1); PRINTF(tifiles_has_folder, INT, -1); PRINTF(tifiles_is_flash, INT, -1); PRINTF(tifiles_has_backup, INT, -1); PRINTF(tifiles_checksum, INT, NULL, 1234567891); PRINTF(tifiles_hexdump, INT, NULL, 1); PRINTF(tifiles_get_varname, STR, NULL); PRINTF(tifiles_get_fldname, STR, NULL); PRINTF(tifiles_build_fullname, STR, -1, NULL, NULL, (void *)0x12345678); PRINTF(tifiles_build_fullname, STR, -1, (void *)0x12345678, NULL, NULL); PRINTF(tifiles_build_fullname, STR, -1, NULL, (void *)0x12345678, NULL); PRINTF(tifiles_build_filename, STR, -1, NULL); PRINTFVOID(tifiles_filename_free, NULL); ptr = tifiles_content_create_regular(-1); PRINTF(, PTR, ptr); tifiles_content_delete_regular(ptr); PRINTF(tifiles_content_delete_regular, INT, NULL); PRINTF(tifiles_file_read_regular, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_read_regular, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_regular, INT, NULL, NULL, (void *)0x12345678); PRINTF(tifiles_file_write_regular, INT, NULL, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_regular, INT, (void *)0x12345678, NULL, NULL); PRINTF(tifiles_file_display_regular, INT, NULL); ptr = tifiles_content_create_backup(-1); PRINTF(, PTR, ptr); tifiles_content_delete_backup(ptr); PRINTF(tifiles_content_delete_backup, INT, NULL); PRINTF(tifiles_file_read_backup, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_read_backup, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_backup, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_write_backup, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_display_backup, INT, NULL); ptr = tifiles_content_create_flash(-1); PRINTF(, PTR, ptr); tifiles_content_delete_flash(ptr); PRINTF(tifiles_file_read_flash, INT, NULL, (void *)0x12345678); PRINTF(tifiles_content_delete_flash, INT, NULL); PRINTF(tifiles_file_read_flash, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_flash, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_write_flash, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_flash2, INT, NULL, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_flash2, INT, (void *)0x12345678, NULL, NULL); PRINTF(tifiles_file_display_flash, INT, NULL); PRINTF(tifiles_content_dup_regular, PTR, NULL); PRINTF(tifiles_content_dup_flash, PTR, NULL); PRINTF(tifiles_file_display, INT, NULL); ptr = tifiles_content_create_group(0); PRINTF(, PTR, ptr); tifiles_content_delete_group(ptr); PRINTF(tifiles_content_delete_group, INT, NULL); PRINTF(tifiles_group_contents, INT, NULL, (void *)0x12345678); PRINTF(tifiles_group_contents, INT, (void *)0x12345678, NULL); PRINTF(tifiles_ungroup_content, INT, NULL, (void *)0x12345678); PRINTF(tifiles_ungroup_content, INT, (void *)0x12345678, NULL); PRINTF(tifiles_group_files, INT, NULL, (void *)0x12345678); PRINTF(tifiles_group_files, INT, (void *)0x12345678, NULL); PRINTF(tifiles_ungroup_file, INT, NULL, (void *)0x12345678); PRINTF(tifiles_content_add_entry, INT, NULL, (void *)0x12345678); PRINTF(tifiles_content_del_entry, INT, NULL, (void *)0x12345678); PRINTF(tifiles_group_add_file, INT, NULL, (void *)0x12345678); PRINTF(tifiles_group_add_file, INT, (void *)0x12345678, NULL); PRINTF(tifiles_group_del_file, INT, NULL, (void *)0x12345678); PRINTF(tifiles_group_del_file, INT, (void *)0x12345678, NULL); ptr = tifiles_content_create_tigroup(-1, -1); PRINTF(, PTR, ptr); tifiles_content_delete_tigroup(ptr); PRINTF(tifiles_content_delete_tigroup, INT, NULL); PRINTF(tifiles_file_read_tigroup, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_read_tigroup, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_write_tigroup, INT, NULL, (void *)0x12345678); PRINTF(tifiles_file_write_tigroup, INT, (void *)0x12345678, NULL); PRINTF(tifiles_file_display_tigroup, INT, NULL); PRINTF(tifiles_tigroup_contents, INT, NULL, (void *)0x12345678, NULL); PRINTF(tifiles_tigroup_contents, INT, (void *)0x12345678, NULL, NULL); PRINTF(tifiles_tigroup_contents, INT, NULL, NULL, NULL); PRINTF(tifiles_untigroup_content, INT, NULL, NULL, NULL); PRINTF(tifiles_untigroup_content, INT, NULL, NULL, NULL); PRINTF(tifiles_untigroup_content, INT, NULL, NULL, NULL); PRINTF(tifiles_tigroup_files, INT, NULL, NULL); PRINTF(tifiles_tigroup_files, INT, NULL, NULL); PRINTF(tifiles_untigroup_file, INT, NULL, NULL); PRINTF(tifiles_untigroup_file, INT, NULL, NULL); PRINTF(tifiles_content_add_te, INT, NULL, NULL); PRINTF(tifiles_content_add_te, INT, NULL, NULL); PRINTF(tifiles_content_del_te, INT, NULL, NULL); PRINTF(tifiles_content_del_te, INT, NULL, NULL); PRINTF(tifiles_tigroup_add_file, INT, NULL, NULL); PRINTF(tifiles_tigroup_add_file, INT, NULL, NULL); PRINTF(tifiles_tigroup_del_file, INT, NULL, NULL); PRINTF(tifiles_tigroup_del_file, INT, NULL, NULL); PRINTF(tifiles_te_create, PTR, NULL, -1, -1); PRINTF(tifiles_te_delete, INT, NULL); ptr = tifiles_te_create_array(0); PRINTF(, PTR, ptr); tifiles_te_delete_array(ptr); ptr = tifiles_te_resize_array(NULL, 0); PRINTF(, PTR, ptr); tifiles_te_delete_array(ptr); PRINTFVOID(tifiles_te_delete_array, NULL); PRINTF(tifiles_te_sizeof_array, INT, NULL); PRINTF(tifiles_comment_set_single, STR); PRINTF(tifiles_comment_set_group, STR); PRINTF(tifiles_comment_set_backup, STR); PRINTF(tifiles_comment_set_tigroup, STR); ptr = tifiles_ve_create(); PRINTF(, PTR, ptr); tifiles_ve_delete(ptr); ptr = tifiles_ve_create_alloc_data(0); PRINTF(, PTR, ptr); tifiles_ve_delete(ptr); ptr = tifiles_ve_create_with_data(0); PRINTF(, PTR, ptr); tifiles_ve_delete(ptr); ptr = tifiles_ve_create_with_data2(0, NULL); PRINTF(, PTR, ptr); tifiles_ve_delete(ptr); PRINTFVOID(tifiles_ve_delete, NULL); ptr = tifiles_ve_alloc_data(0); PRINTF(, PTR, ptr); tifiles_ve_free_data(ptr); ptr = tifiles_ve_realloc_data(NULL, 1); PRINTF(, PTR, ptr); tifiles_ve_free_data(ptr); PRINTFVOID(tifiles_ve_free_data, NULL); PRINTF(tifiles_ve_copy, PTR, NULL, NULL); PRINTF(tifiles_ve_dup, PTR, NULL); ptr = tifiles_ve_create_array(0); PRINTF(, PTR, ptr); tifiles_ve_delete_array(ptr); ptr = tifiles_ve_resize_array(NULL, 0); PRINTF(, PTR, ptr); tifiles_ve_delete_array(ptr); PRINTFVOID(tifiles_ve_delete_array, NULL); ptr = tifiles_fp_create(); PRINTF(, PTR, ptr); tifiles_fp_delete(ptr); ptr = tifiles_fp_create_alloc_data(0); PRINTF(, PTR, ptr); tifiles_fp_delete(ptr); ptr = tifiles_fp_create_with_data(0); PRINTF(, PTR, ptr); tifiles_fp_delete(ptr); ptr = tifiles_fp_create_with_data2(0, NULL); PRINTF(, PTR, ptr); tifiles_fp_delete(ptr); PRINTFVOID(tifiles_fp_delete, NULL); ptr = tifiles_fp_alloc_data(0); PRINTF(, PTR, ptr); tifiles_fp_free_data(ptr); ptr = tifiles_fp_realloc_data(NULL, 1); PRINTF(, PTR, ptr); tifiles_fp_free_data(ptr); PRINTFVOID(tifiles_fp_free_data, NULL); ptr = tifiles_fp_create_array(0); PRINTF(, PTR, ptr); tifiles_fp_delete_array(ptr); ptr = tifiles_fp_resize_array(NULL, 0); PRINTF(, PTR, ptr); tifiles_fp_delete_array(ptr); PRINTFVOID(tifiles_fp_delete_array, NULL); ptr = tifiles_create_table_of_entries(NULL, NULL); PRINTF(, PTR, ptr); tifiles_free_table_of_entries(ptr); PRINTFVOID(tifiles_free_table_of_entries, NULL); cert_functions_unit_test(); tifiles_library_exit(); return 0; }
static int recv_flash (CalcHandle* handle, FlashContent* content, VarRequest* vr) { uint16_t aids[] = { AID_ARCHIVED, AID_VAR_VERSION }; const int naids = sizeof(aids) / sizeof(uint16_t); CalcAttr **attrs; const int nattrs = 1; char fldname[40], varname[40]; uint8_t *data; char *utf8; int page; uint16_t data_addr = 0x4000; uint16_t data_page = 0; int r, q; utf8 = ticonv_varname_to_utf8(handle->model, vr->name, vr->type); g_snprintf(update_->text, sizeof(update_->text), "%s", utf8); g_free(utf8); update_label(); attrs = ca_new_array(nattrs); attrs[0] = ca_new(AID_VAR_TYPE2, 4); attrs[0]->data[0] = 0xF0; attrs[0]->data[1] = 0x07; attrs[0]->data[2] = 0x00; attrs[0]->data[3] = vr->type; TRYF(cmd_s_var_request(handle, "", vr->name, naids, aids, nattrs, CA(attrs))); ca_del_array(nattrs, attrs); attrs = ca_new_array(naids); TRYF(cmd_r_var_header(handle, fldname, varname, attrs)); TRYF(cmd_r_var_content(handle, NULL, &data)); content->model = handle->model; strcpy(content->name, vr->name); content->data_type = vr->type; content->device_type = DEVICE_TYPE_83P; content->num_pages = 2048; // TI83+ has 512 KB of FLASH max content->pages = tifiles_fp_create_array(content->num_pages); q = vr->size / FLASH_PAGE_SIZE; r = vr->size % FLASH_PAGE_SIZE; update_->cnt2 = 0; update_->max2 = q; for(page = 0; page < q; page++) { FlashPage *fp = content->pages[page] = tifiles_fp_create(); fp->addr = data_addr; fp->page = data_page++; fp->flag = 0x80; fp->size = FLASH_PAGE_SIZE; fp->data = tifiles_fp_alloc_data(FLASH_PAGE_SIZE); memcpy(fp->data, data + FLASH_PAGE_SIZE*page, FLASH_PAGE_SIZE); update_->cnt2 = page; update_->pbar(); } { FlashPage *fp = content->pages[page] = tifiles_fp_create(); fp->addr = data_addr; fp->page = data_page++; fp->flag = 0x80; fp->size = r; fp->data = tifiles_fp_alloc_data(FLASH_PAGE_SIZE); memcpy(fp->data, data + FLASH_PAGE_SIZE*page, r); update_->cnt2 = page; update_->pbar(); } content->num_pages = page+1; g_free(data); ca_del_array(naids, attrs); return 0; }
static int recv_flash (CalcHandle* handle, FlashContent* content, VarRequest* vr) { int ret; FlashPage *fp; uint16_t data_addr; uint16_t old_page = 0; uint16_t data_page; uint16_t data_length; uint8_t data_type; uint32_t size; int first_block; int page; int offset; uint8_t buffer[FLASH_PAGE_SIZE + 4]; ticonv_varname_to_utf8_sn(handle->model, vr->name, handle->updat->text, sizeof(handle->updat->text), vr->type); ticalcs_update_label(handle); content->model = handle->model; ticalcs_strlcpy(content->name, vr->name, sizeof(content->name)); content->data_type = vr->type; content->device_type = handle->model == CALC_TI73 ? DEVICE_TYPE_73 : DEVICE_TYPE_83P; content->num_pages = 2048; // TI83+ has 512 KB of FLASH max content->pages = tifiles_fp_create_array(content->num_pages); page = 0; fp = content->pages[page] = tifiles_fp_create(); ret = SEND_REQ2(handle, 0x00, TI73_APPL, vr->name, 0x00); if (!ret) { ret = RECV_ACK(handle, NULL); } if (ret) { return ret; } handle->updat->cnt2 = 0; handle->updat->max2 = vr->size; for (size = 0, first_block = 1, offset = 0; !ret;) { char name[9]; int ret2; ret = RECV_VAR2(handle, &data_length, &data_type, name, &data_addr, &data_page); ret2 = SEND_ACK(handle); if (ret) { if (ret == ERR_EOT) { ret = 0; } break; } if (ret2) { ret = ret2; break; } if (first_block) { old_page = data_page; fp->addr = data_addr & 0x4000; fp->page = data_page; } if (old_page != data_page) { fp->addr = data_addr & 0x4000; fp->page = old_page; fp->flag = 0x80; fp->size = offset; fp->data = tifiles_fp_alloc_data(FLASH_PAGE_SIZE); memcpy(fp->data, buffer, fp->size); page++; offset = 0; old_page = data_page; fp = content->pages[page] = tifiles_fp_create(); } ret = SEND_CTS(handle); if (!ret) { ret = RECV_ACK(handle, NULL); if (!ret) { ret = RECV_XDP(handle, &data_length, &buffer[offset]); if (!ret) { ret = SEND_ACK(handle); } } } if (ret) { break; } if (first_block) { first_block = 0; /* compute actual application size */ if (buffer[0] == 0x80 && buffer[1] == 0x0f) { uint32_t len = ((uint32_t)(buffer[2])) << 24 | ((uint32_t)(buffer[3])) << 16 | ((uint32_t)(buffer[4])) << 8 | (uint32_t)(buffer[5]); handle->updat->max2 = len + 75; } } size += data_length; offset += data_length; handle->updat->cnt2 = size; ticalcs_update_pbar(handle); } fp->addr = data_addr & 0x4000; fp->page = old_page; fp->flag = 0x80; fp->size = offset; fp->data = tifiles_fp_alloc_data(FLASH_PAGE_SIZE); memcpy(fp->data, buffer, fp->size); page++; content->num_pages = page; return ret; }