test ir controller for carozzeria audio

Dependencies:   mbed

IR test program for carozzeria audio

USB HID&赤外線ステアリングコントローラー

https://zeus3110.wordpress.com/2015/08/08/usb-hid%E8%B5%A4%E5%A4%96%E7%B7%9A%E3%82%B9%E3%83%86%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC/

回路図

https://zeus3110.wordpress.com/2015/08/13/usb-hid%E8%B5%A4%E5%A4%96%E7%B7%9A%E3%82%B9%E3%83%86%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC-%E5%9B%9E%E8%B7%AF%E5%9B%B3/

Committer:
zeus3110
Date:
Sat Aug 15 11:05:11 2015 +0000
Revision:
0:e606807a2d4a
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zeus3110 0:e606807a2d4a 1 #include "DEH970Ctrl.h"
zeus3110 0:e606807a2d4a 2
zeus3110 0:e606807a2d4a 3
zeus3110 0:e606807a2d4a 4 unsigned char VolPlus[DATA_LENGTH]={0xB5,0x4A,0x50,0xAF};
zeus3110 0:e606807a2d4a 5 //unsigned char VolPlus[DATA_LENGTH]={0x55,0xAA,0xA5,0x5A};
zeus3110 0:e606807a2d4a 6 unsigned char VolMinus[DATA_LENGTH]={0xB5,0x4A,0xD0,0x2F};
zeus3110 0:e606807a2d4a 7
zeus3110 0:e606807a2d4a 8 DEH970Controller::DEH970Controller(PwmOut *Port)
zeus3110 0:e606807a2d4a 9 {
zeus3110 0:e606807a2d4a 10 Locked=false;
zeus3110 0:e606807a2d4a 11 IRPort=Port;
zeus3110 0:e606807a2d4a 12
zeus3110 0:e606807a2d4a 13 PwmPortInit();
zeus3110 0:e606807a2d4a 14 }
zeus3110 0:e606807a2d4a 15
zeus3110 0:e606807a2d4a 16 DEH970Controller::~DEH970Controller()
zeus3110 0:e606807a2d4a 17 {
zeus3110 0:e606807a2d4a 18
zeus3110 0:e606807a2d4a 19 }
zeus3110 0:e606807a2d4a 20
zeus3110 0:e606807a2d4a 21 bool DEH970Controller::IsLocked()
zeus3110 0:e606807a2d4a 22 {
zeus3110 0:e606807a2d4a 23 return Locked;
zeus3110 0:e606807a2d4a 24 }
zeus3110 0:e606807a2d4a 25
zeus3110 0:e606807a2d4a 26 void DEH970Controller::PwmPortInit()
zeus3110 0:e606807a2d4a 27 {
zeus3110 0:e606807a2d4a 28 #ifdef DEBUG
zeus3110 0:e606807a2d4a 29 printf("PWM Port Init\n");
zeus3110 0:e606807a2d4a 30 #endif
zeus3110 0:e606807a2d4a 31 IRPort->period_us(BurstPeriod);
zeus3110 0:e606807a2d4a 32 IRPort->write(IR_OFF);
zeus3110 0:e606807a2d4a 33 }
zeus3110 0:e606807a2d4a 34
zeus3110 0:e606807a2d4a 35 void DEH970Controller::SendSignal(unsigned char *Dp)
zeus3110 0:e606807a2d4a 36 {
zeus3110 0:e606807a2d4a 37 DataBitPos=0;
zeus3110 0:e606807a2d4a 38 DataBytePos=-1;
zeus3110 0:e606807a2d4a 39 Data=Dp;
zeus3110 0:e606807a2d4a 40 DataBit=false;
zeus3110 0:e606807a2d4a 41 TimeOutIR=NULL;
zeus3110 0:e606807a2d4a 42 #ifdef DEBUG
zeus3110 0:e606807a2d4a 43 printf("SendSignal\n");
zeus3110 0:e606807a2d4a 44 #endif
zeus3110 0:e606807a2d4a 45 SendData();
zeus3110 0:e606807a2d4a 46 }
zeus3110 0:e606807a2d4a 47
zeus3110 0:e606807a2d4a 48 void DEH970Controller::SendData()
zeus3110 0:e606807a2d4a 49 {
zeus3110 0:e606807a2d4a 50 timestamp_t WaitTime;
zeus3110 0:e606807a2d4a 51
zeus3110 0:e606807a2d4a 52 if(TimeOutIR!=NULL)
zeus3110 0:e606807a2d4a 53 delete TimeOutIR;
zeus3110 0:e606807a2d4a 54
zeus3110 0:e606807a2d4a 55 TimeOutIR=new Timeout();
zeus3110 0:e606807a2d4a 56 DataBit=!DataBit;
zeus3110 0:e606807a2d4a 57
zeus3110 0:e606807a2d4a 58 #ifdef DEBUG
zeus3110 0:e606807a2d4a 59 printf("%d %d %d\n",DataBytePos,DataBitPos,DataBit);
zeus3110 0:e606807a2d4a 60 #endif
zeus3110 0:e606807a2d4a 61 // Send Leader
zeus3110 0:e606807a2d4a 62 if(DataBytePos==-1)
zeus3110 0:e606807a2d4a 63 {
zeus3110 0:e606807a2d4a 64 WaitTime=DataBit?LeaderOn:LeaderOff;
zeus3110 0:e606807a2d4a 65 IRPort->write(DataBit?IR_ON:IR_OFF);
zeus3110 0:e606807a2d4a 66 if(!DataBit)
zeus3110 0:e606807a2d4a 67 DataBytePos++;
zeus3110 0:e606807a2d4a 68 }
zeus3110 0:e606807a2d4a 69 // Send Trailer
zeus3110 0:e606807a2d4a 70 else if(DataBytePos==DATA_LENGTH)
zeus3110 0:e606807a2d4a 71 {
zeus3110 0:e606807a2d4a 72 WaitTime=DataBit?TrailerOn:TrailerOff;
zeus3110 0:e606807a2d4a 73 IRPort->write(DataBit?IR_ON:IR_OFF);
zeus3110 0:e606807a2d4a 74 if(!DataBit)
zeus3110 0:e606807a2d4a 75 DataBytePos++;
zeus3110 0:e606807a2d4a 76 }
zeus3110 0:e606807a2d4a 77 // Finish if Sent Trailer
zeus3110 0:e606807a2d4a 78 else if(DataBytePos==DATA_LENGTH+1)
zeus3110 0:e606807a2d4a 79 {
zeus3110 0:e606807a2d4a 80 #ifdef DEBUG
zeus3110 0:e606807a2d4a 81 printf("finished\n");
zeus3110 0:e606807a2d4a 82 #endif
zeus3110 0:e606807a2d4a 83 return;
zeus3110 0:e606807a2d4a 84 }
zeus3110 0:e606807a2d4a 85 // Send Data
zeus3110 0:e606807a2d4a 86 else
zeus3110 0:e606807a2d4a 87 {
zeus3110 0:e606807a2d4a 88 if(DataBit)
zeus3110 0:e606807a2d4a 89 WaitTime=DataOn;
zeus3110 0:e606807a2d4a 90 else
zeus3110 0:e606807a2d4a 91 WaitTime=((((int)Data[DataBytePos])&(0x00000080>>DataBitPos))==0)?DataOff0:DataOff1;
zeus3110 0:e606807a2d4a 92 #ifdef DEBUG2
zeus3110 0:e606807a2d4a 93 printf("%x\n",(((int)Data[DataBytePos])&(0x00000080>>DataBitPos))!=0);
zeus3110 0:e606807a2d4a 94 #endif
zeus3110 0:e606807a2d4a 95 IRPort->write(DataBit?IR_ON:IR_OFF);
zeus3110 0:e606807a2d4a 96 if(!DataBit)
zeus3110 0:e606807a2d4a 97 { DataBitPos=(DataBitPos+1)%8;
zeus3110 0:e606807a2d4a 98 if(DataBitPos==0)
zeus3110 0:e606807a2d4a 99 DataBytePos++;
zeus3110 0:e606807a2d4a 100 }
zeus3110 0:e606807a2d4a 101 }
zeus3110 0:e606807a2d4a 102
zeus3110 0:e606807a2d4a 103 TimeOutIR->attach_us(this,&DEH970Controller::SendData,WaitTime);
zeus3110 0:e606807a2d4a 104 }
zeus3110 0:e606807a2d4a 105
zeus3110 0:e606807a2d4a 106 void DEH970Controller::SendVolPlus()
zeus3110 0:e606807a2d4a 107 {
zeus3110 0:e606807a2d4a 108 #ifdef DEBUG
zeus3110 0:e606807a2d4a 109 printf("Send Vol Plus\n");
zeus3110 0:e606807a2d4a 110 #endif
zeus3110 0:e606807a2d4a 111 SendSignal(VolPlus);
zeus3110 0:e606807a2d4a 112 }
zeus3110 0:e606807a2d4a 113
zeus3110 0:e606807a2d4a 114 void DEH970Controller::SendVolMinus()
zeus3110 0:e606807a2d4a 115 {
zeus3110 0:e606807a2d4a 116 SendSignal(VolMinus);
zeus3110 0:e606807a2d4a 117 }