__interrupt void Port1_ISR(void) { if (P1IFG & AFE_DRDY_PIN) { P1IFG &= ~AFE_DRDY_PIN; // Clear DRDY flag long new_data[12]; AFE_Read_Data(&new_data[0]); loffStat = AFE_getLoffStatus(); ADC10_Read_Data(&new_data[8]); addBatteryData(new_data[11]); ADC10_Measure(); if(packetAddNewData(new_data)){ packetDataReady = 1; __bic_SR_register_on_exit(CPUOFF); // Не возвращаемся в сон при выходе } } }
status_t BnMediaPlayerService::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { switch (code) { case CREATE: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IMediaPlayerClient> client = interface_cast<IMediaPlayerClient>(data.readStrongBinder()); int audioSessionId = data.readInt32(); sp<IMediaPlayer> player = create(client, audioSessionId); reply->writeStrongBinder(player->asBinder()); return NO_ERROR; } break; case DECODE_URL: { CHECK_INTERFACE(IMediaPlayerService, data, reply); const char* url = data.readCString(); uint32_t sampleRate; int numChannels; audio_format_t format; sp<IMemory> player = decode(url, &sampleRate, &numChannels, &format); reply->writeInt32(sampleRate); reply->writeInt32(numChannels); reply->writeInt32((int32_t) format); reply->writeStrongBinder(player->asBinder()); return NO_ERROR; } break; case DECODE_FD: { CHECK_INTERFACE(IMediaPlayerService, data, reply); int fd = dup(data.readFileDescriptor()); int64_t offset = data.readInt64(); int64_t length = data.readInt64(); uint32_t sampleRate; int numChannels; audio_format_t format; sp<IMemory> player = decode(fd, offset, length, &sampleRate, &numChannels, &format); reply->writeInt32(sampleRate); reply->writeInt32(numChannels); reply->writeInt32((int32_t) format); reply->writeStrongBinder(player->asBinder()); return NO_ERROR; } break; case CREATE_MEDIA_RECORDER: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IMediaRecorder> recorder = createMediaRecorder(); reply->writeStrongBinder(recorder->asBinder()); return NO_ERROR; } break; case CREATE_METADATA_RETRIEVER: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IMediaMetadataRetriever> retriever = createMetadataRetriever(); reply->writeStrongBinder(retriever->asBinder()); return NO_ERROR; } break; case GET_OMX: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IOMX> omx = getOMX(); reply->writeStrongBinder(omx->asBinder()); return NO_ERROR; } break; case MAKE_CRYPTO: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<ICrypto> crypto = makeCrypto(); reply->writeStrongBinder(crypto->asBinder()); return NO_ERROR; } break; case MAKE_DRM: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IDrm> drm = makeDrm(); reply->writeStrongBinder(drm->asBinder()); return NO_ERROR; } break; case MAKE_HDCP: { CHECK_INTERFACE(IMediaPlayerService, data, reply); bool createEncryptionModule = data.readInt32(); sp<IHDCP> hdcp = makeHDCP(createEncryptionModule); reply->writeStrongBinder(hdcp->asBinder()); return NO_ERROR; } break; case ADD_BATTERY_DATA: { CHECK_INTERFACE(IMediaPlayerService, data, reply); uint32_t params = data.readInt32(); addBatteryData(params); return NO_ERROR; } break; case PULL_BATTERY_DATA: { CHECK_INTERFACE(IMediaPlayerService, data, reply); pullBatteryData(reply); return NO_ERROR; } break; case LISTEN_FOR_REMOTE_DISPLAY: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IRemoteDisplayClient> client( interface_cast<IRemoteDisplayClient>(data.readStrongBinder())); String8 iface(data.readString8()); sp<IRemoteDisplay> display(listenForRemoteDisplay(client, iface)); reply->writeStrongBinder(display->asBinder()); return NO_ERROR; } break; case UPDATE_PROXY_CONFIG: { CHECK_INTERFACE(IMediaPlayerService, data, reply); const char *host = NULL; int32_t port = 0; const char *exclusionList = NULL; if (data.readInt32()) { host = data.readCString(); port = data.readInt32(); exclusionList = data.readCString(); } reply->writeInt32(updateProxyConfig(host, port, exclusionList)); return OK; } default: return BBinder::onTransact(code, data, reply, flags); } }
status_t BnMediaPlayerService::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { switch(code) { case CREATE: { CHECK_INTERFACE(IMediaPlayerService, data, reply); pid_t pid = data.readInt32(); sp<IMediaPlayerClient> client = interface_cast<IMediaPlayerClient>(data.readStrongBinder()); int audioSessionId = data.readInt32(); sp<IMediaPlayer> player = create(pid, client, audioSessionId); reply->writeStrongBinder(player->asBinder()); return NO_ERROR; } break; case DECODE_URL: { CHECK_INTERFACE(IMediaPlayerService, data, reply); const char* url = data.readCString(); uint32_t sampleRate; int numChannels; int format; sp<IMemory> player = decode(url, &sampleRate, &numChannels, &format); reply->writeInt32(sampleRate); reply->writeInt32(numChannels); reply->writeInt32(format); reply->writeStrongBinder(player->asBinder()); return NO_ERROR; } break; case DECODE_FD: { CHECK_INTERFACE(IMediaPlayerService, data, reply); int fd = dup(data.readFileDescriptor()); int64_t offset = data.readInt64(); int64_t length = data.readInt64(); uint32_t sampleRate; int numChannels; int format; sp<IMemory> player = decode(fd, offset, length, &sampleRate, &numChannels, &format); reply->writeInt32(sampleRate); reply->writeInt32(numChannels); reply->writeInt32(format); reply->writeStrongBinder(player->asBinder()); return NO_ERROR; } break; case CREATE_MEDIA_RECORDER: { CHECK_INTERFACE(IMediaPlayerService, data, reply); pid_t pid = data.readInt32(); sp<IMediaRecorder> recorder = createMediaRecorder(pid); reply->writeStrongBinder(recorder->asBinder()); return NO_ERROR; } break; case CREATE_METADATA_RETRIEVER: { CHECK_INTERFACE(IMediaPlayerService, data, reply); pid_t pid = data.readInt32(); sp<IMediaMetadataRetriever> retriever = createMetadataRetriever(pid); reply->writeStrongBinder(retriever->asBinder()); return NO_ERROR; } break; case GET_OMX: { CHECK_INTERFACE(IMediaPlayerService, data, reply); sp<IOMX> omx = getOMX(); reply->writeStrongBinder(omx->asBinder()); return NO_ERROR; } break; case ADD_BATTERY_DATA: { CHECK_INTERFACE(IMediaPlayerService, data, reply); uint32_t params = data.readInt32(); addBatteryData(params); return NO_ERROR; } break; case PULL_BATTERY_DATA: { CHECK_INTERFACE(IMediaPlayerService, data, reply); pullBatteryData(reply); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } }
__interrupt void TimerA_ISR(void) { TACTL &= ~TAIFG; if(rfResetCntr == 0x01){ P3OUT |= BIT7;//BT reset pin hi rfResetCntr = 0; } if(isRecording){ if(resetTimeout){ pingCntr++; if(pingCntr > resetTimeout){//no signal from host for ~ resetTimeout * 4 seconds P3OUT &= ~BIT7; //BT reset pin lo if (rfResetCntr == 0)rfResetCntr = 1; pingCntr = 0; } } }else{//if not recording long new_data[4]; ADC10_Read_Data(&new_data[0]); addBatteryData(new_data[3]); ADC10_Measure(); } if(!(BIT5 & P2IN)){// if power button pressed btnCntr++; }else{ btnCntr = 0; } if(BIT0 & P1IN){// if rf connected rfConStat = 1; }else{ rfConStat = 0; } if(!(BIT4 & P2IN)){// if charge plug connected if(shutDownCntr == 0){ shutDownCntr = 1; rf_send(chargeShutDownMessage,5); } } if(btnCntr >= (4)){ //1 сек задержка перед выключением led(1); P1OUT &= ~BIT6; //power hold pin while(1){} //ждем отпускания кнопки } if(!lowBatteryMessageAlreadySent){ if(sumBatteryVoltage < BATT_LOW_TH){ lowBatteryMessageAlreadySent = 1; rf_send(lowBatteryMessage,7); if (shutDownCntr == 0) shutDownCntr = 1; } } if(shutDownCntr){ shutDownCntr++; if(shutDownCntr > 4){//wait 1 second before shut down P1OUT &= ~BIT6; //power hold pin } } if(powerUpCntr){ powerUpCntr++; if(powerUpCntr >= 2400){//забыли выключить питание (не стартует запись в теечение ~10 минут) P1OUT &= ~BIT6; //отключаем питание } if(powerUpCntr%2){ led(1); }else{ led(0); } } if(rf_delete_unfinished_incoming_messages()){ rf_send(unfinishedIncomingMsgError,7); } if(rf_tx_fail_flag){//debug information maybe delete rf_tx_fail_flag = 0; rf_send(txFailError,7); } }
__interrupt void TimerA_ISR(void) { TACTL &= ~TAIFG; if (rfResetCntr == 0x01) { P3OUT |= BIT7; // BT reset pin hi rfResetCntr = 0; } if (isRecording && rfConStat) { if (resetTimeout) { pingCntr++; if (pingCntr > resetTimeout) { // no signal from host for ~ resetTimeout * 4 seconds P3OUT &= ~BIT7; // BT reset pin lo if (rfResetCntr == 0) rfResetCntr = 1; pingCntr = 0; } } } else { // if not recording long new_data[4]; ADC10_Read_Data(&new_data[0]); addBatteryData(new_data[3]); ADC10_Measure(); } if (BIT0 & P1IN) // if rf connected rfConStat = 1; else rfConStat = 0; if (!lowBatteryMessageAlreadySent) { if (sumBatteryVoltage < BATT_LOW_TH) { lowBatteryMessageAlreadySent = 1; rf_send(lowBatteryMessage, 7); if(shutDownCntr == 0) shutDownCntr = 1; } } if (powerUpCntr) { powerUpCntr++; if (powerUpCntr >= 2400) // забыли выключить питание (не стартует запись в теечение ~10 минут) { if (shutDownCntr == 0) shutDownCntr = 1; } if (powerUpCntr % 2) led(1); else led(0); } if (shutDownCntr) { shutDownCntr++; if (shutDownCntr > 4) { // wait 1 second before shut down AFE_StopRecording(); P3OUT &= ~BIT7; // BT reset pin low TACCR0 = 0x00; led(0); } } if (rf_delete_unfinished_incoming_messages()) rf_send(unfinishedIncomingMsgError, 7); if(rf_tx_fail_flag) { // debug information maybe delete rf_tx_fail_flag = 0; rf_send(txFailError, 7); } }