Beispiel #1
0
 // if track==0 -> return total length of cd
 // otherwise return start in bcd time format
long getTD(int track, unsigned char* buffer)
{
      // lasttrack just keeps track of which track TD was requested last (go fig)
//	SysPrintf("start getTD()\r\n");

   if (track > CD.numtracks)
   {
//      printf("getTD bad %2d\n", track);
      return -1;
   }

   if (track == 0)
   {
      buffer[0] = CD.tl[track].end[0];
      buffer[1] = CD.tl[track].end[1];
      buffer[2] = CD.tl[track].end[2];
   }
   else
   {
      buffer[0] = CD.tl[track].start[0];
      buffer[1] = CD.tl[track].start[1];
      buffer[2] = CD.tl[track].start[2];
   }
//   printf("getTD %2d %02d:%02d:%02d\n", track, (int)buffer[0],
//         (int)buffer[1], (int)buffer[2]);

   // bcd encode it
   buffer[0] = intToBCD(buffer[0]);
   buffer[1] = intToBCD(buffer[1]);
   buffer[2] = intToBCD(buffer[2]);
//   SysPrintf("end getTD()\r\n");
   return 0;
}
long CDR_getStatus(struct CdrStat *st)
{
//	printf("CDR_getStatus();\n");
	
	st->Type   = 0x01;
	st->Status = 0x20;

	st->Time[0] = intToBCD( CDSeek.minute );
	st->Time[1] = intToBCD( CDSeek.sec );
	st->Time[2] = intToBCD( CDSeek.frame );

	return 0;
}
long CDR_getTN(unsigned char *tn)
{
//	printf("CDR_getTN(tn);\n");
	tn[0] = 1;
	tn[1] = intToBCD(1);	// intToBCD((char)theCD->getNumTracks());
	return 0;
}
Beispiel #4
0
void rtc_writeValue(time_t newTime) {
	ESP_LOGD(tag, ">> writeValue: %ld", newTime);
	struct tm tm;
	gmtime_r(&newTime, &tm);
	char buf[30];
	ESP_LOGD(tag, " - %s", asctime_r(&tm, buf));

	esp_err_t errRc;
	i2c_cmd_handle_t cmd = i2c_cmd_link_create();
	ESP_ERROR_CHECK(i2c_master_start(cmd));
	ESP_ERROR_CHECK(i2c_master_write_byte(cmd, (RTC_ADDRESS << 1) | I2C_MASTER_WRITE, 1 /* expect ack */));
	ESP_ERROR_CHECK(i2c_master_write_byte(cmd, 0x03, 1));
	ESP_ERROR_CHECK(i2c_master_write_byte(cmd, intToBCD(tm.tm_sec), 1));      // seconds
	ESP_ERROR_CHECK(i2c_master_write_byte(cmd, intToBCD(tm.tm_min), 1 ));     // minutes
	ESP_ERROR_CHECK(i2c_master_write_byte(cmd, intToBCD(tm.tm_hour), 1 ));    // hours
	ESP_ERROR_CHECK(i2c_master_write_byte(cmd, intToBCD(tm.tm_mday), 1));     // date of month
	ESP_ERROR_CHECK(i2c_master_write_byte(cmd, intToBCD(tm.tm_wday+1), 1 ));  // week day
	ESP_ERROR_CHECK(i2c_master_write_byte(cmd, intToBCD(tm.tm_mon+1), 1));    // month
	ESP_ERROR_CHECK(i2c_master_write_byte(cmd, intToBCD(tm.tm_year-100), 1)); // year
	ESP_ERROR_CHECK(i2c_master_stop(cmd));
	errRc = i2c_master_cmd_begin(I2C_NUM_0, cmd, 1000/portTICK_PERIOD_MS);
	if (errRc != 0) {
		ESP_LOGE(tag, "i2c_master_cmd_begin: %d", errRc);
	}
	i2c_cmd_link_delete(cmd);
}
long CDR_getTD(unsigned char td, unsigned char *dtd)
{
//	printf("CDR_getTD(%d);\n", (int)td);

	switch ( td ) {
	case 0:	// hole disk length
		dtd[0] = intToBCD( CDLength.minute );
		dtd[1] = intToBCD( CDLength.sec );
		dtd[2] = intToBCD( CDLength.frame );
		break;
	case 1: // first track start 
		dtd[0] = 0;
		dtd[1] = 2;
		dtd[2] = 0;
		break;
	}
	return 0;
}