Ejemplo n.º 1
0
void __attribute__((naked,noinline)) capt_seq_hook_raw_here()
{
 asm volatile("STMFD   SP!, {R0-R12,LR}\n");

    raw_save_stage = RAWDATA_AVAILABLE;
    core_rawdata_available();
    while (raw_save_stage != RAWDATA_SAVED){
	_SleepTask(10);
    }

 asm volatile("LDMFD   SP!, {R0-R12,PC}\n");
}
Ejemplo n.º 2
0
void shutdown() {
//***TODO***
/*
    volatile long *p = (void*)0xC022001C;

    asm(
        "MRS     R1, CPSR\n"
        "AND     R0, R1, #0x80\n"
        "ORR     R1, R1, #0x80\n"
        "MSR     CPSR_cf, R1\n"
        :::"r1","r0"
    );

    *p = 0x44;  // power off.
*/
    while(1)   _SleepTask(500);
}
Ejemplo n.º 3
0
/*
called by ptp task (via remotecap.c code) to fetch chunks of jpeg data
*/
int filewrite_get_jpeg_chunk(char **addr,int *size,unsigned n,int *pos) {
    *pos=-1;
#if !defined(CAM_FILEWRITETASK_MULTIPASS)
    // TODO null should probably be an error
    if (n >= MAX_CHUNKS_FOR_JPEG || jpeg_chunks == NULL) {
        *addr=(char *)0xFFFFFFFF; // signals last chunk
        *size=0;
        return REMOTECAP_JPEG_CHUNK_STATUS_LAST; // last chunk
    }
    *addr=(char *)jpeg_chunks[n].address;
    *size=jpeg_chunks[n].length;
    if (n < MAX_CHUNKS_FOR_JPEG-1) {
        if (jpeg_chunks[n+1].length==0) {
            return REMOTECAP_JPEG_CHUNK_STATUS_LAST; // last chunk
        }
        return REMOTECAP_JPEG_CHUNK_STATUS_MORE; // not last chunk
    }
    return REMOTECAP_JPEG_CHUNK_STATUS_LAST; // last chunk
#else
    if ( jpeg_chunks == NULL ) { //do we have a valid queue?
        int m=50;
        while (m>0) { //wait for at most 500ms
            _SleepTask(10);
            m--;
            if ( jpeg_chunks != NULL ) break;
        }
        if ( jpeg_chunks == NULL ) { //timeout, error
            *addr=(char *)0;
            *size=0;
            return REMOTECAP_JPEG_CHUNK_STATUS_LAST;
        }
    }
    *addr=(char *)jpeg_chunks[jpeg_curr_session_chunk].address;
    *size=jpeg_chunks[jpeg_curr_session_chunk].length;
#ifdef CAM_FILEWRITETASK_SEEKS
    if ( n == 0 ) { // first chunk for this shot
        jpeg_bytes_left = jpeg_full_size;
    }
    jpeg_bytes_left -= *size;
    if (jpeg_curr_session_chunk == 0) {
        *pos=jpeg_file_offset; //only post file offset for the first chunk in the current queue
    }
#else
    if ((jpeg_curr_session_chunk==0) && (jpeg_last_session)) {
        *pos=0; //only post file offset for the first chunk in the last queue
    }
#endif
    jpeg_curr_session_chunk++;
#ifdef CAM_FILEWRITETASK_SEEKS
    if (jpeg_bytes_left>0) {
        if ( jpeg_curr_session_chunk < MAX_CHUNKS_FOR_JPEG ) {
            if (jpeg_chunks[jpeg_curr_session_chunk].length==0) { //last chunk of the current queue
                return REMOTECAP_JPEG_CHUNK_STATUS_SESS_LAST;
            }
            return REMOTECAP_JPEG_CHUNK_STATUS_MORE; //not last
        }
        else {
            return REMOTECAP_JPEG_CHUNK_STATUS_SESS_LAST;
        }
    }
#else
    if ( jpeg_curr_session_chunk < MAX_CHUNKS_FOR_JPEG ) {
        if (jpeg_chunks[jpeg_curr_session_chunk].length==0) { //last chunk of the current queue
            if (jpeg_last_session) {
                return REMOTECAP_JPEG_CHUNK_STATUS_LAST;
            }
            else {
                return REMOTECAP_JPEG_CHUNK_STATUS_SESS_LAST;
            }
        }
        return REMOTECAP_JPEG_CHUNK_STATUS_MORE; //not last
    }
    else {
        if (jpeg_last_session) {
            return REMOTECAP_JPEG_CHUNK_STATUS_LAST;
        }
        else {
            return REMOTECAP_JPEG_CHUNK_STATUS_SESS_LAST;
        }
    }
#endif
    return REMOTECAP_JPEG_CHUNK_STATUS_LAST; //last
#endif //CAM_FILEWRITETASK_MULTIPASS
}
Ejemplo n.º 4
0
void msleep(long msec)
{
    _SleepTask(msec);
}