Files
ANSCORE/MediaClient/bm/sys_buf.cpp

202 lines
4.1 KiB
C++

/***************************************************************************************
*
* IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
* Copyright (C) 2014-2024, Happytimesoft Corporation, all rights reserved.
*
* Redistribution and use in binary forms, with or without modification, are permitted.
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
* language governing permissions and limitations under the License.
*
****************************************************************************************/
#include "sys_inc.h"
#include "sys_buf.h"
/***************************************************************************************/
PPSN_CTX * net_buf_fl = NULL;
PPSN_CTX * hdrv_buf_fl = NULL;
static int net_buffer_init_count = 0;
static int hdrv_buf_init_count = 0;
/***************************************************************************************/
HT_API BOOL net_buf_init(int num, int size)
{
net_buffer_init_count++;
if (net_buf_fl)
{
return TRUE;
}
net_buf_fl = pps_ctx_fl_init(num, size, TRUE);
if (net_buf_fl == NULL)
{
return FALSE;
}
log_print(HT_LOG_INFO, "%s, num = %lu\r\n", __FUNCTION__, net_buf_fl->node_num);
return TRUE;
}
HT_API char * net_buf_get_idle()
{
return (char *)pps_fl_pop(net_buf_fl);
}
HT_API void net_buf_free(char * rbuf)
{
if (rbuf == NULL)
{
return;
}
if (pps_safe_node(net_buf_fl, rbuf))
{
pps_fl_push_tail(net_buf_fl, rbuf);
}
else
{
free(rbuf);
}
}
HT_API uint32 net_buf_get_size()
{
if (net_buf_fl == NULL)
{
return 0;
}
return (net_buf_fl->unit_size - sizeof(PPSN));
}
HT_API uint32 net_buf_idle_num()
{
if (net_buf_fl == NULL)
{
return 0;
}
return net_buf_fl->node_num;
}
HT_API void net_buf_deinit()
{
net_buffer_init_count--;
if (net_buffer_init_count == 0) {
if (net_buf_fl)
{
pps_fl_free(net_buf_fl);
net_buf_fl = NULL;
}
}
if (net_buffer_init_count < 0)net_buffer_init_count=0;//Reset
}
HT_API BOOL hdrv_buf_init(int num)
{
hdrv_buf_init_count++;
if (hdrv_buf_fl)
{
return TRUE;
}
hdrv_buf_fl = pps_ctx_fl_init(num, sizeof(HDRV), TRUE);
if (hdrv_buf_fl == NULL)
{
return FALSE;
}
log_print(HT_LOG_INFO, "%s, num = %lu\r\n", __FUNCTION__, hdrv_buf_fl->node_num);
return TRUE;
}
HT_API void hdrv_buf_deinit()
{
hdrv_buf_init_count--;
if (hdrv_buf_init_count == 0) {
if (hdrv_buf_fl)
{
pps_fl_free(hdrv_buf_fl);
hdrv_buf_fl = NULL;
}
}
if (hdrv_buf_init_count < 0)hdrv_buf_init_count = 0;
}
HT_API HDRV * hdrv_buf_get_idle()
{
HDRV * p_ret = (HDRV *)pps_fl_pop(hdrv_buf_fl);
return p_ret;
}
HT_API void hdrv_buf_free(HDRV * pHdrv)
{
if (pHdrv == NULL)
{
return;
}
pHdrv->header[0] = '\0';
pHdrv->value_string = NULL;
pps_fl_push(hdrv_buf_fl, pHdrv);
}
HT_API uint32 hdrv_buf_idle_num()
{
if (NULL == hdrv_buf_fl)
{
return 0;
}
return hdrv_buf_fl->node_num;
}
HT_API void hdrv_ctx_ul_init(PPSN_CTX * ul_ctx)
{
pps_ctx_ul_init_nm(hdrv_buf_fl, ul_ctx);
}
HT_API void hdrv_ctx_free(PPSN_CTX * p_ctx)
{
HDRV * p_free;
if (p_ctx == NULL)
{
return;
}
p_free = (HDRV *)pps_lookup_start(p_ctx);
while (p_free != NULL)
{
HDRV * p_next = (HDRV *)pps_lookup_next(p_ctx, p_free);
pps_ctx_ul_del(p_ctx, p_free);
hdrv_buf_free(p_free);
p_free = p_next;
}
pps_lookup_end(p_ctx);
}
HT_API BOOL sys_buf_init(int nums)
{
if (net_buf_init(nums, 2048) == FALSE)
{
log_print(HT_LOG_ERR, "%s, net_buf_init failed!!!\r\n", __FUNCTION__);
return FALSE;
}
if (hdrv_buf_init(8*nums) == FALSE)
{
log_print(HT_LOG_ERR, "%s, hdrv_buf_init failed!!!\r\n", __FUNCTION__);
return FALSE;
}
return TRUE;
}
HT_API void sys_buf_deinit()
{
net_buf_deinit();
hdrv_buf_deinit();
}