// 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; }
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; }