![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
テストモード追加、LED有効化 left -> SerialRX, Data Recieve Complete , Serial Tx , Light Tx
Dependencies: XBee mbed NetServicesMin
Diff: frame_layer/layer_frame.cpp
- Revision:
- 1:36eb173eb52b
- Parent:
- 0:42adca80439c
- Child:
- 2:dec6319cf02c
--- a/frame_layer/layer_frame.cpp Thu Mar 22 12:40:48 2012 +0000 +++ b/frame_layer/layer_frame.cpp Sun Apr 15 13:09:53 2012 +0000 @@ -3,7 +3,7 @@ #include "config.h" #include "culc_crc16.h" #include "layer_frame.h" - +#include "data_models.h" #include "leds.h" #include "serialRecieve.h" @@ -26,12 +26,30 @@ volatile float txMin; volatile float txMid; -//Ticker carrierWave; + AnalogOut dac(p18); +DigitalOut lightPowerOn(p8); +DigitalOut out(p19); -void setTxLevel(uint8_t _gain , uint8_t _mid) +extern PrefSender spref; + + +void lightIlluminateChange(uint8_t _sw){ + + if(_sw == 0){ + lightPowerOn=0; + } + else{ + lightPowerOn=1; + } + +} + +void setTxLevel(TxGainData *_data) { + uint8_t _gain = _data->gain; + uint8_t _mid = _data->middleLevel; if( (_mid > 10) || (_mid <1) ) return; if(_gain > 10) return; @@ -81,7 +99,7 @@ void preambleGenerator(){ symbolCode = 4; - while( pulseCounter <=77 ) {readProcess();} + while( pulseCounter <=96 ) {readProcess();} pulseCounter = 0; } @@ -116,8 +134,8 @@ else pulseState = -1; - if(pulseState<0) dac = txMax; - else dac = txMin; + if(pulseState<0) { out = 1; dac = txMax; } + else { out = 0; dac = txMin; } } extern "C" void TIMER1_IRQHandler (void) @@ -134,35 +152,36 @@ case 0: { if( pulseCounter <= 6) pulseGenerator(); - else dac=txMid; + else { out = 0; dac=txMid;} } break; case 2: { if( (pulseCounter > 6)&(pulseCounter <= 12) ) pulseGenerator(); - else dac=txMid; + else { out = 0; dac=txMid;} } break; case 1: { if( (pulseCounter > 12)&(pulseCounter <= 18) ) pulseGenerator(); - else dac=txMid; + else { out = 0; dac=txMid;} } break; case 3: { if( (pulseCounter > 18)&(pulseCounter <= 24 )) pulseGenerator(); - else dac=txMid; + else { out = 0; dac=txMid;} } break; case 4: { - if( pulseCounter <= 18) pulseGenerator(); - else dac=txMid; + // if( pulseCounter <= 18 ) pulseGenerator(); + if( (pulseCounter > 18) & (pulseCounter <= 36) ) pulseGenerator(); + else { out = 0; dac=txMid;} } break; @@ -171,58 +190,91 @@ } - - void initCarrierWave(){ +void initCarrierWave(){ dac = kDAC_OFF; + out=0; pulseCounter=0; symbolCode = 0; pulseState = -1; - setTxLevel( kTxGain , kTxMidLevel ); + spref.gainData.gain = kTxGain; + spref.gainData.middleLevel = kTxMidLevel; + + setTxLevel( &spref.gainData ); - isSend=false; - isSendContinueous=false; + spref.lightsw=1; + lightIlluminateChange(spref.lightsw); + + spref.isSend=0; + spref.continueusMode=0; + + sendedFrameNumber=0xffff; timer1_init(); - initPayload(&sendedPayload); + // initPayload(&sendedPayload); } + void sendPayload(Payload *_payload){ - if(isSend) return; + #ifdef _SERVER_TEST_MODE_ + dumpPayload(_payload); + #endif - Frame *frame=&_payload->frame; + makedata(_payload); + + ledLightTx(); - if( frame->message.frameNumber != sendedFrameNumber ){ + for(uint8_t i=0 ; i < kContSendNum ; i++){ + sendbuff(); + } + +} + +void makedata(Payload *_payload ){ + + uint16_t fNum= _payload->frame.message.frameNumber; - sendedFrameNumber = frame->message.frameNumber; +// printf("\n------------------- fnum:%0X\n",fNum); + if( fNum != sendedFrameNumber ){ + + sendedFrameNumber = fNum; memcpy(&sendedPayload,_payload,sizeof(Payload)); + sendedPayload.frame.message.sum = culcSum(&sendedPayload); + + Payload tmp; + memcpy(&tmp,&sendedPayload,sizeof(Payload)); + + Frame *frame=&tmp.frame; + + payloadToNetwork(&tmp); +// dumpPayload(&tmp); uint16_t crc = 0xffff; uint8_t index=0; //frame type - buff[index]=_payload->ftype; + buff[index]=tmp.ftype; crc = One_Byte_CRC16_Calc( crc , buff[index]); index++; - uint8_t *tmp=(uint8_t*)&frame->id; + uint8_t *data=(uint8_t*)&frame->id; //id for(int8_t i=15 ; i>=0 ;i--){ - buff[index]=tmp[i]; + buff[index]=data[i]; crc = One_Byte_CRC16_Calc( crc , buff[index]); index++; } - + //message - tmp=(uint8_t*)&frame->message; + data=(uint8_t*)&frame->message; for(int8_t i=47 ; i>=0 ;i--){ - buff[index]=tmp[i]; + buff[index]=data[i]; crc = One_Byte_CRC16_Calc( crc , buff[index]); index++; } @@ -233,30 +285,20 @@ buff[index] =(uint8_t)(crc>>8); } -// for(int i=0;i<67;i++) printf("%02X ",buff[i]); -// printf("\r\n"); - ledDevice(); - - for(uint8_t i=0 ; i<kContSendNum ; i++) - { - preambleGenerator(); - for(uint16_t i=0 ; i<67 ; i++) sendByteData( buff[i] ); -// printf("\r\n+++++++++\r\n"); - } - - isSend=false; - } -void swapPayloadData(Payload *_payload) -{ - uint8_t *org=(uint8_t*)_payload; - uint8_t *tmp=(uint8_t*)&sendedPayload; - - uint8_t i; - for(i=0 ; i<16 ;i++) tmp[i+2]=org[17-i]; - for(i=0 ; i<48 ;i++) tmp[i+18]=org[65-i]; +void sendComp(void){ + isSend=false; } +void sendbuff(void){ + if(isSend) return; +// ledDevice(); + + isSend=true; + preambleGenerator(); + for(uint16_t i=0 ; i<67 ; i++) sendByteData( buff[i] ); + isSend=false; +}