void sendPicturesGroup(char **filenames, int count) { int i, j = 0; if (count == 1) { sendPicture(filenames[0]); return; } char **sendlist; sendlist = calloc(10, sizeof(char*)); for (i = 0; i < count; i++) { if (!access(filenames[i], R_OK)) { sendlist[j] = strdup(filenames[i]); j++; } if (j == 10) { sendGroup(sendlist, j); while (j--) free(sendlist[j]); j = 0; } } if (j > 0) { sendGroup(sendlist, j); while (j--) free(sendlist[j]); } free(sendlist); }
static void hw_timer_cb(void) { static uint8 groupBitCount = 0; static uint8 groupBits; static uint32 word; groupBitCount = sendGroup(groupBitCount, groupBits); if (groupBitCount == 0) { switch (wordBitCount) { case 0: easygpio_outputSet(LED, 0); return; case 34: easygpio_outputSet(LED, 1); groupBits = groupStart; word = xmit.word; groupBitCount = GROUP_BITS; break; case 1: groupBits = groupEnd; groupBitCount = GROUP_BITS; break; default: if (word & (1 << 31)) groupBits = groupBit1; else groupBits = groupBit0; word <<= 1; groupBitCount = GROUP_BITS; break; } wordBitCount--; } }
bool EasyVR::eraseCommand(int8_t group, int8_t index) { sendCmd(CMD_ERASE_SD); sendGroup(group); sendArg(index); if (recv(DEF_TIMEOUT) == STS_SUCCESS) return true; return false; }
bool EasyVR::removeCommand(int8_t group, int8_t index) { sendCmd(CMD_UNGROUP_SD); sendGroup(group); sendArg(index); if (recv(STORAGE_TIMEOUT) == STS_SUCCESS) return true; return false; }
bool EasyVR::addCommand(int8_t group, int8_t index) { sendCmd(CMD_GROUP_SD); sendGroup(group); sendArg(index); int rx = recv(DEF_TIMEOUT); if (rx == STS_SUCCESS) return true; _status.v = 0; if (rx == STS_OUT_OF_MEM) _status.b._memfull = true; return false; }
bool EasyVR::dumpCommand(int8_t group, int8_t index, char* name, uint8_t& training) { sendCmd(CMD_DUMP_SD); sendGroup(group); sendArg(index); if (recv(DEF_TIMEOUT) != STS_DATA) return false; int8_t rx; if (!recvArg(rx, DEF_TIMEOUT)) return false; training = rx & 0x07; if (rx == -1 || training == 7) training = 0; _status.v = 0; _status.b._conflict = (rx & 0x18) != 0; _status.b._command = (rx & 0x08) != 0; _status.b._builtin = (rx & 0x10) != 0; if (!recvArg(rx, DEF_TIMEOUT)) return false; _value = rx; if (!recvArg(rx, DEF_TIMEOUT)) return false; int8_t len = rx == -1 ? 32 : rx; for ( ; len > 0; --len, ++name) { if (!recvArg(rx, DEF_TIMEOUT)) return false; if (rx == '^' - ARG_ZERO) { if (!recvArg(rx, DEF_TIMEOUT)) return false; *name = '0' + rx; --len; } else { *name = ARG_ZERO + rx; } } *name = 0; return true; }
bool EasyVR::setCommandLabel(int8_t group, int8_t index, const char* name) { sendCmd(CMD_NAME_SD); sendGroup(group); sendArg(index); int8_t len = 31; for (const char* p = name; *p != 0 && len > 0; ++p, --len) { if (isdigit(*p)) --len; } len = 31 - len; sendArg(len); for (int8_t i = 0; i < len; ++i) { char c = name[i]; if (isdigit(c)) { send('^'); sendArg(c - '0'); } else if (isalpha(c)) { send(c & ~0x20); // to uppercase } else { send('_'); } } if (recv(DEF_TIMEOUT) == STS_SUCCESS) return true; return false; }
void EasyVR::trainCommand(int8_t group, int8_t index) { sendCmd(CMD_TRAIN_SD); sendGroup(group); sendArg(index); }