zeus 3110
/
IRTest2
test ir controller for carozzeria audio
IR test program for carozzeria audio
USB HID&赤外線ステアリングコントローラー
回路図
DEH970Ctrl.cpp@0:e606807a2d4a, 2015-08-15 (annotated)
- Committer:
- zeus3110
- Date:
- Sat Aug 15 11:05:11 2015 +0000
- Revision:
- 0:e606807a2d4a
test
Who changed what in which revision?
User | Revision | Line number | New 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 | } |