MCPcopy Create free account
hub / github.com/BruceDevices/firmware / native_srixWriteBlock

Function native_srixWriteBlock

src/modules/bjs_interpreter/rfid_js.cpp:411–517  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

409}
410
411JSValue native_srixWriteBlock(JSContext *ctx, JSValue *this_val, int argc, JSValue *argv) {
412 // usage: srixWriteBlock(blockNum : number, blockData : string);
413 // blockData must be 8 hex characters (4 bytes)
414 // returns: { success: boolean, message: string }
415
416 // Validate parameters
417 if (argc < 2 || !JS_IsNumber(ctx, argv[0]) || !JS_IsString(ctx, argv[1])) {
418 JSValue obj = JS_NewObject(ctx);
419 JS_SetPropertyStr(ctx, obj, "success", JS_NewBool(false));
420 JS_SetPropertyStr(
421 ctx,
422 obj,
423 "message",
424 JS_NewString(ctx, "Invalid parameters: blockNum (number) and blockData (string) required")
425 );
426 return obj;
427 }
428
429 int block_num;
430 JS_ToInt32(ctx, &block_num, argv[0]);
431
432 JSCStringBuf buf;
433 const char *hex_data = JS_ToCString(ctx, argv[1], &buf);
434 if (!hex_data) {
435 JSValue obj = JS_NewObject(ctx);
436 JS_SetPropertyStr(ctx, obj, "success", JS_NewBool(false));
437 JS_SetPropertyStr(ctx, obj, "message", JS_NewString(ctx, "Failed to read blockData string"));
438 return obj;
439 }
440
441 // Validate block number
442 if (block_num < 0 || block_num > 127) {
443 JSValue obj = JS_NewObject(ctx);
444 JS_SetPropertyStr(ctx, obj, "success", JS_NewBool(false));
445 JS_SetPropertyStr(ctx, obj, "message", JS_NewString(ctx, "Block number must be 0-127"));
446 return obj;
447 }
448
449 // Validate hex data length (must be 8 characters = 4 bytes)
450 if (strlen(hex_data) != 8) {
451 JSValue obj = JS_NewObject(ctx);
452 JS_SetPropertyStr(ctx, obj, "success", JS_NewBool(false));
453 JS_SetPropertyStr(
454 ctx, obj, "message", JS_NewString(ctx, "Block data must be 8 hex characters (4 bytes)")
455 );
456 return obj;
457 }
458
459 // Convert hex string to bytes
460 uint8_t block_data[4];
461 for (int i = 0; i < 4; i++) {
462 char byte_str[3] = {hex_data[i * 2], hex_data[i * 2 + 1], '\0'};
463 block_data[i] = (uint8_t)strtol(byte_str, NULL, 16);
464 }
465
466 // Write block
467 SRIXTool *srixReader = getSRIXReader();
468 int result = srixReader->write_single_block_headless((uint8_t)block_num, block_data);

Callers

nothing calls this directly

Calls 2

getSRIXReaderFunction · 0.85

Tested by

no test coverage detected