Exemplo n.º 1
0
static void load_script( uint8_t *script, uint8_t size )
{
    codemem_t cm = ker_codemem_alloc(size, CODEMEM_TYPE_EXECUTABLE);
    ker_codemem_write( cm, THIS_MODULE_ID, script, size, 0);
    ker_codemem_flush( cm, THIS_MODULE_ID);
    post_short(script[0], THIS_MODULE_ID, MSG_LOADER_DATA_AVAILABLE, script[1], cm, 0);
    return;
}
Exemplo n.º 2
0
static int8_t request_new_module(sos_cam_t key, loader_cam_t *cam, uint8_t size, uint16_t saddr, uint8_t type)
{
  cam->code_size = size; 
	cam->fetcher.fetchtype = type;
	cam->fetcher.cm = ker_codemem_alloc(
			size * LOADER_SIZE_MULTIPLIER, 
			CODEMEM_TYPE_EXECUTABLE);
	DEBUG_PID( KER_DFT_LOADER_PID, "request new module with size = %d\n", 
			size * LOADER_SIZE_MULTIPLIER);
	if(cam->fetcher.cm == CODEMEM_INVALID) {
		return -ENOMEM;
	}
	if( fetcher_request( KER_DFT_LOADER_PID, key, (uint16_t)size * LOADER_SIZE_MULTIPLIER, saddr ) 
			!= SOS_OK ) {
		ker_codemem_free( cam->fetcher.cm );
		return -ENOMEM;
	}
	block_protocol();
	return SOS_OK;

}
Exemplo n.º 3
0
static void start_experiment(uint16_t size)
{
	sos_cam_t key;
	loader_cam_t *cam;
	codemem_t cm;
	uint8_t buf[2];

	buf[0] = 128;
	buf[1] = 1;
	DEBUG_PID(KER_DFT_LOADER_PID, "start experiment: size = %d\n", size);
	cm = ker_codemem_alloc( size, CODEMEM_TYPE_EXECUTABLE);
	ker_codemem_write(cm, KER_DFT_LOADER_PID, buf, 2, 0);
	cam = ker_malloc(sizeof(loader_cam_t), KER_DFT_LOADER_PID);

	st.version_data->pam_ver[0]++;
	st.version_data->pam_size[0] = (size + (LOADER_SIZE_MULTIPLIER - 1)) / LOADER_SIZE_MULTIPLIER;
	st.version_data->version ++;

	key = ker_cam_key( KER_DFT_LOADER_PID, 0 );
	cam->fetcher.fetchtype = FETCHTYPE_DATA;
	cam->fetcher.cm = cm;
	ker_cam_add(key, cam);	
	restartInterval(0);
}