static int send_var (CalcHandle* handle, CalcMode mode, FileContent* content) { int i; uint8_t rej_code; uint16_t status; char *utf8; update_->cnt2 = 0; update_->max2 = content->num_entries; for (i = 0; i < content->num_entries; i++) { VarEntry *entry = content->entries[i]; if(entry->action == ACT_SKIP) continue; TRYF(ti82_send_RTS(handle, (uint16_t)entry->size, entry->type, entry->name)); TRYF(ti82_recv_ACK(handle, &status)); TRYF(ti82_recv_SKP(handle, &rej_code)); TRYF(ti82_send_ACK(handle)); switch (rej_code) { case REJ_EXIT: return ERR_ABORT; case REJ_SKIP: continue; case REJ_MEMORY: return ERR_OUT_OF_MEMORY; default: // RTS break; } utf8 = ticonv_varname_to_utf8(handle->model, entry->name, entry->type); g_snprintf(update_->text, sizeof(update_->text), "%s", utf8); g_free(utf8); update_label(); TRYF(ti82_send_XDP(handle, entry->size, entry->data)); TRYF(ti82_recv_ACK(handle, &status)); TRYF(ti82_send_EOT(handle)); ticalcs_info(""); update_->cnt2 = i+1; update_->max2 = content->num_entries; update_->pbar(); } return 0; }
static int get_memfree (CalcHandle* handle, uint32_t* ram, uint32_t* flash) { uint16_t unused; uint32_t memory; TRYF(ti82_send_REQ(handle, 0x0000, TI83_DIR, "")); TRYF(ti82_recv_ACK(handle, &unused)); TRYF(ti82_recv_XDP(handle, &unused, (uint8_t *)&memory)); fixup(memory); TRYF(ti82_send_EOT(handle)); *ram = memory; *flash = -1; return 0; }
static int send_var_ns (CalcHandle* handle, CalcMode mode, FileContent* content) { int i; int err; uint8_t rej_code; uint16_t status; char *utf8; update_->cnt2 = 0; update_->max2 = content->num_entries; for (i = 0; i < content->num_entries; i++) { VarEntry *entry = content->entries[i]; TRYF(ti82_send_VAR((uint16_t)entry->size, entry->type, entry->name)); TRYF(ti82_recv_ACK(&status)); g_snprintf(update_->text, sizeof(update_->text), _("Waiting for user's action...")); update_label(); do { // wait user's action update_refresh(); if (update_->cancel) return ERR_ABORT; err = ti82_recv_SKP(&rej_code); } while (err == ERROR_READ_TIMEOUT); TRYF(ti82_send_ACK()); switch (rej_code) { case REJ_EXIT: return ERR_ABORT; case REJ_SKIP: continue; case REJ_MEMORY: return ERR_OUT_OF_MEMORY; default: // RTS break; } utf8 = ticonv_varname_to_utf8(handle->model, entry->name, entry->type); g_snprintf(update_->text, sizeof(update_->text), "%s", utf8); g_free(utf8); update_label(); TRYF(ti82_send_XDP(entry->size, entry->data)); TRYF(ti82_recv_ACK(&status)); update_->cnt2 = i+1; update_->max2 = content->num_entries; update_->pbar(); } if ((mode & MODE_SEND_ONE_VAR) || (mode & MODE_SEND_LAST_VAR)) { TRYF(ti82_send_EOT()); TRYF(ti82_recv_ACK(NULL)); } return 0; }