Exemple #1
0
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);
}
Exemple #2
0
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;
}
Exemple #4
0
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);
}