Esempio n. 1
0
static cedarx_result_e vbv_add_stream_frame(vstream_data_t* stream, Handle h)
{
    vbv_t* vbv = (vbv_t*)h;
    stream_frame_t* frame;
    u32 write_index;
    u8* new_write_addr;

    if (!stream || !vbv)
        return CEDARX_RESULT_NO_INIT;
    
    if (vbv->frame_fifo.frame_num >= vbv->frame_fifo.max_frame_num) {
        printf("Warning: The fifo is full!\n");
        return CEDARX_RESULT_VBV_BUFFER_FULL;
    }
    
    if (vbv->valid_size >= vbv->max_size) {
        printf("Warning: The buffer is full!\n");
        return CEDARX_RESULT_VBV_BUFFER_FULL;
    }

    if (stream->length + vbv->valid_size > vbv->max_size) {
        printf("Warning: There are not enough memory!\n");
        return CEDARX_RESULT_VBV_BUFFER_NO_ENOUGH;
    } 
    
    pthread_mutex_lock(&vbv->mutex);

    new_write_addr = vbv->write_addr + stream->length;
    if (new_write_addr >= vbv->vbv_buf_end) { 
      u32 size = vbv->vbv_buf_end - vbv->write_addr;
      mem_cpy(vbv->write_addr, stream->data, size);
      mem_cpy(vbv->vbv_buf, stream->data + size, stream->length - size);
      new_write_addr -= vbv->max_size;
    } else {
      mem_cpy(vbv->write_addr, stream->data, stream->length);
    }

    write_index = vbv->frame_fifo.write_index;
    frame = &vbv->frame_fifo.in_frames[write_index];
    frame->vstream.data = stream->data;
    frame->vstream.length = stream->length;
    frame->vstream.pts = stream->pts;
    frame->vstream.pcr = stream->pcr;
    frame->vstream.valid = stream->valid;
    frame->vstream.stream_type = stream->stream_type;
    frame->vstream.pict_prop = stream->pict_prop;
    frame->vstream.data = vbv->write_addr;
    write_index ++;
    if (write_index >= vbv->frame_fifo.max_frame_num) {
        write_index = 0;
    }
    vbv->frame_fifo.write_index = write_index;
    vbv->frame_fifo.frame_num++;
    vbv->valid_size += stream->length;
    vbv->write_addr = new_write_addr;
    vbv_enqueue_tail(frame, &vbv->frame_queue);     //* add this frame to the queue tail.
    pthread_mutex_unlock(&vbv->mutex);
    return CEDARX_RESULT_OK;
}
Esempio n. 2
0
void Store_Op_ID(INT8U Op_ID[],INT8U *pDst, INT8U *pDst_Start, INT8U DstLen)
{
  DIS_PD_INT;
  mem_cpy(pDst, (void *)Operator_ID.Op_ID, sizeof(Operator_ID.Op_ID), pDst_Start, DstLen);
  mem_cpy((void *)Operator_ID.Op_ID, Op_ID, sizeof(Op_ID), (void *)Operator_ID.Op_ID, sizeof(Operator_ID.Op_ID));
  SET_STRUCT_SUM(Event_Data._Operator_ID);
  SET_STRUCT_SUM(Event_Data);
  EN_PD_INT;  
}
Esempio n. 3
0
void OSUptimeInfo(char *string)
{
   OSTime Uptime;
   OSDate UpDate;
   CHAR8  str[6];

   UserEnterCritical();
   Uptime = OSUptime();
   UpDate = OSUpDate();
   UserExitCritical();

   string += mem_cpy(string, "\n\rBRTOS UPTIME: ");

   // Só funciona até 255 dias
   if(UpDate.RTC_Day > 0)
   {
      string += mem_cpy(string,PrintDecimal(UpDate.RTC_Day, str));
      string += mem_cpy(string, "d ");
   }

   string += mem_cpy(string,PrintDecimal(Uptime.RTC_Hour, str));
   string += mem_cpy(string, "h ");

   string += mem_cpy(string,PrintDecimal(Uptime.RTC_Minute, str));
   string += mem_cpy(string, "m ");

   string += mem_cpy(string,PrintDecimal(Uptime.RTC_Second, str));
   string += mem_cpy(string, "s\n\r");

   // End of string
   *string = '\0';
}
Esempio n. 4
0
//================================================
static void write_mem(void)
{
	u32 addr = 0;
	u16 i = 0;
	u8 temp[4];
	u16 length = 0; 
	u32 data = 0;
	u8 crc = 0;
	FLASH_Status status = FLASH_COMPLETE;
		
	// Receive start address
	for(i=0;i<4;i++)
		temp[i] = USART_GetC();
	crc = USART_GetC();
	if(crc == (temp[0]^temp[1]^temp[2]^temp[3]))
	{
		mem_cpy(&addr,temp,4);
		USART_PutC(ACK);
		length = USART_GetC();
		length = (length<<8) | USART_GetC();
		for(i = 0;i<length;i++)
			fwBuff[i] = USART_GetC();
		crc = USART_GetC();
		// Write memmory
		FLASH_UnlockBank1();
		if(!fUpdating)
		{
			// Disable systick 
			SysTick->CTRL  &=~( SysTick_CTRL_CLKSOURCE_Msk | 
		                   SysTick_CTRL_TICKINT_Msk   | 
		                   SysTick_CTRL_ENABLE_Msk);
			status = FLASH_ErasePage(FLAG_ADDR);
			if(status == FLASH_COMPLETE)
				status = FLASH_ProgramWord(FLAG_ADDR,(u32)FLAG_UPDATING);
			fUpdating = true;
		}
		if(status == FLASH_COMPLETE)
			status = FLASH_ErasePage(addr);
		for(i = 0;i<length;i+=4)
		{
			mem_cpy(&data,&fwBuff[i],((length-i)>4?4:(length-i)));
			if(status != FLASH_COMPLETE)
				break;
			status = FLASH_ProgramWord(addr,data);			
			addr += 4;
		}
		FLASH_LockBank1();
		if(status == FLASH_COMPLETE)
			USART_PutC(ACK);
		else
			USART_PutC(NACK);
	}
	else
		USART_PutC(NACK);
}
Esempio n. 5
0
void interactive_kernel_loop() {
    char *buff = (char*) 0x10000;
    uint32_t len = 0x20000 - 0x10000;
    char *decodebuff = (char*) 0x20000;
    uint32_t decodebufflen = 0x30000 - 0x20000;
    int status = 0;
    while (1) {
        status = uart_getln(buff, len);
        if (status == 0) {
            uart_puts(uart_newline);
            if (str_startswith(buff, "b64 ")) {
                uint32_t bytes_decoded = b64_decode(buff+4, decodebuff, decodebufflen);
                uart_puts("base64 decoded #bytes: ");
                char tmp[32];
                uint32_t tmplen = ARR_LEN(tmp);
                uart_puts(str_int_to_str(bytes_decoded, tmp, tmplen));
                uart_puts(uart_newline);
                // Copy the code of bootstrap_decoded_binary somewhere safe.
                uint32_t func_len = 64; // wild guess
                mem_cpy((uint32_t)bootstrap_decoded_binary, 0x30000, func_len);
                // Call bootstrap_decoded_binary from that safe location
                BRANCHTO(0x30000);
            } else if (str_startswith(buff, "m ")) {
                inspect_memory(buff+2);
            } else if (str_startswith(buff, "r ")) {
                inspect_reg(buff+2);
            } else if (str_startswith(buff, "icky")) {
                uart_puts(yoo);
            } else if (str_startswith(buff, "usr0")) {
                if (pr0) {
                    switch_to_user_process(pr0);
                }
            } else if (str_startswith(buff, "freloc")) {
                char tmp[32];
                uint32_t tmplen = ARR_LEN(tmp);
                uint32_t func_len = ((uint32_t) str_parse_int) - ((uint32_t) str_len);
                mem_cpy((uint32_t)str_len, 0x30000, func_len);
                uart_puts(str_int_to_str(CALL_1(0x30000, "xyz"), tmp, tmplen));
            } else if (str_startswith(buff, "version")) {
                uart_puts(version);
                uart_puts("\r\n");
            } else {
                int strlen = str_len(buff) - 1;
                int j = 0;
                for (; strlen != -1; --strlen, ++j) {
                    decodebuff[j] = buff[strlen];
                }
                decodebuff[j] = 0;
                uart_puts(decodebuff);
            }
        }
        uart_puts(uart_newline);
    }
}
Esempio n. 6
0
/* ========================================================== */
static void wavefront_tran (asy::object_inst* dest, void* param,
                            const vec3d_t* rote, const vec3d_t* move,
                            const vec3d_t* scale)
{
    sWAVEFRONT*         mesh;
    const sD3D9_CALL*   call;

    call = (const sD3D9_CALL*)param;
    if (rote == NULL)
        call->util_make_tran2(&dest->tran, scale, NULL, 0.0f, move);
    else
        call->util_make_tran1(&dest->tran, scale, rote->x, rote->y, rote->z, move);
    if (dest->type == INST_TYPE_STATIC) {
        if (rote == NULL && scale == NULL) {
            mem_cpy(&dest->bound.aabb, &dest->base->aabb, sizeof(sAABB));
            if (move != NULL) {
                for (int idx = 0; idx < 8; idx++) {
                    dest->bound.aabb.v[idx].x += move->x;
                    dest->bound.aabb.v[idx].y += move->y;
                    dest->bound.aabb.v[idx].z += move->z;
                }
            }
        }
        else
        {
            vec3d_t min, max, tmp;

            // rebuild AABB box
            mesh = (sWAVEFRONT*)dest->base->real;
            call->util_tran_vec3d(&tmp, mesh->p_v, &dest->tran);
            mem_cpy(&min, &tmp, sizeof(vec3d_t));
            mem_cpy(&max, &tmp, sizeof(vec3d_t));
            for (leng_t idx = 1; idx < mesh->n_v; idx++) {
                call->util_tran_vec3d(&tmp, &mesh->p_v[idx], &dest->tran);
                if (tmp.x < min.x) min.x = tmp.x;
                if (tmp.y < min.y) min.y = tmp.y;
                if (tmp.z < min.z) min.z = tmp.z;
                if (tmp.x > max.x) max.x = tmp.x;
                if (tmp.y > max.y) max.y = tmp.y;
                if (tmp.z > max.z) max.z = tmp.z;
            }
            bound_gen_aabb(&dest->bound.aabb, &min, &max);
        }
    }
    else {  // dynamic object don't support scaling
        mem_cpy(&dest->bound.ball, &dest->base->ball, sizeof(sSPHERE));
        if (move != NULL) {
            dest->bound.ball.center.x += move->x;
            dest->bound.ball.center.y += move->y;
            dest->bound.ball.center.z += move->z;
        }
    }
}
Esempio n. 7
0
    /* ================================= */
    bool doit (void* ctx, commit_pipe* obj)
    {
        IMesh*              mesh;
        size_t              size;
        IAttrib*            attr;
        commit_unit*        list;
        crh3d9_cmmt_ctx*    parm;

        if (obj->effect != NULL)
            obj->effect->enter();
        size = obj->stuffz.size();
        list = obj->stuffz.data();
        parm = (crh3d9_cmmt_ctx*)ctx;
        for (size_t idx = 0; idx < size; idx++) {
            if (parm->inst != list->inst) {
                parm->inst  = list->inst;
                if (list->inst->flag == INST_FLAG_BILLBOARDV) {
                    mem_cpy(parm->main->get_mat<fp32_t>(), &parm->bllv, sizeof(mat4x4_t));
                    parm->main->mul_mat(&list->inst->tran);
                    parm->devs->SetTransform(D3DTS_WORLD, parm->main->get_mat<D3DMATRIX>());
                }
                else
                if (list->inst->flag == INST_FLAG_BILLBOARDH) {
                    mem_cpy(parm->main->get_mat<fp32_t>(), &parm->bllh, sizeof(mat4x4_t));
                    parm->main->mul_mat(&list->inst->tran);
                    parm->devs->SetTransform(D3DTS_WORLD, parm->main->get_mat<D3DMATRIX>());
                }
                else {
                    parm->devs->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&list->inst->tran));
                }
            }
            attr = list->unit->attr;
            if (attr != NULL) {
                attr->commit();
                parm->nv += attr->get_vnum();
                parm->nt += attr->get_tnum();
            }
            if (list->unit->mesh != NULL) {
                for (size_t ii = 0; ; ii++) {
                    mesh = list->unit->mesh[ii];
                    if (mesh == NULL)
                        break;
                    mesh->commit();
                    parm->nv += mesh->get_vnum();
                    parm->nt += mesh->get_tnum();
                }
            }
            list += 1;
        }
        return (true);
    }
Esempio n. 8
0
/*
=======================================
    显示后台缓冲
=======================================
*/
CR_API void_t
screen_copy (
  __CR_IN__ uint_t  line
    )
{
    /* 更新整个屏幕 */
    if (line >= SCREEN_LINE) {
        mem_cpy(s_front, s_backs, SCREEN_SIZE);
        return;
    }

    /* 只更新一行 */
    line *= (SCREEN_BPL * 16);
    mem_cpy(&s_front[line], &s_backs[line], SCREEN_BPL * 16);
}
/*******************************************************************************
* Function Name  : ptp_rcv_proc
* Description    : 
* Input          : 
* Output         : 
* Return         : 
*******************************************************************************/
void ptp_rcv_proc(DLL_RCV_HANDLE pd)
{
	if(pd->dll_rcv_valid)
	{
		PTP_STACK_RCV_HANDLE pptp;
		PHY_RCV_HANDLE pp;

		pptp = &_ptp_rcv_obj[pd->phase];
		pp = GET_PHY_HANDLE(pd);

		
		pptp->phase = pd->phase;
		pptp->comm_mode = (pp->phy_rcv_supposed_ch) | (pp->phy_rcv_valid & 0x0B);

		mem_cpy(pptp->src_uid,&pd->lpdu[SEC_LPDU_SRC],6);

		pptp->apdu = &pd->lpdu[SEC_LPDU_PTP_APDU];
		pptp->apdu_len = pd->lpdu_len-(LEN_LPCI+LEN_PTP_NPCI+LEN_MPCI);
		

		pptp->ptp_rcv_indication = 1;

#if NODE_TYPE == NODE_SLAVE
		set_ptp_comm_mode(pptp->comm_mode);
#else
		if(!(pptp->apdu[1] & 0x10))		//FOR DEBUG!!!
		{
			set_ptp_comm_mode(pptp->comm_mode);
		}
#endif
	}
}
Esempio n. 10
0
/**
 * Tworzy kopię segmentu.
 * @param dst deskryptor segmentu docelowego.
 * @param space przestrzeń adresowa segmentu docelowego.
 * @param src segment źródłowy.
 */
int
vm_seg_clone(vm_seg_t *dst, vm_space_t *space, vm_seg_t *src)
{
    vm_seg_create(dst, space, src->base, src->size, src->limit,
        src->prot, src->flags);
    vm_region_t *reg = NULL;
    vm_region_t *clonereg;
//     TRACE_IN("dst=%p space=%p src=%p", dst, space, src);
    while ( (reg = list_next(&src->regions, reg)) ) {
        clonereg = vm_lpool_alloc(&vm_unused_regions);
        clonereg->begin = reg->begin;
        clonereg->size = reg->size;
        clonereg->end = reg->end;
        clonereg->segment = dst;
        list_insert_tail(&dst->regions, clonereg);
//         TRACE_IN("%p-%p", clonereg->begin, clonereg->end);
        vm_pmap_fill(&space->pmap, clonereg->begin, clonereg->size,
            dst->prot);

        vm_addr_t SRC,DST;
        vm_segmap(dst, clonereg->begin, clonereg->size, &DST);
        vm_segmap(src, reg->begin, reg->size, &SRC);
        mem_cpy((void*)DST, (void*)SRC, reg->size);
        vm_unmap(DST, reg->size);
        vm_unmap(SRC, reg->size);
    }
#if 0
    TRACE_IN("present %u %u",
        vm_pmap_is_avail(&dst->space->pmap, 0xbfffff00),
        vm_pmap_is_avail(&src->space->pmap, 0xbfffff00)
    );
#endif
    return 0;
}
Esempio n. 11
0
 /* ================== */
 bool see (T* data) const
 {
     if (m_head == m_tail)
         return (false);
     mem_cpy(data, &m_list[m_head], sizeof(T));
     return (true);
 }
Esempio n. 12
0
    /* =============================================================== */
    atree_unit<T>* insert (atree_unit<T>* node, const T* obj, size_t idx)
    {
        cnode_ptr               next;
        atree_unit<T>*          nnew;
        list2<cnode_ptr>*       list;
        list2_unit<cnode_ptr>*  unit;

        nnew = struct_new(atree_unit<T>);
        if (nnew == NULL)
            return (NULL);
        next.ptr = (void*)nnew;
        list = &node->next;
        if (idx >= list->size()) {
            unit = list->append(&next);
        }
        else
        if (idx == 0) {
            unit = list->sthead(&next);
        }
        else {
            unit = list->get(idx);
            unit = list->insert(unit, &next);
        }
        if (unit == NULL) {
            mem_free(nnew);
            return (NULL);
        }
        m_cnts += 1;
        nnew->node = unit;
        nnew->uppe = node;
        nnew->deep = node->deep + 1;
        mem_cpy(&nnew->user, obj, sizeof(T));
        nnew->next.init();
        return (nnew);
    }
Esempio n. 13
0
extern Tuple *tuple_cpy(Tuple *t)
{
    Tuple *res = mem_alloc(t->size);
    mem_cpy(res, t, t->size);
    init(res);

    return res;
}
Esempio n. 14
0
void Restore_Op_ID(INT8U *pSrc)
{
  DIS_PD_INT;
  mem_cpy((void *)Operator_ID.Op_ID, pSrc, sizeof(Operator_ID.Op_ID), (void *)Operator_ID.Op_ID, sizeof(Operator_ID.Op_ID));
  SET_STRUCT_SUM(Event_Data._Operator_ID);
  SET_STRUCT_SUM(Event_Data);
  EN_PD_INT;
}
Esempio n. 15
0
/*
typedef struct
{
INT32U Chang_Plus_AcEnerg[4];            //A/B/C/SUM各元件正向有功增量:单位:0.01wh
INT32U Chang_Nega_AcEnerg[4];            //A/B/C/SUM各元件反向有功增量:单位:0.01wh

  //INT32U Chang_Plus_ReacEnerg[4];          //A/B/C/SUM各元件正向无功增量(无功组合1):单位:0.01warh  
  //INT32U Chang_Nega_ReacEnerg[4];          //A/B/C/SUM各元件反向无功增量(无功组合2):单位:0.01warh
  
	INT32U Chang_Quad_ReacEnerg[4][4];       //A/B/C/SUM各元件四象限无功增量,Chang_Quad_ReacEnerg[1][2]表示B向3象限无功
	
	  INT32U Add_AmpaHour[3];                 //AH累计:0.0001As,累计量
	  INT32U Add_CopperLoss[4];		  //A,B,C,sum铜损,单位为0.0000001kA2s,累计量
	  INT32U Add_IronLoss[4];		  //A,B,C,sum铁损,单位为0.0000001KV2s,累计量
	  INT32U Add_GenaralErr[4];		  //A,B,C,sum合成误差,单位:0.01*tgFA*s,累计量
	  INT8U CS[CS_BYTES];
}MEASU_ENERG;  
*/
INT16U Get_Measu_AcculateData_PUCK(INT8U ID,void *DstReal,void *Dst_Start,INT16U DstLen,INT16U DstMaxLen)
{

	
	mem_cpy(DstReal,(void *)(&Measu_Energ_ToPub_PUCK),sizeof(MEASU_ENERG),DstReal,DstMaxLen);
	

	return sizeof(MEASU_ENERG);  
}
Esempio n. 16
0
 /* ============ */
 bool get (T* data)
 {
     if (m_head == m_tail)
         return (false);
     mem_cpy(data, &m_list[m_head++], sizeof(T));
     if (m_head >= m_size)
         m_head = 0;
     return (true);
 }
Esempio n. 17
0
/* ========================================================================================= */
void crhack3d9_commit_fixed (asy::crh3d9_main* main, const asy::tree_l<asy::commit_pipe>* pipe)
{
    asy::crh3d9_cmmt_ctx    parm;

    parm.inst = NULL;
    parm.main = main;
    main->set_mat();
    main->set_billboardv();
    mem_cpy(&parm.bllv, main->get_mat<fp32_t>(), sizeof(mat4x4_t));
    main->set_mat();
    main->set_billboardh();
    mem_cpy(&parm.bllh, main->get_mat<fp32_t>(), sizeof(mat4x4_t));
    parm.nv = parm.nt = 0;
    parm.devs = main->get_main()->dev;
    pipe->trav_dfs<asy::crh3d9_cmmt_fixed>(&parm);
    main->m_vnum = parm.nv;
    main->m_tnum = parm.nt;
}
Esempio n. 18
0
s32 vbv_add_stream(vstream_data_t* stream, Handle vbv)
{
    u32    write_index;
    u8*    new_write_addr;
    vbv_t* v;
    
    v = (vbv_t*)vbv;

    printf("vbv add stream\n");
    if (stream == NULL || v == NULL)
    {
        return -1;
    }

    if(lock(v) != 0)
        return -1;

    if (v->frame_fifo.frame_num >= v->frame_fifo.max_frame_num)
    {
        unlock(v);
        return -1;
    }

    if (stream->length + v->valid_size > v->max_size)
    {
        unlock(v);
        return -1;
    }
    if(stream->valid == 0)
    {   
        stream->valid = 1;
    }
    write_index = v->frame_fifo.write_index;
    mem_cpy(&v->frame_fifo.in_frames[write_index].vstream, stream, sizeof(vstream_data_t));
    enqueue_to_tail(&v->frame_fifo.in_frames[write_index], &v->frame_queue);     //* add this frame to the queue tail.
    write_index++;
    if (write_index >= v->frame_fifo.max_frame_num)
    {
        write_index = 0;
    }

    v->frame_fifo.write_index = write_index;
    v->frame_fifo.frame_num++;
    v->valid_size += stream->length;

    new_write_addr = v->write_addr + stream->length;
    if (new_write_addr > v->vbv_buf_end)
    {
        new_write_addr -= v->max_size;
    }

    v->write_addr = new_write_addr;

    unlock(v);

    return 0;
}
Esempio n. 19
0
//从ROM中读出当前需量数据
void Read_Demand_Data_From_Rom()
{
  INT8U Err,Re,Rate,i;
  S_Demand *p;
  
  //先读取掉电存储区数据
  //再读普通数据
  //最后读备份区数据
  Re=CHECK_STRUCT_SUM(Cur_Rate_Info);
  if(ASSERT(A_WARNING,0!=Re))
    Check_Data_Avail();
  
  OS_Sem_Pend(PUB_BUF0_SEM_ID); 
  p=(S_Demand *)Pub_Buf0;
  if(Read_Storage_Data(CUR_DEMAND_PD,p,p,sizeof(Pub_Buf0),&Err)!=sizeof(Cur_Demand) ||\
     Check_Demand_Data((S_Demand *)p)==0)
  {
    DEBUG_PRINT(HUCK,DEBUG_0,"Read CUR_DEMAND_PD data error");
    OS_TimeDly_Ms(500);
    //读取总和当前费率需量
    for(i=0;i<2;i++)
    {
      if(i==0)
        Rate=0;//读总需量时偏移为0
      else
        Rate=Cur_Rate_Info.Rate;//非总时根据费率计算偏移

      p->Rate=Cur_Rate_Info.Rate;
      //从当前数据区读取当前和总费率的需量数据
      if(Read_Demand_Rate_Data(Rate,(void *)&p->Demand[i],(void *)&p->Demand[i],sizeof(S_One_Demand))!=ONE_DEMAND_SAVE_SIZE)
      {
        DEBUG_PRINT(HUCK,DEBUG_0,"Read CUR_DEMAND Rate %d data error",Rate);
        mem_set((void *)&p->Demand[i],0,sizeof(p->Demand[i]),(void *)&p->Demand[i],sizeof(p->Demand[i]));
      }
    }
  }

  
  if(Check_Demand_Data((S_Demand *)p)==0)
  {
    ASSERT(A_WARNING,0);
    mem_set(p,0,sizeof(Cur_Demand),p,sizeof(Pub_Buf0));
  }
  
  DIS_PD_INT;//更新Cur_Demand数据前关掉电中断
  mem_cpy((void *)&Cur_Demand,p,sizeof(Cur_Demand),(void *)&Cur_Demand,sizeof(Cur_Demand));
  INIT_STRUCT_VAR(Cur_Demand);
  SET_DATA_READY_FLAG(Cur_Demand);
  SET_STRUCT_SUM(Cur_Demand);
  EN_PD_INT;
  
  OS_Sem_Post(PUB_BUF0_SEM_ID);  
  //SET_STRUCT_SUM(Cur_Demand); 
  //更新当前存储区和备份存储区,补冻函数可能要用到这两个区,因此要保证这两个区的数据更新
  Save_Cur_Demand_Data();
  Save_Cur_Demand_Bak_Data();
}
Esempio n. 20
0
extern Tuple *tuple_dec(void *mem, int *len)
{
    *len = int_dec(mem);
    Tuple *res = mem_alloc(*len);
    mem_cpy(res, mem, *len);
    init(res);

    return res;
}
Esempio n. 21
0
    /* =================================================================== */
    atree_unit<T>* get (atree_unit<T>* node, size_t idx, T* obj = NULL) const
    {
        atree_unit<T>*          dat;
        list2_unit<cnode_ptr>*  unt;

        unt = node->next.get(idx);
        dat = static_cast<atree_unit<T>*>(unt->user.ptr);
        if (obj != NULL)
            mem_cpy(obj, &dat->user, sizeof(T));
        return (dat);
    }
Esempio n. 22
0
/*
---------------------------------------
    显示后台缓冲
---------------------------------------
*/
static bool_t
iGFX2_FB_flip (
  __CR_IN__ iGFX2*  that,
  __CR_IN__ bool_t  sync
    )
{
    iGFX2_FB*   real = (iGFX2_FB*)that;

    CR_NOUSE(sync);
    mem_cpy(real->m_main, real->__back__.data, real->m_size);
    return (TRUE);
}
Esempio n. 23
0
//获取pSrc时间点或该时间点之前的最近一个冻结时间点,包括pSrc本身所指向的时间点
//即<=pSrc指向时间的最近一个冻结时间点时间点
void Get_Last_Freeze_Time(S_HEX_Time *pSrc,S_HEX_Time *pDst)
{
  S_HEX_Time TempTime;

  Get_NowMonth_Freeze_Time(pSrc,&TempTime);//获取当月冻结时间
  if(Cmp_Time(pSrc,&TempTime)==TIME_BEF)
  {
    Time_Dec(&TempTime,1,UNIT_MON,pDst);
  }
  else
    mem_cpy(pDst,&TempTime,sizeof(TempTime),pDst,sizeof(S_HEX_Time));
}
Esempio n. 24
0
//全失压数据累加处理
//Start_Time表示起始时间,Start_Time[0]->Start_Time[4]表示分、时、日、月、年,BCD码
//End_Time表示终止时间,End_Time[0]->End_Time[4]表示分、时、日、月、年,BCD码
//上电后,对上电前的前N(N<=10)次全失压,调用该函数N次
void All_Loss_Vol_Data_Proc(INT8U Start_Time[],INT8U End_Time[], INT32U Curr)
{
    TRACE();

    Debug_Print("All_Loss_Vol Start_Time:%x-%x-%x %x:%x, End_Time:%x-%x-%x %x:%x, Curr:%ld",\
            Start_Time[4],Start_Time[3],Start_Time[2],Start_Time[1],Start_Time[0],\
            End_Time[4],End_Time[3],End_Time[2],End_Time[1],End_Time[0], Curr);
    
    All_Loss_Vol_Time.Curr = Curr; //电流
    //All_Loss_Vol_Time.Start_Time[0] = 0; //全失压发生的s
    //All_Loss_Vol_Time.End_Time[0] = 0;
    mem_cpy((INT8U *)All_Loss_Vol_Time.Start_Time, Start_Time, 6, (void *)All_Loss_Vol_Time.Start_Time,sizeof(All_Loss_Vol_Time.Start_Time));
    mem_cpy((INT8U *)All_Loss_Vol_Time.End_Time, End_Time, 6, (void *)All_Loss_Vol_Time.End_Time,sizeof(All_Loss_Vol_Time.End_Time));

    SET_STRUCT_SUM(All_Loss_Vol_Time);
    
    Event_Separate_Proc(ID_EVENT_ALL_LOSS_VOLT, EVENT_OCCUR, EVENT_REAL);
    Event_Separate_Proc(ID_EVENT_ALL_LOSS_VOLT, EVENT_END, EVENT_REAL);
    
    Write_Storage_Data(SDI_LAST_LOSS_VOL_OCCUR_TIME, (void *)All_Loss_Vol_Time.Start_Time, 6);//最近一次全失压发生和结束时刻
    Write_Storage_Data(SDI_LAST_LOSS_VOL_END_TIME, (void *)All_Loss_Vol_Time.End_Time, 6);
}
Esempio n. 25
0
//获取pSrc所指向的时间的当月的冻结时间点,当月指自然月
void Get_NowMonth_Freeze_Time(S_HEX_Time *pSrc,S_HEX_Time *pDst)
{
  INT8U Re;

  Re=1;
  Re=Check_STRUCT_Sum(pSrc,sizeof(S_HEX_Time),pSrc->CS,sizeof(pSrc->CS));
  ASSERT(A_WARNING,1==Re);
  mem_cpy(pDst->Time,pSrc->Time,sizeof(pSrc->Time),pDst->Time,sizeof(pDst->Time));
  pDst->Time[T_HOUR]=Data_Freeze_Time.DDHH[0];
  pDst->Time[T_DATE]=Data_Freeze_Time.DDHH[1];
  pDst->Time[T_MIN]=0;
  Set_STRUCT_Sum(pDst,sizeof(S_HEX_Time),pDst->CS,sizeof(pDst->CS));
}
Esempio n. 26
0
 /* ================== */
 bool init (const T* obj)
 {
     m_root = struct_new(atree_unit<T>);
     if (m_root == NULL)
         return (false);
     m_cnts = 1;
     m_root->node = NULL;
     m_root->uppe = NULL;
     m_root->deep = 0;
     mem_cpy(&m_root->user, obj, sizeof(T));
     m_root->next.init();
     return (true);
 }
Esempio n. 27
0
    /* ================== */
    bool put (const T* data)
    {
        size_t  tl = m_tail + 1;

        if (tl >= N + 1)
            tl = 0;
        if (tl == m_head)
            return (false);
        mem_cpy(&m_list[m_tail++], data, sizeof(T));
        if (m_tail >= N + 1)
            m_tail = 0;
        return (true);
    }
/*******************************************************************************
* Function Name  : ebc_inphase_confirm
* Description    : 
* Input          : 
* Output         : target_id
* Return         : 
*******************************************************************************/
STATUS ebc_inphase_confirm(EBC_BROADCAST_STRUCT * pt_ebc, ARRAY_HANDLE target_uid)
{
	EBC_BROADCAST_STRUCT ebc;
	u8 bsrf_num;

	mem_cpy((ARRAY_HANDLE)(&ebc),(ARRAY_HANDLE)(pt_ebc),sizeof(EBC_BROADCAST_STRUCT));

	ebc.bid = 0;
	ebc.window = 0;
	ebc.build_id = 0x00;

	ebc.mask = 0x09;		// uid, acphase
	mem_cpy(ebc.uid,target_uid,6);

	bsrf_num =  ebc_broadcast(&ebc);
	if(bsrf_num)
	{
		return OKAY;
	}
	else
	{
		return FAIL;
	}
}
Esempio n. 29
0
/******************************************************************
 * 获取RTC当前时间
 *****************************************************************/
void get_rtc_time(INT8U * datetime)
{
	uint8_t rtc[16];
		INT8U write_rtc[16];
		INT8U idx;
		INT8U data_len;

		data_len = (drv_R8025T_check_read(rtc));

		if(data_len == 16)
	  {
		if(rtc[0x0E]&0x02)
		{
			rtc[0x0D] = 0x00;
			rtc[0x0E] = 0x00;
		    rtc[0x0F] = 0x60;
		    drv_R8025T_write(0x0D,&rtc[0x0D],3);//正常运行读取时发现VLF位置1,则需要立即清除掉

		    DateTime2RTCBCD(datetime,rtc);
		    //写入8025T的星期是按位标识
		    mem_cpy(write_rtc,rtc,16);
		    write_rtc[3] = BCD2byte(write_rtc[3]);
		    if(write_rtc[3]==7)
		    {
		    	write_rtc[3] = 0;
		    }

		    write_rtc[3] = 1<<write_rtc[3];
		    drv_R8025T_write(0,write_rtc,7);//当VLF置1后,将当期时间写入时钟芯片
		}

		//rtc[3]是星期,8025T是按位标识的
		for(idx=0;idx<7;idx++)
		{
			if(rtc[3]&(0x01<<idx))
		    {
				break;
		    }
		}

		if(idx==0)
		{
			idx = 7;
		}
		rtc[3] = byte2BCD(idx);
		RTCBCD2DateTime(datetime,rtc);
	  }
}
Esempio n. 30
0
//读数据项DI的默认参数
INT16U Read_Def_Para(STORA_DI SDI, void* pDst, INT16U Len, void* pDst_Start, INT16U DstLen)
{
  INT16U i;

  TRACE();

  for(i = 0; i < S_NUM(Def_Para); i++)
  {
    if(SDI EQ Def_Para[i].SDI || \
       (SDI > Def_Para[i].SDI && SDI < Def_Para[i].SDI + Def_Para[i].Num))
    {
      mem_cpy(pDst, (INT8U *) Def_Para[i].pPara + (SDI - Def_Para[i].SDI) * Len, Len, pDst_Start, DstLen);
      return Len;
    }
  }
  return 0;
}