★ PROGRAMMER'S GUIDE ★ Stream system libraryUint8 work [STM_WORK_SIZE (STMGRP_OPEN_MAX, STM_OPEN_MAX)]; / * Work area * / Sint32 a_id, b_id, c_id; / * File identifier * / StmGrpHn abc_grp; / * Stream group handle * / StmHn a_stm, b_stm, c_stm; / * Stream handle * / StmKey key; / * Stream key * / Uint8 a_buf [A_BUFSIZE * STM_UNIT_FORM1]; / * Transfer area A * / Uint8 b_buf [B_BUFSIZE * STM_UNIT_FORM2]; / * Transfer area B * / Uint8 c_buf [C_BUFSIZE * STM_UNIT_FORM1]; / * Transfer area C * /GFS_Init (...); / * File system initialization * / STM_Init (STMGRP_OPEN_MAX, STM_OPEN_MAX, work); / * Stream system initialization * / a_id = GFS_NameToId (・ ・ ・); / * Get file identifier * / ・ ・ ・ abc_grp = STM_OpenGrp (); / * Open stream group * / / * Stream key settings * / STM_KEY_CN (& key) = STM_KEY_NONE; / * Channel number * / STM_KEY_CIMSK (& key) = STM_KEY_CIVAL (& key) = STM_KEY_NONE; / * Coding information * / / * Opening a stream by file identifier * / STM_KEY_SMMSK (& key) = STM_KEY_SMVAL (& key) = STM_SM_VIDEO; / * Video stream * / a_stm = STM_OpenFid (abc_grp, a_id, & key, STM_LOOP_NOREAD); / * Stream A * / STM_KEY_SMMSK (& key) = STM_KEY_SMVAL (& key) = STM_SM_AUDIO; / * Audio stream * / b_stm = STM_OpenFid (abc_grp, b_id, & key, STM_LOOP_NOREAD); / * Stream B * / STM_KEY_SMMSK (& key) = STM_KEY_SMVAL (& key) = STM_SM_DATA; / * Data stream * / c_stm = STM_OpenFid (abc_grp, c_id, & key, STM_LOOP_NOREAD); / * Stream C * /
/ * Transfer area settings * / STM_SetTrBuf (a_stm, a_buf, A_BUFSIZE, STM_UNIT_FORM1); STM_SetTrBuf (b_stm, b_buf, B_BUFSIZE, STM_UNIT_FORM2); STM_SetTrBuf (c_stm, c_buf, C_BUFSIZE, STM_UNIT_FORM1);
/ * Stream access * / STM_SetExecGrp (abc_grp); / * Execution group setting * / while (1) { if (STM_ExecServer () == STM_EXEC_COMPLETED) { break; / * End of stream access * / } user (); / * User processing * / } STM_CloseGrp (abc_grp); / * Close stream group * /
Figure 5.1 Transfer processing in sector units
Figure 5.2 Transfer processing when not in sector units
Uint8 read_buf [READBUF_SIZE];
Sint32 decodeFunc (void * obj, StmHn stm, Sint32 nsct)
{
Sint32 i;
Sint32 read_len; / * Number of long words transferred by subFunc * /
Sint32 nlongword; / * Number of long words transferred * /
Uint32 * src; / * Forwarding address * /
Sint32 dadr; / * 1 Address / change for each longword transfer * /
Uint32 * buffer; / * Transfer area * /
/ * Conversion from number of sectors to number of words (call before transfer starts) * /
nlongword = STM_SctToWord (stm, nsct) / 2;
src = STM_StartTrans (stm, & dadr); / * Start transfer * /
buffer = (Uint8 *) obj; / * obj is passed the third argument of STM_SetTrFunc * /
for (i = 0; i <nlongword; i + = read_len) {
/ * Function that returns the number of expanded bytes * /
buffer + = subFunc (src, dadr, buffer, & read_len);
src + = read_len * dadr;
}
return (nsct); / * Returns the number of sectors transferred * /
}
Figure 5.3 Behavior when using the transfer function
・
・ / * Look ahead to the stream * /
STM_SetExecGrp (NULL); / * Pause drive * /
GFS_NwFread (………);
while (1) {
if (GFS_NwExecOne (gfs) == GFS_SVR_COMPLETED) / * Read file * /
break;
STM_ExecTrans (stm); / * Transfer stream data * /
}
STM_SetExecGrp (grp); / * Resume reading stream * /
★ PROGRAMMER'S GUIDE ★ Stream system library