亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? diskloop.c

?? 嵌入式程序
?? C
字號:
//file name: Diskloop.c
//file description: responsible for writing data to disk
#include	"recordloop.h"
#include	"memorypool.h"
#include	"stdio.h"
#include	"kernel.h"
#include	"cleanup.h"
#include    "base.h"

#define DISK_STATE_NORMAL        0   //normal state
#define DISK_STATE_FULL          1  //disk full
#define DISK_STATE_CHANGE        2   //disk switch

#define DISK_PROCESS_CMD_DATA    1
#define DISK_PROCESS_CMD_CONTROL 2

#define DISK_PROCESS_STATE_IDLE                   0
#define DISK_PROCESS_STATE_STOPREC                1
#define DISK_PROCESS_STATE_REC                    2
#define DISK_PROCESS_STATE_STARTREC               3

#define NO_UNSAVED_FRAME -9999
#define UNSAVED_FRAME_LOST -1

static U32 newFrameTime; // the latest frame time
static S32 diskState; //disk state
static FILE *FileHandle[16];
static S32 OldestInfoFrame[16] = -1;
static S32 newInfoFrame[16] = -1;
extern CHANNEL_STATE ChState[16];
extern SYSTEM_PARA_SET   system_parameter ;
MSG_Q_ID DiskQueue;
typedef struct _DSKPRCS_MSG_STRUCT
{
	U16 sender;
    U16 cmd;                         //command
    U16 ch;                          //channel
    U16 framehead;                   //number of data piece
} DSKPRCS_MSG_STRUCT;

//function: getNewFrameTime();
//description: when data frame reach,frame time be noted by newFrameTime 
//argument: the frame head
U32 getNewFrameTime(S32 head)
{
    newFrameTime = mpGetTime(head)
    return newFrameTime;
}


//function:  getDiskstate()
//description: take note disk state when disk state switches
//argument: disk state
S32 getDiskstate(S32 dskState)
{
    diskState = dskState;
    ruturn diskState;
}

//function: diskProcess()
//description: the entry function of diskloop task
//no arguments
void diskProcess(void)
{
    S32 status;
//  int ch;
//  int framehead;
    queueInit();
    while(1)
    {

        if( receive_message( recorder_queque , sizeof( KERNEL_MESSAGE ) , ( U8 *) &msg ) < sizeof( CMD_MESSAGE ) )
            continue ;
        if(msg->cmd == DISK_PROCESS_CMD_DATA)
            putFrameIntoQueue(msg->ch, msg->framehead);
        if(mpGetType(msg->framehead) == INFO_FRAME)
            newInfoFrame[msg->ch] = msg->framehead;
        status = getDiskProcessState(msg->ch);

        switch(status)
        {
            case DISK_PROCESS_STATE_IDLE:
                DPIdleState(msg);
                break;
            case DISK_PROCESS_STATE_STOPREC:                
                DPStopRecState(msg);
                break;
            case DISK_PROCESS_STATE_REC:                    
                DPRecState(msg);
                break;
            case DISK_PROCESS_STATE_STARTREC:               
                DPStartRecState(msg);
                break;
            default:
                break;
        }
      }
}

//function: getDiskProcessState()
//description: return state of diskloop
//argument: channel
static S32 getDiskProcessState(S32 ch)
{
    S32 status;
    status  = getStatus(ch);
    if((status & 0x01 == 0) && (FileHandle[ch] == NULL))
        return DISK_PROCESS_STATE_IDLE;
    else if((status & 0x01 == 0) && (FileHandle[ch] != NULL))
        return DISK_PROCESS_STATE_STOPREC;
    else if((status & 0x01 != 0) && (FileHandle[ch] != NULL))
        return DISK_PROCESS_STATE_REC;
    else if((status & 0x01 != 0) && (FileHandle[ch] == NULL))
        return DISK_PROCESS_STATE_STARTREC;
    else 
        return DISK_PROCESS_STATE_IDLE;
}

//function: DPIdleState(DPMESSAGE msg)
//desciption: process in idle state
//argument: msg
static void DPIdleState(DPMESSAGE msg)
{

}

//function: DPStopRecState()
//description: stop recorder and close file
//argument: msg
static void DPStopRecState(DPMESSAGE *msg);
{
    S32 command;
    command = msg->command;
    switch(command)
    {
        case DISK_LOOP_CMD_DATA:
            DPCloseFile(msg);
            break;
        case DISK_LOOP_CMD_control;
            DPCloseFile(msg);
            break;
        default:
            break;
    }
}

//function: DPRecState()
//description: write data into file
//argument:   msg
static void DPRecState(DPMESSAGE *msg)
{
    S32 command;
    command = msg->command;
    switch(command)
    {
        case DISK_LOOP_CMD_DATA:
            DPWriteFile(msg);
            break;
        case DISK_LOOP_CMD_control:
            DPWriteFile(msg);
            break;
        default:
            break;
    }
}

//function: DPStartRecState()
//description: start record, open file
//argument: msg
static void DPStartRecState(DPMESSAGE *msg)
{
    int command;
    command= msg->cmd;
    switch(command)
    {
        case DISK_LOOP_CMD_DATA:
            if(DPOpenFile(msg))
            {
                if(status & 0x2 != 0)
                    savePreRec(msg->ch);
                if(newInfoFrame[msg->ch] >= 0)
                    DPWriteFile(newInfoFrame[msg->ch],msg->framehead);
                DPWriteFile(msg->ch,msg->framehead);
            }
            break;
         default:
            break;
    }
}

//function:   DPOpenFile(int ch, int framehead);
//description: open a file in which data save
//arguments:  chanel, framehead
static S32 DPOpenFile(S32 ch, S32 framehead)
{
    S32 left;
    left = getHDDLeftSpace();
    if(left <= DISK_THRESHOLD)
    {
        diskState = DISK_STATE_FULL;
        //ADD function which inform recordloop open file is error


        
        return;
    }

    //add a function     create filename




    

    
    
}

//function:  DPWriteFile(int ch, int framehead)
//description: write data to file
//arguments: chanel, framehead
static S32 DPWriteFile(S32 ch, S32 framehead)
{
    S32 left;
    left = getHDDLeftSpace();
    if(left <= DISK_THRESHOLD)
    {
        diskState = DISK_STATE_FULL;
        return 0;
    }

    ret = mpFWrite(msg->datano,FileHandle[ch]);
    if(ret < 0)
    {    
        fclose(FileHandle(ch)) ;
        FileHandle(ch) = NULL;
        DiskState = DISK_STATE_ERROR;
        return 0;
    }

    return 1;
}

//function: static int DPCloseFile(int ch)
//description: close file
//argument: chanel
static S32 DPCloseFile(S32 ch)
{
    if(fclose(FileHandle[ch]));
    {
        diskState = DISK_STATE_ERROR;
        //ADD A FUNCTION TO INFORM RECORDLOOP TO CLOSE FILE ERROR


        return 0;
    }
    //ADD A FUNCTION TO INFORM RECORDLOOP TO CLOSE FILE OK



    return 1;
    
    
}

//function:	 putFrameIntoQueue(int ch, int framehead)
//description: put frame data to prerecorder queue
//argument: chanel, framehead
static void putFrameIntoQueue(S32 ch, S32 framehead)
{
    if(queueIsFull(ch))
    {
        S32 rear;
        queueGetOut(ch, &rear);
        if(mpGetType(framehead) == INFO_FRAME)
        {
            if(OldestInfoFrame[ch] >=0)
                mpRelease(newInfoFrame[ch], MEMORY_POOL_SAVE_OK);
            newInfoFrame[ch] = rear;
        }
        else
            mpRelease(newInfoFrame[ch], MEMORY_POOL_SAVE_OK);
    }
    queuePutIn(ch,framehead);
}

//function:	static int savePreRec(int ch);
//description: save data in prerecord queue to disk
//argument:chanel
static S32 savePreRec(S32 ch)
{
    if(OldestInfoFrame[ch] >= 0)
        ret = mpFWrite(datano, FileHandle[ch]);
    while(!queueIsEmpty(ch))
    {
        S32 datano = -1;
        queueGetOut(ch,&datano);
        ret = mpFWrite(datano, FileHandle[ch]);
        mpRelease(datano, MEMORY_POOL_SAVE_OK);
        if(ret < 0)
            return ERROR;
    }
    return OK;
}
    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产亚洲一区二区三区| 欧美裸体一区二区三区| 2019国产精品| 国产成人高清在线| 中文字幕一区av| 色一区在线观看| 丝瓜av网站精品一区二区| 欧美精品久久一区| 国产精选一区二区三区| 中文幕一区二区三区久久蜜桃| 成人aa视频在线观看| 日韩美女视频一区二区| 在线观看免费视频综合| 免费观看91视频大全| 久久婷婷色综合| 91色porny蝌蚪| 日韩激情在线观看| 国产午夜精品一区二区 | 日韩—二三区免费观看av| 欧美日韩不卡一区二区| 黑人巨大精品欧美黑白配亚洲| 国产视频一区在线播放| 欧美在线色视频| 国产在线一区二区| 亚洲日本韩国一区| 欧美一区二区三区视频| 国产白丝精品91爽爽久久 | 亚洲成人av一区二区| 日韩欧美国产高清| a4yy欧美一区二区三区| 蜜芽一区二区三区| 国产精品欧美一区喷水| 欧美日韩国产乱码电影| 国内成人免费视频| 亚洲福利电影网| 欧美激情艳妇裸体舞| 在线成人av影院| 成人av影院在线| 日本成人在线不卡视频| 中文字幕亚洲电影| 26uuu久久天堂性欧美| 一本色道久久综合狠狠躁的推荐| 秋霞午夜av一区二区三区| 中文字幕在线免费不卡| 欧美一区二区久久| 在线观看一区二区视频| 国产成人午夜片在线观看高清观看| 亚洲曰韩产成在线| 中文在线免费一区三区高中清不卡| 欧美日韩aaaaa| 91欧美激情一区二区三区成人| 极品少妇xxxx精品少妇偷拍| 亚洲综合色噜噜狠狠| 综合久久一区二区三区| 久久亚洲欧美国产精品乐播| 欧美一区二区三区免费大片| 欧美中文一区二区三区| 99在线热播精品免费| 国产麻豆精品久久一二三| 美国三级日本三级久久99| 亚洲成人精品一区二区| 亚洲精品乱码久久久久久黑人 | 91麻豆成人久久精品二区三区| 人人精品人人爱| 国产麻豆成人精品| 欧洲生活片亚洲生活在线观看| 国产成人欧美日韩在线电影| 日本在线播放一区二区三区| 亚洲国产精品一区二区www在线 | 国产在线精品一区二区不卡了| 污片在线观看一区二区| 一区二区三区四区五区视频在线观看| 中文字幕av一区二区三区| 国产日韩高清在线| 久久久久99精品一区| 久久久久青草大香线综合精品| 精品美女一区二区| 欧美大黄免费观看| 欧美成人a视频| 日韩精品在线网站| 26uuu亚洲| 久久久亚洲精品一区二区三区| 欧美videossexotv100| 日韩午夜激情电影| 精品国产免费久久| 久久嫩草精品久久久久| 久久久久久久网| 日本一区二区综合亚洲| 亚洲欧美一区二区在线观看| 亚洲欧洲在线观看av| 亚洲视频一区在线| 亚洲高清一区二区三区| 日韩国产在线观看| 韩国欧美国产1区| 粉嫩欧美一区二区三区高清影视| 国产精品一区二区黑丝| 懂色av一区二区三区免费看| www.性欧美| 欧美三级视频在线观看| 日韩一级片在线播放| 国产欧美一区二区在线| 中文字幕综合网| 视频一区在线播放| 国内外成人在线| 91一区二区三区在线播放| 欧美亚洲禁片免费| 欧美mv和日韩mv国产网站| 中文字幕国产一区| 亚洲一区二区av电影| 麻豆精品在线播放| 成人av在线播放网站| 欧美日韩精品电影| wwww国产精品欧美| 一区二区在线观看视频| 免费观看日韩电影| 91网站最新网址| 日韩一区二区电影网| 国产精品第五页| 日韩激情视频网站| caoporn国产一区二区| 56国语精品自产拍在线观看| 久久精品人人做| 亚洲综合在线观看视频| 久久国产日韩欧美精品| 91影视在线播放| 欧美videos大乳护士334| 一区二区三区在线视频免费观看 | 久久久久久99久久久精品网站| 亚洲另类春色校园小说| 国产一区二区三区在线观看精品 | 成人高清免费在线播放| 欧美日韩第一区日日骚| 国产精品久久久久久福利一牛影视| 性感美女极品91精品| 欧亚洲嫩模精品一区三区| 精品国产乱码久久久久久免费| 亚洲精品中文字幕乱码三区| 国产一区二区不卡在线| 欧美精品乱人伦久久久久久| 亚洲欧美一区二区久久| 国产资源在线一区| 欧美一区二区三区色| 亚洲国产一区二区在线播放| 国产成人免费av在线| 日韩三级视频在线观看| 一区二区三区.www| 99久久国产综合精品色伊| 国产午夜精品一区二区| 精品一区二区三区影院在线午夜| 欧美亚洲高清一区二区三区不卡| 国产精品午夜春色av| 国产精品 欧美精品| 精品欧美一区二区久久| 午夜精品一区二区三区免费视频 | 国产·精品毛片| 欧美大度的电影原声| 青青草国产精品亚洲专区无| 欧美日韩精品电影| 亚洲午夜影视影院在线观看| 91视频观看视频| 中文字幕亚洲一区二区va在线| 国产大片一区二区| 国产亲近乱来精品视频| 国产精品一区专区| 2020国产精品久久精品美国| 久久成人羞羞网站| 精品国产凹凸成av人导航| 精品亚洲国产成人av制服丝袜| 欧美一区二区三区小说| 青青国产91久久久久久| 337p亚洲精品色噜噜狠狠| 天堂av在线一区| 欧美精品国产精品| 老司机精品视频导航| 日韩一级大片在线观看| 久久国产精品72免费观看| 欧美mv和日韩mv的网站| 麻豆精品视频在线| 久久久国产一区二区三区四区小说 | 欧美日韩小视频| 日韩中文字幕亚洲一区二区va在线| 欧美日韩国产天堂| 麻豆精品一区二区综合av| 日韩欧美国产精品一区| 国产精品亚洲一区二区三区在线 | 日韩欧美一级二级| 国内成人免费视频| 国产精品麻豆视频| 色综合色狠狠天天综合色| 亚洲一二三四区| 91麻豆精品国产91久久久久久 | 国产精品久久午夜| 91麻豆成人久久精品二区三区| 亚洲一区二区四区蜜桃| 成人国产精品免费网站| 亚洲欧美国产三级| 欧美高清视频www夜色资源网| 久久国产免费看| 国产精品久久久久久久久搜平片| 一本一道久久a久久精品|