Initialisation de la crate FSV, couche haut-niveau des accès aux fonctions SSV #71

Merged
florian_briand merged 6 commits from 38-fsv-high-level-lib into main 2024-10-09 22:46:42 +02:00
2 changed files with 39 additions and 2 deletions
Showing only changes of commit d043915a29 - Show all commits

View File

@ -14,6 +14,12 @@ pub enum SSVErrorCodes {
CPSInvalid = 0xF004, CPSInvalid = 0xF004,
#[error("La Carte du Professionnel de Santé est retirée du lecteur.")] #[error("La Carte du Professionnel de Santé est retirée du lecteur.")]
CPSRemoved = 0xF005, CPSRemoved = 0xF005,
/// - Sécurisation d'une série de lots en cours.
/// - Pour les fonctions TLA (sauf Identifier TLA) : Cette erreur survient lorsque le simulateur TLA est en mode 1.50.
/// - Lire Date Lecteur, Mettre à jour Date Lecteur, Lire Droits Vitale : Cette erreur peut survenir lorsque le Logiciel Lecteur ne connaît pas la fonction sollicitée, c'est-à-dire si la version du Logiciel Lecteur est antérieure à 2.00.
/// - Décharger Données Bénéficiaires : cette erreur peut survenir pour signaler que le
#[error("F022: Erreur commune à plusieurs fonctions.")]
F022 = 0xF022,
#[error("Message du lecteur incohérent. Débrancher et rebrancher le lecteur.")] #[error("Message du lecteur incohérent. Débrancher et rebrancher le lecteur.")]
PCSCInconsistentMessage = 0xF0FF, PCSCInconsistentMessage = 0xF0FF,
#[error("Le nom de lecteur fourni ne correspond à aucun lecteur reconnu.")] #[error("Le nom de lecteur fourni ne correspond à aucun lecteur reconnu.")]

View File

@ -116,6 +116,35 @@ impl SSV {
unsafe { libc::free(out_buffer_ptr) }; unsafe { libc::free(out_buffer_ptr) };
Ok(()) Ok(())
} }
/// # Get the configuration of the SSV library
/// Implement: SSV_LireConfig
pub fn get_config(&self) -> Result<(), Error> {
let mut buffer_ptr: *mut libc::c_void = ptr::null_mut();
let mut size: libc::size_t = 0;
let result = match &self.library {
SsvLibraryVersion::V1_40_13(library) => {
unsafe { library.ssv_lire_config(&mut buffer_ptr, &mut size) }?
},
SsvLibraryVersion::V1_40_14(library) => {
unsafe { library.ssv_lire_config(&mut buffer_ptr, &mut size) }?
},
};
if result != 0 {
// Free memory
unsafe { libc::free(buffer_ptr) };
let error = SSVErrorCodes::from(result);
return Err(Error::SSVError(error));
}
// Print 10 bytes of the buffer
let buffer = unsafe { std::slice::from_raw_parts(buffer_ptr as *const u8, 10) };
println!("{:?}", buffer);
// Free memory
unsafe { libc::free(buffer_ptr) };
Ok(())
}
} }
#[cfg(test)] #[cfg(test)]
@ -171,7 +200,9 @@ mod tests {
} }
#[test] #[test]
fn test_ssv() { fn test_get_config() -> Result<()> {
assert_eq!("ssv", "ssv"); let lib = setup::init()?;
lib.get_config()?;
Ok(())
} }
} }