Use the module in your component:
const App = () => {
const [isReading, setIsReading] = React.useState(false);
const [powerState, setPowerState] = React.useState('');
const [tags, setTags] = React.useState([]);
const [power, setPower] = React.useState(0);
const eventEmitter = new NativeEventEmitter(RNChainwaySensors);
const showAlert = (title, data) => {
Alert.alert(
title,
data,
[{ text: 'OK', onPress: () => console.log('OK Pressed') }],
{ cancelable: false }
);
};
const powerListener = (data) => {
setPowerState(data);
};
const tagListener = (data) => {
setTags(tags => tags.concat(data[0]));
};
React.useEffect(() => {
(async () => {
try {
const scanner = RNChainwaySensors;
const result = await scanner.initializeUHF();
setPowerState(result);
scanner.tagListener(tagListener);
scanner.powerListener(powerListener);
const subscription = eventEmitter.addListener('onHardwareKeyPress', () => {
scanSingleTag();
});
return () => {
subscription.remove();
};
} catch (error) {
Alert.alert(error?.message);
}
})();
return () => {
RNChainwaySensors.deinitializeUHF();
RNChainwaySensors.releaseSoundPool();
};
}, []);
const readPower = async () => {
try {
let result = await RNChainwaySensors.readPower();
showAlert('SUCCESS', `The result is ${result}`);
console.log(result);
} catch (error) {
showAlert('FAILED', error.message);
}
};
const scanSingleTag = async () => {
try {
let result = await RNChainwaySensors.readSingleTag();
showAlert('SUCCESS', `The result is ${result}`);
console.log(result);
} catch (error) {
showAlert('FAILED', error.message);
}
};
const startReading = () => {
RNChainwaySensors.startReadingTags((message) => {
setIsReading(message);
});
};
const stopReading = () => {
RNChainwaySensors.stopReadingTags((message) => {
setIsReading(false);
});
};
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<View>
<Text>{powerState}</Text>
<TextInput
style={{ width: 150, height: 50 }}
onChangeText={(val) => setPower(Number(val))}
keyboardType='number-pad'
maxLength={2}
/>
</View>
<View style={{ flexDirection: 'row', flexWrap: 'wrap' }}>
<View style={{ marginVertical: 20, marginHorizontal: 10 }}>
<Button
style={{ margin: 10 }}
onPress={async () => {
try {
const result = await C72RfidScanner.changePower(power);
alert('Success');
} catch (error) {
alert(error.message);
}
}}
title='Change Power'
/>
</View>
<View style={{ marginVertical: 20, marginHorizontal: 10 }}>
<Button
style={{ margin: 10 }}
onPress={async () => {
try {
const result = await RNChainwaySensors.initializeUHF();
setPowerState(result);
} catch (error) {
alert(error.message);
}
}}
title='Initialize UHF'
/>
</View>
<View style={{ marginVertical: 20, marginHorizontal: 10 }}>
<Button
style={{ margin: 10 }}
onPress={async () => {
try {
const result = await RNChainwaySensors.deinitializeUHF();
setPowerState(result);
setTags([]);
} catch (error) {
alert(error.message);
}
}}
title='Deinitialize UHF'
/>
</View>
<View style={{ marginVertical: 20, marginHorizontal: 10 }}>
<Button
style={{ margin: 10 }}
onPress={() => readPower()}
title='Read Power'
/>
</View>
<View style={{ marginVertical: 20, marginHorizontal: 10 }}>
<Button
style={{ margin: 10 }}
onPress={() => scanSingleTag()}
title='Read Single Tag'
/>
</View>
<View style={{ marginVertical: 20, marginHorizontal: 10 }}>
<Button
disabled={isReading}
style={{ margin: 10 }}
onPress={() => startReading()}
title='Start Bulk Scan'
/>
</View>
<View style={{ marginVertical: 20, marginHorizontal: 10 }}>
<Button
disabled={!isReading}
style={{ margin: 10 }}
onPress={() => stopReading()}
title='Stop Bulk Scan'
/>
</View>
</View>
{tags.map((el, index) => (
<Text key={index}>tag={el}</Text>
))}
</View>
);
};
export default App;