Esempio n. 1
0
int MovingLightModel_GetLanguage(const RDMHeader *header,
                                 UNUSED const uint8_t *param_data) {
  uint8_t *ptr = g_rdm_buffer + sizeof(RDMHeader);
  ptr += RDMUtil_StringCopy((char*) ptr, RDM_LANGUAGE_STRING_SIZE,
                            LANGUAGES[g_moving_light.language_index],
                            RDM_LANGUAGE_STRING_SIZE);
  return RDMResponder_AddHeaderAndChecksum(header, ACK, ptr - g_rdm_buffer);
}
Esempio n. 2
0
// PID Handlers
// ----------------------------------------------------------------------------
int MovingLightModel_GetLanguageCapabilities(const RDMHeader *header,
                                            UNUSED const uint8_t *param_data) {
  uint8_t *ptr = g_rdm_buffer + sizeof(RDMHeader);
  unsigned int i = 0;
  for (; i < NUMBER_OF_LANGUAGES; i++) {
    ptr += RDMUtil_StringCopy((char*) ptr, RDM_LANGUAGE_STRING_SIZE,
                              LANGUAGES[i], RDM_LANGUAGE_STRING_SIZE);
  }
  return RDMResponder_AddHeaderAndChecksum(header, ACK, ptr - g_rdm_buffer);
}
Esempio n. 3
0
int DimmerModel_GetStatusIdDescription(const RDMHeader *header,
                                       UNUSED const uint8_t *param_data) {
  const uint16_t status_id = ExtractUInt16(param_data);
  if (status_id != STS_OLP_TESTING) {
    return RDMResponder_BuildNack(header, NR_DATA_OUT_OF_RANGE);
  }

  uint8_t *ptr = g_rdm_buffer + sizeof(RDMHeader);
  ptr += RDMUtil_StringCopy((char*) ptr, RDM_DEFAULT_STRING_SIZE,
                            STS_OLP_TESTING_DESCRIPTION,
                            RDM_DEFAULT_STRING_SIZE);
  return RDMResponder_AddHeaderAndChecksum(header, ACK, ptr - g_rdm_buffer);
}
Esempio n. 4
0
int DimmerModel_GetOutputResponseDescription(const RDMHeader *header,
                                             UNUSED const uint8_t *param_data) {
  const uint8_t setting = param_data[0];
  if (setting == 0u || setting > NUMBER_OF_OUTPUT_RESPONSE_TIMES) {
    return RDMResponder_BuildNack(header, NR_DATA_OUT_OF_RANGE);
  }

  uint8_t *ptr = g_rdm_buffer + sizeof(RDMHeader);
  *ptr++ = setting;
  ptr += RDMUtil_StringCopy((char*) ptr, RDM_DEFAULT_STRING_SIZE,
                            OUTPUT_RESPONSE_TIMES[setting - 1],
                            RDM_DEFAULT_STRING_SIZE);
  return RDMResponder_AddHeaderAndChecksum(header, ACK, ptr - g_rdm_buffer);
}
Esempio n. 5
0
int DimmerModel_GetCurveDescription(const RDMHeader *header,
                                    UNUSED const uint8_t *param_data) {
  const uint8_t curve = param_data[0];
  if (curve == 0u || curve > NUMBER_OF_CURVES) {
    return RDMResponder_BuildNack(header, NR_DATA_OUT_OF_RANGE);
  }

  uint8_t *ptr = g_rdm_buffer + sizeof(RDMHeader);
  *ptr++ = curve;
  ptr += RDMUtil_StringCopy((char*) ptr, RDM_DEFAULT_STRING_SIZE,
                            DIMMER_CURVES[curve - 1],
                            RDM_DEFAULT_STRING_SIZE);
  return RDMResponder_AddHeaderAndChecksum(header, ACK, ptr - g_rdm_buffer);
}
Esempio n. 6
0
int DimmerModel_GetLockStateDescription(const RDMHeader *header,
                                        const uint8_t *param_data) {
  const uint8_t lock_state = param_data[0];
  if (lock_state == 0u || lock_state >= NUMBER_OF_LOCK_STATES) {
    return RDMResponder_BuildNack(header, NR_DATA_OUT_OF_RANGE);
  }

  uint8_t *ptr = g_rdm_buffer + sizeof(RDMHeader);
  *ptr++ = lock_state;
  ptr += RDMUtil_StringCopy((char*) ptr, RDM_DEFAULT_STRING_SIZE,
                            LOCK_STATES[lock_state],
                            RDM_DEFAULT_STRING_SIZE);
  return RDMResponder_AddHeaderAndChecksum(header, ACK, ptr - g_rdm_buffer);
}
Esempio n. 7
0
int DimmerModel_GetSelfTestDescription(const RDMHeader *header,
                                       UNUSED const uint8_t *param_data) {
  const uint8_t self_test_id = param_data[0];
  if (self_test_id == SELF_TEST_OFF || self_test_id > NUMBER_OF_SELF_TESTS) {
    return RDMResponder_BuildNack(header, NR_DATA_OUT_OF_RANGE);
  }

  uint8_t *ptr = g_rdm_buffer + sizeof(RDMHeader);
  *ptr++ = self_test_id;
  ptr += RDMUtil_StringCopy((char*) ptr, RDM_DEFAULT_STRING_SIZE,
                            SELF_TESTS[self_test_id - 1].description,
                            RDM_DEFAULT_STRING_SIZE);
  return RDMResponder_AddHeaderAndChecksum(header, ACK, ptr - g_rdm_buffer);
}
Esempio n. 8
0
int DimmerModel_GetModulationFrequencyDescription(
    const RDMHeader *header,
    UNUSED const uint8_t *param_data) {
  const uint8_t setting = param_data[0];
  if (setting == 0u || setting > NUMBER_OF_MODULATION_FREQUENCIES) {
    return RDMResponder_BuildNack(header, NR_DATA_OUT_OF_RANGE);
  }

  const ModulationFrequency *frequency = &MODULATION_FREQUENCY[setting - 1];
  uint8_t *ptr = g_rdm_buffer + sizeof(RDMHeader);
  *ptr++ = setting;
  ptr = PushUInt32(ptr, frequency->frequency);
  ptr += RDMUtil_StringCopy((char*) ptr, RDM_DEFAULT_STRING_SIZE,
                            frequency->description,
                            RDM_DEFAULT_STRING_SIZE);
  return RDMResponder_AddHeaderAndChecksum(header, ACK, ptr - g_rdm_buffer);
}
TEST_F(RDMUtilTest, StringCopy) {
  const unsigned int DEST_SIZE = 10;
  char dest[DEST_SIZE];

  const char short_string[] = "foobar";

  // A non NULL terminated string, shorter than the dest.
  memset(dest, 0xff, DEST_SIZE);
  const char expected1[] = "foo\0\xff\xff\xff\xff\xff\xff";
  EXPECT_EQ(3, RDMUtil_StringCopy(dest, DEST_SIZE, short_string, 3));
  EXPECT_THAT(ArrayTuple(dest, DEST_SIZE), StringIs(expected1, DEST_SIZE));

  // A NULL terminated string, shorter than the dest.
  memset(dest, 0xff, DEST_SIZE);
  const char expected2[] = "foobar\0\xff\xff\xff";
  EXPECT_EQ(6, RDMUtil_StringCopy(dest, DEST_SIZE, short_string, 6));
  EXPECT_THAT(ArrayTuple(dest, DEST_SIZE), StringIs(expected2, DEST_SIZE));

  // A non-null terminated string, equal in size to DEST
  memset(dest, 0xff, DEST_SIZE);
  const char equal_string[] = "0123456789";
  const char expected3[] = "0123456789";
  EXPECT_EQ(DEST_SIZE, RDMUtil_StringCopy(dest, DEST_SIZE, equal_string,
                                          strlen(equal_string)));
  EXPECT_THAT(ArrayTuple(dest, DEST_SIZE), StringIs(expected3, DEST_SIZE));

  // A null terminated string, equal in size to DEST
  const char equal_with_null[] = "012345678";
  memset(dest, 0xff, DEST_SIZE);
  const char expected4[] = "012345678";
  EXPECT_EQ(9, RDMUtil_StringCopy(dest, DEST_SIZE, equal_with_null,
                                  arraysize(equal_with_null)));
  EXPECT_THAT(ArrayTuple(dest, DEST_SIZE), StringIs(expected4, DEST_SIZE));

  // A non-NULL terminated string, longer than dest
  const char long_string[] = "this is a test";
  memset(dest, 0xff, DEST_SIZE);
  const char expected5[] = "this is a ";
  EXPECT_EQ(DEST_SIZE,
            RDMUtil_StringCopy(dest, DEST_SIZE, long_string,
                               strlen(long_string)));
  EXPECT_THAT(ArrayTuple(dest, DEST_SIZE), StringIs(expected5, DEST_SIZE));

  // A non-NULL terminated string, longer than dest
  memset(dest, 0xff, DEST_SIZE);
  EXPECT_EQ(DEST_SIZE,
            RDMUtil_StringCopy(dest, DEST_SIZE, long_string,
                               arraysize(long_string)));
  EXPECT_THAT(ArrayTuple(dest, DEST_SIZE), StringIs(expected5, DEST_SIZE));
}