Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

l1394_avcvcr.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002                           l1394avcvcr.cpp  -  description
00003                              -------------------
00004     begin                : Fri Nov 24 2000
00005     copyright            : (C) 2000-2004 by Michael Repplinger
00006     email                : repplinger@cs.uni-sb.de
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #include "l1394_avcvcr.h"
00019 #include "l1394_fcpnode.h"
00020 #include "l1394_qarray.h"
00021 
00022 namespace L1394{
00023 AvcVcr::AvcVcr(FcpNode* parent_node, const int subunit_value)
00024   : Vcr(parent_node)
00025 {
00026   setFrameWidth(720);
00027   setFrameHeight(485);
00028   this->subunit_value = subunit_value;
00029   avc_parent          = parent_node;
00030   device_register     = new AvcRegister(parent_node, subunit_value);
00031   setName("AvcVcr");
00032 }
00033 AvcVcr::~AvcVcr()
00034 {
00035   delete device_register;
00036 }
00037 
00038 int AvcVcr::start()
00039 {
00040   if (getParentNode()->getIsoObject())
00041   {
00042    if (play() == L1394_SUCCESS)
00043    {
00044     setSending(true);
00045     return getParentNode()->getIsoObject()->startIsoListen();
00046    }
00047   }
00048   internal::SMessage::getInstance()->warningStream() << "AvcVcr > No valid Iso-Object" << endl;
00049   return L1394_FAILED;
00050 }
00051 
00052 int AvcVcr::stop()
00053 {
00054   if (!isSending())
00055     return L1394_SUCCESS;
00056   if ( getParentNode()->getIsoObject() )
00057   {
00058     if (wind(0x60)->send() == L1394_SUCCESS)
00059     {
00060       getParentNode()->getIsoObject()->stopIsoListen();
00061     }
00062     else
00063       internal::SMessage::getInstance()->errorStream() << " AvcVcr > Could not stop device" << endl;
00064   }
00065   else
00066     internal::SMessage::getInstance()->errorStream() << " AvcVcr > No valid ISO object" << endl;
00067   return L1394_FAILED;
00068 }
00069 
00070 const AvcRegister* AvcVcr::analogAudioOutputMode(const int mode)     //ok
00071 {
00072   return device_register->defaultSet(1,0x70,mode);
00073 }
00074 
00075 
00076 const DeviceRegister* AvcVcr::recordingDate(const Timecode time_code)
00077 {
00078   device_register->defaultSet(2,0x53,0x70);
00079   device_register->getData()->setByte(4,time_code.timezone());
00080   device_register->getData()->setByte(5,(3<<6 | time_code.day()));
00081   device_register->getData()->setByte(6,(time_code.day()<<5 | time_code.month()));
00082   device_register->getData()->setByte(7,time_code.year());
00083   return device_register;
00084 }
00085 
00086 const AvcRegister* AvcVcr::timecode(const int value, const Timecode time_code)    //ok
00087 {
00088   device_register->defaultSet(2,0x51,value);
00089   device_register->getData()->getQuadlet(1).setByte(0,time_code.frame());
00090   device_register->getData()->getQuadlet(1).setByte(1,time_code.minute());
00091   device_register->getData()->getQuadlet(1).setByte(2,time_code.second());
00092   device_register->getData()->getQuadlet(1).setByte(3,time_code.hour());
00093   return device_register;
00094 }
00095 /*
00096 AvcRegister* AvcVcr::transportState()
00097 {
00098   device_register->reset(1);
00099   device_register->setCtype(CONTROL);
00100   return device_register->setOpcode(0xD0);
00101 }
00102 */
00103 
00104 const AvcRegister* AvcVcr::writeMic()
00105 {
00106   return device_register->defaultSet(1,0x51,0x0);
00107 }
00108 
00109 const AvcRegister* AvcVcr::wind(const int command)   //ok
00110 {
00111   return device_register->defaultSet(1,0xc4,command);
00112 }
00113 
00114 
00115 const AvcRegister* AvcVcr::search(const int command, const Timecode time_code)            //ok
00116 {
00117   device_register->defaultSet(2,0x50, command);
00118   device_register->getData()->getQuadlet(1).setByte(0,time_code.frame());
00119   device_register->getData()->getQuadlet(1).setByte(1,time_code.second());
00120   device_register->getData()->getQuadlet(1).setByte(2,time_code.minute());
00121   device_register->getData()->getQuadlet(1).setByte(3,time_code.hour());
00122   return device_register;
00123 }
00124 
00125 const DeviceRegister* AvcVcr::transportState()
00126 {
00127   return device_register;
00128 }
00129 
00130 const DeviceRegister*  AvcVcr::recordingSpeed(const int speed)   //ok
00131 {
00132   return device_register->defaultSet(1,0xdb,speed);
00133 }
00134 
00135 
00136 Timecode AvcVcr::getTimeCode()//ok
00137 {
00138   Quadlet tmp_quadlet;
00139   Timecode time_code;
00140   device_register->defaultSet(2,0x51,0x71)->setCtype(STATUS);
00141 
00142 
00143   tmp_quadlet = avc_parent->send( *(device_register->getData()) ).getQuadlet(1);
00144 
00145   time_code.setFrame(tmp_quadlet.getByte(0));
00146   time_code.setSecond(tmp_quadlet.getByte(1));
00147   time_code.setMinute(tmp_quadlet.getByte(2));
00148   time_code.setHour(tmp_quadlet.getByte(3));
00149 
00150   return time_code;
00151 }
00152 const AvcRegister* AvcVcr::backward(const int measurement_unit,const  int count)
00153 {
00154   device_register->defaultSet(2,0x56, measurement_unit)->getData()->setByte(4,count);
00155   return device_register;
00156 
00157 }
00158 const AvcRegister* AvcVcr::forward(const int measurement_unit,const  int count)
00159 {
00160   device_register->defaultSet(2,0x55, measurement_unit)->getData()->setByte(4,count);
00161   return device_register;
00162 }
00163 const AvcRegister* AvcVcr::preset(const int reset,const  int id,const  u_int32_t parameter_value)
00164 {
00165   device_register->defaultSet(2,0x45, (reset << 7) | id)->getData()->insert(parameter_value,2);
00166   return device_register;
00167 }
00168 
00169 Quadlet AvcVcr::mediumInfo()
00170 {
00171   device_register->defaultSet(2,0xda,0x7f);
00172   device_register->getData()->setByte(4,0x7f);
00173   return avc_parent->send(*(device_register->getData())).getQuadlet(1);
00174 }
00175 
00176 int AvcVcr::setParameter(const int buffercount, const int channel,  const Isomode /*isomode*/,const Videomode videomode, const Framerate framerate)
00177 {
00178   if (videomode != DEVICE_DV)
00179   {
00180     internal::SMessage::getInstance()->warningStream() << "AvcVcr > Invalid videomode. This device supports only DV" << endl;
00181   }
00182 
00183   if (framerate != DEVICE_FRAMES_DV)
00184   {
00185     internal::SMessage::getInstance()->warningStream() << "AvcVcr > Invalid framerate. This device supports only DV-specific framerates" << endl;
00186   }
00187 
00188   if (! (getParentNode()->getIsoObject()) )
00189   {
00190     internal::SMessage::getInstance()->errorStream() << "AvcVcr > Invalid ISO object" << endl;
00191     return L1394_FAILED;
00192   }
00193 
00194   return getParentNode()->getIsoObject()->setParameter(buffercount, channel, 1440000);
00195 }
00196 
00197 bool AvcVcr::hasFramerate(const Videomode videomode,const Framerate framerate)
00198 {
00199   if ( (videomode == DEVICE_DV) && (framerate == DEVICE_FRAMES_DV) )
00200     return true;
00201 
00202   return false;
00203 }
00204 
00205 
00206 } //end namespace L1394

Generated on Wed Aug 24 00:36:39 2005 for L1394 by doxygen 1.4.2
L1394 library (NMM) grahics.cs.uni-sb.de/~repplix/l1394_home/