cs and c
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -16,14 +16,13 @@ int addAnimal(const Animal* animalPtr, Animal* animalArray, size_t animalArrayLe
|
||||
}
|
||||
|
||||
int removeAnimal(int animalId, Animal* animalArray, size_t numberOfAnimalsPresent, size_t* newNumberOfAnimalsPresent){
|
||||
int fault = -1;
|
||||
int fault = 0;
|
||||
size_t removedCount = 0;
|
||||
|
||||
if (animalArray == NULL || numberOfAnimalsPresent == 0) {
|
||||
fault = -1; // Invalid
|
||||
return -1; // Invalid
|
||||
} else {
|
||||
size_t writeIndex = 0;
|
||||
|
||||
// Copy only animals that don't match the ID
|
||||
for (size_t readIndex = 0; readIndex < numberOfAnimalsPresent; ++readIndex) {
|
||||
if (animalArray[readIndex].Id != animalId) {
|
||||
@@ -33,14 +32,11 @@ int removeAnimal(int animalId, Animal* animalArray, size_t numberOfAnimalsPresen
|
||||
writeIndex++;
|
||||
} else {
|
||||
removedCount++;
|
||||
fault = 0; // Found some animal(s) to remove
|
||||
}
|
||||
}
|
||||
// Update the number of animals present
|
||||
numberOfAnimalsPresent -= removedCount;
|
||||
}
|
||||
|
||||
*newNumberOfAnimalsPresent = numberOfAnimalsPresent;
|
||||
fault = removedCount;
|
||||
*newNumberOfAnimalsPresent = (numberOfAnimalsPresent - removedCount);
|
||||
return fault;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,12 +18,14 @@ const Animal originalArray[5] = {
|
||||
Animal animalArray[5];
|
||||
Animal searchArray[5];
|
||||
Animal idTestArray[5];
|
||||
Animal removeMultipleTestArray[5];
|
||||
|
||||
void administration_setUp(void) {
|
||||
// Reset both arrays before each test
|
||||
memcpy(animalArray, originalArray, sizeof(originalArray));
|
||||
memcpy(searchArray, originalArray, sizeof(originalArray));
|
||||
memcpy(idTestArray, originalArray, sizeof(originalArray));
|
||||
memcpy(removeMultipleTestArray, originalArray, sizeof(originalArray));
|
||||
}
|
||||
|
||||
void administration_tearDown(void){}
|
||||
@@ -31,14 +33,14 @@ void administration_tearDown(void){}
|
||||
void test_administration_remove_valid(void){
|
||||
size_t newNumberOfAnimalsPresent = 0;
|
||||
int errorCode = removeAnimal(2, animalArray, 3, &newNumberOfAnimalsPresent);
|
||||
TEST_ASSERT_EQUAL(0, errorCode);
|
||||
TEST_ASSERT_EQUAL(1, errorCode);
|
||||
TEST_ASSERT_EQUAL(2, newNumberOfAnimalsPresent);
|
||||
}
|
||||
|
||||
void test_administration_remove_invalid(void){
|
||||
size_t newNumberOfAnimalsPresent = 0;
|
||||
int errorCode = removeAnimal(12, animalArray, 3, &newNumberOfAnimalsPresent);
|
||||
TEST_ASSERT_EQUAL(-1, errorCode);
|
||||
TEST_ASSERT_EQUAL(0, errorCode);
|
||||
TEST_ASSERT_EQUAL(3, newNumberOfAnimalsPresent);
|
||||
}
|
||||
|
||||
@@ -46,8 +48,7 @@ void test_administration_remove_multiple_of_same_id(void){
|
||||
Animal newAnimal = {.Id = 3, .Species = Dog, .Age = 3, .Sex = Male, .DateFound = {1, 1, 2023}};
|
||||
idTestArray[3] = newAnimal;
|
||||
size_t newNumberOfAnimalsPresent = 0;
|
||||
int errorCode = removeAnimal(3, animalArray, 3, &newNumberOfAnimalsPresent);
|
||||
TEST_ASSERT_EQUAL(0, errorCode);
|
||||
TEST_ASSERT_EQUAL(2, removeAnimal(3, idTestArray, 4, &newNumberOfAnimalsPresent));
|
||||
TEST_ASSERT_EQUAL(2, newNumberOfAnimalsPresent);
|
||||
}
|
||||
|
||||
@@ -75,6 +76,26 @@ void test_administration_find_valid(void){
|
||||
TEST_ASSERT_EQUAL(Dog, foundAnimalV.Species);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void test_administration_find_xyz(void){
|
||||
size_t newNumberOfAnimalsPresent = 0;
|
||||
Animal animals[10] = {0};
|
||||
animals[0].Id = 1;
|
||||
animals[1].Id = 1;
|
||||
animals[2].Id = 2;
|
||||
animals[3].Id = 1;
|
||||
animals[4].Id = 1;
|
||||
animals[5].Id = 3;
|
||||
animals[6].Id = 3;
|
||||
animals[7].Id = 1;
|
||||
animals[8].Id = 1;
|
||||
|
||||
TEST_ASSERT_EQUAL(6, removeAnimal(1, animals, 9, &newNumberOfAnimalsPresent));
|
||||
TEST_ASSERT_EQUAL(3, newNumberOfAnimalsPresent);
|
||||
}
|
||||
|
||||
|
||||
void test_administration_find_invalid(void){
|
||||
Animal foundAnimalinV;
|
||||
int errorCode = findAnimalById(12, searchArray, 3, &foundAnimalinV);
|
||||
@@ -93,6 +114,7 @@ void run_administration_tests()
|
||||
MY_RUN_TEST(test_administration_find_valid);
|
||||
MY_RUN_TEST(test_administration_find_invalid);
|
||||
MY_RUN_TEST(test_administration_remove_multiple_of_same_id);
|
||||
MY_RUN_TEST(test_administration_find_xyz);
|
||||
|
||||
UnityUnregisterSetupTearDown();
|
||||
}
|
||||
|
||||
BIN
C/C3 Watch.zip
BIN
C/C3 Watch.zip
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -4,103 +4,55 @@
|
||||
#include "resource_detector.h"
|
||||
|
||||
void watch_registers_toggle_config_is_paused(uint8_t* config){
|
||||
if (config == NULL) return;
|
||||
*config ^= 0x08; // Toggle the 4th bit 0x08 = 0b00001000
|
||||
}
|
||||
void watch_registers_set_config_time_format(uint8_t* config, time_format format){
|
||||
uint8_t tf;
|
||||
if (config == NULL) return;
|
||||
if (format == TIME_HOUR_MINUTE) {
|
||||
tf = 0x00;
|
||||
} else if (format == TIME_HOUR_MINUTE_SECOND) {
|
||||
tf = 0x01;
|
||||
}
|
||||
*config = (*config & 0x0E) | tf;
|
||||
*config = (*config & 0x0E) | format;
|
||||
}
|
||||
void watch_registers_set_config_time_update_interval(uint8_t* config, time_update_interval interval){
|
||||
uint8_t mask;
|
||||
if (config == NULL) return;
|
||||
if (interval == TIME_UPDATE_DISABLED){
|
||||
mask = 0x00;
|
||||
} else if (interval == TIME_EVERY_1_SECOND){
|
||||
mask = 0x01;
|
||||
} else if (interval == TIME_EVERY_30_SECONDS){
|
||||
mask = 0x02;
|
||||
} else if (interval == TIME_EVERY_MINUTE){
|
||||
mask = 0x03;
|
||||
}
|
||||
*config = (*config & 0xF9) | (mask << 1); // Clear bits 2 and 3 and set them to the new value: 0x06 = 0b00000110
|
||||
*config = (*config & 0xF9) | (interval << 1); // Clear bits 2 and 3 and set them to the new value: 0x06 = 0b00000110
|
||||
}
|
||||
void watch_registers_get_config_settings(uint8_t config, bool* is_paused, time_format* format, time_update_interval* interval){
|
||||
if (format == NULL || is_paused == NULL || interval == NULL) return; //null check
|
||||
if ((config & 0x08) != 0) {
|
||||
*is_paused = true; // Check if the 4th bit is set
|
||||
} else if ((config & 0x08) == 0) {
|
||||
*is_paused = false;
|
||||
}
|
||||
*format = (time_format)(config & 0x01);
|
||||
*interval = (time_update_interval)((config >> 1) & 0x03);
|
||||
*is_paused = (config & 0x08);
|
||||
*format = (config & 0x01);
|
||||
*interval = ((config >> 1) & 0x03);
|
||||
}
|
||||
|
||||
void watch_registers_set_time_hours(uint8_t* time_bits_low, uint8_t* time_bits_high, uint8_t hours){
|
||||
if (time_bits_low == NULL || time_bits_high == NULL) return; //null check
|
||||
if (hours > 11) {
|
||||
hours = 11;
|
||||
}else if (hours < 0) {
|
||||
hours = 0;
|
||||
}
|
||||
if (hours > 11) hours = 11;
|
||||
*time_bits_high = (*time_bits_high & 0x0F) | ((hours & 0x0F) << 4); // Set the upper nibble
|
||||
}
|
||||
void watch_registers_set_time_minutes(uint8_t* time_bits_low, uint8_t* time_bits_high, uint8_t minutes){
|
||||
if (time_bits_low == NULL || time_bits_high == NULL) return; //null check
|
||||
if (minutes > 59) {
|
||||
minutes = 59;
|
||||
} // if minutes < 0, isnt needed becouse uint8_t cannot be negative
|
||||
if (minutes > 59) minutes = 59;
|
||||
*time_bits_high = (*time_bits_high & 0xF0) | ((minutes >> 2) & 0x0F); // Set the lower nibble of MSB
|
||||
*time_bits_low = (*time_bits_low & 0x3F) | ((minutes & 0x03) << 6); // Set the upper two bits of LSB
|
||||
}
|
||||
void watch_registers_set_time_seconds(uint8_t* time_bits_low, uint8_t* time_bits_high, uint8_t seconds){
|
||||
if (time_bits_low == NULL || time_bits_high == NULL) return; //null check
|
||||
if (seconds > 59) {
|
||||
seconds = 59;
|
||||
} // if seconds < 0, isnt needed becouse uint8_t cannot be negative
|
||||
if (seconds > 59) seconds = 59;
|
||||
*time_bits_low = (*time_bits_low & 0xC0) | (seconds & 0x3F); // Set the lower 6 bits of LSB
|
||||
}
|
||||
void watch_registers_get_time(uint8_t time_bits_low, uint8_t time_bits_high, uint8_t* hours, uint8_t* minutes, uint8_t* seconds){
|
||||
if (hours == NULL || minutes == NULL || seconds == NULL) return; //null check
|
||||
*hours = (time_bits_high >> 4) & 0x0F;
|
||||
*minutes = ((time_bits_high & 0x0F) << 2) | ((time_bits_low >> 6) & 0x03);
|
||||
*seconds = time_bits_low & 0x3F;
|
||||
}
|
||||
|
||||
void watch_registers_set_date_year(uint8_t* date_bits_low, uint8_t* date_bits_high, uint8_t year){
|
||||
if (date_bits_low == NULL || date_bits_high == NULL) return; //null check
|
||||
if (year > 127) {
|
||||
year = 127; // Maximum year value is 127 (0x7F) for 7 bits
|
||||
} // if year < 0, isnt needed becouse uint8_t cannot be negative
|
||||
if (year > 127) year = 127; // Maximum year value is 127 (0x7F) for 7 bits
|
||||
*date_bits_low = (*date_bits_low & 0x80) | (year & 0x7F); // Set the lower 2 bits of LSB
|
||||
}
|
||||
void watch_registers_set_date_month(uint8_t* date_bits_low, uint8_t* date_bits_high, uint8_t month){
|
||||
if (date_bits_low == NULL || date_bits_high == NULL) return; //null check
|
||||
if (month > 12) {
|
||||
month = 12; // Maximum month value is 12
|
||||
} else if (month < 1) {
|
||||
month = 1; // Minimum month value is 1
|
||||
}
|
||||
if (month > 12) month = 12; // Maximum month value is 12
|
||||
else if (month < 1) month = 1; // Minimum month value is 1
|
||||
*date_bits_high = (*date_bits_high & 0xF8) | ((month >> 1) & 0x07);
|
||||
*date_bits_low = (*date_bits_low & 0x7F) | ((month & 0x01) << 7);
|
||||
}
|
||||
void watch_registers_set_date_day_of_month(uint8_t* date_bits_low, uint8_t* date_bits_high,uint8_t day_of_month){
|
||||
if (date_bits_low == NULL || date_bits_high == NULL) return; //null check
|
||||
if (day_of_month > 31) {
|
||||
day_of_month = 31; // Maximum day of month value is 31
|
||||
} else if (day_of_month < 1) {
|
||||
day_of_month = 1; // Minimum day of month value is 1
|
||||
}
|
||||
if (day_of_month > 31) day_of_month = 31; // Maximum day of month value is 31
|
||||
else if (day_of_month < 1) day_of_month = 1; // Minimum day of month value is 1
|
||||
*date_bits_high = (*date_bits_high & 0x07) | ((day_of_month & 0x1F) << 3); // Set the upper 5 bits of MSB
|
||||
}
|
||||
void watch_registers_get_date(uint8_t date_bits_low, uint8_t date_bits_high, uint8_t* year, uint8_t* month, uint8_t* day_of_month){
|
||||
if (year == NULL || month == NULL || day_of_month == NULL) return; //null check
|
||||
*year = date_bits_low & 0x7F; // Get the lower 7 bits of LSB
|
||||
*month = ((date_bits_high & 0x07) << 1) | ((date_bits_low >> 7) & 0x01); // Get the upper 3 bits of MSB and the lower bit of LSB
|
||||
*day_of_month = (date_bits_high >> 3) & 0x1F; // Get the upper 5 bits of MSB
|
||||
|
||||
@@ -26,15 +26,15 @@ void test_setting_set_config_time_format(void){
|
||||
TEST_ASSERT_EQUAL(0x01, config); // 0b0001
|
||||
}
|
||||
void test_setting_set_config_time_update_interval(void){
|
||||
uint8_t config = 0x00;
|
||||
uint8_t config = 0xAA;
|
||||
watch_registers_set_config_time_update_interval(&config, TIME_UPDATE_DISABLED);
|
||||
TEST_ASSERT_EQUAL(0x00, config); // 0b0000
|
||||
TEST_ASSERT_EQUAL(0xA8, config); // 0b0000
|
||||
watch_registers_set_config_time_update_interval(&config, TIME_EVERY_1_SECOND);
|
||||
TEST_ASSERT_EQUAL(0x02, config); // 0b0010
|
||||
TEST_ASSERT_EQUAL(0xAA, config); // 0b0010
|
||||
watch_registers_set_config_time_update_interval(&config, TIME_EVERY_30_SECONDS);
|
||||
TEST_ASSERT_EQUAL(0x04, config); // 0b0100
|
||||
TEST_ASSERT_EQUAL(0xAC, config); // 0b0100
|
||||
watch_registers_set_config_time_update_interval(&config, TIME_EVERY_MINUTE);
|
||||
TEST_ASSERT_EQUAL(0x06, config); // 0b0110
|
||||
TEST_ASSERT_EQUAL(0xAE, config); // 0b0110
|
||||
}
|
||||
void test_setting_get_config_settings(void){
|
||||
uint8_t config = 0x00; // 0b00000000 so time is updated, time format hour:minute, time refresh not updated
|
||||
@@ -157,29 +157,7 @@ void test_date_get_date(void){
|
||||
TEST_ASSERT_EQUAL(month, m);
|
||||
TEST_ASSERT_EQUAL(day_of_month, d);
|
||||
}
|
||||
//NULL
|
||||
void test_all_null(void){
|
||||
watch_registers_toggle_config_is_paused(NULL);
|
||||
watch_registers_set_config_time_format(NULL, TIME_HOUR_MINUTE);
|
||||
watch_registers_set_config_time_update_interval(NULL, TIME_UPDATE_DISABLED);
|
||||
watch_registers_get_config_settings(0x00, NULL, NULL, NULL);
|
||||
|
||||
uint8_t time_bits_low = 0;
|
||||
uint8_t time_bits_high = 0;
|
||||
watch_registers_set_time_hours(NULL, &time_bits_high, 0x04);
|
||||
watch_registers_set_time_minutes(&time_bits_low, NULL, 0x30);
|
||||
watch_registers_set_time_seconds(NULL, &time_bits_high, 0x45);
|
||||
watch_registers_get_time(time_bits_low, time_bits_high, NULL, NULL, NULL);
|
||||
|
||||
uint8_t date_bits_low = 0;
|
||||
uint8_t date_bits_high = 0;
|
||||
watch_registers_set_date_year(NULL, &date_bits_high, 0x20);
|
||||
watch_registers_set_date_month(&date_bits_low, NULL, 0x05);
|
||||
watch_registers_set_date_day_of_month(NULL, &date_bits_high, 0x15);
|
||||
watch_registers_get_date(date_bits_low, date_bits_high, NULL, NULL, NULL);
|
||||
TEST_ASSERT_TRUE(true); // If we reach this point, the test passed
|
||||
}
|
||||
//
|
||||
//full tests
|
||||
void test_full_watch_configuration(void) {
|
||||
uint8_t config = 0x00;
|
||||
@@ -225,9 +203,9 @@ void test_full_datetime_overflow_setup(void) {
|
||||
// Verify date
|
||||
uint8_t year, month, day;
|
||||
watch_registers_get_date(date_bits_low, date_bits_high, &year, &month, &day);
|
||||
TEST_ASSERT_EQUAL(0x7F, year);
|
||||
TEST_ASSERT_EQUAL(0x0C, month);
|
||||
TEST_ASSERT_EQUAL(0x1F, day);
|
||||
TEST_ASSERT_EQUAL(0x7F, year); // 127
|
||||
TEST_ASSERT_EQUAL(0x0C, month); // 12
|
||||
TEST_ASSERT_EQUAL(0x1F, day); // 31
|
||||
}
|
||||
//
|
||||
void run_watch_tests()
|
||||
@@ -248,8 +226,6 @@ void run_watch_tests()
|
||||
MY_RUN_TEST(test_date_set_day_of_month);
|
||||
MY_RUN_TEST(test_date_get_date);
|
||||
|
||||
MY_RUN_TEST(test_all_null);
|
||||
|
||||
MY_RUN_TEST(test_full_watch_configuration);
|
||||
MY_RUN_TEST(test_full_datetime_overflow_setup);
|
||||
|
||||
|
||||
@@ -1,9 +1,46 @@
|
||||
#include "channel.h"
|
||||
// add here includes, if needed
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
int channel_main(int argc, char* argv[])
|
||||
{
|
||||
//add your code here
|
||||
bool running = true;
|
||||
FILE *input_file = fopen(argv[2], "rb");
|
||||
if (input_file == NULL) {
|
||||
fprintf(stderr, "Error opening input file: %s\n", argv[2]);
|
||||
return 1;
|
||||
}
|
||||
FILE *output_file = fopen(argv[3], "wb");
|
||||
if (output_file == NULL) {
|
||||
fprintf(stderr, "Error opening output file: %s\n", argv[3]);
|
||||
fclose(input_file);
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (running){
|
||||
// Read data
|
||||
unsigned char buffer[1024];
|
||||
size_t bytes_read = fread(buffer, 1, sizeof(buffer), input_file);
|
||||
|
||||
if (bytes_read == 0) {
|
||||
if (feof(input_file)) {
|
||||
running = false; // eof reached
|
||||
} else {
|
||||
fprintf(stderr, "Error reading from input file\n");
|
||||
fclose(input_file);
|
||||
fclose(output_file);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Channel data
|
||||
unsigned char processed_data[1024];
|
||||
size_t processed_size = process_channel(buffer, bytes_read, processed_data);
|
||||
|
||||
// Write data
|
||||
fwrite(processed_data, 1, processed_size, output_file);
|
||||
}
|
||||
fclose(input_file);
|
||||
fclose(output_file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,10 +1,51 @@
|
||||
#include "decode.h"
|
||||
// add here includes, if needed
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
int decode_main(int argc, char* argv[])
|
||||
{
|
||||
//add your code here
|
||||
bool decoding = true;
|
||||
FILE *input_file = fopen(argv[2], "rb");
|
||||
if (input_file == NULL) {
|
||||
fprintf(stderr, "Error opening input file: %s\n", argv[2]);
|
||||
return 1;
|
||||
}
|
||||
FILE *output_file = fopen(argv[3], "wb");
|
||||
if (output_file == NULL) {
|
||||
fprintf(stderr, "Error opening output file: %s\n", argv[3]);
|
||||
fclose(input_file);
|
||||
return 1;
|
||||
}
|
||||
while (decoding)
|
||||
{
|
||||
// Read data
|
||||
unsigned char data[1024];
|
||||
unsigned char buffer_High[sizeof(data)/2];
|
||||
unsigned char buffer_Low[sizeof(data)/2];
|
||||
size_t bytes_read = fread(&data, 1, sizeof(data), input_file);
|
||||
for (size_t i = 0; i < bytes_read; i++) {
|
||||
buffer_High[i] = data[i + (sizeof(data)/2)];
|
||||
buffer_Low[i] = data[i];
|
||||
}
|
||||
|
||||
|
||||
if (bytes_read == 0) {
|
||||
if (feof(input_file)) {
|
||||
decoding = false; // eof reached
|
||||
} else {
|
||||
fprintf(stderr, "Error reading from input file\n");
|
||||
fclose(input_file);
|
||||
fclose(output_file);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Decode data
|
||||
unsigned char decoded_data[sizeof(data)];
|
||||
decoded_data[sizeof(data)] = decode_combine_nibbles(*buffer_High, *buffer_Low);
|
||||
|
||||
// Write data
|
||||
fwrite(decoded_data, 1, bytes_read, output_file);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,10 +1,46 @@
|
||||
#include "encode.h"
|
||||
// add here includes, if needed
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int encode_main(int argc, char* argv[])
|
||||
{
|
||||
//add your code here
|
||||
bool encoding = true;
|
||||
FILE *input_file = fopen(argv[2], "rb");
|
||||
if (input_file == NULL) {
|
||||
fprintf(stderr, "Error opening input file: %s\n", argv[2]);
|
||||
return 1;
|
||||
}
|
||||
FILE *output_file = fopen(argv[3], "wb");
|
||||
if (output_file == NULL) {
|
||||
fprintf(stderr, "Error opening output file: %s\n", argv[3]);
|
||||
fclose(input_file);
|
||||
return 1;
|
||||
}
|
||||
while (encoding)
|
||||
{
|
||||
// Read data
|
||||
unsigned char buffer[512];
|
||||
size_t bytes_read = fread(buffer, 1, sizeof(buffer), input_file);
|
||||
|
||||
if (bytes_read == 0) {
|
||||
if (feof(input_file)) {
|
||||
encoding = false; // eof reached
|
||||
} else {
|
||||
fprintf(stderr, "Error reading from input file\n");
|
||||
fclose(input_file);
|
||||
fclose(output_file);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Encode data
|
||||
unsigned char encoded_data_high[sizeof(buffer)];
|
||||
unsigned char encoded_data_low[sizeof(buffer)];
|
||||
encode_value(buffer, encoded_data_high, encoded_data_low);
|
||||
|
||||
// Write data
|
||||
fwrite(encoded_data_high, 1, bytes_read, output_file);
|
||||
fwrite(encoded_data_low, 1, bytes_read, output_file);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ void decode_byte(uint8_t in, uint8_t* nibble){
|
||||
// Check parity bits
|
||||
uint8_t error = 0;
|
||||
if ((p0 ^ d0 ^ d1 ^ d2) != 0) error |= 0x01; // Error in p0 group
|
||||
if ((p1 ^ d0 ^ d1 ^ d3) != 0) error |= 0x02; // Error in p1 group
|
||||
if ((p1 ^ d0 ^ d1 ^ d3) != 0) error |= 0x02; // Error in p1 group // 0000111
|
||||
if ((p2 ^ d0 ^ d2 ^ d3) != 0) error |= 0x04; // Error in p2 group
|
||||
|
||||
if (MSB == 0 && error != 0) {
|
||||
|
||||
BIN
C/C6 Adidas.zip
BIN
C/C6 Adidas.zip
Binary file not shown.
Reference in New Issue
Block a user